ZGlmZiAtLWdpdCBhL01hYy9MaWIvdG9vbGJveC9BcHBsZVNjcmlwdF9TdWl0ZS5weSBiL01hYy9MaWIvdG9vbGJveC9BcHBsZVNjcmlwdF9TdWl0ZS5weQppbmRleCBjNDdkYTk2Li4xNTRhMjE5IDEwMDY0NAotLS0gYS9NYWMvTGliL3Rvb2xib3gvQXBwbGVTY3JpcHRfU3VpdGUucHkKKysrIGIvTWFjL0xpYi90b29sYm94L0FwcGxlU2NyaXB0X1N1aXRlLnB5CkBAIC00Myw5ICs0Myw5IEBACiAJCV9jb2RlID0gJ21pc2MnCiAJCV9zdWJjb2RlID0gJ2FjdHYnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC02Myw5ICs2Myw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJ2NtbnQnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC04Miw5ICs4Miw5IEBACiAJCV9jb2RlID0gJ1RveVMnCiAJCV9zdWJjb2RlID0gJ2xvZzAnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0xMDEsOSArMTAxLDkgQEAKIAkJX2NvZGUgPSAnVG95UycKIAkJX3N1YmNvZGUgPSAnbG9nMScKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTEyMCw5ICsxMjAsOSBAQAogCQlfY29kZSA9ICdtaXNjJwogCQlfc3ViY29kZSA9ICdjb3B5JwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtMTQxLDkgKzE0MSw5IEBACiAJCV9jb2RlID0gJ21pc2MnCiAJCV9zdWJjb2RlID0gJ2Rvc2MnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0xNjEsOSArMTYxLDkgQEAKIAkJX2NvZGUgPSAnbWlzYycKIAkJX3N1YmNvZGUgPSAnaWRsZScKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTE4MSw5ICsxODEsOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICdub29wJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtMjAxLDkgKzIwMSw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJ3RlbGwnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0yMjEsOSArMjIxLDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAndGVuZCcKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTI1Myw5ICsyNTMsOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICdlcnIgJwogCisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2Vycm9yKQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfZXJyb3IpCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0zMzcsOSArMzM3LDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAncHNicicKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9DYWxsX2E1X3N1YnJvdXRpbmUpCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9DYWxsX2E1X3N1YnJvdXRpbmUpCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0zNTgsOSArMzU4LDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAnPSAgICcKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTM3OSw5ICszNzksOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICdcMjU1ICAgJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNDAwLDkgKzQwMCw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJysgICAnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC00MjEsOSArNDIxLDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAnLSAgICcKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTQ0Miw5ICs0NDIsOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICcqICAgJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNDYzLDkgKzQ2Myw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJy8gICAnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC00ODQsOSArNDg0LDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAnZGl2ICcKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTUwNSw5ICs1MDUsOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICdtb2QgJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNTI2LDkgKzUyNiw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJ14gICAnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC01NDcsOSArNTQ3LDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAnPiAgICcKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTU2OCw5ICs1NjgsOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICc+PSAgJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNTg5LDkgKzU4OSw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJzwgICAnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC02MTAsOSArNjEwLDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAnPD0gICcKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTYzMSw5ICs2MzEsOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICdjY2F0JwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNjUyLDkgKzY1Miw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJ2Jnd3QnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC02NzMsOSArNjczLDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAnZW5kcycKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTY5NCw5ICs2OTQsOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICdjb250JwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNzE1LDkgKzcxNSw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJ0FORCAnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC03MzYsOSArNzM2LDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAnT1IgICcKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTc1Nyw5ICs3NTcsOSBAQAogCQlfY29kZSA9ICdhc2NyJwogCQlfc3ViY29kZSA9ICdjb2VyJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNzc4LDkgKzc3OCw5IEBACiAJCV9jb2RlID0gJ2FzY3InCiAJCV9zdWJjb2RlID0gJ05PVCAnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC03OTksOSArNzk5LDkgQEAKIAkJX2NvZGUgPSAnYXNjcicKIAkJX3N1YmNvZGUgPSAnbmVnICcKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKZGlmZiAtLWdpdCBhL01hYy9MaWIvdG9vbGJveC9NZXRyb3dlcmtzX1NoZWxsX1N1aXRlLnB5IGIvTWFjL0xpYi90b29sYm94L01ldHJvd2Vya3NfU2hlbGxfU3VpdGUucHkKaW5kZXggYjI0MjcxOS4uMmQwMTk2NCAxMDA2NDQKLS0tIGEvTWFjL0xpYi90b29sYm94L01ldHJvd2Vya3NfU2hlbGxfU3VpdGUucHkKKysrIGIvTWFjL0xpYi90b29sYm94L01ldHJvd2Vya3NfU2hlbGxfU3VpdGUucHkKQEAgLTEsNyArMSw3IEBACiAiIiJTdWl0ZSBNZXRyb3dlcmtzIFNoZWxsIFN1aXRlOiBFdmVudHMgc3VwcG9ydGVkIGJ5IHRoZSBNZXRyb3dlcmtzIFByb2plY3QgU2hlbGwKIExldmVsIDEsIHZlcnNpb24gMQogCi1HZW5lcmF0ZWQgZnJvbSBTYXA6Q29kZVdhcnJpb3I2Ok1ldHJvd2Vya3MgQy9DKys6TVcgQy9DKysgUFBDIDEuMi4yCitHZW5lcmF0ZWQgZnJvbSBTYXA6Q29kZXdhcnJpb3I3Ok1ldHJvd2Vya3MgQ29kZVdhcnJpb3I6Q29kZVdhcnJpb3IgSURFIDEuMwogQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8wLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAogIiIiCiAKQEAgLTQyLDQwICs0MiwxNyBAQAogCiBfRW51bV9TcmNUID0gewogCSdzb3VyY2UnIDogJ0ZUeHQnLAkjIEEgc291cmNlIGZpbGUgKC5jLCAuY3AsIC5wLCBldGMpLgotCSdsaWJyYXJ5JyA6ICdGTGliJywJIyBBbiBvYmplY3QgY29kZSBsaWJyYXJ5LgotCSdzaGFyZWRfbGlicmFyeScgOiAnRlNobCcsCSMgQSBzaGFyZWQgbGlicmFyeS4KLQkncmVzb3VyY2UnIDogJ0ZSZXMnLAkjIEEgcmVzb3VyY2UgZmlsZS4KLQkneGNvZmYnIDogJ0ZYY28nLAkjIEFuIFhDT0ZGIGxpYnJhcnkuCisJJ3Vua25vd24nIDogJ0ZVbmsnLAkjIEFuIHVua25vd24gZmlsZSB0eXBlLgorfQorCitfRW51bV9QUHJtID0geworCSdhYnNvbHV0ZScgOiAnQWJzbycsCSMgQW4gYWJzb2x1dGUgcGF0aCBuYW1lLCBpbmNsdWRpbmcgdm9sdW1lIG5hbWUuCisJJ3Byb2plY3RfcmVsYXRpdmUnIDogJ1BSZWwnLAkjIEEgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwcm9qZWN01XMgZm9sZGVyLgorCSdzaGVsbF9yZWxhdGl2ZScgOiAnU1JlbCcsCSMgQSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBDb2RlV2FycmlvcqogZm9sZGVyLgogfQogCiBjbGFzcyBNZXRyb3dlcmtzX1NoZWxsX1N1aXRlOgogCi0JX2FyZ21hcF9DbG9zZV9XaW5kb3cgPSB7Ci0JCSdTYXZpbmcnIDogJ3Nhdm8nLAotCX0KLQotCWRlZiBDbG9zZV9XaW5kb3coc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIkNsb3NlIFdpbmRvdzogQ2xvc2UgdGhlIHdpbmRvd3Mgc2hvd2luZyB0aGUgc3BlY2lmaWVkIGZpbGVzCi0JCVJlcXVpcmVkIGFyZ3VtZW50OiBUaGUgZmlsZXMgdG8gY2xvc2UKLQkJS2V5d29yZCBhcmd1bWVudCBTYXZpbmc6IFdoZXRoZXIgdG8gc2F2ZSBjaGFuZ2VzIHRvIGVhY2ggZmlsZSBiZWZvcmUgY2xvc2luZyBpdHMgd2luZG93Ci0JCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLQkJIiIiCi0JCV9jb2RlID0gJ01NUFInCi0JCV9zdWJjb2RlID0gJ0Nsc1cnCi0KLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX0Nsb3NlX1dpbmRvdykKLQkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ3Nhdm8nLCBfRW51bV9zYXZvKQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KIAlfYXJnbWFwX0FkZF9GaWxlcyA9IHsKIAkJJ1RvX1NlZ21lbnQnIDogJ1NlZ20nLAogCX0KQEAgLTkwLDUxICs2Nyw5IEBACiAJCV9jb2RlID0gJ01NUFInCiAJCV9zdWJjb2RlID0gJ0FkZEYnCiAKLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCiAJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX0FkZF9GaWxlcykKLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JZGVmIFJlbW92ZV9GaWxlcyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIiUmVtb3ZlIEZpbGVzOiBSZW1vdmUgdGhlIHNwZWNpZmllZCBmaWxlKHMpIGZyb20gdGhlIGN1cnJlbnQgcHJvamVjdAotCQlSZXF1aXJlZCBhcmd1bWVudDogTGlzdCBvZiBmaWxlcyB0byByZW1vdmUKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQlSZXR1cm5zOiBFcnJvciBjb2RlIGZvciBlYWNoIGZpbGUgcmVtb3ZlZAotCQkiIiIKLQkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnUmVtRicKLQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JZGVmIFRvdWNoKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJUb3VjaDogVG91Y2ggdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKQotCQlSZXF1aXJlZCBhcmd1bWVudDogTGlzdCBvZiBmaWxlcyB0byBjb21waWxlCi0JCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLQkJUmV0dXJuczogRXJyb3IgY29kZSBmb3IgZWFjaCBmaWxlIHRvdWNoZWQKLQkJIiIiCi0JCV9jb2RlID0gJ01NUFInCi0JCV9zdWJjb2RlID0gJ1RvY2gnCi0KLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0xNTgsOSArOTMsNTQgQEAKIAkJX2NvZGUgPSAnTU1QUicKIAkJX3N1YmNvZGUgPSAnQ2hlaycKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9DaGVja19TeW50YXgpCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9DaGVja19TeW50YXgpCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgTWFjT1MuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCWRlZiBDbG9zZV9Qcm9qZWN0KHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiIkNsb3NlIFByb2plY3Q6IENsb3NlIHRoZSBjdXJyZW50IHByb2plY3QKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQkiIiIKKwkJX2NvZGUgPSAnTU1QUicKKwkJX3N1YmNvZGUgPSAnQ2xzUCcKKworCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJworCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCisKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9DbG9zZV9XaW5kb3cgPSB7CisJCSdTYXZpbmcnIDogJ3Nhdm8nLAorCX0KKworCWRlZiBDbG9zZV9XaW5kb3coc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiIkNsb3NlIFdpbmRvdzogQ2xvc2UgdGhlIHdpbmRvd3Mgc2hvd2luZyB0aGUgc3BlY2lmaWVkIGZpbGVzCisJCVJlcXVpcmVkIGFyZ3VtZW50OiBUaGUgZmlsZXMgdG8gY2xvc2UKKwkJS2V5d29yZCBhcmd1bWVudCBTYXZpbmc6IFdoZXRoZXIgdG8gc2F2ZSBjaGFuZ2VzIHRvIGVhY2ggZmlsZSBiZWZvcmUgY2xvc2luZyBpdHMgd2luZG93CisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJIiIiCisJCV9jb2RlID0gJ01NUFInCisJCV9zdWJjb2RlID0gJ0Nsc1cnCisKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfQ2xvc2VfV2luZG93KQorCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ3Nhdm8nLCBfRW51bV9zYXZvKQogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtMTg0LDkgKzE2NCwyNTQgQEAKIAkJX2NvZGUgPSAnTU1QUicKIAkJX3N1YmNvZGUgPSAnQ29tcCcKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9Db21waWxlKQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfQ29tcGlsZSkKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9DcmVhdGVfUHJvamVjdCA9IHsKKwkJJ2Zyb21fc3RhdGlvbmVyeScgOiAnVG1wbCcsCisJfQorCisJZGVmIENyZWF0ZV9Qcm9qZWN0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJDcmVhdGUgUHJvamVjdDogQ3JlYXRlIGEgbmV3IHByb2plY3QgZmlsZQorCQlSZXF1aXJlZCBhcmd1bWVudDogTmV3IHByb2plY3QgZmlsZSBzcGVjaWZpZXIKKwkJS2V5d29yZCBhcmd1bWVudCBmcm9tX3N0YXRpb25lcnk6IHVuZG9jdW1lbnRlZCwgdHlwZWNvZGUgJ2FsaXMnCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJIiIiCisJCV9jb2RlID0gJ01NUFInCisJCV9zdWJjb2RlID0gJ05ld1AnCisKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfQ3JlYXRlX1Byb2plY3QpCisJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKKworCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCisJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CisJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCisKKwlkZWYgR2V0X0RlZmluaXRpb24oc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiIkdldCBEZWZpbml0aW9uOiBSZXR1cm5zIHRoZSBsb2NhdGlvbihzKSBvZiBhIGdsb2JhbGx5IHNjb3BlZCBmdW5jdGlvbiBvciBkYXRhIG9iamVjdC4KKwkJUmVxdWlyZWQgYXJndW1lbnQ6IHVuZG9jdW1lbnRlZCwgdHlwZWNvZGUgJ1RFWFQnCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogdW5kb2N1bWVudGVkLCB0eXBlY29kZSAnRkRlZicKKwkJIiIiCisJCV9jb2RlID0gJ01NUFInCisJCV9zdWJjb2RlID0gJ0dEZWYnCisKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgTWFjT1MuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCWRlZiBHZXRfT3Blbl9Eb2N1bWVudHMoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIiR2V0IE9wZW4gRG9jdW1lbnRzOiBSZXR1cm5zIHRoZSBsaXN0IG9mIG9wZW4gZG9jdW1lbnRzCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogVGhlIGxpc3Qgb2YgZG9jdW1lbnRzCisJCSIiIgorCQlfY29kZSA9ICdNTVBSJworCQlfc3ViY29kZSA9ICdHRG9jJworCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCisJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKKworCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCisJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CisJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCisKKwlfYXJnbWFwX0dldF9QcmVmZXJlbmNlcyA9IHsKKwkJJ29mJyA6ICdQUmVjJywKKwkJJ2Zyb21fcGFuZWwnIDogJ1BOYW0nLAorCX0KKworCWRlZiBHZXRfUHJlZmVyZW5jZXMoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIiR2V0IFByZWZlcmVuY2VzOiBHZXQgdGhlIHByZWZlcmVuY2VzIGZvciB0aGUgY3VycmVudCBwcm9qZWN0CisJCUtleXdvcmQgYXJndW1lbnQgb2Y6IE5hbWVzIG9mIHJlcXVlc3RlZCBwcmVmZXJlbmNlcworCQlLZXl3b3JkIGFyZ3VtZW50IGZyb21fcGFuZWw6IE5hbWUgb2YgdGhlIHByZWZlcmVuY2UgcGFuZWwKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiBUaGUgcmVxdWVzdGVkIHByZWZlcmVuY2VzCisJCSIiIgorCQlfY29kZSA9ICdNTVBSJworCQlfc3ViY29kZSA9ICdHcmVmJworCisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX0dldF9QcmVmZXJlbmNlcykKKwkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJworCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgTWFjT1MuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCV9hcmdtYXBfR2V0X1Byb2plY3RfRmlsZSA9IHsKKwkJJ1NlZ21lbnQnIDogJ1NlZ20nLAorCX0KKworCWRlZiBHZXRfUHJvamVjdF9GaWxlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJHZXQgUHJvamVjdCBGaWxlOiBSZXR1cm5zIGEgZGVzY3JpcHRpb24gb2YgYSBmaWxlIGluIHRoZSBwcm9qZWN0IHdpbmRvdy4KKwkJUmVxdWlyZWQgYXJndW1lbnQ6IFRoZSBpbmRleCBvZiB0aGUgZmlsZSB3aXRoaW4gaXRzIHNlZ21lbnQuCisJCUtleXdvcmQgYXJndW1lbnQgU2VnbWVudDogVGhlIHNlZ21lbnQgY29udGFpbmluZyB0aGUgZmlsZS4KKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdTcmNGJworCQkiIiIKKwkJX2NvZGUgPSAnTU1QUicKKwkJX3N1YmNvZGUgPSAnR0ZpbCcKKworCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9HZXRfUHJvamVjdF9GaWxlKQorCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJZGVmIEdldF9Qcm9qZWN0X1NwZWNpZmllcihzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJHZXQgUHJvamVjdCBTcGVjaWZpZXI6IFJldHVybiB0aGUgRmlsZSBTcGVjaWZpZXIgZm9yIHRoZSBjdXJyZW50IHByb2plY3QKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiBGaWxlIFNwZWNpZmllciBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdAorCQkiIiIKKwkJX2NvZGUgPSAnTU1QUicKKwkJX3N1YmNvZGUgPSAnR2V0UCcKKworCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJworCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCisKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJZGVmIEdldF9TZWdtZW50cyhzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJHZXQgU2VnbWVudHM6IFJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiBlYWNoIHNlZ21lbnQgaW4gdGhlIHByb2plY3QuCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogdW5kb2N1bWVudGVkLCB0eXBlY29kZSAnU2VnICcKKwkJIiIiCisJCV9jb2RlID0gJ01NUFInCisJCV9zdWJjb2RlID0gJ0dTZWcnCisKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKKwkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJworCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgTWFjT1MuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCWRlZiBHb3RvX0Z1bmN0aW9uKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJHb3RvIEZ1bmN0aW9uOiBHb3RvIFNwZWNpZmllZCBGdW5jdGlvbiBOYW1lCisJCVJlcXVpcmVkIGFyZ3VtZW50OiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdURVhUJworCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCSIiIgorCQlfY29kZSA9ICdNTVBSJworCQlfc3ViY29kZSA9ICdHb0ZuJworCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCisJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKKworCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCisJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CisJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCisKKwlkZWYgR290b19MaW5lKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJHb3RvIExpbmU6IEdvdG8gU3BlY2lmaWVkIExpbmUgTnVtYmVyCisJCVJlcXVpcmVkIGFyZ3VtZW50OiBUaGUgcmVxdWVzdGVkIHNvdXJjZSBmaWxlIGxpbmUgbnVtYmVyCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJIiIiCisJCV9jb2RlID0gJ01NUFInCisJCV9zdWJjb2RlID0gJ0dvTG4nCisKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgTWFjT1MuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCWRlZiBJc19Jbl9Qcm9qZWN0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJJcyBJbiBQcm9qZWN0OiBXaGV0aGVyIG9yIG5vdCB0aGUgc3BlY2lmaWVkIGZpbGUocykgaXMgaW4gdGhlIGN1cnJlbnQgcHJvamVjdAorCQlSZXF1aXJlZCBhcmd1bWVudDogTGlzdCBvZiBmaWxlcyB0byBjaGVjayBmb3IgcHJvamVjdCBtZW1iZXJzaGlwCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogUmVzdWx0IGNvZGUgZm9yIGVhY2ggZmlsZQorCQkiIiIKKwkJX2NvZGUgPSAnTU1QUicKKwkJX3N1YmNvZGUgPSAnRkluUCcKKworCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJworCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9NYWtlX1Byb2plY3QgPSB7CisJCSdFeHRlcm5hbEVkaXRvcicgOiAnRXJycycsCisJfQorCisJZGVmIE1ha2VfUHJvamVjdChzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJNYWtlIFByb2plY3Q6IE1ha2UgdGhlIGN1cnJlbnQgcHJvamVjdAorCQlLZXl3b3JkIGFyZ3VtZW50IEV4dGVybmFsRWRpdG9yOiBTaG91bGQgdGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlIHdpbmRvdyBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyPworCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCVJldHVybnM6IEVycm9ycyB0aGF0IG9jY3VycmVkIHdoaWxlIG1ha2luZyB0aGUgcHJvamVjdAorCQkiIiIKKwkJX2NvZGUgPSAnTU1QUicKKwkJX3N1YmNvZGUgPSAnTWFrZScKKworCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9NYWtlX1Byb2plY3QpCisJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKKwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtMjEyLDUzICs0MzcsOSBAQAogCQlfY29kZSA9ICdNTVBSJwogCQlfc3ViY29kZSA9ICdQcmVDJwogCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQogCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9QcmVjb21waWxlKQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlfYXJnbWFwX0NyZWF0ZV9Qcm9qZWN0ID0gewotCQknZnJvbV9zdGF0aW9uZXJ5JyA6ICdUbXBsJywKLQl9Ci0KLQlkZWYgQ3JlYXRlX1Byb2plY3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIkNyZWF0ZSBQcm9qZWN0OiBDcmVhdGUgYSBuZXcgcHJvamVjdCBmaWxlCi0JCVJlcXVpcmVkIGFyZ3VtZW50OiBOZXcgcHJvamVjdCBmaWxlIHNwZWNpZmllcgotCQlLZXl3b3JkIGFyZ3VtZW50IGZyb21fc3RhdGlvbmVyeTogdW5kb2N1bWVudGVkLCB0eXBlY29kZSAnYWxpcycKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnTmV3UCcKLQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfQ3JlYXRlX1Byb2plY3QpCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgTWFjT1MuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCWRlZiBDbG9zZV9Qcm9qZWN0KHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIkNsb3NlIFByb2plY3Q6IENsb3NlIHRoZSBjdXJyZW50IHByb2plY3QKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnQ2xzUCcKLQotCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCi0KLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTI3NSw5ICs0NTYsMzAgQEAKIAkJX2NvZGUgPSAnTU1QUicKIAkJX3N1YmNvZGUgPSAnUmVtQicKIAorCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCiAKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJZGVmIFJlbW92ZV9GaWxlcyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIiUmVtb3ZlIEZpbGVzOiBSZW1vdmUgdGhlIHNwZWNpZmllZCBmaWxlKHMpIGZyb20gdGhlIGN1cnJlbnQgcHJvamVjdAorCQlSZXF1aXJlZCBhcmd1bWVudDogTGlzdCBvZiBmaWxlcyB0byByZW1vdmUKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiBFcnJvciBjb2RlIGZvciBlYWNoIGZpbGUgcmVtb3ZlZAorCQkiIiIKKwkJX2NvZGUgPSAnTU1QUicKKwkJX3N1YmNvZGUgPSAnUmVtRicKKwogCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJworCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTI4Nyw0NyArNDg5LDE2IEBACiAJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgogCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQogCi0JX2FyZ21hcF9VcGRhdGVfUHJvamVjdCA9IHsKLQkJJ0V4dGVybmFsRWRpdG9yJyA6ICdFcnJzJywKLQl9Ci0KLQlkZWYgVXBkYXRlX1Byb2plY3Qoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIiVXBkYXRlIFByb2plY3Q6IFVwZGF0ZSB0aGUgY3VycmVudCBwcm9qZWN0Ci0JCUtleXdvcmQgYXJndW1lbnQgRXh0ZXJuYWxFZGl0b3I6IFNob3VsZCB0aGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2Ugd2luZG93IGJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXI/CisJZGVmIFJlc2V0X0ZpbGVfUGF0aHMoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIiUmVzZXQgRmlsZSBQYXRoczogUmVzZXRzIGFjY2VzcyBwYXRocyBmb3IgYWxsIGZpbGVzIGJlbG9uZ2luZyB0byBvcGVuIHByb2plY3QuCiAJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLQkJUmV0dXJuczogRXJyb3JzIHRoYXQgb2NjdXJyZWQgd2hpbGUgdXBkYXRpbmcgdGhlIHByb2plY3QKIAkJIiIiCiAJCV9jb2RlID0gJ01NUFInCi0JCV9zdWJjb2RlID0gJ1VwZFAnCisJCV9zdWJjb2RlID0gJ1JlRlAnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwogCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX1VwZGF0ZV9Qcm9qZWN0KQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlfYXJnbWFwX01ha2VfUHJvamVjdCA9IHsKLQkJJ0V4dGVybmFsRWRpdG9yJyA6ICdFcnJzJywKLQl9Ci0KLQlkZWYgTWFrZV9Qcm9qZWN0KHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIk1ha2UgUHJvamVjdDogTWFrZSB0aGUgY3VycmVudCBwcm9qZWN0Ci0JCUtleXdvcmQgYXJndW1lbnQgRXh0ZXJuYWxFZGl0b3I6IFNob3VsZCB0aGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2Ugd2luZG93IGJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXI/Ci0JCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLQkJUmV0dXJuczogRXJyb3JzIHRoYXQgb2NjdXJyZWQgd2hpbGUgbWFraW5nIHRoZSBwcm9qZWN0Ci0JCSIiIgotCQlfY29kZSA9ICdNTVBSJwotCQlfc3ViY29kZSA9ICdNYWtlJwotCi0JCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKLQotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9NYWtlX1Byb2plY3QpCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0zNTIsMTU4ICs1MjMsOSBAQAogCQlfY29kZSA9ICdNTVBSJwogCQlfc3ViY29kZSA9ICdSdW5QJwogCi0JCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKLQogCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9SdW5fUHJvamVjdCkKLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JX2FyZ21hcF9TZXRfUHJlZmVyZW5jZXMgPSB7Ci0JCSdUbycgOiAnUFJlYycsCi0JfQotCi0JZGVmIFNldF9QcmVmZXJlbmNlcyhzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJTZXQgUHJlZmVyZW5jZXM6IFNldCB0aGUgcHJlZmVyZW5jZXMgZm9yIHRoZSBjdXJyZW50IHByb2plY3QKLQkJS2V5d29yZCBhcmd1bWVudCBUbzogUHJlZmVyZW5jZXMgc2V0dGluZ3MKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnUHJlZicKLQogCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfU2V0X1ByZWZlcmVuY2VzKQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlfYXJnbWFwX0dldF9QcmVmZXJlbmNlcyA9IHsKLQkJJ09mJyA6ICdQUmVjJywKLQl9Ci0KLQlkZWYgR2V0X1ByZWZlcmVuY2VzKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIkdldCBQcmVmZXJlbmNlczogR2V0IHRoZSBwcmVmZXJlbmNlcyBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdAotCQlLZXl3b3JkIGFyZ3VtZW50IE9mOiBQcmVmZXJlbmNlcyBzZXR0aW5ncwotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCVJldHVybnM6IExpc3Qgb2YgcHJlZmVyZW5jZXMKLQkJIiIiCi0JCV9jb2RlID0gJ01NUFInCi0JCV9zdWJjb2RlID0gJ0dyZWYnCi0KLQkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwotCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX0dldF9QcmVmZXJlbmNlcykKLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JZGVmIElzX0luX1Byb2plY3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIklzIEluIFByb2plY3Q6IFdoZXRoZXIgb3Igbm90IHRoZSBzcGVjaWZpZWQgZmlsZShzKSBpcyBpbiB0aGUgY3VycmVudCBwcm9qZWN0Ci0JCVJlcXVpcmVkIGFyZ3VtZW50OiBMaXN0IG9mIGZpbGVzIHRvIGNoZWNrIGZvciBwcm9qZWN0IG1lbWJlcnNoaXAKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQlSZXR1cm5zOiBSZXN1bHQgY29kZSBmb3IgZWFjaCBmaWxlCi0JCSIiIgotCQlfY29kZSA9ICdNTVBSJwotCQlfc3ViY29kZSA9ICdGSW5QJwotCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlkZWYgR2V0X1Byb2plY3RfU3BlY2lmaWVyKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIkdldCBQcm9qZWN0IFNwZWNpZmllcjogUmV0dXJuIHRoZSBGaWxlIFNwZWNpZmllciBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdAotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCVJldHVybnM6IEZpbGUgU3BlY2lmaWVyIGZvciB0aGUgY3VycmVudCBwcm9qZWN0Ci0JCSIiIgotCQlfY29kZSA9ICdNTVBSJwotCQlfc3ViY29kZSA9ICdHZXRQJwotCi0JCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKLQotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlkZWYgUmVzZXRfRmlsZV9QYXRocyhzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJSZXNldCBGaWxlIFBhdGhzOiBSZXNldHMgYWNjZXNzIHBhdGhzIGZvciBhbGwgZmlsZXMgYmVsb25naW5nIHRvIG9wZW4gcHJvamVjdC4KLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnUmVGUCcKLQotCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCi0KLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JZGVmIEdvdG9fTGluZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIiR290byBMaW5lOiBHb3RvIFNwZWNpZmllZCBMaW5lIE51bWJlcgotCQlSZXF1aXJlZCBhcmd1bWVudDogVGhlIHJlcXVlc3RlZCBzb3VyY2UgZmlsZSBsaW5lIG51bWJlcgotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCSIiIgotCQlfY29kZSA9ICdNTVBSJwotCQlfc3ViY29kZSA9ICdHb0xuJwotCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIE1hY09TLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlkZWYgR290b19GdW5jdGlvbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIiR290byBGdW5jdGlvbjogR290byBTcGVjaWZpZWQgRnVuY3Rpb24gTmFtZQotCQlSZXF1aXJlZCBhcmd1bWVudDogdW5kb2N1bWVudGVkLCB0eXBlY29kZSAnVEVYVCcKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnR29GbicKLQotCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTUyMSw5ICs1NDMsOSBAQAogCQlfY29kZSA9ICdNTVBSJwogCQlfc3ViY29kZSA9ICdTdk1zJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNTMzLDYyICs1NTUsMjMgQEAKIAkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CiAJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCiAKLQlkZWYgR2V0X09wZW5fRG9jdW1lbnRzKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIkdldCBPcGVuIERvY3VtZW50czogUmV0dXJucyB0aGUgbGlzdCBvZiBvcGVuIGRvY3VtZW50cwotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCVJldHVybnM6IFRoZSBsaXN0IG9mIGRvY3VtZW50cwotCQkiIiIKLQkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnR0RvYycKLQotCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCi0KLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JZGVmIEdldF9TZWdtZW50cyhzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJHZXQgU2VnbWVudHM6IFJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiBlYWNoIHNlZ21lbnQgaW4gdGhlIHByb2plY3QuCi0JCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLQkJUmV0dXJuczogdW5kb2N1bWVudGVkLCB0eXBlY29kZSAnU2VnICcKLQkJIiIiCi0JCV9jb2RlID0gJ01NUFInCi0JCV9zdWJjb2RlID0gJ0dTZWcnCi0KLQkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwotCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgTWFjT1MuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCV9hcmdtYXBfU2V0X1NlZ21lbnQgPSB7Ci0JCSd0bycgOiAnU2VnbScsCisJX2FyZ21hcF9TZXRfTW9kaWZpY2F0aW9uX0RhdGUgPSB7CisJCSd0bycgOiAnTURhdCcsCiAJfQogCi0JZGVmIFNldF9TZWdtZW50KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJTZXQgU2VnbWVudDogQ2hhbmdlcyB0aGUgbmFtZSBhbmQgYXR0cmlidXRlcyBvZiBhIHNlZ21lbnQuCi0JCVJlcXVpcmVkIGFyZ3VtZW50OiBUaGUgc2VnbWVudCB0byBjaGFuZ2UKLQkJS2V5d29yZCBhcmd1bWVudCB0bzogVGhlIG5ldyBuYW1lIGFuZCBhdHRyaWJ1dGVzIGZvciB0aGUgc2VnbWVudC4KKwlkZWYgU2V0X01vZGlmaWNhdGlvbl9EYXRlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJTZXQgTW9kaWZpY2F0aW9uIERhdGU6IENoYW5nZXMgdGhlIGludGVybmFsIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKQorCQlSZXF1aXJlZCBhcmd1bWVudDogTGlzdCBvZiBmaWxlcworCQlLZXl3b3JkIGFyZ3VtZW50IHRvOiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdsZHQgJwogCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCVJldHVybnM6IEVycm9yIGNvZGUgZm9yIGVhY2ggbW9kaWZpZWQgZmlsZQogCQkiIiIKIAkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnU1NlZycKKwkJX3N1YmNvZGUgPSAnU01vZCcKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9TZXRfTW9kaWZpY2F0aW9uX0RhdGUpCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9TZXRfU2VnbWVudCkKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTU5OCwyMyArNTgxLDIzIEBACiAJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgogCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQogCi0JX2FyZ21hcF9HZXRfUHJvamVjdF9GaWxlID0gewotCQknU2VnbWVudCcgOiAnU2VnbScsCisJX2FyZ21hcF9TZXRfUHJlZmVyZW5jZXMgPSB7CisJCSdvZl9wYW5lbCcgOiAnUE5hbScsCisJCSd0bycgOiAnUFJlYycsCiAJfQogCi0JZGVmIEdldF9Qcm9qZWN0X0ZpbGUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIkdldCBQcm9qZWN0IEZpbGU6IFJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiBhIGZpbGUgaW4gdGhlIHByb2plY3Qgd2luZG93LgotCQlSZXF1aXJlZCBhcmd1bWVudDogVGhlIGluZGV4IG9mIHRoZSBmaWxlIHdpdGhpbiBpdHMgc2VnbWVudC4KLQkJS2V5d29yZCBhcmd1bWVudCBTZWdtZW50OiBUaGUgc2VnbWVudCBjb250YWluaW5nIHRoZSBmaWxlLgorCWRlZiBTZXRfUHJlZmVyZW5jZXMoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIiU2V0IFByZWZlcmVuY2VzOiBTZXQgdGhlIHByZWZlcmVuY2VzIGZvciB0aGUgY3VycmVudCBwcm9qZWN0CisJCUtleXdvcmQgYXJndW1lbnQgb2ZfcGFuZWw6IE5hbWUgb2YgdGhlIHByZWZlcmVuY2UgcGFuZWwKKwkJS2V5d29yZCBhcmd1bWVudCB0bzogUHJlZmVyZW5jZXMgc2V0dGluZ3MKIAkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQlSZXR1cm5zOiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdTcmNGJwogCQkiIiIKIAkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnR0ZpbCcKKwkJX3N1YmNvZGUgPSAnUHJlZicKIAotCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX1NldF9QcmVmZXJlbmNlcykKKwkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwogCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX0dldF9Qcm9qZWN0X0ZpbGUpCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC02MzcsOSArNjIwLDkgQEAKIAkJX2NvZGUgPSAnTU1QUicKIAkJX3N1YmNvZGUgPSAnU0ZpbCcKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9TZXRfUHJvamVjdF9GaWxlKQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfU2V0X1Byb2plY3RfRmlsZSkKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTY0OSwxOCArNjMyLDY4IEBACiAJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgogCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQogCi0JZGVmIEdldF9EZWZpbml0aW9uKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJHZXQgRGVmaW5pdGlvbjogUmV0dXJucyB0aGUgbG9jYXRpb24ocykgb2YgYSBnbG9iYWxseSBzY29wZWQgZnVuY3Rpb24gb3IgZGF0YSBvYmplY3QuCi0JCVJlcXVpcmVkIGFyZ3VtZW50OiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdURVhUJworCV9hcmdtYXBfU2V0X1NlZ21lbnQgPSB7CisJCSd0bycgOiAnU2VnbScsCisJfQorCisJZGVmIFNldF9TZWdtZW50KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJTZXQgU2VnbWVudDogQ2hhbmdlcyB0aGUgbmFtZSBhbmQgYXR0cmlidXRlcyBvZiBhIHNlZ21lbnQuCisJCVJlcXVpcmVkIGFyZ3VtZW50OiBUaGUgc2VnbWVudCB0byBjaGFuZ2UKKwkJS2V5d29yZCBhcmd1bWVudCB0bzogVGhlIG5ldyBuYW1lIGFuZCBhdHRyaWJ1dGVzIGZvciB0aGUgc2VnbWVudC4KIAkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQlSZXR1cm5zOiB1bmRvY3VtZW50ZWQsIHR5cGVjb2RlICdGRGVmJwogCQkiIiIKIAkJX2NvZGUgPSAnTU1QUicKLQkJX3N1YmNvZGUgPSAnR0RlZicKKwkJX3N1YmNvZGUgPSAnU1NlZycKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9TZXRfU2VnbWVudCkKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgTWFjT1MuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCWRlZiBUb3VjaChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIiVG91Y2g6IEZvcmNlIHJlY29tcGlsYXRpb24gb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpCisJCVJlcXVpcmVkIGFyZ3VtZW50OiBMaXN0IG9mIGZpbGVzIHRvIGNvbXBpbGUKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiBFcnJvciBjb2RlIGZvciBlYWNoIGZpbGUgdG91Y2hlZAorCQkiIiIKKwkJX2NvZGUgPSAnTU1QUicKKwkJX3N1YmNvZGUgPSAnVG9jaCcKKwogCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJworCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBNYWNPUy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9VcGRhdGVfUHJvamVjdCA9IHsKKwkJJ0V4dGVybmFsRWRpdG9yJyA6ICdFcnJzJywKKwl9CisKKwlkZWYgVXBkYXRlX1Byb2plY3Qoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIiVXBkYXRlIFByb2plY3Q6IFVwZGF0ZSB0aGUgY3VycmVudCBwcm9qZWN0CisJCUtleXdvcmQgYXJndW1lbnQgRXh0ZXJuYWxFZGl0b3I6IFNob3VsZCB0aGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2Ugd2luZG93IGJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXI/CisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogRXJyb3JzIHRoYXQgb2NjdXJyZWQgd2hpbGUgdXBkYXRpbmcgdGhlIHByb2plY3QKKwkJIiIiCisJCV9jb2RlID0gJ01NUFInCisJCV9zdWJjb2RlID0gJ1VwZFAnCisKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfVXBkYXRlX1Byb2plY3QpCisJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKKwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNjcxLDExNiArNzA0LDE1IEBACiAJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCiAKIAotIyAgICBDbGFzcyAnQy9DKysgTGFuZ3VhZ2UnICgnRkVDUCcpIC0tICdDL0MrKyBMYW5ndWFnZSBzcGVjaWZpY3MnCi0jICAgICAgICBwcm9wZXJ0eSAnQWN0aXZhdGUgQ1BsdXNQbHVzJyAoJ0ZFMDEnKSAnYm9vbCcgLS0gJ1RvIGNvbXBpbGUgXDMyMi5jXDMyMyBmaWxlcyB0aGF0IHVzZSBDKysgZmVhdHVyZXMuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdBUk0gQ29uZm9ybWFuY2UnICgnRkUwMicpICdib29sJyAtLSAnVG8gZW5mb3JjZSBBUk0gY29uZm9ybWFuY2UgZm9yIHlvdXIgc291cmNlIGNvZGUuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdBTlNJIEtleXdvcmRzIE9ubHknICgnRkUwMycpICdib29sJyAtLSAnVG8gYWxsb3cgb25seSBBTlNJIEMgYW5kIEMrKyBrZXl3b3Jkcy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ1JlcXVpcmUgRnVuY3Rpb24gUHJvdG90eXBlcycgKCdGRTA0JykgJ2Jvb2wnIC0tICdUbyBlbmZvcmNlIHByb3RvdHlwZSBjaGVja2luZy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0V4cGFuZCBUcmlncmFwaCBTZXF1ZW5jZXMnICgnRkUwNScpICdib29sJyAtLSAnVG8gYWxsb3cgQU5TSSB0cmlncmFwaCBleHByZXNzaW9ucy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0VudW1zIEFsd2F5cyBJbnRzJyAoJ0ZFMDYnKSAnYm9vbCcgLS0gJ1RvIGludGVycHJldCBlbnVtZXJhdGlvbiBjb25zdGFudHMgYXMgaW50ZWdlcnMuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdNUFcgUG9pbnRlciBUeXBlIFJ1bGVzJyAoJ0ZFMDcnKSAnYm9vbCcgLS0gJ1RvIHVzZSBNUFcgKHJlbGF4ZWQpIHBvaW50ZXIgdHlwZS1jaGVja2luZyBydWxlcy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0RpcmVjdCBEZXN0cnVjdGlvbicgKCdGRTA5JykgJ2Jvb2wnIC0tICdUbyByZW1vdmUgbG9jYWwgYW5kIHRlbXBvcmFyeSBDKysgY2xhc3Mgb2JqZWN0cyB0aGF0IGhhdmUgZGVzdHJ1Y3RvcnMgd2l0aCBhIGRpcmVjdCBkZXN0cnVjdG9yIGNhbGwuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdEb250IElubGluZScgKCdGRTEwJykgJ2Jvb2wnIC0tICdUbyBnZW5lcmF0ZSBDKysgZnVuY3Rpb25zIGFuZCBmdW5jdGlvbiBjYWxscyBpbnN0ZWFkIG9mIGlubGluZSBmdW5jdGlvbnMuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdQb29sIFN0cmluZ3MnICgnRkUxMScpICdib29sJyAtLSAnVG8gZ3JvdXAgYWxsIGNoYXJhY3RlciBzdHJpbmcgY29uc3RhbnRzIGludG8gYSBzaW5nbGUgb2JqZWN0LicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRG9udCBSZXVzZSBTdHJpbmdzJyAoJ0ZFMTInKSAnYm9vbCcgLS0gJ1RvIHByZXZlbnQgbWVyZ2luZyBpZGVudGljYWwgY2hhcmFjdGVyIHN0cmluZyBsaXRlcmFscy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0FOU0kgU3RyaWN0JyAoJ0ZFMTMnKSAnYm9vbCcgLS0gJ1RvIGVuZm9yY2Ugc3RyaWN0IEFOU0kgQyBhbmQgQU5TSSBDKysgcnVsZXMuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdNUFcgTmV3bGluZXMnICgnRkUxNCcpICdib29sJyAtLSAnVG8gY29udmVydCBcMzI0XFxuXDMyNSB0byBjYXJyaWFnZSByZXR1cm5zIChBU0NJSSAxMykgYW5kIFwzMjRcXHJcMzI1IHRvIGxpbmUgZmVlZHMgKEFTQ0lJIDEwKS4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0lsbGVnYWwgUHJhZ21hcycgKCdXQTAxJykgJ2Jvb2wnIC0tICdUbyBlbmZvcmNlIGlsbGVnYWwgcHJhZ21hIGNoZWNraW5nLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRW1wdHkgRGVjbGFyYXRpb25zJyAoJ1dBMDInKSAnYm9vbCcgLS0gJ1RvIGVuZm9yY2UgZW1wdHkgZGVjbGFyYXRpb24gY2hlY2tpbmcuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdQb3NzaWJsZSBFcnJvcnMnICgnV0EwMycpICdib29sJyAtLSAnVG8gZW5mb3JjZSBwb3NzaWJsZSBlcnJvciBjaGVja2luZy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0V4dHJhIENvbW1hcycgKCdXQTA2JykgJ2Jvb2wnIC0tICdUbyBlbmZvcmNlIGV4dHJhIGNvbW1hIGNoZWNraW5nLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRXh0ZW5kZWQgRXJyb3IgQ2hlY2tpbmcnICgnV0EwNycpICdib29sJyAtLSAnVG8gZW5mb3JjZSBleHRlbmRlZCBlcnJvciBjaGVja2luZy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ1RyZWF0IFdhcm5pbmdzIEFzIEVycm9ycycgKCdXQTA4JykgJ2Jvb2wnIC0tICdUbyB0cmVhdCB0aGUgd2FybmluZ3MgYXMgY29tcGlsZXIgZXJyb3JzLicgW211dGFibGVdCi0KLSMgICAgQ2xhc3MgJ1Bhc2NhbCBMYW5ndWFnZScgKCdGRVBBJykgLS0gJ1Bhc2NhbCBMYW5ndWFnZSBzcGVjaWZpY3MnCi0jICAgICAgICBwcm9wZXJ0eSAnQWN0aXZhdGUgUmFuZ2UgQ2hlY2tpbmcnICgnRlAwMScpICdib29sJyAtLSAnVG8gYWN0aXZhdGUgYXJyYXkgaW5kZXggcmVmZXJlbmNlIGFuZCB2YXJpYWJsZSBhc3NpZ25tZW50IGNoZWNraW5nIGF0IGNvbXBpbGUgYW5kIHJ1biB0aW1lLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnVXNlIFByb3BhZ2F0aW9uJyAoJ0ZQMDMnKSAnYm9vbCcgLS0gJ1RvIHByb3BhZ2F0ZSB1bml0IG9iamVjdHMgYW1vbmcgaW1wb3J0ZWQgb2JqZWN0cy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0FjdGl2YXRlIE92ZXJmbG93IENoZWNraW5nJyAoJ0ZQMDQnKSAnYm9vbCcgLS0gJ1RvIGFjdGl2YXRlIHJ1bi10aW1lIG92ZXJmbG93IGNoZWNraW5nLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnR2VuZXJhdGUgTWFwJyAoJ0ZQMDUnKSAnYm9vbCcgLS0gJ1RvIGdlbmVyYXRlIGEgTWFrZSBtYXAgZmlsZS4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0Nhc2UgU2Vuc2l0aXZlJyAoJ0ZQMDYnKSAnYm9vbCcgLS0gJ1RvIHN1cHBvcnQgY2FzZSBzZW5zaXRpdmUgaWRlbnRpZmllci4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0FOUyBDb25mb3JtYW5jZScgKCdGUDA3JykgJ2Jvb2wnIC0tICdUbyBjb25mb3JtIHRvIHRoZSBBTlMgc3RhbmRhcmQuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdNb2RpZmllZCBGb3JMb29wIEluZGV4ZXMnICgnV1AwMScpICdib29sJyAtLSAnVG8gdmVyaWZ5IHRoYXQgZm9yIGxvb3AgaW5kZXhlcyBhcmUgbm90IG92ZXJ3cml0dGVuLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRnVuY3Rpb24gUmV0dXJucycgKCdXUDAyJykgJ2Jvb2wnIC0tICdUbyB2ZXJpZnkgdGhhdCBmdW5jdGlvbnMgZ2V0IGF0IGxlYXN0IG9uZSByZXR1cm4gdmFsdWUuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdVbmRlZmluZWQgUm91dGluZXMnICgnV1AwMycpICdib29sJyAtLSAnVG8gcmVwb3J0IHJvdXRpbmVzIGRlY2xhcmVkIGJ1dCBub3QgZGVmaW5lZC4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0dvdG9BbmRMYWJlbHMnICgnV1AwNCcpICdib29sJyAtLSAnVG8gZW5hYmxlIGdvdG8gY2hlY2tpbmcgaW4gZm9yLCB3aXRoLCBjYXNlIGFuZCBpZiBzdGF0ZW1lbnRzLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnQnJhbmNoaW5nSW50b1dpdGgnICgnV1AwNScpICdib29sJyAtLSAnVmVyaWZ5IHRoYXQgbGFiZWxzIGluIGEgV0lUSCBzdGF0ZW1lbnQgYXJlIHJlZmVyZW5jZWQgZnJvbSB3aXRoaW4gdGhlIHNhbWUgc3RhdGVtZW50JyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdCcmFuY2hpbmdJbnRvRm9yJyAoJ1dQMDYnKSAnYm9vbCcgLS0gJ1ZlcmlmeSB0aGF0IGxhYmVscyBpbiBhIEZPUiBzdGF0ZW1lbnQgYXJlIHJlZmVyZW5jZWQgZnJvbSB3aXRoaW4gdGhlIHNhbWUgc3RhdGVtZW50JyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdCcmFuY2hpbmdCZXR3ZWVuQ2FzZScgKCdXUDA3JykgJ2Jvb2wnIC0tICdWZXJpZnkgdGhhdCBsYWJlbHMgaW4gYSBDQVNFIHN0YXRlbWVudCBsZWcgYXJlIG5vdCByZWZlcmVuY2VkIGZyb20gd2l0aGluIGFub3RoZXIgbGVnIG9mIHRoZSBzYW1lIHN0YXRlbWVudC4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0JyYW5jaGluZ0JldHdlZW5JZkFuZEVsc2UnICgnV1AwOCcpICdib29sJyAtLSAnVmVyaWZ5IHRoYXQgdGhlcmVcMzI1cyBubyBqdW1wIGJldHdlZW4gdGhlIElGIGFuZCB0aGUgRUxTRSBwYXJ0IG9mIHRoZSBzYW1lIElGIHN0YXRlbWVudC4nIFttdXRhYmxlXQotCi0jICAgIENsYXNzICdDb21tb24gTGFuZ3VhZ2UnICgnRkVDTycpIC0tICdDb21tb24gdG8gdGhlIEMvQysrIGFuZCBQYXNjYWwgbGFuZ3VhZ2UnCi0jICAgICAgICBwcm9wZXJ0eSAnUHJlZml4IEZpbGUnICgnRkUwOCcpICdURVhUJyAtLSAnVGhlIG5hbWUgb2YgdGhlIHByZWZpeCBmaWxlIHlvdSB3aXNoIHRvIGluY2x1ZGUgaW4gYWxsIG9mIHlvdXIgcHJvamVjdCBmaWxlcy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ1VudXNlZCBWYXJpYWJsZXMnICgnV0EwNCcpICdib29sJyAtLSAnVG8gZW5mb3JjZSB1bnVzZWQgdmFyaWFibGUgY2hlY2tpbmcuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdVbnVzZWQgQXJndW1lbnRzJyAoJ1dBMDUnKSAnYm9vbCcgLS0gJ1RvIGVuZm9yY2UgdW51c2VkIGFyZ3VtZW50IGNoZWNraW5nLicgW211dGFibGVdCi0KLSMgICAgQ2xhc3MgJ01DNjhLIExpbmtlcicgKCdMTjY4JykgLS0gJ01DNjhLIExpbmtlciBzcGVjaWZpY3MnCi0jICAgICAgICBwcm9wZXJ0eSAnQ29kZSBNb2RlbCcgKCdCRTAxJykgJ3Nob3InIC0tICdUbyBzZWxlY3QgdGhlIHR5cGUgb2Ygb2JqZWN0IGNvZGUgeW91IHdpc2ggdG8gZ2VuZXJhdGUuICgwIDogU21hbGw7IDEgOiBTbWFydDsgMiA6IExhcmdlKScgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnTUM2ODAyMCBDb2RlR2VuJyAoJ0JFMDMnKSAnYm9vbCcgLS0gJ1RvIGdlbmVyYXRlIG9iamVjdCBjb2RlIGZvciBjb21wdXRlcnMgd2l0aCB0aGUgTUM2ODAyMCwgTUM2ODAzMCwgb3IgTUM2ODA0MCBwcm9jZXNzb3IuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdNQzY4ODgxIENvZGVHZW4nICgnQkUwNCcpICdib29sJyAtLSAnVG8gcmVyb3V0ZSBhbGwgbWF0aCBjYWxscyBmcm9tIFNBTkUgZGlyZWN0bHkgdG8gYSBNQzY4ODgxIG9yIE1DNjg4ODIgRlBVLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRmFyIFZpcnR1YWwgRnVuY3Rpb24gVGFibGVzJyAoJ0JFMDgnKSAnYm9vbCcgLS0gJ1RvIG1ha2UgZmFyIGJyYW5jaGVzIGluIHN1YnJvdXRpbmVzLiAoTm90IHN1cHBvcnRlZCBpbiBQYXNjYWwpJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdGYXIgU3RyaW5nIENvbnN0YW50cycgKCdCRTA5JykgJ2Jvb2wnIC0tICdUbyBwbGFjZSBhbGwgc3RyaW5nIGNvbnN0YW50cyBpbnRvIGZhciBkYXRhIHNwYWNlLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRm91ciBCeXRlcyBJbnRzJyAoJ0JFMTAnKSAnYm9vbCcgLS0gJ1RvIGZvcmNlIGludGVnZXJzIHRvIG9jY3VweSA0IGJ5dGVzLiAoTm90IHN1cHBvcnRlZCBpbiBQYXNjYWwpJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdFaWdodCBCeXRlIERvdWJsZScgKCdCRTExJykgJ2Jvb2wnIC0tICdUbyBmb3JjZSBkb3VibGVzIHRvIG9jY3VweSA4IGJ5dGVzLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRmFyIERhdGEnICgnQkUxMicpICdib29sJyAtLSAnVG8gcmVtb3ZlIHRoZSA2OEsgbGltaXQgb24gZ2xvYmFsIGRhdGEuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdQQyBSZWxhdGl2ZSBTdHJpbmdzJyAoJ0JFMTQnKSAnYm9vbCcgLS0gJ1RvIHJlZmVyZW5jZSBzdHJpbmcgbGl0ZXJhbHMgdXNpbmcgUEMtcmVsYXRpdmUgYWRkcmVzc2luZy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ01QVyBDYWxsaW5nIENvbnZlbnRpb25zJyAoJ0JFMTUnKSAnYm9vbCcgLS0gJ1RvIHVzZSBNUFcgQyBjYWxsaW5nIGNvbnZlbnRpb25zLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnTWFjc0J1ZyBTeW1ib2xzJyAoJ0xOMDEnKSAnc2hvcicgLS0gJ1RvIHNlbGVjdCB0aGUgTWFjc0J1ZyB2ZXJzaW9uIHlvdSBhcmUgdXNpbmcuICggMCA6IE5vbmU7IDEgOiBPbGQgU3R5bGU7IDIgOiBOZXcgU3R5bGUpJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdHZW5lcmF0ZSBBNiBTdGFjayBGcmFtZXMnICgnTE4wNScpICdib29sJyAtLSAnVG8gYmUgYWJsZSB0byB1c2UgdGhlIE1ldHJvd2Vya3MgRGVidWdnZXIsIFRoZSBEZWJ1Z2dlciBieSBKYXNpayBEZXNpZ25zLCBvciBTb3VyY2VCdWdcMjUyIHRvIGV4YW1pbmUgeW91ciBzb3VyY2UgY29kZS4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ1RoZSBEZWJ1Z2dlciBBd2FyZScgKCdMTjA2JykgJ2Jvb2wnIC0tICdUbyBhbGxvdyBTdGV2ZSBKYXNpa1wzMjVzIFRoZSBEZWJ1Z2dlciB0byBkZWJ1ZyBtdWx0aXBsZSBzZWdtZW50IHByb2plY3RzLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnTGluayBTaW5nbGUgU2VnbWVudCcgKCdMTjA3JykgJ2Jvb2wnIC0tICdUbyBsaW5rIGFsbCBvZiB5b3VyIHByb2plY3Qgc2VnbWVudHMgaW50byBvbmUgc2VnbWVudC4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ011bHRpIFNlZ21lbnQnICgnUFIxMCcpICdib29sJyAtLSAnVG8gZGl2aWRlIHlvdXIgcmVzb3VyY2UgaW50byBtYW55IGNvZGUgc2VnbWVudHMgaW4geW91ciByZXNvdXJjZSBmaWxlLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnSGVhZGVyIFR5cGUnICgnUFIxNicpICdzaG9yJyAtLSAnVG8gc2VsZWN0IHRoZSB0eXBlIG9mIGNvZGUgcmVzb3VyY2UgdG8gY3JlYXRlLiAoTm90IHN1cHBvcnRlZCB5ZXQpJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdBNCBSZWxhdGl2ZSBEYXRhJyAoJ1BSMTcnKSAnYm9vbCcgLS0gJ1RvIHVzZSBBNCByZWxhdGl2ZSBkYXRhLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnU2VnIFR5cGUnICgnUFIxOCcpICdzaG9yJyAtLSAnVG8gc2V0IHRoZSBzZWdtZW50IHR5cGUgZm9yIHlvdXIgY29kZSByZXNvdXJjZS4nIFttdXRhYmxlXQotCi0jICAgIENsYXNzICdQb3dlclBDIExpbmtlcicgKCdMTkNQJykgLS0gJ1Bvd2VyUEMgTGlua2VyIHNwZWNpZmljcycKLSMgICAgICAgIHByb3BlcnR5ICdNYWtlIFN0cmluZyBSZWFkT25seScgKCdCNjAxJykgJ2Jvb2wnIC0tICdUbyBzdG9yZSBzdHJpbmcgbGl0ZXJhbHMgaW4gdGhlIGNvZGUgc2VjdGlvbi4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0luc3RydWN0aW9uIFNjaGVkdWxpbmcnICgnQjYwMicpICdib29sJyAtLSAnVG8gcmVhcnJhbmdlIGluc3RydWN0aW9ucyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgUklTQyBwaXBlbGluZWQgYXJjaGl0ZWN0dXJlLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnT3B0aW1pemF0aW9uIExldmVsJyAoJ0I2MDMnKSAnc2hvcicgLS0gJ1RvIHNlbGVjdCB0aGUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIGJlIGFwcGxpZWQgKGZyb20gMSB0byA0KS4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0dsb2JhbCBPcHRpbWl6YXRpb24nICgnQjYwNCcpICdib29sJyAtLSAnVG8gdHVybiBvbiB0aGUgZ2xvYmFsIG9wdGltaXplci4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ1N1cHByZXNzIFdhcm5pbmdzJyAoJ0w2MDEnKSAnYm9vbCcgLS0gJ1RvIHN1cHByZXNzIHJlcG9ydGluZyBvZiBub24tZmF0YWwgbGlua2VyIGVycm9ycy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0luaXRpYWxpemF0aW9uIE5hbWUnICgnTDYwMicpICdURVhUJyAtLSAnVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwsIHdoZW4gdGhlIFBFRiBmcmFnbWVudCBpcyBsb2FkZWQuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdNYWluIE5hbWUnICgnTDYwMycpICdURVhUJyAtLSAnVGhlIG5hbWUgb2YgdGhlIG1haW4gZnVuY3Rpb24uJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdUZXJtaW5hdGlvbiBOYW1lJyAoJ0w2MDQnKSAnVEVYVCcgLS0gJ1RoZSBuYW1lIG9mIHRoZSBsYXN0IGZ1bmN0aW9uIHRvIGNhbGwsIGJlZm9yZSB0aGUgUEVGIGZyYWdtZW50IGlzIHVubG9hZGVkLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRXhwb3J0IFN5bWJvbHMnICgnUEUwMScpICdzaG9yJyAtLSAnVG8gc2VsZWN0IHdoaWNoIHN5bWJvbHMgdG8gZXhwb3J0IGZyb20gdGhlIFBFRiBjb250YWluZXIuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdPbGQgRGVmaW5pdGlvbicgKCdQRTAyJykgJ2xvbmcnIC0tICdUaGUgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBQRUYgY29udGFpbmVyLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnT2xkIEltcGxlbWVudGF0aW9uJyAoJ1BFMDMnKSAnbG9uZycgLS0gJ1RoZSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIFBFRiBjb250YWluZXIuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdDdXJyZW50IFZlcnNpb24nICgnUEUwNCcpICdsb25nJyAtLSAnVGhlIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgUEVGIGNvbnRhaW5lci4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ09yZGVyIENvZGUgU2VjdGlvbiBCeSBTZWdtZW50JyAoJ1BFMDUnKSAnYm9vbCcgLS0gJ1RvIG9yZGVyIGZ1bmN0aW9ucyBpbiB0aGUgQ29kZSBzZWN0aW9uIG9mIHlvdXIgcHJvZ3JhbSBhY2NvcmRpbmcgdG8gdGhlaXIgI3ByYWdtYSBzZWdtZW50IG5hbWVzLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnU2hhcmUgRGF0YSBTZWN0aW9uJyAoJ1BFMDYnKSAnYm9vbCcgLS0gJ1RvIHNoYXJlIHRoZSBEYXRhIHNlY3Rpb24gb2YgYSBzaGFyZWQgbGlicmFyeSBiZXR3ZWVuIGFsbCBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgaXQuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdFeHBhbmQgVW5pbml0aWFsaXplZCBEYXRhJyAoJ1BFMDcnKSAnYm9vbCcgLS0gJ1RvIGV4cGFuZCB0aGUgemVyby1pbml0aWFsaXplZCBwb3J0aW9uIG9mIHRoZSBEYXRhIHNlY3Rpb24gb2YgeW91ciBwcm9ncmFtIGF0IGxpbmsgdGltZS4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0ZyYWdtZW50IE5hbWUnICgnUEUwOCcpICdURVhUJyAtLSAnVG8gc3BlY2lmeSB0aGUgY29kZSBmcmFnbWVudCBuYW1lLiBUaGUgZGVmYXVsdCBpcyB0aGUgb3V0cHV0IGZpbGUgbmFtZS4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ1N0YWNrIFNpemUnICgnUDYwMScpICdsb25nJyAtLSAnVGhlIG1pbmltdW0gYW1vdW50IG9mIHN0YWNrIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgd2hlbiBsYXVuY2hlZCBieSB0aGUgRmluZGVyLicgW211dGFibGVdCi0KLSMgICAgQ2xhc3MgJ0NvbW1vbiBMaW5rZXInICgnTE5DTycpIC0tICdDb21tb24gZm9yIHRoZSBNQzY4SyBhbmQgUG93ZXJQQyBMaW5rZXInCi0jICAgICAgICBwcm9wZXJ0eSAnU3RydWN0IEFsaWdubWVudCcgKCdCRTAyJykgJ3Nob3InIC0tICdUbyBzZWxlY3QgaG93IHRoZSBmaWVsZHMgb2YgeW91ciBzdHJ1Y3R1cmVzIHdpbGwgYmUgYWxpZ25lZC4gKDAgOiA2OEs7IDEgOiA2OEsgNCBieXRlczsgMiA6IFBvd2VyUEMpJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdQZWVwaG9sZSBPcHRpbWl6ZXInICgnQkUwNScpICdib29sJyAtLSAnVG8gYXBwbHkgbG9jYWwgb3B0aW1pemF0aW9ucyB0byBzbWFsbCBzZWN0aW9ucyBvZiB5b3VyIGNvZGUuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdDU0UgT3B0aW1pemVyJyAoJ0JFMDYnKSAnYm9vbCcgLS0gJ1RvIGFjdGl2YXRlIGNvbW1vbiBzdWIgZXhwcmVzc2lvbiBvcHRpbWl6YXRpb24uJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdPcHRpbWl6ZSBGb3IgU2l6ZScgKCdCRTA3JykgJ2Jvb2wnIC0tICdUbyBtaW5pbWl6ZSB0aGUgc2l6ZSBvZiB5b3VyIGFwcGxpY2F0aW9uIG9yIGNvZGUgcmVzb3VyY2UuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdVc2UgUHJvZmlsZXInICgnQkUxMycpICdib29sJyAtLSAnVG8gYWRkIHByb2ZpbGVyIGNhbGxzIGluIHRoZSBjb2RlLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnR2VuZXJhdGUgU1lNIEZpbGUnICgnTE4wMicpICdib29sJyAtLSAnVG8gY3JlYXRlIGEgU1lNIGZpbGUgZm9yIHlvdXIgcHJvamVjdCB3aGVuIGl0IGlzIGJ1aWx0LicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnRnVsbCBQYXRoIEluIFN5bSBGaWxlcycgKCdMTjAzJykgJ2Jvb2wnIC0tICdUbyBwdXQgdGhlIGZ1bGwgcGF0aCBvZiB5b3VyIGFwcGxpY2F0aW9uIG9yIGNvZGUgcmVzb3VyY2UgaW4geW91ciBTWU0gZmlsZXMuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdHZW5lcmF0ZSBMaW5rIE1hcCcgKCdMTjA0JykgJ2Jvb2wnIC0tICdUbyBjcmVhdGUgYSBNQVAgZmlsZSBmb3IgeW91ciBwcm9qZWN0IHdoZW4gaXQgaXMgYnVpbHQuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdGYXN0IExpbmsnICgnTE4wOCcpICdib29sJyAtLSAnVG8gbGluayB0aGUgY29kZSB0b2dldGhlciBpbiBtZW1vcnkuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdQcm9qZWN0IFR5cGUnICgnUFIwMScpICdzaG9yJyAtLSAnVG8gc2VsZWN0IHRoZSB0eXBlIG9mIGJpbmFyeSB5b3Ugd2lzaCB0byBjcmVhdGUuXDAxNVwwMTVmb3IgNjhLIDogKDAgOiBBcHBsaWNhdGlvbjsgMSA6IENvZGUgUmVzb3VyY2U7IDIgOiBMaWJyYXJ5OyAzIDogTVBXIFRvb2wpIGZvciBQb3dlclBDIDogKDAgOiBBcHBsaWNhdGlvbjsgMSA6IFNoYXJlZCBMaWJyYXJ5OyAyIDogQ29kZSBSZXNvdXJjZTsgMyA6IExpYnJhcnkpJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdGaWxlIE5hbWUnICgnUFIwMicpICdURVhUJyAtLSAnVGhlIG5hbWUgeW91ciBiaW5hcnkgd2lsbCBiZSBnaXZlbiB3aGVuIGNyZWF0ZWQuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdGaWxlIENyZWF0b3InICgnUFIwMycpICdURVhUJyAtLSAnVGhlIGNyZWF0b3IgbmFtZSBvZiB5b3VyIGJpbmFyeS4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ0ZpbGUgVHlwZScgKCdQUjA0JykgJ1RFWFQnIC0tICdUaGUgZm91ciBjaGFyYWN0ZXIgY29kZSB0eXBlIGZvciB5b3VyIGJpbmFyeS4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ01pbmltdW0gU2l6ZScgKCdQUjA1JykgJ2xvbmcnIC0tICdUaGUgbWluaW11bSBhbW91bnQgb2YgUkFNIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgd2hlbiBsYXVuY2hlZCBieSB0aGUgRmluZGVyLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnUHJlZmVycmVkIFNpemUnICgnUFIwNicpICdsb25nJyAtLSAnVGhlIHByZWZlcnJlZCBhbW91bnQgb2YgUkFNIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgd2hlbiBsYXVuY2hlZCBieSB0aGUgRmluZGVyLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnU0laRSBGbGFncycgKCdQUjA3JykgJ3Nob3InIC0tICdUbyB0ZWxsIHRoZSBGaW5kZXIgd2hpY2ggdHlwZSBvZiBldmVudHMgeW91ciBhcHBsaWNhdGlvbiBhY2NlcHRzLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnU1lNIEZpbGUnICgnUFIwOCcpICdURVhUJyAtLSAnVGhlIG5hbWUgb2YgdGhlIFNZTSBmaWxlIHRvIGJlIGdlbmVyYXRlZCB3aGVuIHlvdXIgYmluYXJ5IGlzIGNyZWF0ZWQuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdSZXNvdXJjZSBOYW1lJyAoJ1BSMDknKSAnVEVYVCcgLS0gJ1RoZSBuYW1lIG9mIHRoZSBjb2RlIHJlc291cmNlIHRvIGJlIGNyZWF0ZWQuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdEaXNwbGF5IERpYWxvZycgKCdQUjExJykgJ2Jvb2wnIC0tICdUbyBkaXNwbGF5IGEgZGlhbG9nIGJveCB3aGljaCBhc2tzIHlvdSB3aGVyZSB0byBzYXZlIHlvdXIgYnVpbHQgcmVzb3VyY2UuJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdNZXJnZSBUbyBGaWxlJyAoJ1BSMTInKSAnYm9vbCcgLS0gJ1RvIGNyZWF0ZSBhbmQgbWVyZ2UgeW91ciByZXNvdXJjZSBpbnRvIGEgZmlsZSB3aGljaCBhbHJlYWR5IGV4aXN0cy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ1Jlc291cmNlIEZsYWdzJyAoJ1BSMTMnKSAnYm9vbCcgLS0gJ1RvIHNlbGVjdCB5b3VyIHJlc291cmNlIGZsYWcgb3B0aW9ucy4nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ1Jlc291cmNlIFR5cGUnICgnUFIxNCcpICdzaG9yJyAtLSAnVGhlIGZvdXIgY2hhcmFjdGVyIGNvZGUgdHlwZSBmb3IgeW91ciBjb2RlIHJlc291cmNlLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnUmVzb3VyY2UgSUQnICgnUFIxNScpICdzaG9yJyAtLSAnVGhlIElEIHRvIGFzc2lnbiB0byB5b3VyIGNvZGUgcmVzb3VyY2UuJyBbbXV0YWJsZV0KLQotIyAgICBDbGFzcyAnQ29tbW9uJyAoJ0NPTU0nKSAtLSAnQ29tbW9uIHRvIEMvQysrIGFuZCBQYXNjYWwgTGFuZ3VhZ2UgJiBNQzY4SyBhbmQgUG93ZXJQQyBMaW5rZXIuJwotIyAgICAgICAgcHJvcGVydHkgJ1VzZXIgUGF0aHMnICgnUEEwMScpICdsaXN0JyAtLSAnVG8gYWRkIGFuIGFjY2VzcyBwYXRoIGZvciB0aGUgc291cmNlIGZpbGVzLicgW211dGFibGVdCisjICAgIENsYXNzICdBY2Nlc3MgUGF0aHMnICgnUEFUSCcpIC0tICdDb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgYSBwcm9qZWN0XDMyNXMgYWNjZXNzIChzZWFyY2gpIHBhdGhzLicKKyMgICAgICAgIHByb3BlcnR5ICdVc2VyIFBhdGhzJyAoJ1BBMDEnKSAnUEluZicgLS0gJ1RvIGFkZCBhbiBhY2Nlc3MgcGF0aCBmb3IgdGhlIHNvdXJjZSBmaWxlcy4nIFttdXRhYmxlIGxpc3RdCisjICAgICAgICBwcm9wZXJ0eSAnU3lzdGVtIFBhdGhzJyAoJ1BBMDMnKSAnUEluZicgLS0gJ1RvIGFkZCBhbiBhY2Nlc3MgcGF0aCBmb3IgdGhlIGluY2x1ZGUgZmlsZXMuIChOb3Qgc3VwcG9ydGVkIGluIFBhc2NhbCknIFttdXRhYmxlIGxpc3RdCiAjICAgICAgICBwcm9wZXJ0eSAnQWx3YXlzIEZ1bGwgU2VhcmNoJyAoJ1BBMDInKSAnYm9vbCcgLS0gJ1RvIGZvcmNlIHRoZSBjb21waWxlciB0byBzZWFyY2ggZm9yIHN5c3RlbSBpbmNsdWRlcyBsaWtlIGl0IHNlYXJjaGVzIGZvciB1c2VyIGluY2x1ZGVzLicgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAnU3lzdGVtIFBhdGhzJyAoJ1BBMDMnKSAnbGlzdCcgLS0gJ1RvIGFkZCBhbiBhY2Nlc3MgcGF0aCBmb3IgdGhlIGluY2x1ZGUgZmlsZXMuIChOb3Qgc3VwcG9ydGVkIGluIFBhc2NhbCknIFttdXRhYmxlXQorCisjICAgIENsYXNzICdEb2N1bWVudCcgKCdkb2N1JykgLS0gJ0FuIG9wZW4gdGV4dCBmaWxlJworIyAgICAgICAgcHJvcGVydHkgJ25hbWUnICgncG5hbScpICdURVhUJyAtLSAnVGhlIGRvY3VtZW50XDMyNXMgbmFtZScgW10KKyMgICAgICAgIHByb3BlcnR5ICdtb2RlJyAoJ01vZGUnKSAnTW9kZScgLS0gJ1RoZSBkb2N1bWVudFwzMjVzIG9wZW4gbW9kZScgW2VudW1dCisjICAgICAgICBwcm9wZXJ0eSAnZGlzayBmaWxlJyAoJ2ZpbGUnKSAnZnNzICcgLS0gJ1RoZSBkb2N1bWVudFwzMjVzIGxvY2F0aW9uIG9uIGRpc2snIFtdCiAKICMgICAgQ2xhc3MgJ0Vycm9yIEluZm9ybWF0aW9uJyAoJ0Vyck0nKSAtLSAnRGVzY3JpYmVzIGEgc2luZ2xlIGVycm9yIG9yIHdhcm5pbmcgZnJvbSB0aGUgY29tcGlsZXIgb3IgdGhlIGxpbmtlci4nCiAjICAgICAgICBwcm9wZXJ0eSAna2luZCcgKCdFcnJUJykgJ0VyclQnIC0tICdUaGUgdHlwZSBvZiBlcnJvciBvciB3YXJuaW5nLicgW2VudW1dCkBAIC03ODgsMTkgKzcyMCwxNCBAQAogIyAgICAgICAgcHJvcGVydHkgJ2Rpc2sgZmlsZScgKCdmaWxlJykgJ2ZzcyAnIC0tICdUaGUgZmlsZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuICBNYXkgbm90IGJlIHJldHVybmVkIGZvciBjZXJ0YWluIGtpbmRzIG9mIGVycm9ycyAoZWcsIGxpbmsgZXJyb3JzKS4nIFtdCiAjICAgICAgICBwcm9wZXJ0eSAnbGluZScgKCdFcnJMJykgJ2xvbmcnIC0tICdUaGUgbGluZSBpbiB0aGUgZmlsZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuICBNYXkgbm90IGJlIHJldHVybmVkIGZvciBjZXJ0YWluIGtpbmRzIG9mIGVycm9ycyAoZWcsIGxpbmsgZXJyb3JzKS4nIFtdCiAKLSMgICAgQ2xhc3MgJ0RvY3VtZW50JyAoJ2RvY3UnKSAtLSAnQW4gb3BlbiB0ZXh0IGZpbGUnCi0jICAgICAgICBwcm9wZXJ0eSAnbmFtZScgKCdwbmFtJykgJ1RFWFQnIC0tICdUaGUgZG9jdW1lbnRcMzI1cyBuYW1lJyBbXQotIyAgICAgICAgcHJvcGVydHkgJ21vZGUnICgnTW9kZScpICdNb2RlJyAtLSAnVGhlIGRvY3VtZW50XDMyNXMgb3BlbiBtb2RlJyBbZW51bV0KLSMgICAgICAgIHByb3BlcnR5ICdkaXNrIGZpbGUnICgnZmlsZScpICdmc3MgJyAtLSAnVGhlIGRvY3VtZW50XDMyNXMgbG9jYXRpb24gb24gZGlzaycgW10KKyMgICAgQ2xhc3MgJ0Z1bmN0aW9uIEluZm9ybWF0aW9uJyAoJ0ZEZWYnKSAtLSAnRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiBhbnkgZnVuY3Rpb24gb3IgZ2xvYmFsIGRhdGEgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgcHJvamVjdC4nCisjICAgICAgICBwcm9wZXJ0eSAnZGlzayBmaWxlJyAoJ2ZpbGUnKSAnZnNzICcgLS0gJ1RoZSBsb2NhdGlvbiBvbiBkaXNrIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlZmluaXRpb24uJyBbXQorIyAgICAgICAgcHJvcGVydHkgJ2xpbmUnICgnRXJyTCcpICdsb25nJyAtLSAnVGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBkZWZpbml0aW9uIGJlZ2lucy4nIFtdCiAKLSMgICAgQ2xhc3MgJ1NlZ21lbnQnICgnU2VnICcpIC0tICdBIHNlZ21lbnQgb3IgZ3JvdXAgaW4gdGhlIHByb2plY3QnCi0jICAgICAgICBwcm9wZXJ0eSAnbmFtZScgKCdwbmFtJykgJ1RFWFQnIC0tICcnIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ2ZpbGVjb3VudCcgKCdOdW1GJykgJ3Nob3InIC0tICcnIFtdCi0jICAgICAgICBwcm9wZXJ0eSAncHJlbG9hZGVkJyAoJ1ByZWwnKSAnYm9vbCcgLS0gJ0lzIHRoZSBzZWdtZW50IHByZWxvYWRlZCA/IFs2OEsgb25seV0nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ3Byb3RlY3RlZCcgKCdQcm90JykgJ2Jvb2wnIC0tICdJcyB0aGUgc2VnbWVudCBwcm90ZWN0ZWQgPyBbNjhLIG9ubHldJyBbbXV0YWJsZV0KLSMgICAgICAgIHByb3BlcnR5ICdsb2NrZWQnICgnUExjaycpICdib29sJyAtLSAnSXMgdGhlIHNlZ21lbnQgbG9ja2VkID8gWzY4SyBvbmx5XScgW211dGFibGVdCi0jICAgICAgICBwcm9wZXJ0eSAncHVyZ2VhYmxlJyAoJ1B1cmcnKSAnYm9vbCcgLS0gJ0lzIHRoZSBzZWdtZW50IHB1cmdlYWJsZSA/IFs2OEsgb25seV0nIFttdXRhYmxlXQotIyAgICAgICAgcHJvcGVydHkgJ3N5c3RlbSBoZWFwJyAoJ1N5c0gnKSAnYm9vbCcgLS0gJ0lzIHRoZSBzZWdtZW50IGxvYWRlZCBpbnRvIHRoZSBzeXN0ZW0gaGVhcCA/IFs2OEsgb25seV0nIFttdXRhYmxlXQorIyAgICBDbGFzcyAnUGF0aCBJbmZvcm1hdGlvbicgKCdQSW5mJykgLS0gJ0NvbnRhaW5zIGFsbCBvZiB0aGUgcGFyYW1ldGVycyB0aGF0IGRlc2NyaWJlIGFuIGFjY2VzcyBwYXRoLicKKyMgICAgICAgIHByb3BlcnR5ICduYW1lJyAoJ3BuYW0nKSAnVEVYVCcgLS0gJ1RoZSBhY3R1YWwgcGF0aCBuYW1lLicgW211dGFibGVdCisjICAgICAgICBwcm9wZXJ0eSAncmVjdXJzaXZlJyAoJ1JlY3UnKSAnYm9vbCcgLS0gJ1dpbGwgdGhlIHBhdGggYmUgc2VhcmNoZWQgcmVjdXJzaXZlbHk/ICAoRGVmYXVsdCBpcyB0cnVlKScgW211dGFibGVdCisjICAgICAgICBwcm9wZXJ0eSAnb3JpZ2luJyAoJ09yaWcnKSAnUFBybScgLS0gJycgW211dGFibGUgZW51bV0KIAogIyAgICBDbGFzcyAnUHJvamVjdEZpbGUnICgnU3JjRicpIC0tICdBIGZpbGUgY29udGFpbmVkIGluIGEgcHJvamVjdCcKICMgICAgICAgIHByb3BlcnR5ICdmaWxldHlwZScgKCdTcmNUJykgJ1NyY1QnIC0tICdXaGF0IGtpbmQgb2YgZmlsZSBpcyB0aGlzID8nIFtlbnVtXQpAQCAtODEyLDYgKzczOSwxNCBAQAogIyAgICAgICAgcHJvcGVydHkgJ3N5bWJvbHMnICgnU3ltRycpICdib29sJyAtLSAnQXJlIGRlYnVnZ2luZyBzeW1ib2xzIGdlbmVyYXRlZCBmb3IgdGhpcyBmaWxlID8nIFttdXRhYmxlXQogIyAgICAgICAgcHJvcGVydHkgJ3dlYWsgbGluaycgKCdXZWFrJykgJ2Jvb2wnIC0tICdJcyB0aGlzIGZpbGUgaW1wb3J0ZWQgd2Vha2x5IGludG8gdGhlIHByb2plY3QgPyBbUG93ZXJQQyBvbmx5XScgW211dGFibGVdCiAKLSMgICAgQ2xhc3MgJ0Z1bmN0aW9uIEluZm9ybWF0aW9uJyAoJ0ZEZWYnKSAtLSAnRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiBhbnkgZnVuY3Rpb24gb3IgZ2xvYmFsIGRhdGEgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgcHJvamVjdC4nCi0jICAgICAgICBwcm9wZXJ0eSAnZGlzayBmaWxlJyAoJ2ZpbGUnKSAnZnNzICcgLS0gJ1RoZSBsb2NhdGlvbiBvbiBkaXNrIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlZmluaXRpb24uJyBbXQotIyAgICAgICAgcHJvcGVydHkgJ2xpbmUnICgnRXJyTCcpICdsb25nJyAtLSAnVGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBkZWZpbml0aW9uIGJlZ2lucy4nIFtdCisjICAgIENsYXNzICdTZWdtZW50JyAoJ1NlZyAnKSAtLSAnQSBzZWdtZW50IG9yIGdyb3VwIGluIHRoZSBwcm9qZWN0JworIyAgICAgICAgcHJvcGVydHkgJ25hbWUnICgncG5hbScpICdURVhUJyAtLSAnJyBbbXV0YWJsZV0KKyMgICAgICAgIHByb3BlcnR5ICdmaWxlY291bnQnICgnTnVtRicpICdzaG9yJyAtLSAnJyBbXQorIyAgICAgICAgcHJvcGVydHkgJ3ByZWxvYWRlZCcgKCdQcmVsJykgJ2Jvb2wnIC0tICdJcyB0aGUgc2VnbWVudCBwcmVsb2FkZWQgPyBbNjhLIG9ubHldJyBbbXV0YWJsZV0KKyMgICAgICAgIHByb3BlcnR5ICdwcm90ZWN0ZWQnICgnUHJvdCcpICdib29sJyAtLSAnSXMgdGhlIHNlZ21lbnQgcHJvdGVjdGVkID8gWzY4SyBvbmx5XScgW211dGFibGVdCisjICAgICAgICBwcm9wZXJ0eSAnbG9ja2VkJyAoJ1BMY2snKSAnYm9vbCcgLS0gJ0lzIHRoZSBzZWdtZW50IGxvY2tlZCA/IFs2OEsgb25seV0nIFttdXRhYmxlXQorIyAgICAgICAgcHJvcGVydHkgJ3B1cmdlYWJsZScgKCdQdXJnJykgJ2Jvb2wnIC0tICdJcyB0aGUgc2VnbWVudCBwdXJnZWFibGUgPyBbNjhLIG9ubHldJyBbbXV0YWJsZV0KKyMgICAgICAgIHByb3BlcnR5ICdzeXN0ZW0gaGVhcCcgKCdTeXNIJykgJ2Jvb2wnIC0tICdJcyB0aGUgc2VnbWVudCBsb2FkZWQgaW50byB0aGUgc3lzdGVtIGhlYXAgPyBbNjhLIG9ubHldJyBbbXV0YWJsZV0KKworIyAgICBDbGFzcyAnVGFyZ2V0JyAoJ1RBUkcnKSAtLSAnQ29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9mIGEgcHJvamVjdFwzMjVzIHRhcmdldC4nCisjICAgICAgICBwcm9wZXJ0eSAnQ3VycmVudCBUYXJnZXQnICgnVEEwMScpICdURVhUJyAtLSAnVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGFyZ2V0LicgW211dGFibGVdCmRpZmYgLS1naXQgYS9NYWMvTGliL3Rvb2xib3gvUmVxdWlyZWRfU3VpdGUucHkgYi9NYWMvTGliL3Rvb2xib3gvUmVxdWlyZWRfU3VpdGUucHkKaW5kZXggOWVmMjU1ZS4uOTFlMWQyYyAxMDA2NDQKLS0tIGEvTWFjL0xpYi90b29sYm94L1JlcXVpcmVkX1N1aXRlLnB5CisrKyBiL01hYy9MaWIvdG9vbGJveC9SZXF1aXJlZF9TdWl0ZS5weQpAQCAtMjUsOSArMjUsOSBAQAogCQlfY29kZSA9ICdhZXZ0JwogCQlfc3ViY29kZSA9ICdvZG9jJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNDUsOSArNDUsOSBAQAogCQlfY29kZSA9ICdhZXZ0JwogCQlfc3ViY29kZSA9ICdwZG9jJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtNjQsOSArNjQsOSBAQAogCQlfY29kZSA9ICdhZXZ0JwogCQlfc3ViY29kZSA9ICdxdWl0JwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtODMsOSArODMsOSBAQAogCQlfY29kZSA9ICdhZXZ0JwogCQlfc3ViY29kZSA9ICdvYXBwJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpkaWZmIC0tZ2l0IGEvTWFjL0xpYi90b29sYm94L1N0YW5kYXJkX1N1aXRlLnB5IGIvTWFjL0xpYi90b29sYm94L1N0YW5kYXJkX1N1aXRlLnB5CmluZGV4IDY3OGZjOGYuLjI2ZjQyMTUgMTAwNjQ0Ci0tLSBhL01hYy9MaWIvdG9vbGJveC9TdGFuZGFyZF9TdWl0ZS5weQorKysgYi9NYWMvTGliL3Rvb2xib3gvU3RhbmRhcmRfU3VpdGUucHkKQEAgLTYxLDkgKzYxLDkgQEAKIAkJX2NvZGUgPSAnY29yZScKIAkJX3N1YmNvZGUgPSAncW9iaicKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jbGFzc19pbmZvKQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfY2xhc3NfaW5mbykKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTg4LDkgKzg4LDkgQEAKIAkJX2NvZGUgPSAnY29yZScKIAkJX3N1YmNvZGUgPSAnY2xvcycKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jbG9zZSkKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2Nsb3NlKQogCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnc2F2bycsIF9FbnVtX3Nhdm8pCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCkBAIC0xMTUsOSArMTE1LDkgQEAKIAkJX2NvZGUgPSAnY29yZScKIAkJX3N1YmNvZGUgPSAnY250ZScKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jb3VudCkKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2NvdW50KQogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtMTQxLDkgKzE0MSw5IEBACiAJCV9jb2RlID0gJ2NvcmUnCiAJCV9zdWJjb2RlID0gJ2RzaXonCiAKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfZGF0YV9zaXplKQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfZGF0YV9zaXplKQogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtMTYxLDkgKzE2MSw5IEBACiAJCV9jb2RlID0gJ2NvcmUnCiAJCV9zdWJjb2RlID0gJ2RlbG8nCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0xODcsOSArMTg3LDkgQEAKIAkJX2NvZGUgPSAnY29yZScKIAkJX3N1YmNvZGUgPSAnY2xvbicKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9kdXBsaWNhdGUpCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9kdXBsaWNhdGUpCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0yMTMsOSArMjEzLDkgQEAKIAkJX2NvZGUgPSAnY29yZScKIAkJX3N1YmNvZGUgPSAnZ3RlaScKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9ldmVudF9pbmZvKQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfZXZlbnRfaW5mbykKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTIzNCw5ICsyMzQsOSBAQAogCQlfY29kZSA9ICdjb3JlJwogCQlfc3ViY29kZSA9ICdkb2V4JwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtMjY1LDkgKzI2NSw5IEBACiAJCV9jb2RlID0gJ2NvcmUnCiAJCV9zdWJjb2RlID0gJ2NyZWwnCiAKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfbWFrZSkKIAkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwogCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX21ha2UpCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0yOTEsOSArMjkxLDkgQEAKIAkJX2NvZGUgPSAnY29yZScKIAkJX3N1YmNvZGUgPSAnbW92ZScKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9tb3ZlKQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfbW92ZSkKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKQEAgLTMxMSw5ICszMTEsOSBAQAogCQlfY29kZSA9ICdhZXZ0JwogCQlfc3ViY29kZSA9ICdvZG9jJwogCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKIAotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQpAQCAtMzMxLDkgKzMzMSw5IEBACiAJCV9jb2RlID0gJ2FldnQnCiAJCV9zdWJjb2RlID0gJ3Bkb2MnCiAKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC0zNTUsOSArMzU1LDkgQEAKIAkJX2NvZGUgPSAnYWV2dCcKIAkJX3N1YmNvZGUgPSAncXVpdCcKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9xdWl0KQogCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfcXVpdCkKIAkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ3Nhdm8nLCBfRW51bV9zYXZvKQogCiAJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLApAQCAtMzgzLDkgKzM4Myw5IEBACiAJCV9jb2RlID0gJ2NvcmUnCiAJCV9zdWJjb2RlID0gJ3NhdmUnCiAKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc2F2ZSkKIAkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAogCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3NhdmUpCiAKIAkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCiAJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCkBAIC00MDksOSArNDA5LDkgQEAKIAkJX2NvZGUgPSAnY29yZScKIAkJX3N1YmNvZGUgPSAnZ3RzaScKIAorCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zdWl0ZV9pbmZvKQogCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CiAKLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc3VpdGVfaW5mbykKIAogCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKIAkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKZGlmZiAtLWdpdCBhL01hYy9zY3JpcHRzL2dlbnN1aXRlbW9kdWxlLnB5IGIvTWFjL3NjcmlwdHMvZ2Vuc3VpdGVtb2R1bGUucHkKaW5kZXggY2Q5NDcyNS4uYTJlMjJlMCAxMDA2NDQKLS0tIGEvTWFjL3NjcmlwdHMvZ2Vuc3VpdGVtb2R1bGUucHkKKysrIGIvTWFjL3NjcmlwdHMvZ2Vuc3VpdGVtb2R1bGUucHkKQEAgLTMxMSw2ICszMTEsMTYgQEAKIAkjCiAJZnAud3JpdGUoIlx0XHRfY29kZSA9ICVzXG4iJSBgY29kZWApCiAJZnAud3JpdGUoIlx0XHRfc3ViY29kZSA9ICVzXG5cbiIlIGBzdWJjb2RlYCkKKwkjCisJIyBEbyBrZXl3b3JkIG5hbWUgc3Vic3RpdHV0aW9uCisJIworCWlmIGFyZ3VtZW50czoKKwkJZnAud3JpdGUoIlx0XHRhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF8lcylcbiIlZnVuY25hbWUpCisJZWxzZToKKwkJZnAud3JpdGUoIlx0XHRpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJ1xuIikKKwkjCisJIyBTdHVmZiByZXF1aXJlZCBhcmcgKGlmIHRoZXJlIGlzIG9uZSkgaW50byBhcmd1bWVudHMKKwkjCiAJaWYgaGFzX2FyZzoKIAkJZnAud3JpdGUoIlx0XHRfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0XG4iKQogCWVsaWYgb3B0X2FyZzoKQEAgLTMyMCwxMiArMzMwLDggQEAKIAkJZnAud3JpdGUoIlx0XHRpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnXG4iKQogCWZwLndyaXRlKCJcbiIpCiAJIwotCSMgRG8ga2V5IHN1YnN0aXR1dGlvbgorCSMgRG8gZW51bS1uYW1lIHN1YnN0aXR1dGlvbgogCSMKLQlpZiBhcmd1bWVudHM6Ci0JCWZwLndyaXRlKCJcdFx0YWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfJXMpXG4iJWZ1bmNuYW1lKQotCWVsc2U6Ci0JCWZwLndyaXRlKCJcdFx0aWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCdcbiIpCiAJZm9yIGEgaW4gYXJndW1lbnRzOgogCQlpZiBpc19lbnVtKGFbMl0pOgogCQkJa25hbWUgPSBhWzFdCg==