LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIENPTVBJTEVSIENPTVBPTkVOVFMgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWIE0gUyBfIEQgQSBUIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIHAgZSBjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIEdOQVQgaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gIHJlZGlzdHJpYnV0ZSBpdCAgYW5kL29yIG1vZGlmeSBpdCB1bmRlciAtLQotLSB0ZXJtcyBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCAgYnkgdGhlIEZyZWUgU29mdC0gLS0KLS0gd2FyZSAgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIsICBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXItIC0tCi0tIHNpb24uICBHTkFUIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRILSAtLQotLSBPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSAgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgLS0KLS0gb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIC0tCi0tIGZvciAgbW9yZSBkZXRhaWxzLiAgWW91IHNob3VsZCBoYXZlICByZWNlaXZlZCAgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCAtLQotLSBQdWJsaWMgTGljZW5zZSAgZGlzdHJpYnV0ZWQgd2l0aCBHTkFUOyAgc2VlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgLS0KLS0gdG8gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsICBCb3N0b24sIC0tCi0tIE1BIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gR05BVCB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgIGJ5IHRoZSBHTkFUIHRlYW0gYXQgIE5ldyBZb3JrIFVuaXZlcnNpdHkuIC0tCi0tIEV4dGVuc2l2ZSBjb250cmlidXRpb25zIHdlcmUgcHJvdmlkZWQgYnkgQWRhIENvcmUgVGVjaG5vbG9naWVzIEluYy4gICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotLSAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zLCBmb3IgZWFjaCBvZiB0aGUgY29tbWFuZCBvZiB0aGUgR05BVCBkcml2ZXIsIG9uZQotLSAgY29uc3RhbnQgYXJyYXk7IGVhY2ggY29tcG9uZW50IG9mIHRoaXMgYXJyYXkgaXMgYSBzdHJpbmcgdGhhdCBkZWZpbmVzLAotLSAgaW4gY29kZWQgZm9ybSBhcyBleHBsYWluZWQgYmVsb3csIHRoZSBjb252ZXJzaW9uIG9mIGEgVk1TIHF1YWxpZmllciBvZiB0aGUKLS0gIGNvbW1hbmQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3dpdGNoIG9mIHRoZSBHTkFUIHRvb2wgY29ycmVzcG9uZGluZyB0byB0aGUKLS0gIGNvbW1hbmQuCgotLSAgVGhpcyBwYWNrYWdlIGlzIHVzZWQgYnkgdGhlIEdOQVQgZHJpdmVyIHRvIGludm9rZXMgdGhlIEdOQVQgdG9vbHMgd2l0aCB0aGUKLS0gIHN3aXRjaGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFZNUyBxdWFsaWZpZXIgYW5kIGJ5IHRoZSBQcm9qZWN0IE1hbmFnZXIgdG8KLS0gIGNvbnZlcnQgVk1TIHF1YWxpZmllcnMgaW4gcHJvamVjdCBmaWxlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIHN3aXRjaAotLSAgdmFsdWVzLgoKLS0gIFRoaXMgcGFja2FnZSBpcyBhbHNvIGFuIGlucHV0IHRvIHRoZSB0b29sIHRoYXQgZ2VuZXJhdGVzIHRoZSBWTVMgR05BVAotLSAgaGVscCBpbmZvcm1hdGlvbiBhdXRvbWF0aWNhbGx5LgoKLS0gIE5PVEU6IHRoZSBmb3JtYXQgb2YgdGhpcyBwYWNrYWdlIG11c3QgZm9sbG93IHRoZSBmb2xsb3dpbmcgcnVsZXMsIHNvIHRoYXQKLS0gICAgICAgIHRoZSBWTVMgR05BVCBoZWxwIHRvb2wgd29ya3MgcHJvcGVybHk6CgotLSAgICAtIEVhY2ggY29tbWFuZCB6b25lICh3aGVyZSB0aGUgZXZlbnR1YWwgcXVhbGlmaWVycyBhcmUgZGVjbGFyZWQgbXVzdAotLSAgICAgIGJlZ2luIHdpdGggYSBib3hlZCBjb21tZW50IG9mIHRoZSBmb3JtOgoKLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gICAgICAtLSBTd2l0Y2hlcyBmb3IgR05BVCA8Q09NTUFORD4gLS0KLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tICAgICAgd2hlcmUgPENPTU1BTkQ+IGlzIHRoZSBuYW1lIG9mIGEgR05BVCBjb21tYW5kIGluIGNhcGl0YWwgbGV0dGVycywgZm9yCi0tICAgICAgZXhhbXBsZSBCSU5ELCBDT01QSUxFLCBYUkVGLCAuLi4KCi0tICAgIC0gZWFjaCBxdWFsaWZpZXIgZGVjbGFyYXRpb24gbXVzdCBiZSBmb2xsb3dlZCBlaXRoZXIgYnkKLS0gICAgICAgICAtIGEgY29tbWVudCBzdGFydGluZyB3aXRoICItLSAgTk9ET0MiLCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzCi0tICAgICAgICAgICBubyBkb2N1bWVudGF0aW9uIGZvciB0aGlzIHF1YWxpZmllciwgb3IKLS0gICAgICAgICAtIGEgY29udGlndW91cyBzZXF1ZW5jZSBvZiBjb21tZW50cyB0aGF0IGNvbnN0aXR1dGUgdGhlCi0tICAgICAgICAgICBkb2N1bWVudGF0aW9uIG9mIHRoZSBxdWFsaWZpZXIuCgotLSAgICAtIGVhY2ggY29tbWFuZCB6b25lIGVuZHMgd2l0aCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGNvbnRhbnQgYXJyYXkKLS0gICAgICBmb3IgdGhlIGNvbW1hbmQsIG9mIHRoZSBmb3JtOgoKLS0gICAgICA8Q29tbWFuZD5fX1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyA6PQoKcGFja2FnZSBWTVNfRGF0YSBpcwoKICAgLS0tLS0tLS0tLS0tLS0tLQogICAtLSBRVUFMSUZJRVJTIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0KCiAgIC0tICBUaGUgc3ludGF4IG9mIGEgcXVhbGlmaWVyIGRlbGFyYXRpb24gaXMgYXMgZm9sbG93czoKCiAgIC0tICAgIFNXSVRDSF9TVFJJTkcgOjo9ICIvIGNvbW1hbmQtcXVhbGlmaWVyLW5hbWUgVFJBTlNMQVRJT04iCgogICAtLSAgICBUUkFOU0xBVElPTiA6Oj0KICAgLS0gICAgICBESVJFQ1RfVFJBTlNMQVRJT04KICAgLS0gICAgfCBESVJFQ1RPUklFU19UUkFOU0xBVElPTgogICAtLSAgICB8IEZJTEVfVFJBTlNMQVRJT04KICAgLS0gICAgfCBOT19TUEFDRV9GSUxFX1RSQU5TTAogICAtLSAgICB8IE5VTUVSSUNfVFJBTlNMQVRJT04KICAgLS0gICAgfCBTVFJJTkdfVFJBTlNMQVRJT04KICAgLS0gICAgfCBPUFRJT05TX1RSQU5TTEFUSU9OCiAgIC0tICAgIHwgQ09NTUFORFNfVFJBTlNMQVRJT04KICAgLS0gICAgfCBBTFBIQU5VTVBMVVNfVFJBTlNMQVRJT04KICAgLS0gICAgfCBPVEhFUl9UUkFOU0xBVElPTgoKICAgLS0gICAgRElSRUNUX1RSQU5TTEFUSU9OICAgICAgIDo6PSBzcGFjZSBVTklYX1NXSVRDSEVTCiAgIC0tICAgIERJUkVDVE9SSUVTX1RSQU5TTEFUSU9OICA6Oj0gPSogVU5JWF9TV0lUQ0ggKgogICAtLSAgICBESVJFQ1RPUllfVFJBTlNMQVRJT04gICAgOjo9ID0lIFVOSVhfU1dJVENIICUKICAgLS0gICAgRklMRV9UUkFOU0xBVElPTiAgICAgICAgIDo6PSA9QCBVTklYX1NXSVRDSCBACiAgIC0tICAgIE5PX1NQQUNFX0ZJTEVfVFJBTlNMICAgICA6Oj0gPTwgVU5JWF9TV0lUQ0ggPgogICAtLSAgICBOVU1FUklDX1RSQU5TTEFUSU9OICAgICAgOjo9ID0jIFVOSVhfU1dJVENIICMgfCAjIG51bWJlciAjCiAgIC0tICAgIFNUUklOR19UUkFOU0xBVElPTiAgICAgICA6Oj0gPSIgVU5JWF9TV0lUQ0ggIgogICAtLSAgICBPUFRJT05TX1RSQU5TTEFUSU9OICAgICAgOjo9ID1PUFRJT04ge3NwYWNlIE9QVElPTn0KICAgLS0gICAgQ09NTUFORFNfVFJBTlNMQVRJT04gICAgIDo6PSA9PyBBUkdTIHNwYWNlIGNvbW1hbmQtbmFtZQogICAtLSAgICBBTFBIQU5VTVBMVVNfVFJBTlNMQVRJT04gOjo9ID18IFVOSVhfU1dJVENIIHwKCiAgIC0tICAgIFVOSVhfU1dJVENIRVMgOjo9IFVOSVhfU1dJVENIIHssIFVOSVhfU1dJVENIfQoKICAgLS0gICAgVU5JWF9TV0lUQ0ggOjo9IHVuaXgtc3dpdGNoLXN0cmluZyB8ICF1bml4LXN3aXRjaC1zdHJpbmcgfCBgc3RyaW5nJwoKICAgLS0gICAgT1BUSU9OIDo6PSBvcHRpb24tbmFtZSBzcGFjZSBVTklYX1NXSVRDSEVTCgogICAtLSAgICBBUkdTIDo6PSAtY2FyZ3MgfCAtYmFyZ3MgfCAtbGFyZ3MKCiAgIC0tICBIZXJlIGNvbW1hbmQtcXVhbCBpcyB0aGUgbmFtZSBvZiB0aGUgc3dpdGNoIHJlY29nbml6ZWQgYnkgdGhlIEdOQVRDbWQuCiAgIC0tICBUaGlzIGlzIGFsd2F5cyBnaXZlbiBpbiB1cHBlciBjYXNlIGluIHRoZSB0ZW1wbGF0ZXMsIGFsdGhvdWdoIGluIHRoZQogICAtLSAgYWN0dWFsIGNvbW1hbmRzLCBlaXRoZXIgdXBwZXIgb3IgbG93ZXIgY2FzZSBpcyBhbGxvd2VkLgoKICAgLS0gIFRoZSB1bml4LXN3aXRjaC1zdHJpbmcgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbWludXMsIGFuZCBoYXMgbm8gY29tbWFzCiAgIC0tICBvciBzcGFjZXMgaW4gaXQuIENhc2UgaXMgc2lnbmlmaWNhbnQgaW4gdGhlIHVuaXggc3dpdGNoIHN0cmluZy4gSWYgYQogICAtLSAgdW5peCBzd2l0Y2ggc3RyaW5nIGlzIHByZWNlZGVkIGJ5IHRoZSBub3Qgc2lnbiAoISkgaXQgbWVhbnMgdGhhdCB0aGUKICAgLS0gIGVmZmVjdCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb21tYW5kIHF1YWxpZmVyIGlzIHRvIHJlbW92ZSBhbnkgcHJldmlvdXMKICAgLS0gIG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHN3aXRjaCBpbiB0aGUgY29tbWFuZCBsaW5lLgoKICAgLS0gIFRoZSBESVJFQ1RPUklFU19UUkFOU0xBVElPTiBmb3JtYXQgaXMgdXNlZCB3aGVyZSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMKICAgLS0gIGlzIGdpdmVuLiBUaGlzIHBvc3NpYmxlIGNvcnJlc3BvbmRpbmcgZm9ybWF0cyByZWNvZ25pemVkIGJ5IEdOQVRDbWQgYXJlCiAgIC0tICBhcyBzaG93biBieSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgZm9yIHRoZSBjYXNlIG9mIFBBVEgKCiAgIC0tICAgIFBBVEg9ZGlyZWMKICAgLS0gICAgUEFUSD0oZGlyZWMsZGlyZWMsZGlyZWMsZGlyZWMpCgogICAtLSAgV2hlbiBtb3JlIHRoYW4gb25lIGRpcmVjdG9yeSBpcyBwcmVzZW50IGZvciB0aGUgRElSRUNUT1JJRVMgY2FzZSwgdGhlbgogICAtLSAgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBjb3JyZXNwb25kaW5nIHVuaXggc3dpdGNoIGFyZSBnZW5lcmF0ZWQsCiAgIC0tICB3aXRoIHRoZSBmaWxlIG5hbWUgYmVpbmcgc3Vic3RpdHV0ZWQgZm9yIHRoZSBvY2N1cnJlbmNlIG9mICouCgogICAtLSAgVGhlIEZJTEVfVFJBTlNMQVRJT04gZm9ybWF0IGlzIHNpbWlsYXIgZXhjZXB0IHRoYXQgb25seSBhIHNpbmdsZQogICAtLSAgZmlsZSBpcyBhbGxvd2VkLCBub3QgYSBsaXN0IG9mIGZpbGVzLCBhbmQgb25seSBvbmUgdW5peCBzd2l0Y2ggaXMKICAgLS0gIGdlbmVyYXRlZCBhcyBhIHJlc3VsdC4KCiAgIC0tICB0aGUgTk9fU1BBQ0VfRklMRV9UUkFOU0wgaXMgc2ltaWxhciB0byBGSUxFX1RSQU5TTEFUSU9OLCBleGNlcHQgdGhhdAogICAtLSAgbm8gc3BhY2UgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgc3dpdGNoIGFuZCB0aGUgZmlsZSBuYW1lLgoKICAgLS0gIFRoZSBOVU1FUklDX1RSQU5TTEFUSU9OIGZvcm1hdCBpcyBzaW1pbGFyIHRvIHRoZSBGSUxFX1RSQU5TTEFUSU9OIGNhc2UKICAgLS0gIGV4Y2VwdCB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgYSBkZWNpbWFsIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gOTk5LgoKICAgLS0gIEZvciB0aGUgT1BUSU9OU19UUkFOU0xBVElPTiBjYXNlLCBHTkFUQ21kIHNpbWlsYXJseSBwZXJtaXRzIG9uZSBvcgogICAtLSAgbW9yZSBvcHRpb25zIHRvIGFwcGVhciAoYWx0aG91Z2ggb25seSBpbiBzb21lIGNhc2VzIGRvZXMgdGhlIHVzZSBvZgogICAtLSAgbXVsdGlwbGUgb3B0aW9ucyBtYWtlIGxvZ2ljYWwgc2Vuc2UpLiBGb3IgZXhhbXBsZSwgdGFraW5nIHRoZQogICAtLSAgY2FzZSBvZiBFUlJPUlMgZm9yIEdDQywgdGhlIGZvbGxvd2luZyBhcmUgYWxsIGFsbG93ZWQ6CgogICAtLSAgICAvRVJST1JTPUJSSUVGCiAgIC0tICAgIC9FUlJPUlM9KEZVTEwsVkVSQk9TRSkKICAgLS0gICAgL0VSUk9SUz0oQlJJRUYgSU1NRURJQVRFKQoKICAgLS0gIElmIG5vIG9wdGlvbiBpcyBwcm92aWRlZCAoZS5nLiBqdXN0IC9FUlJPUlMgaXMgd3JpdHRlbiksIHRoZW4gdGhlCiAgIC0tICBmaXJzdCBvcHRpb24gaW4gdGhlIGxpc3QgaXMgdGhlIGRlZmF1bHQgb3B0aW9uLiBGb3IgL0VSUk9SUyB0aGlzCiAgIC0tICBpcyBOT1JNQUwsIHNvIC9FUlJPUlMgd2l0aCBubyBvcHRpb24gaXMgZXF1aXZhbGVudCB0byAvRVJST1JTPU5PUk1BTC4KCiAgIC0tICBUaGUgQ09NTUFORFNfVFJBTlNMQVRJT04gY2FzZSBpcyBvbmx5IHVzZWQgZm9yIGduYXRtYWtlLCB0byBjb3JyZXNwb25kCiAgIC0tICB0byB0aGUgdXNlIG9mIC1jYXJncywgLWJhcmdzIGFuZCAtbGFyZ3MgKHRoZSBBUkdTIHN0cmluZyBhcyBpbmRpY2F0ZWQKICAgLS0gIGlzIG9uZSBvZiB0aGVzZSB0aHJlZSBwb3NzaWJpbGl0aWVzKS4gVGhlIG5hbWUgZ2l2ZW4gYnkgQ09NTUFORCBpcyB0aGUKICAgLS0gIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBuYW1lIHRvIGJlIHVzZWQgdG8gaW50ZXJwcmV0ZSB0aGUgc3dpdGNoZXMgdG8gYmUKICAgLS0gIHBhc3NlZCBvbi4gU3dpdGNoZXMgb2YgdGhpcyB0eXBlIHNldCBtb2RlcywgZS5nLiAvQ09NUElMRVJfUVVBTElGSUVSUwogICAtLSAgc2V0cyB0aGUgbW9kZSBzbyB0aGF0IGFsbCBzdWJzZXF1ZW50IHN3aXRjaGVzLCB1cCB0byBhbm90aGVyIHN3aXRjaAogICAtLSAgd2l0aCBDT01NQU5EU19UUkFOU0xBVElPTiBhcHBseSB0byB0aGUgY29ycmVzcG9uZGluZyBjb21tYW5kcyBpc3N1ZWQKICAgLS0gIGJ5IHRoZSBtYWtlIHV0aWxpdHkuIEZvciBleGFtcGxlCgogICAtLSAgICAvQ09NUElMRVJfUVVBTElGSUVSUyAvTElTVCAvQklOREVSX1FVQUxJRklFUlMgL01BSU4KICAgLS0gICAgL0NPTVBJTEVSX1FVQUxJRklFUlMgL05PTElTVCAvQ09NUElMRV9DSEVDS1M9U1lOVEFYCgogICAtLSAgQ2xlYXJseSB0aGVzZSBzd2l0Y2hlcyBtdXN0IGNvbWUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBzd2l0Y2hlcwogICAtLSAgc2luY2UgYWxsIHN1YnNlcXVlbnQgc3dpdGNoZXMgYXBwbHkgdG8gYW4gaXNzdWVkIGNvbW1hbmQuCgogICAtLSAgRm9yIHRoZSBESVJFQ1RfVFJBTlNMQVRJT04gY2FzZSwgYW4gaW1wbGljaXQgYWRkaXRpb25hbCBxdWFsaWZpZXIKICAgLS0gIGRlY2xhcmF0aW9uIGlzIGNyZWF0ZWQgYnkgcHJlcGVuZGluZyBOTyB0byB0aGUgbmFtZSBvZiB0aGUgcXVhbGlmZXIsCiAgIC0tICBhbmQgdGhlbiBpbnZlcnRpbmcgdGhlIHNlbnNlIG9mIHRoZSBVTklYX1NXSVRDSEVTIHN0cmluZy4gRm9yIGV4YW1wbGUsCiAgIC0tICBnaXZlbiB0aGUgcXVhbGlmaWVyIGRlZmluaXRpb246CgogICAtLSAgICAgIi9MSVNUIC1nbmF0bCIKCiAgIC0tICBBbiBpbXBsaWNpdCBxdWFsaWZpZXIgZGVmaW5pdGlvbiBpcyBjcmVhdGVkOgoKICAgLS0gICAgICIvTk9MSVNUICEtZ25hdGwiCgogICAtLSAgSW4gdGhlIGNhc2Ugd2hlcmUsIGEgISBpcyBhbHJlYWR5IHByZXNlbnQsIGludmVydGluZyB0aGUgc2Vuc2Ugb2YgdGhlCiAgIC0tICBzd2l0Y2ggbWVhbnMgcmVtb3ZpbmcgaXQuCgogICBzdWJ0eXBlIFMgaXMgU3RyaW5nOwogICAtLSAgQSBzeW5vbnltIHRvIHNob3J0ZW4gdGhlIHRhYmxlCgogICB0eXBlIFN0cmluZ19QdHIgaXMgYWNjZXNzIGNvbnN0YW50IFN0cmluZzsKICAgLS0gIFN0cmluZyBwb2ludGVyIHR5cGUgdXNlZCB0aHJvdWdob3V0CgogICB0eXBlIFN3aXRjaGVzIGlzIGFycmF5IChOYXR1cmFsIHJhbmdlIDw+KSBvZiBTdHJpbmdfUHRyOwogICAtLSAgVHlwZSB1c2VkIGZvciBhcnJheSBvZiBzd3RpY2hlcwoKICAgdHlwZSBTd2l0Y2hlc19QdHIgaXMgYWNjZXNzIGNvbnN0YW50IFN3aXRjaGVzOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBCSU5EIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfQmluZF9CaW5kICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQklORF9GSUxFPSIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQURBICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQSAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkMgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUMiOwogICAtLSAgICAgICAgL0JJTkRfRklMRVs9YmluZC1maWxlLW9wdGlvbl0KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIGxhbmd1YWdlIG9mIHRoZSBiaW5kZXIgZ2VuZXJhdGVkIGZpbGUuCiAgIC0tCiAgIC0tICAgICAgICBBREEgKEQpICAgIEJpbmRlciBmaWxlIGlzIEFkYS4KICAgLS0KICAgLS0gICAgICAgIEMgICAgICAgICAgQmluZGVyIGZpbGUgaXMgJ0MnLgoKICAgU19CaW5kX0J1aWxkICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9CVUlMRF9MSUJSQVJZPXwiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItTHwiOwogICAtLSAgICAgICAgL0JVSUxEX0xJQlJBUlk9eHh4CiAgIC0tCiAgIC0tICAgICAgICBCaW5kcyB0aGUgdW5pdHMgZm9yIGxpYnJhcnkgYnVpbGRpbmcuIEluIHRoaXMgY2FzZSB0aGUgYWRhaW5pdCBhbmQKICAgLS0gICAgICAgIGFkYWZpbmFsIHByb2NlZHVyZXMgYXJlIHJlbmFtZSB0byB4eHhpbml0IGFuZCB4eHhmaW5hbC4gSW1wbGllcwogICAtLSAgICAgICAgL05PTUFJTi4KCiAgIFNfQmluZF9DdXJyZW50IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQ1VSUkVOVF9ESVJFQ1RPUlkgIiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1JLSI7CiAgIC0tICAgICAgICAvQ1VSUkVOVF9ESVJFQ1RPUlkgKEQpCiAgIC0tICAgICAgICAvTk9DVVJSRU5UX0RJUkVDVE9SWQogICAtLQogICAtLSAgICAgICAgTG9vayBmb3Igc291cmNlLCBsaWJyYXJ5IG9yIG9iamVjdCBmaWxlcyBpbiB0aGUgZGVmYXVsdCBkaXJlY3RvcnkuCgogICBTX0JpbmRfRGVidWcgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0RFQlVHPSIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRSQUNFQkFDSyAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWcyICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBTEwgIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nMyAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9ORSAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZzAgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNZTUJPTFMgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWcxICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT1NZTUJPTFMgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtZzEgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTElOSyAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZzMgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PVFJBQ0VCQUNLICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1nMiI7CiAgIC0tICAgICAgICAvREVCVUdbPWRlYnVnLWxldmVsXQogICAtLSAgICAgICAgL05PREVCVUcKICAgLS0KICAgLS0gICAgU3BlY2lmeSBsZXZlbCBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGZvciB0aGUgZWxhYm9yYXRpb24KICAgLS0gICAgcm91dGluZS4gIFNlZSBjb3JyZXNwb25kaW5nIHF1YWxpZmllciBmb3IgR05BVCBDT01QSUxFLgoKICAgU19CaW5kX0RlYnVnWCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT0RFQlVHICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLWciOwogICAtLSAgTk9ET0MgIChzZWUgL0RFQlVHKQoKICAgU19CaW5kX0VsYWIgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9FTEFCT1JBVElPTl9ERVBFTkRFTkNJRVMgIiAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZSI7CiAgIC0tICAgICAgICAvRUxBQk9SQVRJT05fREVQRU5ERU5DSUVTCiAgIC0tICAgICAgICAvTk9FTEFCT1JBVElPTl9ERVBFTkRFTkNJRVMgKEQpCiAgIC0tCiAgIC0tICAgT3V0cHV0IGNvbXBsZXRlIGxpc3Qgb2YgZWxhYm9yYXRpb24tb3JkZXIgZGVwZW5kZW5jaWVzLCBzaG93aW5nIHRoZQogICAtLSAgIHJlYXNvbiBmb3IgZWFjaCBkZXBlbmRlbmN5LiBUaGlzIG91dHB1dCBjYW4gYmUgcmF0aGVyIGV4dGVuc2l2ZSBidXQgbWF5CiAgIC0tICAgYmUgdXNlZnVsIGluIGRpYWdub3NpbmcgcHJvYmxlbXMgd2l0aCBlbGFib3JhdGlvbiBvcmRlci4gVGhlIG91dHB1dCBpcwogICAtLSAgIHdyaXR0ZW4gdG8gU1lTJE9VVFBVVC4KCiAgIFNfQmluZF9FcnJvciAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRVJST1JfTElNSVQ9IyIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW0jIjsKICAgLS0gICAgICAgIC9FUlJPUl9MSU1JVD1ubm4KICAgLS0KICAgLS0gICBMaW1pdCBudW1iZXIgb2YgZGV0ZWN0ZWQgZXJyb3JzIHRvIG5ubiAoMS05OTk5OTkpLgoKICAgU19CaW5kX0V4dCAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9FWFRFUk5BTF9SRUZFUkVOQ0U9IiAmICciJyAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItWCIgJiAnIic7CiAgIC0tICAgICAgIC9FWFRFUk5BTF9SRUZFUkVOQ0U9Im5hbWU9dmFsIgogICAtLQogICAtLSAgIFNwZWNpZmllcyBhbiBleHRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIHByb2plY3QgbWFuYWdlci4gVXNlZnVsIG9ubHkgaWYKICAgLS0gICAvUFJPSkVDVF9GSUxFIGlzIHVzZWQuCiAgIC0tCiAgIC0tICAgRXhhbXBsZToKICAgLS0gICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJERUJVRz1UUlVFIgoKICAgU19CaW5kX0ZvcmNlICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9GT1JDRV9FTEFCX0ZMQUdTICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItRiI7CiAgIC0tICAgICAgICAvTk9GT1JDRV9FTEFCX0ZMQUdTIChEKQogICAtLSAgICAgICAgL0ZPUkNFX0VMQUJfRkxBR1MKICAgLS0KICAgLS0gICAgRm9yY2UgY2hlY2tpbmcgb2YgZWxhYm9yYXRpb24gRmxhZ3MKCiAgIFNfQmluZF9IZWxwICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvSEVMUCAiICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWgiOwogICAtLSAgICAgICAgL0hFTFAKICAgLS0KICAgLS0gICBPdXRwdXQgdXNhZ2UgaW5mb3JtYXRpb24uCgogICBTX0JpbmRfSW5pdCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0lOSVRJQUxJWkVfU0NBTEFSUz0iICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklOVkFMSUQgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVNpbiAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMT1cgIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1TbG8gIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSElHSCAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItU2hpIjsKICAgLS0gICAgICAgIC9JTklUSUFMSVpFX1NDQUxBUlNbPXNjYWxhci1vcHRpb25dCiAgIC0tCiAgIC0tICAgSW5kaWNhdGUgaG93IHVuaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcyBmb3Igd2hpY2ggYSBwcmFnbWEKICAgLS0gICBJbml0aWFsaXplX1NjYWxhcnMgYXBwbGllcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuCiAgIC0tICAgc2NhbGFyLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgSU5WQUxJRCAoRCkgIEluaXRpYWxpemUgd2l0aCBhbiBpbnZhbGlkIHZhbHVlLgogICAtLSAgICAgIExPVyAgICAgICAgICBJbml0aWFsaXplIHdpdGggdGhlIGxvd2VzdCB2YWxpZCB2YWx1ZSBvZiB0aGUgc3VidHlwZS4KICAgLS0gICAgICBISUdIICAgICAgICAgSW5pdGlhbGl6ZSB3aXRoIHRoZSBoaWdoZXN0IHZhbGlkIHZhbHVlIG9mIHRoZSBzdWJ0eXBlLgoKICAgU19CaW5kX0xpYnJhcnkgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9MSUJSQVJZX1NFQVJDSD0qIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYU8qIjsKICAgLS0gICAgICAgIC9MSUJSQVJZX1NFQVJDSD0oZGlyZWNbLC4uLl0pCiAgIC0tCiAgIC0tICAgICAgICBXaGVuIGxvb2tpbmcgZm9yIGxpYnJhcnkgYW5kIG9iamVjdCBmaWxlcyBsb29rIGFsc28gaW4gZGlyZWN0b3JpZXMKICAgLS0gICAgICAgIHNwZWNpZmllZC4KCiAgIFNfQmluZF9MaW5rZXIgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTElOS0VSX09QVElPTl9MSVNUICIgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUsiOwogICAtLSAgICAgICAgL05PTElOS0VSX09QVElPTl9MSVNUIChEKQogICAtLSAgICAgICAgL0xJTktFUl9PUFRJT05fTElTVAogICAtLQogICAtLSAgICAgICAgT3V0cHV0IGxpbmtlciBvcHRpb25zIHRvIFNZUyRPVVRQVVQuICBJbmNsdWRlcyBsaWJyYXJ5IHNlYXJjaAogICAtLSAgICAgICAgcGF0aHMsIGNvbnRlbnRzIG9mIHByYWdtYXMgSWRlbnQgYW5kIExpbmtlcl9PcHRpb25zLCBhbmQKICAgLS0gICAgICAgIGxpYnJhcmllcyBhZGRlZCBieSBHTkFUIEJJTkQuCgogICBTX0JpbmRfTWFpbiAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL01BSU4gIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtbiI7CiAgIC0tICAgICAgICAvTUFJTiAoRCkKICAgLS0KICAgLS0gICBUaGUgbWFpbiBwcm9ncmFtIGlzIGluIEFkYS4KICAgLS0KICAgLS0gICAgICAgIC9OT01BSU4KICAgLS0KICAgLS0gICBUaGUgbWFpbiBwcm9ncmFtIGlzIG5vdCBpbiBBZGEuCgogICBTX0JpbmRfTWVzcyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL01FU1NBR0VTX1BST0pFQ1RfRklMRT0iICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFRkFVTFQgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNRURJVU0gIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDEgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSElHSCAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAyIjsKICAgLS0gICAgICAgIC9NRVNTQUdFU19QUk9KRUNUX0ZJTEVbPW1lc3NhZ2VzLW9wdGlvbl0KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlICJ2ZXJib3NpdHkiIG9mIHRoZSBwYXJzaW5nIG9mIHByb2plY3QgZmlsZXMuCiAgIC0tICAgbWVzc2FnZXMtb3B0aW9uIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgICBERUZBVUxUIChEKSAgTm8gbWVzc2FnZXMgYXJlIG91dHB1dCBpZiB0aGVyZSBpcyBubyBlcnJvciBvciB3YXJuaW5nLgogICAtLQogICAtLSAgICAgIE1FRElVTSAgICAgICBBIHNtYWxsIG51bWJlciBvZiBtZXNzYWdlcyBhcmUgb3V0cHV0LgogICAtLQogICAtLSAgICAgIEhJR0ggICAgICAgICBBIGdyZWF0IG51bWJlciBvZiBtZXNzYWdlcyBhcmUgb3V0cHV0LCBtb3N0IG9mIHRoZW0gbm90CiAgIC0tICAgICAgICAgICAgICAgICAgIGJlaW5nIHVzZWZ1bCBmb3IgdGhlIHVzZXIuCgogICBTX0JpbmRfTm9zdGluYyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PU1REX0lOQ0xVREVTICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1ub3N0ZGluYyI7CiAgIC0tICAgICAgICAvTk9TVERfSU5DTFVERVMKICAgLS0KICAgLS0gICAgRG8gbm90IGxvb2sgZm9yIHNvdXJjZXMgdGhlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBkaXJlY3RvcnkuCgogICBTX0JpbmRfTm9zdGxpYiA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PU1REX0xJQlJBUklFUyAiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1ub3N0ZGxpYiI7CiAgIC0tICAgICAgICAvTk9TVERfTElCUkFSSUVTCiAgIC0tCiAgIC0tICAgIERvIG5vdCBsb29rIGZvciBsaWJyYXJ5IGZpbGVzIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBkaXJlY3RvcnkuCgogICBTX0JpbmRfTm9fVGltZSA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PX1RJTUVfU1RBTVBfQ0hFQ0sgIiAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi10IjsKICAgLS0gIE5PRE9DIChzZWUgL1RJTUVfU1RBTVBfQ0hFQ0spCgogICBTX0JpbmRfT2JqZWN0ICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL09CSkVDVF9MSVNUICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1PIjsKICAgLS0gICAgICAgIC9OT09CSkVDVF9MSVNUIChEKQogICAtLSAgICAgICAgL09CSkVDVF9MSVNUCiAgIC0tCiAgIC0tICAgIE91dHB1dCBmdWxsIG5hbWVzIG9mIGFsbCB0aGUgb2JqZWN0IGZpbGVzIHRoYXQgbXVzdCBiZSBsaW5rZXIgdG8KICAgLS0gICAgcHJvdmlkZSB0aGUgQWRhIGNvbXBvbmVudCBvZiB0aGUgcHJvZ3JhbS4gVGhlIG91dHB1dCBpcyB3cml0dGVuIHRvCiAgIC0tICAgIFNZUyRPVVRQVVQuCgogICBTX0JpbmRfT3JkZXIgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL09SREVSX09GX0VMQUJPUkFUSU9OICIgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1sIjsKICAgLS0gICAgICAgIC9OT09SREVSX09GX0VMQUJPUkFUSU9OIChEKQogICAtLSAgICAgICAgL09SREVSX09GX0VMQUJPUkFUSU9OCiAgIC0tCiAgIC0tICAgT3V0cHV0IGNob3NlbiBlbGFib3JhdGlvbiBvcmRlci4gVGhlIG91dHB1dCBpcyB3cml0dGVuIHRvIFNZUyRPVVRQVVQuCgogICBTX0JpbmRfT3V0cHV0ICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL09VVFBVVD1AIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1vQCI7CiAgIC0tICAgICAgICAvT1VUUFVUPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgRmlsZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHByb2dyYW0gY29udGFpbmluZyB0aGUgZWxhYm9yYXRpb24gY29kZS4KCiAgIFNfQmluZF9PdXRwdXRYIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9PVVRQVVQgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiOwogICAtLSAgICAgICAgL05PT1VUUFVUCiAgIC0tCiAgIC0tICAgQ2hlY2sgb25seS4gRG8gbm90IGdlbmVyYXRlIHRoZSBiaW5kZXIgb3V0cHV0IGZpbGUuCiAgIC0tCiAgIC0tICAgSW4gdGhpcyBtb2RlIHRoZSBiaW5kZXIgcGVyZm9ybXMgYWxsIGVycm9yIGNoZWNrcyBidXQgZG9lcyBub3QgZ2VuZXJhdGUKICAgLS0gICBhbiBvdXRwdXQgZmlsZS4KCiAgIFNfQmluZF9QZXNzICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUEVTU0lNSVNUSUNfRUxBQk9SQVRJT04gIiAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXAiOwogICAtLSAgICAgICAgL1BFU1NJTUlTVElDX0VMQUJPUkFUSU9OCiAgIC0tCiAgIC0tICAgQ2F1c2VzIHRoZSBiaW5kZXIgdG8gY2hvb3NlIGEgInBlc3NpbWlzdGljIiBlbGFib3JhdGlvbiBvcmRlciwgaS5lLiBvbmUKICAgLS0gICB3aGljaCBpcyBtb3N0IGxpa2VseSB0byBjYXVzZSBlbGFib3JhdGlvbiBvcmRlciBwcm9ibGVtcy4gVGhpcyBjYW4gYmUKICAgLS0gICB1c2VmdWwgaW4gdGVzdGluZyBwb3J0YWJsZSBjb2RlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBtaXNzaW5nCiAgIC0tICAgZWxhYm9yYXRlIHByYWdtYXMuCgogICBTX0JpbmRfUHJvamVjdCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgd2lsbCBiZSBwYXJzZWQgYmVmb3JlIHRoZSBpbnZvY2F0aW9uIG9mIHRoZQogICAtLSAgIGJpbmRlci4gVGhlIHNvdXJjZSBhbmQgb2JqZWN0IGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkIHdpbGwgYmUKICAgLS0gICBjb21tdW5pY2F0ZWQgdG8gdGhlIGJpbmRlciB0aHJvdWdoIGxvZ2ljYWwgbmFtZXMgQURBX1BSSl9JTkNMVURFX0ZJTEUKICAgLS0gICBhbmQgQURBX1BSSl9PQkpFQ1RTX0ZJTEUuCgogICBTX0JpbmRfUmVhZCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1JFQURfU09VUkNFUz0iICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFMTCAiICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT05FICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi14ICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVZBSUxBQkxFICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLXgsIS1zIjsKICAgLS0gICAgICAgIC9SRUFEX1NPVVJDRVNbPShrZXl3b3JkWywuLi5dKV0KICAgLS0gICAgICAgIC9OT1JFQURfU09VUkNFUwogICAtLQogICAtLSAgIFRoZSBmb2xsb3dpbmcga2V5d29yZCBhcmUgYWNjZXB0ZWQ6CiAgIC0tCiAgIC0tICAgICAgQUxMIChEKSAgICAgIFJlcXVpcmUgc291cmNlIGZpbGVzIHRvIGJlIHByZXNlbnQuIEluIHRoaXMgbW9kZSwgdGhlCiAgIC0tICAgICAgICAgICAgICAgICAgIGJpbmRlciBpbnNpc3RzIG9uIGJlaW5nIGFibGUgdG8gbG9jYXRlIGFsbCBzb3VyY2UgZmlsZXMKICAgLS0gICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgcmVmZXJlbmNlZCBhbmQgY2hlY2tzIHRoZWlyIGNvbnNpc3RlbmN5LiAgSW4KICAgLS0gICAgICAgICAgICAgICAgICAgbm9ybWFsIG1vZGUsIGlmIGEgc291cmNlIGZpbGUgY2Fubm90IGJlIGxvY2F0ZWQgaXQgaXMKICAgLS0gICAgICAgICAgICAgICAgICAgc2ltcGx5IGlnbm9yZWQuIElmIHlvdSBzcGVjaWZ5IHRoZSBBTEwga2V5d29yZCwgYQogICAtLSAgICAgICAgICAgICAgICAgICBtaXNzaW5nIHNvdXJjZSBmaWxlIGlzIGFuIGVycm9yLgogICAtLQogICAtLSAgICAgIE5PTkUgICAgICAgICBFeGNsdWRlIHNvdXJjZSBmaWxlcy4gSW4gdGhpcyBtb2RlLCB0aGUgYmluZGVyIG9ubHkKICAgLS0gICAgICAgICAgICAgICAgICAgY2hlY2tzIHRoYXQgQUxJIGZpbGVzIGFyZSBjb25zaXN0ZW50IHdpdGggb25lIGFub3RoZXIuCiAgIC0tICAgICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBhcmUgbm90IGFjY2Vzc2VkLiAgVGhlIGJpbmRlciBydW5zIGZhc3RlcgogICAtLSAgICAgICAgICAgICAgICAgICBpbiB0aGlzIG1vZGUsIGFuZCB0aGVyZSBpcyBzdGlsbCBhIGd1YXJhbnRlZSB0aGF0IHRoZQogICAtLSAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgcHJvZ3JhbSBpcyBzZWxmLWNvbnNpc3RlbnQuCiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgIElmIGEgc291cmNlIGZpbGUgaGFzIGJlZW4gZWRpdGVkIHNpbmNlIGl0IHdhcyBsYXN0CiAgIC0tICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkIGFuZCB5b3Ugc3BlY2lmeSB0aGUgTk9ORSBrZXl3b3JkLCB0aGUgYmluZGVyCiAgIC0tICAgICAgICAgICAgICAgICAgIHdpbGwgbm90IGRldGVjdCB0aGF0IHRoZSBvYmplY3QgZmlsZSBpcyBvdXQgb2YgZGF0ZQogICAtLSAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBzb3VyY2UgZmlsZS4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIC9OT1JFQURfU09VUkNFUy4KICAgLS0KICAgLS0gICAgICBBVkFJTEFCTEUgICAgQ2hlY2sgdGhhdCBvYmplY3QgZmlsZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCBvbmUKICAgLS0gICAgICAgICAgICAgICAgICAgYW5vdGhlciBhbmQgYXJlIGNvbnNpc3RlbnQgd2l0aCBhbnkgc291cmNlIGZpbGVzIHRoYXQKICAgLS0gICAgICAgICAgICAgICAgICAgY2FuIGJlIGxvY2F0ZWQuCgogICBTX0JpbmRfUmVhZFggICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PUkVBRF9TT1VSQ0VTICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi14IjsKICAgLS0gIE5PRE9DIChzZWUgL1JFQURfU09VUkNFUykKCiAgIFNfQmluZF9SZW5hbWUgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUkVOQU1FX01BSU49PCIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLU0+IjsKICAgLS0gICAgICAgIC9SRU5BTUVfTUFJTj14eHgKICAgLS0KICAgLS0gICBSZW5hbWVzIHRoZSBnZW5lcmF0ZWQgbWFpbiBwcm9ncmFtIGZyb20gbWFpbiB0byB4eHguCiAgIC0tICAgVGhpcyBpcyB1c2VmdWwgaW4gdGhlIGNhc2Ugb2Ygc29tZSBjcm9zcy1idWlsZGluZyBlbnZpcm9ubWVudHMsIHdoZXJlCiAgIC0tICAgdGhlIGFjdHVhbCBtYWluIHByb2dyYW0gaXMgc2VwYXJhdGUgZnJvbSB0aGUgb25lIGdlbmVyYXRlZAogICAtLSAgIGJ5IEdOQVQgQklORC4KCiAgIFNfQmluZF9SZXBvcnQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUkVQT1JUX0VSUk9SUz0iICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkVSQk9TRSAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdiAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJSSUVGICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWIgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUZBVUxUICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtYiwhLXYiOwogICAtLSAgICAgICAgL1JFUE9SVF9FUlJPUlNbPShrZXl3b3JkWywuLi5dKV0KICAgLS0gICAgICAgICAgIFZFUkJPU0UgKEQpCiAgIC0tICAgICAgICAgICBCUklFRgogICAtLSAgICAgICAgICAgREVGQVVMVAogICAtLSAgICAgICAgL05PUkVQT1JUX0VSUk9SUwogICAtLQogICAtLSAgIFdpdGggdGhlIERFRkFVTFQga2V5d29yZCAod2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0IHdoZW4gdGhlIGJpbmRlciBpcwogICAtLSAgIHJ1biBmcm9tIEdOQVQgQklORCkgb3IgdGhlIC9OT1JFUE9SVF9FUlJPUlMgcXVhbGlmaWVyLCBicmllZiBlcnJvcgogICAtLSAgIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQgdG8gU1lTJEVSUk9SLiAgSWYgdGhlIFZFUkJPU0Uga2V5d29yZCBpcwogICAtLSAgIHByZXNlbnQsIGEgaGVhZGVyIGlzIHdyaXR0ZW4gdG8gU1lTJE9VVFBVVCBhbmQgYW55IGVycm9yIG1lc3NhZ2VzIGFyZQogICAtLSAgIGRpcmVjdGVkIHRvIFNZUyRPVVRQVVQgIEFsbCB0aGF0IGlzIHdyaXR0ZW4gdG8gU1lTJEVSUk9SIGlzIGEgYnJpZWYKICAgLS0gICBzdW1tYXJ5IG1lc3NhZ2UuCiAgIC0tCiAgIC0tICAgSWYgdGhlIEJSSUVGIGtleXdvcmQgaXMgc3BlY2lmaWVkLCB0aGUgYmluZGVyIHdpbGwgZ2VuZXJhdGUgYnJpZWYgZXJyb3IKICAgLS0gICBtZXNzYWdlcyB0byBTWVMkRVJST1IgZXZlbiBpZiB2ZXJib3NlIG1vZGUgaXMgc3BlY2lmaWVkLiBUaGlzIGlzCiAgIC0tICAgcmVsZXZhbnQgb25seSB3aGVuIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgVkVSQk9TRSBrZXl3b3JkIG9yIC9WRVJCT1NFCiAgIC0tICAgcXVhbGlmaWVyLgoKICAgU19CaW5kX1JlcG9ydFggOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1JFUE9SVF9FUlJPUlMgIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLWIsIS12IjsKICAgLS0gIE5PRE9DIChzZWUgL1JFUE9SVF9FUlJPUlMpCgogICBTX0JpbmRfUmVzdHIgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1JFU1RSSUNUSU9OX0xJU1QgIiAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1yIjsKICAgLS0gICAgICAgIC9OT1JFU1RSSUNUSU9OX0xJU1QgKEQpCiAgIC0tICAgICAgICAvUkVTVFJJQ1RJT05fTElTVAogICAtLQogICAtLSAgIEdlbmVyYXRlIGxpc3Qgb2YgcHJhZ21hIFJlcnN0cmljdGlvbnMgdGhhdCBjb3VsZCBiZSBhcHBsaWVkIHRvIHRoZQogICAtLSAgIGN1cnJlbnQgdW5pdC4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvZGUgYXVkaXQgcHVycG9zZXMsIGFuZCBhbHNvIG1heSBiZQogICAtLSAgIHVzZWQgdG8gaW1wcm92ZSBjb2RlIGdlbmVyYXRpb24gaW4gc29tZSBjYXNlcy4KCiAgIFNfQmluZF9SZXR1cm4gIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUkVUVVJOX0NPREVTPSIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUE9TSVggIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLVgxICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZNUyAiICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVgxIjsKICAgLS0gICAgICAgIC9SRVRVUk5fQ09ERVM9UE9TSVggKEQpCiAgIC0tICAgICAgICAvUkVUVVJOX0NPREVTPVZNUwogICAtLQogICAtLSAgIFNwZWNpZmllcyB0aGUgc3R5bGUgb2YgZGVmYXVsdCBleGl0IGNvZGUgcmV0dXJuZWQuIE11c3QgYmUgdXNlZCBpbgogICAtLSAgIGNvbmp1bmN0aW9uIHdpdGggYW5kIG1hdGNoIHRoZSBMaW5rIHF1YWxpZmVyIHdpdGggc2FtZSBuYW1lLgogICAtLQogICAtLSAgICAgICAgUE9TSVggKEQpICAgUmV0dXJuIFBvc2l4IHN1Y2Nlc3MgKDApIGJ5IGRlZmF1bHQuCiAgIC0tCiAgIC0tICAgICAgICBWTVMgICAgICAgICBSZXR1cm4gVk1TIHN1Y2Nlc3MgKDEpIGJ5IGRlZmF1bHQuCgogICBTX0JpbmRfUlRTICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1JVTlRJTUVfU1lTVEVNPXwiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tUlRTPXwiOwogICAtLSAgICAgIC9SVU5USU1FX1NZU1RFTT14eHgKICAgLS0KICAgLS0gICAgQmluZHMgYWdhaW5zdCBhbiBhbHRlcm5hdGUgcnVudGltZSBzeXN0ZW0gbmFtZWQgeHh4IG9yIFJUUy14eHguCgogICBTX0JpbmRfU2VhcmNoICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NFQVJDSD0qIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1JKiI7CiAgIC0tICAgICAgICAvU0VBUkNIPShkaXJlY3RvcnlbLC4uLl0pCiAgIC0tCiAgIC0tICAgV2hlbiBsb29raW5nIGZvciBzb3VyY2Ugb3Igb2JqZWN0IGZpbGVzIGFsc28gbG9vayBpbiBkaXJlY3RvcmllcwogICAtLSAgIHNwZWNpZmllZC4KICAgLS0KICAgLS0gICBUaGlzIGlzIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgYm90aCAvTElCUkFSWV9TRUFSQ0ggYW5kIC9TT1VSQ0VfU0VBUkNICiAgIC0tICAgZm9yIGEgZGlyZWN0b3J5LgoKICAgU19CaW5kX1NoYXJlZCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9TSEFSRUQgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItc2hhcmVkLCEtc3RhdGljIjsKICAgLS0gICAgICAgIC9TSEFSRUQKICAgLS0gICAgICAgIC9OT1NIQVJFRAogICAtLQogICAtLSAgICBMaW5rIGFnYWluc3QgYSBzaGFyZWQgR05BVCBydW4gdGltZSB3aGVuIGF2YWlsYWJsZS4KCiAgIFNfQmluZF9TbGljZSAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVElNRV9TTElDRT0jIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVQjIjsKICAgLS0gICAgICAgIC9USU1FX1NMSUNFPW5ubgogICAtLQogICAtLSAgIFNldCB0aGUgdGltZSBzbGljZSB2YWx1ZSB0byBubm4gbWlsbGlzZWNvbmRzLiBBIHZhbHVlIG9mIHplcm8gbWVhbnMgbm8KICAgLS0gICB0aW1lIHNsaWNpbmcgYW5kIGFsc28gaW5kaWNhdGVzIHRvIHRoZSB0YXNraW5nIHJ1biB0aW1lIHRvIG1hdGNoIGFzCiAgIC0tICAgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIGFubmV4IEQgcmVxdWlyZW1lbnRzIG9mIHRoZSBSTS4KCiAgIFNfQmluZF9Tb3VyY2UgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU09VUkNFX1NFQVJDSD0qIiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWFJKiI7CiAgIC0tICAgICAgICAvU09VUkNFX1NFQVJDSD0oZGlyZWN0b3J5WywuLi5dKQogICAtLQogICAtLSAgICBXaGVuIGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcyBhbHNvIGxvb2sgaW4gZGlyZWN0b3JpZXMgc3BlY2lmaWVkLgoKICAgU19CaW5kX1N0YXRpYyAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9TVEFUSUMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItc3RhdGljLCEtc2hhcmVkIjsKICAgLS0gICAgICAgIC9TVEFUSUMKICAgLS0gICAgICAgIC9OT1NUQVRJQwogICAtLQogICAtLSAgICBMaW5rIGFnYWluc3QgYSBzdGF0aWMgR05BVCBydW4gdGltZS4KCiAgIFNfQmluZF9TdG9yZSAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU1RPUkVfVFJBQ0VCQUNLUyAiICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUUiOwogICAtLSAgICAgICAgL1NUT1JFX1RSQUNFQkFDS1MgKEQpCiAgIC0tICAgICAgICAvTk9TVE9SRV9UUkFDRUJBQ0tTCiAgIC0tCiAgIC0tICAgU3RvcmUgdHJhY2ViYWNrcyBpbiBleGNlcHRpb24gb2NjdXJyZW5jZXMuCiAgIC0tICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvbiBWTVMsIHdpdGggdGhlIHplcm8tY29zdCBleGNlcHRpb24gbWVjaGFuaXNtLgogICAtLSAgIFRoaXMgcXVhbGlmaWVyIGhhcyBubyBpbXBhY3QsIGV4Y2VwdCB3aGVuIHVzaW5nIHRoZSBzZXRqbXAvbG9uZ2ptcAogICAtLSAgIGV4Y2VwdGlvbiBtZWNoYW5pc20sIHdpdGggdGhlIEdOQVQgQ09NUElMRSBxdWFsaWZpZXIgL0xPTkdKTVBfU0VUSk1QLgoKICAgU19CaW5kX1RpbWUgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9USU1FX1NUQU1QX0NIRUNLICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLXQiOwogICAtLSAgICAgIC9USU1FX1NUQU1QX0NIRUNLIChEKQogICAtLQogICAtLSAgIFRpbWUgc3RhbXAgZXJyb3JzIHdpbGwgYmUgdHJlYXRlZCBhcyBlcnJvcnMuCiAgIC0tCiAgIC0tICAgICAgL05PVElNRV9TVEFNUF9DSEVDSwogICAtLQogICAtLSAgIElnbm9yZSB0aW1lIHN0YW1wIGVycm9ycy4gQW55IHRpbWUgc3RhbXAgZXJyb3IgbWVzc2FnZXMgYXJlIHRyZWF0ZWQgYXMKICAgLS0gICB3YXJuaW5nIG1lc3NhZ2VzLiBUaGlzIHN3aXRjaCBlc3NlbnRpYWxseSBkaXNjb25uZWN0cyB0aGUgbm9ybWFsCiAgIC0tICAgY29uc2lzdGVuY3kgY2hlY2tpbmcsIGFuZCB0aGUgcmVzdWx0aW5nIHByb2dyYW0gbWF5IGhhdmUgdW5kZWZpbmVkCiAgIC0tICAgc2VtYW50aWNzIGlmIGluY29uc2lzdGVudCB1bml0cyBhcmUgcHJlc2VudC4KICAgLS0KICAgLS0gICBUaGlzIG1lYW5zIHRoYXQgL05PVElNRV9TVEFNUF9DSEVDSyBzaG91bGQgYmUgdXNlZCBvbmx5IGluIHVudXN1YWwKICAgLS0gICBzaXR1YXRpb25zLCB3aXRoIGV4dHJlbWUgY2FyZS4KCiAgIFNfQmluZF9WZXJib3NlIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVkVSQk9TRSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXYiOwogICAtLSAgICAgICAgL1ZFUkJPU0UgKEQpCiAgIC0tICAgICAgICAvTk9WRVJCT1NFCiAgIC0tCiAgIC0tICAgRXF1aXZhbGVudCB0byAvUkVQT1JUX0VSUk9SUz1WRVJCT1NFLgoKICAgU19CaW5kX1dhcm4gICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9XQVJOSU5HUz0iICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT1JNQUwgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtd3MsIS13ZSAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1VQUFJFU1MgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItd3MgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXdlIjsKICAgLS0gICAgICAvV0FSTklOR1NbPShrZXl3b3JkWywuLi5dKV0KICAgLS0gICAgICAvTk9XQVJOSU5HUwogICAtLQogICAtLSAgIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgYXJlIHN1cHBvcnRlZDoKICAgLS0KICAgLS0gICAgICAgIE5PUk1BTCAoRCkgICAgUHJpbnQgd2FybmluZyBtZXNzYWdlcyBhbmQgdHJlYXQgdGhlbSBhcyB3YXJuaW5nLgogICAtLSAgICAgICAgU1VQUFJFU1MgICAgICBTdXBwcmVzcyBhbGwgd2FybmluZyBtZXNzYWdlcyAoc2FtZSBhcyAvTk9XQVJOSU5HUykuCiAgIC0tICAgICAgICBFUlJPUiAgICAgICAgIFRyZWF0IGFueSB3YXJuaW5nIG1lc3NhZ2VzIGFzIGZhdGFsIGVycm9ycwoKICAgU19CaW5kX1dhcm5YICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1dBUk5JTkdTICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItd3MiOwogICAtLSAgTk9ET0MgKHNlZSAvV0FSTklOR1MpCgogICBTX0JpbmRfWmVybyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1pFUk9fTUFJTiAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi16IjsKICAgLS0gICAgICAgIC9OT1pFUk9fTUFJTiAoRCkKICAgLS0gICAgICAgIC9aRVJPX01BSU4KICAgLS0KICAgLS0gICBOb3JtYWxseSB0aGUgYmluZGVyIGNoZWNrcyB0aGF0IHRoZSB1bml0IG5hbWUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZQogICAtLSAgIGNvcnJlc3BvbmRzIHRvIGEgc3VpdGFibGUgbWFpbiBzdWJwcm9ncmFtLiBXaGVuIC9aRVJPX01BSU4gaXMgdXNlZCwKICAgLS0gICBhIGxpc3Qgb2YgQUxJIGZpbGVzIGNhbiBiZSBnaXZlbiwgYW5kIHRoZSBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0KICAgLS0gICBjb25zaXN0cyBvZiBlbGFib3JhdGlvbiBvZiB0aGVzZSB1bml0cyBpbiBhbiBhcHByb3ByaWF0ZSBvcmRlci4KCiAgIEJpbmRfU3dpdGNoZXMgOiBhbGlhc2VkIGNvbnN0YW50IFN3aXRjaGVzIDo9CiAgICAgKFNfQmluZF9CaW5kICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9CdWlsZCAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9DdXJyZW50ICdBY2Nlc3MsCiAgICAgIFNfQmluZF9EZWJ1ZyAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9EZWJ1Z1ggICdBY2Nlc3MsCiAgICAgIFNfQmluZF9FbGFiICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9FcnJvciAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9FeHQgICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9Gb3JjZSAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9IZWxwICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9Jbml0ICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9MaWJyYXJ5ICdBY2Nlc3MsCiAgICAgIFNfQmluZF9MaW5rZXIgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9NYWluICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9NZXNzICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9Ob3N0aW5jICdBY2Nlc3MsCiAgICAgIFNfQmluZF9Ob3N0bGliICdBY2Nlc3MsCiAgICAgIFNfQmluZF9Ob19UaW1lICdBY2Nlc3MsCiAgICAgIFNfQmluZF9PYmplY3QgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9PcmRlciAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9PdXRwdXQgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9PdXRwdXRYICdBY2Nlc3MsCiAgICAgIFNfQmluZF9QZXNzICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9Qcm9qZWN0ICdBY2Nlc3MsCiAgICAgIFNfQmluZF9SZWFkICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9SZWFkWCAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9SZW5hbWUgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9SZXBvcnQgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9SZXBvcnRYICdBY2Nlc3MsCiAgICAgIFNfQmluZF9SZXN0ciAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9SZXR1cm4gICdBY2Nlc3MsCiAgICAgIFNfQmluZF9SVFMgICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9TZWFyY2ggICdBY2Nlc3MsCiAgICAgIFNfQmluZF9TaGFyZWQgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9TbGljZSAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9Tb3VyY2UgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9TdGF0aWMgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9TdG9yZSAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9UaW1lICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9WZXJib3NlICdBY2Nlc3MsCiAgICAgIFNfQmluZF9XYXJuICAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9XYXJuWCAgICdBY2Nlc3MsCiAgICAgIFNfQmluZF9aZXJvICAgICdBY2Nlc3MpOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBDSE9QIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfQ2hvcF9Db21wICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9DT01QSUxBVElPTiAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiOwogICAtLSAgICAgICAgL05PQ09NUElMQVRJT04gKEQpCiAgIC0tICAgICAgICAvQ09NUElMQVRJT04KICAgLS0KICAgLS0gICBDb21waWxhdGlvbiBtb2RlLCBoYW5kbGUgY29uZmlndXJhdGlvbiBwcmFnbWFzIHN0cmljdGx5IGFjY29yZGluZyB0bwogICAtLSAgIFJNIHJ1bGVzLgoKICAgU19DaG9wX0ZpbGUgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0ZJTEVfTkFNRV9NQVhfTEVOR1RIPSMiICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItayMiOwogICAtLSAgICAgICAgL0ZJTEVfTkFNRV9NQVhfTEVOR1RIWz1ubm5dCiAgIC0tCiAgIC0tICAgTGltaXQgZ2VuZXJhdGVkIGZpbGUgbmFtZXMgdG8gTk5OIChkZWZhdWx0IG9mIDgpIGNoYXJhY3RlcnMuIFRoaXMgaXMKICAgLS0gICB1c2VmdWwgaWYgdGhlIHJlc3VsdGluZyBzZXQgb2YgZmlsZXMgaXMgcmVxdWlyZWQgdG8gYmUgaW50ZXJvcGVyYWJsZQogICAtLSAgIHdpdGggc3lzdGVtcyBsaWtlIE1TLURPUyB3aGljaCBsaW1pdCB0aGUgbGVuZ3RoIG9mIGZpbGUgbmFtZXMuCgogICBTX0Nob3BfSGVscCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvSEVMUCAiICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1oIjsKICAgLS0gICAgICAgIC9OT0hFTFAgKEQpCiAgIC0tICAgICAgICAvSEVMUAogICAtLQogICAtLSAgIFByaW50IHVzYWdlIGluZm9ybWF0aW9uLgoKICAgU19DaG9wX092ZXIgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL09WRVJXUklURSAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdyI7CiAgIC0tICAgICAgICAvTk9PVkVSV1JJVEUgKEQpCiAgIC0tICAgICAgICAvT1ZFUldSSVRFCiAgIC0tCiAgIC0tICAgT3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUgbmFtZXMuIE5vcm1hbGx5IEdOQVQgQ0hPUCByZWdhcmRzIGl0IGFzIGEKICAgLS0gICBmYXRhbCBlcnJvciBzaXR1YXRpb24gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzCiAgIC0tICAgYSBmaWxlIGl0IHdvdWxkIG90aGVyd2lzZSBvdXRwdXQuIFRoZSAvT1ZFUldSSVRFIHF1YWxpZmllciBieXBhc3NlcwogICAtLSAgIHRoaXMgY2hlY2ssIGFuZCBhbnkgc3VjaCBleGlzdGluZyBmaWxlcyB3aWxsIGJlIHNpbGVudGx5IG92ZXJ3cml0dGVuLgoKICAgU19DaG9wX1ByZXMgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BSRVNFUlZFICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItcCI7CiAgIC0tICAgICAgICAvTk9QUkVTRVJWRSAoRCkKICAgLS0gICAgICAgIC9QUkVTRVJWRQogICAtLQogICAtLSAgIENhdXNlcyB0aGUgZmlsZSBtb2RpZmljYXRpb24gdGltZSBzdGFtcCBvZiB0aGUgaW5wdXQgZmlsZSB0byBiZQogICAtLSAgIHByZXNlcnZlZCBhbmQgdXNlZCBmb3IgdGhlIHRpbWUgc3RhbXAgb2YgdGhlIG91dHB1dCBmaWxlKHMpLiBUaGlzIG1heQogICAtLSAgIGJlIHVzZWZ1bCBmb3IgcHJlc2VydmluZyBjb2hlcmVuY3kgb2YgdGltZSBzdGFtcHMgaW4gYW4gZW52aXJvbWVudAogICAtLSAgIHdoZXJlIGduYXRjaG9wIGlzIHVzZWQgYXMgcGFydCBvZiBhIHN0YW5kYXJkIGJ1aWxkIHByb2Nlc3MuCgogICBTX0Nob3BfUXVpZXQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUVVJRVQgIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1xIjsKICAgLS0gICAgICAgIC9OT1FVSUVUIChEKQogICAtLSAgICAgICAgL1FVSUVUCiAgIC0tCiAgIC0tICAgV29yayBxdWlldGx5LCBvbmx5IG91dHB1dCB3YXJuaW5ncyBhbmQgZXJyb3JzLgoKICAgU19DaG9wX1JlZiAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1JFRkVSRU5DRSAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItciI7CiAgIC0tICAgICAgICAvTk9SRUZFUkVOQ0UgKEQpCiAgIC0tICAgICAgICAvUkVGRVJFTkNFCiAgIC0tCiAgIC0tICAgR2VuZXJhdGUgIlNvdXJjZV9SZWZlcmVuY2UiIHByYWdtYXMuIFVzZSB0aGlzIHF1YWxpZmllciBpZiB0aGUgb3V0cHV0CiAgIC0tICAgZmlsZXMgYXJlIHJlZ2FyZGVkIGFzIHRlbXBvcmFyeSBhbmQgZGV2ZWxvcG1lbnQgaXMgdG8gYmUgZG9uZSBpbiB0ZXJtcwogICAtLSAgIG9mIHRoZSBvcmlnaW5hbCB1bmNob3BwZWQgZmlsZS4gVGhlIC9SRUZFUkVOQ0UgcXVhbGlmaWVyIGNhdXNlcwogICAtLSAgICJTb3VyY2VfUmVmZXJlbmNlIiBwcmFnbWFzIHRvIGJlIGluc2VydGVkIGludG8gZWFjaCBvZiB0aGUgZ2VuZXJhdGVkCiAgIC0tICAgZmlsZXMgdG8gcmVmZXJzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIuICBUaGUKICAgLS0gICByZXN1bHQgaXMgdGhhdCBhbGwgZXJyb3IgbWVzc2FnZXMgcmVmZXIgYmFjayB0byB0aGUgb3JpZ2luYWwgdW5jaG9wcGVkCiAgIC0tICAgZmlsZS4KICAgLS0KICAgLS0gICBJbiBhZGRpdGlvbiwgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBwbGFjZWQgaW50byB0aGUgb2JqZWN0IGZpbGUKICAgLS0gICAod2hlbiB0aGUgL0RFQlVHIHF1YWxpZmllciBvZiBHTkFUIENPTVBJTEUgb3IgR05BVCBNQUtFIGlzIHNwZWNpZmllZCkKICAgLS0gICBhbHNvIHJlZmVycyBiYWNrIHRvIHRoaXMgb3JpZ2luYWwgZmlsZSBzbyB0aGF0IHRvb2xzIGxpa2UgcHJvZmlsZXJzCiAgIC0tICAgYW5kIGRlYnVnZ2VycyB3aWxsIGdpdmUgaW5mb3JtYXRpb24gaW4gdGVybXMgb2YgdGhlIG9yaWdpbmFsIHVuY2hvcHBlZAogICAtLSAgIGZpbGUuCgogICBTX0Nob3BfVmVyYiAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVkVSQk9TRSAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12IjsKICAgLS0gICAgICAgIC9OT1ZFUkJPU0UgKEQpCiAgIC0tICAgICAgICAvVkVSQk9TRQogICAtLQogICAtLSAgIFRoZSB2ZXJzaW9uIG51bWJlciBhbmQgY29weXJpZ2h0IG5vdGljZSBhcmUgb3V0cHV0LCBhcyB3ZWxsIGFzIGV4YWN0CiAgIC0tICAgY29waWVzIG9mIHRoZSBnbmF0MSBjb21tYW5kcyBzcGF3bmVkIHRvIG9idGFpbiB0aGUgY2hvcCBjb250cm9sCiAgIC0tICAgaW5mb3JtYXRpb24uCgogICBDaG9wX1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyA6PQogICAgIChTX0Nob3BfQ29tcCAgICdBY2Nlc3MsCiAgICAgIFNfQ2hvcF9GaWxlICAgJ0FjY2VzcywKICAgICAgU19DaG9wX0hlbHAgICAnQWNjZXNzLAogICAgICBTX0Nob3BfT3ZlciAgICdBY2Nlc3MsCiAgICAgIFNfQ2hvcF9QcmVzICAgJ0FjY2VzcywKICAgICAgU19DaG9wX1F1aWV0ICAnQWNjZXNzLAogICAgICBTX0Nob3BfUmVmICAgICdBY2Nlc3MsCiAgICAgIFNfQ2hvcF9WZXJiICAgJ0FjY2Vzcyk7CgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBDTEVBTiAtLQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgU19DbGVhbl9Db21waWwgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQ09NUElMRVJfRklMRVNfT05MWSAiICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiOwogICAtLSAgICAgICAgL05PQ09NUElMRVJfRklMRVNfT05MWSAoRCkKICAgLS0gICAgICAgIC9DT01QSUxFUl9GSUxFU19PTkxZCiAgIC0tCiAgIC0tICAgT25seSBhdHRlbXB0IHRvIGRlbGV0ZSB0aGUgZmlsZXMgcHJvZHVjZWQgYnkgdGhlIGNvbXBpbGVyLCBub3QgdGhvc2UKICAgLS0gICBwcm9kdWNlZCBieSB0aGUgYmluZGVyIG9yIHRoZSBsaW5rZXIuIFRoZSBmaWxlcyB0aGF0IGFyZSBub3QgdG8gYmUKICAgLS0gICBkZWxldGVkIGFyZSBsaWJyYXJ5IGZpbGVzLCBpbnRlcmZhY2UgY29weSBmaWxlcywgYmluZGVyIGdlbmVyYXRlZCBmaWxlcwogICAtLSAgIGFuZCBleGVjdXRhYmxlIGZpbGVzLgoKICAgU19DbGVhbl9DdXJyZW50IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQ1VSUkVOVF9ESVJFQ1RPUlkgIiAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLUktIjsKICAgLS0gICAgICAgIC9DVVJSRU5UX0RJUkVDVE9SWSAoRCkKICAgLS0KICAgLS0gICBMb29rIGZvciBBTEkgb3Igb2JqZWN0IGZpbGVzIGluIHRoZSBkaXJlY3Rvcnkgd2hlcmUgR05BVCBDTEVBTiB3YXMKICAgLS0gICBpbnZva2VkLgogICAtLQogICAtLSAgICAgICAgL05PQ1VSUkVOVF9ESVJFQ1RPUlkKICAgLS0KICAgLS0gICBEbyBub3QgbG9vayBmb3IgQUxJIG9yIG9iamVjdCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IHdoZXJlIEdOQVQgQ0xFQU4KICAgLS0gICB3YXMgaW52b2tlZC4KCiAgIFNfQ2xlYW5fRGVsZXRlICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0RFTEVURSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1uIjsKICAgLS0gICAgICAgIC9ERUxFVEUgKEQpCiAgIC0tCiAgIC0tICAgRGVsZXRlIHRoZSBmaWxlcyB0aGF0IGFyZSBub3QgcmVhZC1vbmx5LgogICAtLQogICAtLSAgICAgICAgL05PREVMRVRFCiAgIC0tCiAgIC0tICAgSW5mb3JtYXRpdmUtb25seSBtb2RlLiBEbyBub3QgZGVsZXRlIGFueSBmaWxlcy4gT3V0cHV0IHRoZSBsaXN0IG9mIHRoZQogICAtLSAgIGZpbGVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRlbGV0ZWQgaWYgdGhpcyBzd2l0Y2ggd2FzIG5vdCBzcGVjaWZpZWQuCgogICBTX0NsZWFuX0Rpcm9iaiAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9ESVJFQ1RPUllfT0JKRUNUUz1AIiAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1EQCI7CiAgIC0tICAgICAgICAvRElSRUNUT1JZX09CSkVDVFM9PGZpbGU+CiAgIC0tCiAgIC0tICAgRmluZCB0aGUgb2JqZWN0IGZpbGVzIGFuZCAuQUxJIGZpbGVzIGluIDxmaWxlPi4KICAgLS0gICBUaGlzIHF1YWxpZmllciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIC9QUk9KRUNUX0ZJTEUuCgogICBTX0NsZWFuX0V4dCAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9FWFRFUk5BTF9SRUZFUkVOQ0U9IiAmICciJyAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1YIiAmICciJzsKICAgLS0gICAgICAgIC9FWFRFUk5BTF9SRUZFUkVOQ0U9Im5hbWU9dmFsIgogICAtLQogICAtLSAgIFNwZWNpZmllcyBhbiBleHRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIHByb2plY3QgbWFuYWdlci4gVXNlZnVsIG9ubHkgaWYKICAgLS0gICAvUFJPSkVDVF9GSUxFIGlzIHVzZWQuCiAgIC0tCiAgIC0tICAgRXhhbXBsZToKICAgLS0gICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJERUJVRz1UUlVFIgoKICAgU19DbGVhbl9GdWxsICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRlVMTF9QQVRIX0lOX0JSSUVGX01FU1NBR0VTICIgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItRiI7CiAgIC0tICAgICAgICAvTk9GVUxMX1BBVEhfSU5fQlJJRUZfTUVTU0FHRVMgKEQpCiAgIC0tICAgICAgICAvRlVMTF9QQVRIX0lOX0JSSUVGX01FU1NBR0VTCiAgIC0tCiAgIC0tICAgV2hlbiB1c2luZyBwcm9qZWN0IGZpbGVzLCBpZiBzb21lIGVycm9ycyBvciB3YXJuaW5ncyBhcmUgZGV0ZWN0ZWQKICAgLS0gICBkdXJpbmcgcGFyc2luZyBhbmQgdmVyYm9zZSBtb2RlIGlzIG5vdCBpbiBlZmZlY3QgKG5vIHVzZSBvZiBxdWFsaWZpZXIKICAgLS0gICAvVkVSQk9TRSksIHRoZW4gZXJyb3IgbGluZXMgc3RhcnQgd2l0aCB0aGUgZnVsbCBwYXRoIG5hbWUgb2YgdGhlCiAgIC0tICAgcHJvamVjdCBmaWxlLCByYXRoZXIgdGhhbiBpdHMgc2ltcGxlIGZpbGUgbmFtZS4KCiAgIFNfQ2xlYW5fSGVscCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0hFTFAgIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWgiOwogICAtLSAgICAgICAgL05PSEVMUCAoRCkKICAgLS0gICAgICAgIC9IRUxQCiAgIC0tCiAgIC0tICAgT3V0cHV0IGEgbWVzc2FnZSBleHBsYWluaW5nIHRoZSB1c2FnZSBvZiBnbmF0Y2xlYW4uCgogICBTX0NsZWFuX0luZGV4ICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9TT1VSQ0VfSU5ERVg9IyIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItaSMiOwogICAtLSAgICAgICAgL1NPVVJDRV9JTkRFWD1ubm4KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSB1bml0cyBpbiB0aGUgc291cmNlIGZpbGUKICAgLS0gICBCeSBkZWZhdWx0LCBzb3VyY2UgZmlsZXMgYXJlIG1vbm8tdW5pdCBhbmQgdGhlcmUgaXMgbm8gaW5kZXgKCiAgIFNfQ2xlYW5fTWVzcyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL01FU1NBR0VTX1BST0pFQ1RfRklMRT0iICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVGQVVMVCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAwICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1FRElVTSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMSAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJISUdIICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDIiOwogICAtLSAgICAgICAgL01FU1NBR0VTX1BST0pFQ1RfRklMRVs9bWVzc2FnZXMtb3B0aW9uXQogICAtLQogICAtLSAgIFNwZWNpZmllcyB0aGUgInZlcmJvc2l0eSIgb2YgdGhlIHBhcnNpbmcgb2YgcHJvamVjdCBmaWxlcy4KICAgLS0gICBtZXNzYWdlcy1vcHRpb24gbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAtLQogICAtLSAgICAgIERFRkFVTFQgKEQpIE5vIG1lc3NhZ2VzIGFyZSBvdXRwdXQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igb3Igd2FybmluZy4KICAgLS0KICAgLS0gICAgICBNRURJVU0gICAgICBBIHNtYWxsIG51bWJlciBvZiBtZXNzYWdlcyBhcmUgb3V0cHV0LgogICAtLQogICAtLSAgICAgIEhJR0ggICAgICAgIEEgZ3JlYXQgbnVtYmVyIG9mIG1lc3NhZ2VzIGFyZSBvdXRwdXQsIG1vc3Qgb2YgdGhlbSBub3QKICAgLS0gICAgICAgICAgICAgICAgICBiZWluZyB1c2VmdWwgZm9yIHRoZSB1c2VyLgoKICAgU19DbGVhbl9PYmplY3QgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvT0JKRUNUX1NFQVJDSD0qIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYU8qIjsKICAgLS0gICAgICAgIC9PQkpFQ1RfU0VBUkNIPShkaXJlY3RvcnksLi4uKQogICAtLQogICAtLSAgIFdoZW4gc2VhcmNoaW5nIGZvciBsaWJyYXJ5IGFuZCBvYmplY3QgZmlsZXMsIGxvb2sgaW4gdGhlIHNwZWNpZmllZAogICAtLSAgIGRpcmVjdG9yaWVzLiBUaGUgb3JkZXIgaW4gd2hpY2ggbGlicmFyeSBmaWxlcyBhcmUgc2VhcmNoZWQgaXMgdGhlIHNhbWUKICAgLS0gICBhcyBmb3IgTUFLRS4KCiAgIFNfQ2xlYW5fUHJvamVjdCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVA+IjsKICAgLS0gICAgICAgIC9QUk9KRUNUX0ZJTEU9ZmlsZW5hbWUKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIG1haW4gcHJvamVjdCBmaWxlIHRvIGJlIHVzZWQuIFRoZSBwcm9qZWN0IGZpbGVzIHJvb3RlZAogICAtLSAgIGF0IHRoZSBtYWluIHByb2plY3QgZmlsZSB3aWxsIGJlIHBhcnNlZCBiZWZvcmUgdGhlIGludm9jYXRpb24gb2YgdGhlCiAgIC0tICAgY29tcGlsZXIuIFRoZSBzb3VyY2UgYW5kIG9iamVjdCBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCB3aWxsIGJlCiAgIC0tICAgY29tbXVuaWNhdGVkIHRvIGduYXRjbGVhbiB0aHJvdWdoIGxvZ2ljYWwgbmFtZXMgQURBX1BSSl9JTkNMVURFX0ZJTEUKICAgLS0gICBhbmQgQURBX1BSSl9PQkpFQ1RTX0ZJTEUuCgogICBTX0NsZWFuX1F1aWV0ICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9RVUlFVCAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1xIjsKICAgLS0gICAgICAgIC9OT1FVSUVUIChEKQogICAtLSAgICAgICAgL1FVSUVUCiAgIC0tCiAgIC0tICAgUXVpZXQgb3V0cHV0LiBJZiB0aGVyZSBhcmUgbm8gZXJyb3IsIGRvIG5vdCBvdXVwdXQgYW55dGhpbmcsIGV4Y2VwdCBpbgogICAtLSAgIHZlcmJvc2UgbW9kZSAocXVhbGlmaWVyIC9WRVJCT1NFKSBvciBpbiBpbmZvcm1hdGl2ZS1vbmx5IG1vZGUKICAgLS0gIChxdWFsaWZpZXIgL05PREVMRVRFKS4KCiAgIFNfQ2xlYW5fUmVjdXJzICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1JFQ1VSU0lWRSAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXIiOwogICAtLSAgICAgICAgL05PUkVDVVJTSVZFIChEKQogICAtLSAgICAgICAgL1JFQ1VSU0lWRQogICAtLQogICAtLSAgIFdoZW4gYSBwcm9qZWN0IGZpbGUgaXMgc3BlY2lmaWVkICh1c2luZyBzd2l0Y2ggLVApLCBjbGVhbiBhbGwgaW1wb3J0ZWQKICAgLS0gICBhbmQgZXh0ZW5kZWQgcHJvamVjdCBmaWxlcywgcmVjdXJzaXZlbHkuIElmIHRoaXMgcXVhbGlmaWVyIGlzIG5vdAogICAtLSAgIHNwZWNpZmllZCwgb25seSB0aGUgZmlsZXMgcmVsYXRlZCB0byB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgYXJlIHRvIGJlCiAgIC0tICAgZGVsZXRlZC4gVGhpcyBxdWFsaWZpZXIgaGFzIG5vIGVmZmVjdCBpZiBubyBwcm9qZWN0IGZpbGUgaXMgc3BlY2lmaWVkLgoKICAgU19DbGVhbl9TZWFyY2ggIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU0VBUkNIPSoiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItSSoiOwogICAtLSAgICAgICAgL1NFQVJDSD0oZGlyZWN0b3J5LC4uLikKICAgLS0KICAgLS0gICBFcXVpdmFsZW50IHRvIC9PQkpFQ1RfU0VBUkNIPShkaXJlY3RvcnksLi4uKS4KCiAgIFNfQ2xlYW5fVmVyYm9zZSA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1ZFUkJPU0UgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXYiOwogICAtLSAgICAgICAgL05PVkVSQk9TRSAoRCkKICAgLS0gICAgICAgIC9WRVJCT1NFCiAgIC0tCiAgIC0tICAgVmVyYm9zZSBtb2RlLgoKICAgQ2xlYW5fU3dpdGNoZXMgOiBhbGlhc2VkIGNvbnN0YW50IFN3aXRjaGVzIDo9CiAgICAgKFNfQ2xlYW5fQ29tcGlsICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fQ3VycmVudCdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fRGVsZXRlICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fRGlyb2JqICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fRXh0ICAgICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fRnVsbCAgICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fSGVscCAgICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fSW5kZXggICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fTWVzcyAgICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fT2JqZWN0ICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fUHJvamVjdCdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fUXVpZXQgICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fUmVjdXJzICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fU2VhcmNoICdBY2Nlc3MsCiAgICAgIFNfQ2xlYW5fVmVyYm9zZSdBY2Nlc3MpOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBDT01QSUxFIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfR0NDX0FkYV84MyAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi84MyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0ODMiOwogICAtLSAgICAgICAgL05PODMgKEQpCiAgIC0tICAgICAgICAvODMKICAgLS0KICAgLS0gICBBbHRob3VnaCBHTkFUIGlzIHByaW1hcmlseSBhbiBBZGEgOTUgY29tcGlsZXIsIGl0IGFjY2VwdHMgdGhpcwogICAtLSAgIHF1YWxpZmllciB0byBzcGVjaWZ5IHRoYXQgYW4gQWRhIDgzIG1vZGUgcHJvZ3JhbSBpcyBiZWluZyBjb21waWxlZC4gSWYKICAgLS0gICB5b3Ugc3BlY2lmeSB0aGlzIHF1YWxpZmllciwgR05BVCByZWplY3RzIEFkYSA5NSBleHRlbnNpb25zIGFuZCBhcHBsaWVzCiAgIC0tICAgQWRhIDgzIHNlbWFudGljcy4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGd1YXJhbnRlZSB0aGlzIHF1YWxpZmllciBkb2VzCiAgIC0tICAgYSBwZXJmZWN0IGpvYjsgZm9yIGV4YW1wbGUsIHNvbWUgc3VidGxlIHRlc3RzIG9mIHBhdGhvbG9naWNhbCBjYXNlcywKICAgLS0gICBzdWNoIGFzIGFyZSBmb3VuZCBpbiBBQ1ZDIHRlc3RzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQUNWQwogICAtLSAgIHN1aXRlIGZvciBBZGEgOTUsIG1heSBub3QgY29tcGlsZSBjb3JyZWN0bHkuIEhvd2V2ZXIgZm9yIHByYWN0aWNhbAogICAtLSAgIHB1cnBvc2VzLCB1c2luZyB0aGlzIHF1YWxpZmllciBzaG91bGQgZW5zdXJlIHRoYXQgcHJvZ3JhbXMgdGhhdAogICAtLSAgIGNvbXBpbGUgY29ycmVjdGx5IHVuZGVyIHRoZSAvODMgcXVhbGlmaWVyIGNhbiBiZSBwb3J0ZWQgcmVhc29uYWJseQogICAtLSAgIGVhc2lseSB0byBhbiBBZGEgODMgY29tcGlsZXIuIFRoaXMgaXMgdGhlIG1haW4gdXNlIG9mIHRoaXMgcXVhbGlmaWVyLgogICAtLQogICAtLSAgIFdpdGggZmV3IGV4Y2VwdGlvbnMgKG1vc3Qgbm90YWJseSB0aGUgbmVlZCB0byB1c2UgIjw+IiBvbgogICAtLSAgIHVuY29uc3RyYWluZWQgZ2VuZXJpYyBmb3JtYWwgcGFyYW1ldGVycyksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdXNlCiAgIC0tICAgdGhpcyBxdWFsaWZpZXIgc3dpdGNoIHdoZW4gY29tcGlsaW5nIEFkYSA4MyBwcm9ncmFtcywgYmVjYXVzZSwgd2l0aAogICAtLSAgIHJhcmUgYW5kIG9ic2N1cmUgZXhjZXB0aW9ucywgQWRhIDk1IGlzIHVwd2FyZGx5IGNvbXBhdGlibGUgd2l0aCBBZGEKICAgLS0gICA4My4gVGhpcyBtZWFucyB0aGF0IGEgY29ycmVjdCBBZGEgODMgcHJvZ3JhbSBpcyB1c3VhbGx5IGFsc28gYSBjb3JyZWN0CiAgIC0tICAgQWRhIDk1IHByb2dyYW0uCgogICBTX0dDQ19BZGFfOTUgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvOTUgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdDk1IjsKICAgLS0gICAgICAgIC85NSAoRCkKICAgLS0KICAgLS0gICBBbGxvd3MgR05BVCB0byByZWNvZ25pemUgdGhlIGZ1bGwgcmFuZ2Ugb2YgQWRhIDk1IGNvbnN0cnVjdHMuCiAgIC0tICAgVGhpcyBpcyB0aGUgbm9ybWFsIGRlZmF1bHQgZm9yIEdOQVQgUHJvLgoKICAgU19HQ0NfQWRhXzA1IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvMDUgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdDA1IjsKICAgLS0gICAgICAgIC8wNSAoRCkKICAgLS0KICAgLS0gICBBbGxvd3MgR05BVCB0byByZWNvZ25pemUgYWxsIGltcGxlbWVudGVkIHByb3Bvc2VkIEFkYSAyMDA1CiAgIC0tICAgZXh0ZW5zaW9ucy4gU2VlIGZlYXR1cmVzIGZpbGUgZm9yIGxpc3Qgb2YgaW1wbGVtZW50ZWQgZmVhdHVyZXMuCgogICBTX0dDQ19Bc20gICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQVNNICIgICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItUywhLWMiOwogICAtLSAgICAgICAgL05PQVNNIChEKQogICAtLSAgICAgICAgL0FTTQogICAtLQogICAtLSAgIFVzZSB0byBjYXVzZSB0aGUgYXNzZW1ibGVyIHNvdXJjZSBmaWxlIHRvIGJlIGdlbmVyYXRlZCwgdXNpbmcgUyBhcyB0aGUKICAgLS0gICBmaWxldHlwZSwgaW5zdGVhZCBvZiB0aGUgb2JqZWN0IGZpbGUuIFRoaXMgbWF5IGJlIHVzZWZ1bCBpZiB5b3UgbmVlZAogICAtLSAgIHRvIGV4YW1pbmUgdGhlIGdlbmVyYXRlZCBhc3NlbWJseSBjb2RlLgoKICAgU19HQ0NfQ2hlY2tzICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NIRUNLUz0iICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRlVMTCAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdG8sIS1nbmF0RSwhLWduYXRwICIgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9WRVJGTE9XICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRvICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTEFCT1JBVElPTiAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0RSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVNTRVJUSU9OUyAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGEgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFRkFVTFQgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1nbmF0bywhLWduYXRwICIgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTVEFDSyAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1mc3RhY2stY2hlY2sgIiAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1VQUFJFU1NfQUxMICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHAiOwogICAtLSAgICAgICAgL05PQ0hFQ0tTCiAgIC0tICAgICAgICAvQ0hFQ0tTWz0oa2V5d29yZFssLi4uXSldCiAgIC0tCiAgIC0tICAgSWYgeW91IGNvbXBpbGUgd2l0aCB0aGUgZGVmYXVsdCBvcHRpb25zLCBHTkFUIHdpbGwgaW5zZXJ0IG1hbnkgcnVudGltZQogICAtLSAgIGNoZWNrcyBpbnRvIHRoZSBjb21waWxlZCBjb2RlLCBpbmNsdWRpbmcgY29kZSB0aGF0IHBlcmZvcm1zIHJhbmdlCiAgIC0tICAgY2hlY2tpbmcgYWdhaW5zdCBjb25zdHJhaW50cywgYnV0IG5vdCBhcml0aG1ldGljIG92ZXJmbG93IGNoZWNraW5nIGZvcgogICAtLSAgIGludGVnZXIgb3BlcmF0aW9ucyAoaW5jbHVkaW5nIGRpdmlzaW9uIGJ5IHplcm8pIG9yIGNoZWNrcyBmb3IgYWNjZXNzCiAgIC0tICAgYmVmb3JlIGVsYWJvcmF0aW9uIG9uIHN1YnByb2dyYW0gY2FsbHMuICBBbGwgb3RoZXIgcnVudGltZSBjaGVja3MsIGFzCiAgIC0tICAgcmVxdWlyZWQgYnkgdGhlIEFkYSA5NSBSZWZlcmVuY2UgTWFudWFsLCBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQuCiAgIC0tCiAgIC0tICAgWW91IG1heSBzcGVjaWZ5IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcga2V5d29yZHMgdG8gdGhlIC9DSEVDS1MKICAgLS0gICBxdWFsaWZpZXIgdG8gbW9kaWZ5IHRoaXMgYmVoYXZpb3I6CiAgIC0tCiAgIC0tICAgICBERUZBVUxUICAgICAgIFRoZSBiZWhhdmlvciBkZXNjcmliZWQgYWJvdmUuIFRoaXMgaXMgdGhlIGRlZmF1bHQKICAgLS0gICAgICAgICAgICAgICAgICAgaWYgdGhlIC9DSEVDS1MgcXVhbGlmaWVyIGlzIG5vdCBwcmVzZW50IG9uIHRoZQogICAtLSAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpbmUuIFNhbWUgYXMgL05PQ0hFQ0tTLgogICAtLQogICAtLSAgICAgT1ZFUkZMT1cgICAgICBFbmFibGVzIG92ZXJmbG93IGNoZWNraW5nIGZvciBpbnRlZ2VyIG9wZXJhdGlvbnMgYW5kCiAgIC0tICAgICAgICAgICAgICAgICAgIGNoZWNrcyBmb3IgYWNjZXNzIGJlZm9yZSBlbGFib3JhdGlvbiBvbiBzdWJwcm9ncmFtCiAgIC0tICAgICAgICAgICAgICAgICAgIGNhbGxzLiBUaGlzIGNhdXNlcyBHTkFUIHRvIGdlbmVyYXRlIHNsb3dlciBhbmQgbGFyZ2VyCiAgIC0tICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgcHJvZ3JhbXMgYnkgYWRkaW5nIGNvZGUgdG8gY2hlY2sgZm9yIGJvdGgKICAgLS0gICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGJ5IHplcm8gKHJlc3VsdGluZyBpbiByYWlzaW5nCiAgIC0tICAgICAgICAgICAgICAgICAgICJDb25zdHJhaW50X0Vycm9yIiBhcyByZXF1aXJlZCBieSBBZGEgc2VtYW50aWNzKS4KICAgLS0gICAgICAgICAgICAgICAgICAgU2ltaWxhcmx5LCBHTkFUIGRvZXMgbm90IGdlbmVyYXRlIGVsYWJvcmF0aW9uIGNoZWNrCiAgIC0tICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQsIGFuZCB5b3UgbXVzdCBzcGVjaWZ5IHRoaXMga2V5d29yZCB0bwogICAtLSAgICAgICAgICAgICAgICAgICBlbmFibGUgdGhlbS4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMga2V5d29yZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvZGUKICAgLS0gICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGZvciBhbnkgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uczsgaXQKICAgLS0gICAgICAgICAgICAgICAgICAgYXBwbGllcyBvbmx5IHRvIGludGVnZXIgb3BlcmF0aW9ucy4gRm9yIGZsb2F0aW5nLXBvaW50LAogICAtLSAgICAgICAgICAgICAgICAgICBHTkFUIGhhcyB0aGUgIk1hY2hpbmVfT3ZlcmZsb3dzIiBhdHRyaWJ1dGUgc2V0IHRvCiAgIC0tICAgICAgICAgICAgICAgICAgICJGYWxzZSIgYW5kIHRoZSBub3JtYWwgbW9kZSBvZiBvcGVyYXRpb24gaXMgdG8gZ2VuZXJhdGUKICAgLS0gICAgICAgICAgICAgICAgICAgSUVFRSBOYU4gYW5kIGluZmluaXRlIHZhbHVlcyBvbiBvdmVyZmxvdyBvciBpbnZhbGlkCiAgIC0tICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMgKHN1Y2ggYXMgZGl2aWRpbmcgMC4wIGJ5IDAuMCkuCiAgIC0tCiAgIC0tICAgICBFTEFCT1JBVElPTiAgIEVuYWJsZXMgZHluYW1pYyBjaGVja3MgZm9yIGFjY2Vzcy1iZWZvcmUtZWxhYm9yYXRpb24KICAgLS0gICAgICAgICAgICAgICAgICAgb24gc3VicHJvZ3JhbSBjYWxscyBhbmQgZ2VuZXJpYyBpbnN0YW50aWF0aW9ucy4KICAgLS0KICAgLS0gICAgIEFTU0VSVElPTlMgICAgVGhlIHByYWdtYXMgIkFzc2VydCIgYW5kICJEZWJ1ZyIgbm9ybWFsbHkgaGF2ZSBubwogICAtLSAgICAgICAgICAgICAgICAgICBlZmZlY3QgYW5kIGFyZSBpZ25vcmVkLiBUaGlzIGtleXdvcmQgY2F1c2VzICJBc3NlcnQiCiAgIC0tICAgICAgICAgICAgICAgICAgIGFuZCAiRGVidWciIHByYWdtYXMgdG8gYmUgYWN0aXZhdGVkLgogICAtLQogICAtLSAgICAgU1VQUFJFU1NfQUxMICBTdXBwcmVzcyBhbGwgcnVudGltZSBjaGVja3MgYXMgdGhvdWdoIHlvdSBoYXZlICJwcmFnbWEKICAgLS0gICAgICAgICAgICAgICAgICAgU3VwcHJlc3MgKGFsbF9jaGVja3MpIiBpbiB5b3VyIHNvdXJjZS4gVXNlIHRoaXMgc3dpdGNoCiAgIC0tICAgICAgICAgICAgICAgICAgIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBjb2RlIGF0IHRoZSBleHBlbnNlCiAgIC0tICAgICAgICAgICAgICAgICAgIG9mIHNhZmV0eSBpbiB0aGUgcHJlc2VuY2Ugb2YgaW52YWxpZCBkYXRhIG9yIHByb2dyYW0KICAgLS0gICAgICAgICAgICAgICAgICAgYnVncy4KICAgLS0KICAgLS0gICAgIERFRkFVTFQgICAgICAgU3VwcHJlc3MgdGhlIGVmZmVjdCBvZiBhbnkgb3B0aW9uIE9WRVJGTE9XIG9yCiAgIC0tICAgICAgICAgICAgICAgICAgIEFTU0VSVElPTlMuCiAgIC0tCiAgIC0tICAgICBGVUxMIChEKSAgICAgIFNpbWlsYXIgdG8gT1ZFUkZMT1csIGJ1dCBzdXBwcmVzcyB0aGUgZWZmZWN0IG9mIGFueQogICAtLSAgICAgICAgICAgICAgICAgICBvcHRpb24gRUxBQk9SQVRJT04gb3IgU1VQUFJFU1NfQUxMLgogICAtLQogICAtLSAgIFRoZXNlIGtleXdvcmRzIG9ubHkgY29udHJvbCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBjaGVja3MuICBZb3UKICAgLS0gICBtYXkgbW9kaWZ5IHRoZW0gdXNpbmcgZWl0aGVyICJTdXBwcmVzcyIgKHRvIHJlbW92ZSBjaGVja3MpIG9yCiAgIC0tICAgIlVuc3VwcHJlc3MiICh0byBhZGQgYmFjayBzdXBwcmVzc2VkIGNoZWNrcykgcHJhZ21hcyBpbiB5b3VyIHByb2dyYW0KICAgLS0gICBzb3VyY2UuCgogICBTX0dDQ19DaGVja3NYIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9DSEVDS1MgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHAsIS1nbmF0bywhLWduYXRFIjsKICAgLS0gIE5PRE9DIChzZWUgL0NIRUNLUykKCiAgIFNfR0NDX0NvbXByZXMgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9DT01QUkVTU19OQU1FUyAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0QyI7CiAgIC0tICAgICAgICAvTk9DT01QUkVTU19OQU1FUyAoRCkKICAgLS0gICAgICAgIC9DT01QUkVTU19OQU1FUwogICAtLQogICAtLSAgIENvbXByZXNzIGRlYnVnIGluZm9ybWF0aW9uIGFuZCBleHRlcm5hbCBzeW1ib2wgbmFtZSB0YWJsZSBlbnRyaWVzLgogICAtLSAgIEluIHRoZSBnZW5lcmF0ZWQgZGVidWdnaW5nIGluZm9ybWF0aW9uLCBhbmQgYWxzbyBpbiB0aGUgY2FzZSBvZiBsb25nCiAgIC0tICAgZXh0ZXJuYWwgbmFtZXMsIHRoZSBjb21waWxlciB1c2VzIGEgY29tcHJlc3Npb24gbWVjaGFuaXNtIGlmIHRoZSBuYW1lCiAgIC0tICAgaXMgdmVyeSBsb25nLiAgVGhpcyBjb21wcmVzc2lvbiBtZXRob2QgdXNlcyBhIGNoZWNrc3VtLCBhbmQgYXZvaWRzCiAgIC0tICAgdHJvdWJsZSBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIHdoaWNoIGhhdmUgZGlmZmljdWx0eSB3aXRoIHZlcnkgbG9uZwogICAtLSAgIG5hbWVzLgoKICAgU19HQ0NfQ29uZmlnICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NPTkZJR1VSQVRJT05fUFJBR01BU19GSUxFPTwiICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRlYz4iOwogICAtLSAgICAgICAgL0NPTkZJR1VSQVRJT05fUFJBR01BU19GSUxFPWZpbGUKICAgLS0KICAgLS0gICBTcGVjaWZ5IGEgY29uZmlndXJhdGlvbiBwcmFnbWFzIGZpbGUgdGhhdCBuZWVkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudAoKICAgU19HQ0NfQ3VycmVudCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NVUlJFTlRfRElSRUNUT1JZICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1JLSI7CiAgIC0tICAgICAgICAvQ1VSUkVOVF9ESVJFQ1RPUlkgKEQpCiAgIC0tICAgICAgICAvTk9DVVJSRU5UX0RJUkVDVE9SWQogICAtLQogICAtLSAgIExvb2sgZm9yIHNvdXJjZSBmaWxlcyBpbiB0aGUgZGVmYXVsdCBkaXJlY3RvcnkuCgogICBTX0dDQ19EYXRhICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvREFUQV9QUkVQUk9DRVNTSU5HPTwiICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0ZXA+IjsKICAgLS0gICAgICAgIC9EQVRBX1BSRVBST0NFU1NJTkc9ZmlsZV9uYW1lCiAgIC0tCiAgIC0tICAgVGhpcyBxdWFsaWZpZXIgaW5kaWNhdGVzIHRvIHRoZSBjb21waWxlciB0aGUgZmlsZSBuYW1lICh3aXRob3V0CiAgIC0tICAgZGlyZWN0b3J5IGluZm9ybWF0aW9uKSBvZiB0aGUgcHJlcHJvY2Vzc29yIGRhdGEgZmlsZSB0byB1c2UuCiAgIC0tICAgVGhlIHByZXByb2Nlc3NvciBkYXRhIGZpbGUgc2hvdWxkIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgZGlyZWN0b3JpZXMuCiAgIC0tCiAgIC0tICAgQSBwcmVwcm9jZXNzaW5nIGRhdGEgZmlsZSBpcyBhIHRleHQgZmlsZSB3aXRoIHNpZ25pZmljYW50IGxpbmVzCiAgIC0tICAgaW5kaWNhdGluZyBob3cgc2hvdWxkIGJlIHByZXByb2Nlc3NlZCBlaXRoZXIgYSBzcGVjaWZpYyBzb3VyY2Ugb3IgYWxsCiAgIC0tICAgc291cmNlcyBub3QgbWVudGlvbmVkIGluIG90aGVyIGxpbmVzLiBBIHNpZ25pZmljYW50IGxpbmUgaXMgYSBub24KICAgLS0gICBlbXB0eSwgbm9uIGNvbW1lbnQgbGluZS4gQ29tbWVudHMgYXJlIHNpbWlsYXIgdG8gQWRhIGNvbW1lbnRzLgogICAtLQogICAtLSAgRWFjaCBzaWduaWZpY2FudCBsaW5lIHN0YXJ0cyB3aXRoIGVpdGhlciBhIGxpdGVyYWwgc3RyaW5nIG9yIHRoZQogICAtLSAgY2hhcmFjdGVyICcqJy4gQSBsaXRlcmFsIHN0cmluZyBpcyB0aGUgZmlsZSBuYW1lICh3aXRob3V0IGRpcmVjdG9yeQogICAtLSAgaW5mb3JtYXRpb24pIG9mIHRoZSBzb3VyY2UgdG8gcHJlcHJvY2Vzcy4gQSBjaGFyYWN0ZXIgJyonIGluZGljYXRlcyB0aGUKICAgLS0gIHByZXByb2Nlc3NpbmcgZm9yIGFsbCB0aGUgc291cmNlcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkgb24KICAgLS0gIG90aGVyIGxpbmVzLiBJdCBpcyBhbiBlcnJvciB0byBoYXZlIHR3byBsaW5lcyB3aXRoIHRoZSBzYW1lIGZpbGUgbmFtZQogICAtLSAgb3IgdHdvIGxpbmVzIHN0YXJ0aW5nIHdpdGggdGhlIGNoYXJhY3RlciAnKicuCiAgIC0tCiAgIC0tICBBZnRlciB0aGUgZmlsZSBuYW1lIG9yIHRoZSBjaGFyYWN0ZXIgJyonLCBhbm90aGVyIG9wdGlvbmFsIGxpdGVyYWwKICAgLS0gIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGRlZmluaXRpb24gZmlsZSB0byBiZSB1c2VkIGZvcgogICAtLSAgcHJlcHJvY2Vzc2luZy4gKHNlZSAxNS4zIEZvcm0gb2YgRGVmaW5pdGlvbnMgRmlsZS4gVGhlIGRlZmluaXRpb24gZmlsZXMKICAgLS0gIGFyZSBmb3VuZCBieSB0aGUgY29tcGlsZXIgaW4gb25lIG9mIHRoZSBzb3VyY2UgZGlyZWN0b3JpZXMuIEluIHNvbWUKICAgLS0gIGNhc2VzLCB3aGVuIGNvbXBpbGluZyBhIHNvdXJjZSBpbiBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBjdXJyZW50CiAgIC0tICBkaXJlY3RvcnksIGlmIHRoZSBkZWZpbml0aW9uIGZpbGUgaXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBpdCBtYXkKICAgLS0gIGJlIG5lY2Vzc2FyeSB0byBhZGQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFzIGEgc291cmNlIGRpcmVjdG9yeSB0aHJvdWdoCiAgIC0tICBxdWFsaWZpZXIgIi9TRUFSQ0g9W10iLCBvdGhlcndpc2UgdGhlIGNvbXBpbGVyIHdvdWxkIG5vdCBmaW5kIHRoZQogICAtLSAgZGVmaW5pdGlvbiBmaWxlLgogICAtLQogICAtLSAgVGhlbiwgb3B0aW9uYWxseSwgc3dpdGNoZXMgc2ltaWxhciB0byB0aG9zZSBvZiBnbmF0cHJlcCBtYXkgYmUgZm91bmQuCiAgIC0tICBUaG9zZSBzd2l0Y2hlcyBhcmU6CiAgIC0tCiAgIC0tICAgLWIgICAgICAgICAgICAgIENhdXNlcyBib3RoIHByZXByb2Nlc3NvciBsaW5lcyBhbmQgdGhlIGxpbmVzIGRlbGV0ZWQgYnkKICAgLS0gICAgICAgICAgICAgICAgICAgcHJlcHJvY2Vzc2luZyB0byBiZSByZXBsYWNlZCBieSBibGFuayBsaW5lcywgcHJlc2VydmluZwogICAtLSAgICAgICAgICAgICAgICAgICB0aGUgbGluZSBudW1iZXIuIFRoaXMgc3dpdGNoIGlzIGFsd2F5cyBpbXBsaWVkOwogICAtLSAgICAgICAgICAgICAgICAgICBob3dldmVyLCBpZiBzcGVjaWZpZWQgYWZ0ZXIgYC1jJyBpdCBjYW5jZWxzIHRoZSBlZmZlY3QKICAgLS0gICAgICAgICAgICAgICAgICAgb2YgYC1jJy4KICAgLS0KICAgLS0gICAtYyAgICAgICAgICAgICAgQ2F1c2VzIGJvdGggcHJlcHJvY2Vzc29yIGxpbmVzIGFuZCB0aGUgbGluZXMgZGVsZXRlZCBieQogICAtLSAgICAgICAgICAgICAgICAgICBwcmVwcm9jZXNzaW5nIHRvIGJlIHJldGFpbmVkIGFzIGNvbW1lbnRzIG1hcmtlZCB3aXRoCiAgIC0tICAgICAgICAgICAgICAgICAgIHRoZSBzcGVjaWFsIHN0cmluZyAiLS0hICIuCiAgIC0tCiAgIC0tICAgLURzeW1ib2w9dmFsdWUgIERlZmluZSBvciByZWRlZmluZSBhIHN5bWJvbCwgYXNzb2NpYXRlZCB3aXRoIHZhbHVlLgogICAtLSAgICAgICAgICAgICAgICAgICBBIHN5bWJvbCBpcyBhbiBBZGEgaWRlbnRpZmllciwgb3IgYW4gQWRhIHJlc2VydmVkIHdvcmQsCiAgIC0tICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAiaWYiLCAiZWxzZSIsICJlbHNpZiIsICJlbmQiLAogICAtLSAgICAgICAgICAgICAgICAgICAiYW5kIiwgIm9yIiBhbmQgInRoZW4iLiB2YWx1ZSBpcyBlaXRoZXIgYSBsaXRlcmFsCiAgIC0tICAgICAgICAgICAgICAgICAgIHN0cmluZywgYW4gQWRhIGlkZW50aWZpZXIgb3IgYW55IEFkYSByZXNlcnZlZCB3b3JkLgogICAtLSAgICAgICAgICAgICAgICAgICBBIHN5bWJvbCBkZWNsYXJlZCB3aXRoIHRoaXMgc3dpdGNoIHJlcGxhY2VzIGEgc3ltYm9sCiAgIC0tICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIHNhbWUgbmFtZSBkZWZpbmVkIGluIGEgZGVmaW5pdGlvbiBmaWxlLgogICAtLQogICAtLSAgIC1zICAgICAgICAgICAgICBDYXVzZXMgYSBzb3J0ZWQgbGlzdCBvZiBzeW1ib2wgbmFtZXMgYW5kIHZhbHVlcyB0byBiZQogICAtLSAgICAgICAgICAgICAgICAgICBsaXN0ZWQgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBmaWxlLgogICAtLQogICAtLSAgIC11ICAgICAgICAgICAgICBDYXVzZXMgdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgdHJlYXRlZCBhcyBoYXZpbmcgdGhlCiAgIC0tICAgICAgICAgICAgICAgICAgIHZhbHVlIEZBTFNFIGluIHRoZSBjb250ZXh0IG9mIGEgcHJlcHJvY2Vzc29yIHRlc3QuCiAgIC0tICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYnNlbmNlIG9mIHRoaXMgb3B0aW9uLCBhbiB1bmRlZmluZWQgc3ltYm9sCiAgIC0tICAgICAgICAgICAgICAgICAgIGluIGEgI2lmIG9yICNlbHNpZiB0ZXN0IHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4KICAgLS0KICAgLS0gICBFeGFtcGxlcyBvZiB2YWxpZCBsaW5lcyBpbiBhIHByZXByb2Nlc3NvciBkYXRhIGZpbGU6CiAgIC0tCiAgIC0tICAgICAidG90by5hZGIiICAicHJlcC5kZWYiIC11CiAgIC0tICAgICAtLSAgcHJlcHJvY2VzcyAidG90by5hZGIiLCB1c2luZyBkZWZpbml0aW9uIGZpbGUgInByZXAuZGVmIiwKICAgLS0gICAgIC0tICB1bmRlZmluZWQgc3ltYm9sIGFyZSBGYWxzZS4KICAgLS0KICAgLS0gICAgICogLWMgLURWRVJTSU9OPVYxMDEKICAgLS0gICAgIC0tICBwcmVwcm9jZXNzIGFsbCBvdGhlciBzb3VyY2VzIHdpdGhvdXQgYSBkZWZpbml0aW9uIGZpbGU7CiAgIC0tICAgICAtLSAgc3VwcHJlc3NlZCBsaW5lZCBhcmUgY29tbWVudGVkOyBzeW1ib2wgVkVSU0lPTiBoYXMgdGhlIHZhbHVlCiAgIC0tICAgICAtLSAgVjEwMS4KICAgLS0KICAgLS0gICAgICJ0aXRpLmFkYiIgInByZXAyLmRlZiIgLXMKICAgLS0gICAgIC0tICBwcmVwcm9jZXNzICJ0aXRpLmFkYiIsIHVzaW5nIGRlZmluaXRpb24gZmlsZSAicHJlcDIuZGVmIjsKICAgLS0gICAgIC0tICBsaXN0IGFsbCBzeW1ib2xzIHdpdGggdGhlaXIgdmFsdWVzLgoKICAgU19HQ0NfRGVidWcgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0RFQlVHPSIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTWU1CT0xTICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nMiAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9TWU1CT0xTICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLWcyICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRSQUNFQkFDSyAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWcxICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBTEwgIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nMyAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9ORSAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZzAgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PVFJBQ0VCQUNLICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWcwIjsKICAgLS0gICAgICAgIC9ERUJVR1s9ZGVidWctbGV2ZWxdCiAgIC0tICAgICAgICAvTk9ERUJVRwogICAtLQogICAtLSAgIFNwZWNpZmllcyBob3cgbXVjaCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgdG8gYmUgaW5jbHVkZWQgaW4KICAgLS0gICB0aGUgcmVzdWx0aW5nIG9iamVjdCBmaWUuCiAgIC0tCiAgIC0tICAgJ2RlYnVnLWxldmVsJyBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgICAgIFNZTUJPTFMgKEQpICAgIEluY2x1ZGUgYm90aCBkZWJ1Z2dlciBzeW1ib2wgcmVjb3JkcyBhbmQgdHJhY2ViYWNrCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgb2JqZWN0IGZpbGUuCiAgIC0tCiAgIC0tICAgICAgICBBTEwgICAgICAgICAgICBJbmNsdWRlIGRlYnVnZ2VyIHN5bWJvbCByZWNvcmRzLCB0cmFjZWJhY2sgcGx1cwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgZGVidWcgaW5mb3JtYXRpb24gaW4gdGhlIG9iamVjdCBmaWxlLgogICAtLQogICAtLSAgICAgICAgTk9ORSAgICAgICAgICAgRXhjbHVkZXMgYm90aCBkZWJ1Z2dlciBzeW1ib2wgcmVjb3JkcyBhbmQgdHJhY2ViYWNrCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBvYmplY3QgZmlsZS4gIFNhbWUgYXMgL05PREVCVUcuCiAgIC0tCiAgIC0tICAgICAgICBUUkFDRUJBQ0sgICAgICBJbmNsdWRlcyBvbmx5IHRyYWNlYmFjayByZWNvcmRzIGluIHRoZSBvYmplY3QKICAgLS0gICAgICAgICAgICAgICAgICAgICAgIGZpbGUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiAvREVCVUcgaXMgbm90IHVzZWQuCgogICBTX0dDQ19EZWJ1Z1ggIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9ERUJVRyAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLWciOwogICAtLSAgTk9ET0MgKHNlZSAvRGVidWcpCgogICBTX0dDQ19EaXN0ICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRElTVFJJQlVUSU9OX1NUVUJTPSIgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFQ0VJVkVSICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR6ciAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDQUxMRVIgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR6YyI7CiAgIC0tICAgICAgICAvTk9ESVNUUklCVVRJT05fU1RVQlMgKEQpCiAgIC0tICAgICAgICAvRElTVFJJQlVUSU9OX1NUVUJTWz1kaXN0LW9wdF0KICAgLS0KICAgLS0gICAnZGlzdC1vcHQnIGlzIGVpdGhlciBSRUNFSVZFUiAodGhlIGRlZmF1bHQpIG9yIFNFTkRFUiBhbmQgaW5kaWNhdGVzCiAgIC0tICAgdGhhdCBzdHVicyBmb3IgdXNlIGluIGRpc3RyaWJ1dGVkIHByb2dyYW1zIChzZWUgdGhlIERpc3RyaWJ1dGVkCiAgIC0tICAgU3lzdGVtcyBBbm5leCBvZiB0aGUgQWRhIFJNKSBzaG91bGQgYmUgZ2VuZXJhdGVkLgoKICAgU19HQ0NfRGlzdFggICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PRElTVFJJQlVUSU9OX1NUVUJTICIgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLWduYXR6ciwhLWduYXR6YyI7CiAgIC0tICBOT0RPQyAoc2VlIC9ESVNUUklCVVRJT05fU1RVQlMpCgogICBTX0dDQ19FcnJvciAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRVJST1JfTElNSVQ9IyIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0bSMiOwogICAtLSAgICAgICAgL05PRVJST1JfTElNSVQgKEQpCiAgIC0tICAgICAgICAvRVJST1JfTElNSVQ9bm5uCiAgIC0tCiAgIC0tICAgTk5OIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAxIHRvIDk5OTk5OSBhbmQgbGltaXRzIHRoZQogICAtLSAgIG51bWJlciBvZiBlcnJvciBtZXNzYWdlcyB0byBiZSBnZW5lcmF0ZWQgdG8gdGhhdCBudW1iZXIuICBPbmNlIHRoYXQKICAgLS0gICBudW1iZXIgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIGNvbXBpbGF0aW9uIGlzIGFiYW5kb25lZC4KICAgLS0gICBTcGVjaWZ5aW5nIDk5OTk5OSBpcyBlcXVpdmFsZW50IHRvIC9OT0VSUk9SX0xJTUlULgoKICAgU19HQ0NfRXJyb3JYICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PRVJST1JfTElNSVQgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdG05OTk5OTkiOwogICAtLSAgTk9ET0MgKHNlZSAvRVJST1JfTElNSVQpCgogICBTX0dDQ19FeHBhbmQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRVhQQU5EX1NPVVJDRSAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0RyI7CiAgIC0tICAgICAgICAvTk9FWFBBTkRfU09VUkNFIChEKQogICAtLSAgICAgICAgL0VYUEFORF9TT1VSQ0UKICAgLS0KICAgLS0gICBQcm9kdWNlcyBhIGxpc3Rpbmcgb2YgdGhlIGV4cGFuZGVkIGNvZGUgaW4gQWRhIHNvdXJjZSBmb3JtLiBGb3IKICAgLS0gICBleGFtcGxlLCBhbGwgdGFza2luZyBjb25zdHJ1Y3RzIGFyZSByZWR1Y2VkIHRvIGFwcHJvcHJpYXRlIHJ1bi10aW1lCiAgIC0tICAgbGlicmFyeSBjYWxscy4KCiAgIFNfR0NDX0V4dGVuZCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9FWFRFTlNJT05TX0FMTE9XRUQgIiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRYIjsKICAgLS0gICAgICAgIC9OT0VYVEVOU0lPTlNfQUxMT1dFRCAoRCkKICAgLS0gICAgICAgIC9FWFRFTlNJT05TX0FMTE9XRUQKICAgLS0KICAgLS0gICBHTkFUIHNwZWNpZmljIGxhbmd1YWdlIGV4dGVuc2lvbnMgYWxsb3dlZC4KCiAgIFNfR0NDX0V4dCAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9FWFRFUk5BTF9SRUZFUkVOQ0U9IiAmICciJyAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVgiICYgJyInOwogICAtLSAgICAgICAgL0VYVEVSTkFMX1JFRkVSRU5DRT0ibmFtZT12YWwiCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIGFuIGV4dGVybmFsIHJlZmVyZW5jZSB0byB0aGUgcHJvamVjdCBtYW5hZ2VyLiBVc2VmdWwgb25seSBpZgogICAtLSAgIC9QUk9KRUNUX0ZJTEUgaXMgdXNlZC4KICAgLS0KICAgLS0gICBFeGFtcGxlOgogICAtLSAgICAgIC9FWFRFUk5BTF9SRUZFUkVOQ0U9IkRFQlVHPVRSVUUiCgogICBTX0dDQ19GaWxlICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRklMRV9OQU1FX01BWF9MRU5HVEg9IyIgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0ayMiOwogICAtLSAgICAgICAgL0ZJTEVfTkFNRV9NQVhfTEVOR1RIPW5ubgogICAtLQogICAtLSAgIEFjdGl2YXRlcyBmaWxlIG5hbWUgImtydW5jaGluZyIuIE5OTiwgYSBkZWNpbWFsIGludGVnZXIgaW4gdGhlIHJhbmdlCiAgIC0tICAgMS05OTksIGluZGljYXRlcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIGEgZmlsZSBuYW1lIChub3QKICAgLS0gICBpbmNsdWRpbmcgdGhlIEFEUyBvciBBREIgZmlsZXR5cGUuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBlbmFibGUgZmlsZQogICAtLSAgIG5hbWUga3J1bmNoaW5nLgoKICAgU19HQ0NfRm9yY2UgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0ZPUkNFX0FMSSAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFEiOwogICAtLSAgICAgICAgL05PRk9SQ0VfQUxJIChEKQogICAtLSAgICAgICAgL0ZPUkNFX0FMSQogICAtLQogICAtLSAgIEluIG5vcm1hbCBvcGVyYXRpb24gbW9kZSwgdGhlIC5BTEkgZmlsZSBpcyBub3QgZ2VuZXJhdGVkIGlmIGFueQogICAtLSAgIGlsbGVnYWxpdGllcyBhcmUgZGV0ZWN0ZWQgaW4gdGhlIHByb2dyYW0uIFRoZSB1c2Ugb2YgdGhpcyBxdWFsaWZpZXIKICAgLS0gICBmb3JjZXMgZ2VuZXJhdGlvbiBvZiB0aGUgLkFMSSBmaWxlLiBUaGlzIGZpbGUgaXMgbWFya2VkIGFzIGJlaW5nCiAgIC0tICAgaW4gZXJyb3IsIHNvIGl0IGNhbm5vdCBiZSB1c2VkIGZvciBiaW5kaW5nIHB1cnBvc2VzLCBidXQgaXQgZG9lcwogICAtLSAgIGNvbnRhaW4gcmVhc29uYWJseSBjb21wbGV0ZSBjcm9zcy1yZWZlcmVuY2UgaW5mb3JtYXRpb24sIGFuZCB0aHVzIG1heQogICAtLSAgIGJlIHVzZWZ1bCBmb3IgdXNlIGJ5IHRvb2xzIChlLmcuIHNlbWFudGljIGJyb3dpbmcgdG9vbHMgb3IgaW50ZWdyYXRlZAogICAtLSAgIGRldmVsb3BtZW50IGVudmlyb25tZW50cykgdGhhdCBhcmUgZHJpdmVuIGZyb20gdGhlIC5BTEkgZmlsZS4KCiAgIFNfR0NDX0Z1bGwgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9GVUxMX1BBVEhfSU5fQlJJRUZfTUVTU0FHRVMgIiAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRlZiI7CiAgIC0tICAgICAgICAvTk9GVUxMX1BBVEhfSU5fQlJJRUZfTUVTU0FHRVMgKEQpCiAgIC0tICAgICAgICAvRlVMTF9QQVRIX0lOX0JSSUVGX01FU1NBR0VTCiAgIC0tCiAgIC0tICAgV2hlbiB1c2luZyBwcm9qZWN0IGZpbGVzLCBpZiBzb21lIGVycm9ycyBvciB3YXJuaW5ncyBhcmUgZGV0ZWN0ZWQKICAgLS0gICBkdXJpbmcgcGFyc2luZyBhbmQgdmVyYm9zZSBtb2RlIGlzIG5vdCBpbiBlZmZlY3QgKG5vIHVzZSBvZiBxdWFsaWZpZXIKICAgLS0gICAvVkVSQk9TRSksIHRoZW4gZXJyb3IgbGluZXMgc3RhcnQgd2l0aCB0aGUgZnVsbCBwYXRoIG5hbWUgb2YgdGhlCiAgIC0tICAgcHJvamVjdCBmaWxlLCByYXRoZXIgdGhhbiBpdHMgc2ltcGxlIGZpbGUgbmFtZS4KCiAgIFNfR0NDX0hlbHAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9IRUxQICIgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRoIjsKICAgLS0gICAgICAgIC9OT0hFTFAgKEQpCiAgIC0tICAgICAgICAvSEVMUAogICAtLQogICAtLSAgIE91dHB1dCB1c2FnZSBpbmZvcm1hdGlvbi4KCiAgIFNfR0NDX0lkZW50ICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9JREVOVElGSUVSX0NIQVJBQ1RFUl9TRVQ9IiAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFRkFVTFQgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRpMSAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxICIgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0aTEgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiAiICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGkyICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMgIiAgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRpMyAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0ICIgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0aTQgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSAiICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGk1ICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBDICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRpcCAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQzg1MCAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0aTggIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRlVMTF9VUFBFUiAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGlmICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PX1VQUEVSICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRpbiAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSURFICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0aXciOwogICAtLSAgICAgICAgL05PSURFTlRJRklFUl9DSEFSQUNURVJfU0VUIChEKQogICAtLSAgICAgICAgL0lERU5USUZJRVJfQ0hBUkFDVEVSX1NFVD1jaGFyLXNldAogICAtLQogICAtLSAgIE5vcm1hbGx5IEdOQVQgcmVjb2duaXplcyB0aGUgTGF0aW4tMSBjaGFyYWN0ZXIgc2V0IGluIHNvdXJjZSBwcm9ncmFtCiAgIC0tICAgaWRlbnRpZmllcnMsIGFzIGRlc2NyaWJlZCBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbC4gVGhpcyBxdWFsaWZpZXIKICAgLS0gICBjYXVzZXMgR05BVCB0byByZWNvZ25pemUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXRzIGluIGlkZW50aWZpZXJzLgogICAtLSAgICdjaGFyLXNldCcgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5ncyBpbmRpY2F0aW5nIHRoZSBjaGFyYWN0ZXIKICAgLS0gICBzZXQ6CiAgIC0tCiAgIC0tICAgICAgICBERUZBVUxUIChEKSBFcXVpdmFsZW50IHRvIDEsIGJlbG93LiBBbHNvIGVxdWl2YWxlbnQgdG8KICAgLS0gICAgICAgICAgICAgICAgICAgIC9OT0lERU5USUZJRVJfQ0hBUkFDVEVSX1NFVC4KICAgLS0KICAgLS0gICAgICAgIDEgICAgICAgICAgIFRoZSBiYXNpYyBjaGFyYWN0ZXIgc2V0IGlzIExhdGluLTEuIFRoaXMgY2hhcmFjdGVyCiAgIC0tICAgICAgICAgICAgICAgICAgICBzZXQgaXMgZGVmaW5lZCBieSBJU08gc3RhbmRhcmQgODg1OSwgcGFydCAxLiBUaGUgbG93ZXIKICAgLS0gICAgICAgICAgICAgICAgICAgIGhhbGYgKGNoYXJhY3RlciBjb2RlcyAxNiMwMCMgLi4uIDE2IzdGIykgaXMgaWRlbnRpY2FsCiAgIC0tICAgICAgICAgICAgICAgICAgICB0byBzdGFuZGFyZCBBU0NJSSBjb2RpbmcsIGJ1dCB0aGUgdXBwZXIgaGFsZiBpcyB1c2VkCiAgIC0tICAgICAgICAgICAgICAgICAgICB0byByZXByZXNlbnQgYWRkaXRpb25hbCBjaGFyYWN0ZXJzLiBUaGlzIGluY2x1ZGVzCiAgIC0tICAgICAgICAgICAgICAgICAgICBleHRlbmRlZCBsZXR0ZXJzIHVzZWQgYnkgRXVyb3BlYW4gbGFuZ3VhZ2VzLCBzdWNoIGFzCiAgIC0tICAgICAgICAgICAgICAgICAgICB0aGUgdW1sYXV0IHVzZWQgaW4gR2VybWFuLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgWW91IG1heSB1c2UgYW55IG9mIHRoZXNlIGV4dGVuZGVkIGNoYXJhY3RlcnMgZnJlZWx5CiAgIC0tICAgICAgICAgICAgICAgICAgICBpbiBjaGFyYWN0ZXIgb3Igc3RyaW5nIGxpdGVyYWxzLiBJbiBhZGRpdGlvbiwgdGhlCiAgIC0tICAgICAgICAgICAgICAgICAgICBleHRlbmRlZCBjaGFyYWN0ZXJzIHRoYXQgcmVwcmVzZW50IGxldHRlcnMgY2FuIGJlCiAgIC0tICAgICAgICAgICAgICAgICAgICB1c2VkIGluIGlkZW50aWZpZXJzLgogICAtLQogICAtLSAgICAgICAgMiAgICAgICAgICAgTGF0aW4tMiBsZXR0ZXJzIGFsbG93ZWQgaW4gaWRlbnRpZmllcnMsIHdpdGggdXBwZXJjYXNlCiAgIC0tICAgICAgICAgICAgICAgICAgICBhbmQgbG93ZXJjYXNlIGVxdWl2YWxlbmNlLgogICAtLQogICAtLSAgICAgICAgMyAgICAgICAgICAgTGF0aW4tMyBsZXR0ZXJzIGFsbG93ZWQgaW4gaWRlbnRpZmllcnMsIHdpdGggdXBwZXJjYXNlCiAgIC0tICAgICAgICAgICAgICAgICAgICBhbmQgbG93ZXIgY2FzZSBlcXVpdmFsZW5jZS4KICAgLS0KICAgLS0gICAgICAgIDQgICAgICAgICAgIExhdGluLTQgbGV0dGVycyBhbGxvd2VkIGluIGlkZW50aWZpZXJzLCB3aXRoIHVwcGVyY2FzZQogICAtLSAgICAgICAgICAgICAgICAgICAgYW5kIGxvd2VyIGNhc2UgZXF1aXZhbGVuY2UuCiAgIC0tCiAgIC0tICAgICAgICBQQyAgICAgICAgICBJQk0gUEMgY29kZSBwYWdlIDQzNy4gIFRoaXMgY29kZSBwYWdlIGlzIHRoZSBub3JtYWwKICAgLS0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZm9yIFBDcyBpbiB0aGUgVS5TLiBJdCBjb3JyZXNwb25kcyB0byB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIElCTSBQQyBjaGFyYWN0ZXIgc2V0LiBUaGlzIHNldCBoYXMgc29tZSwgYnV0CiAgIC0tICAgICAgICAgICAgICAgICAgICBub3QgYWxsLCBvZiB0aGUgZXh0ZW5kZWQgTGF0aW4tMSBsZXR0ZXJzLCBidXQgdGhlc2UKICAgLS0gICAgICAgICAgICAgICAgICAgIGxldHRlcnMgZG8gbm90IGhhdmUgdGhlIHNhbWUgZW5jb2RpbmcgYXMgTGF0aW4tMS4gSW4KICAgLS0gICAgICAgICAgICAgICAgICAgIHRoaXMgbW9kZSwgdGhlc2UgbGV0dGVycyBhcmUgYWxsb3dlZCBpbiBpZGVudGlmaWVycwogICAtLSAgICAgICAgICAgICAgICAgICAgd2l0aCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBlcXVpdmFsZW5jZS4KICAgLS0KICAgLS0gICAgICAgIFBDODUwICAgICAgIFRoaXMgY29kZSBwYWdlICg4NTApIGlzIGEgbW9kaWZpY2F0aW9uIG9mIDQzNyBleHRlbmRlZAogICAtLSAgICAgICAgICAgICAgICAgICAgdG8gaW5jbHVkZSBhbGwgdGhlIExhdGluLTEgbGV0dGVycywgYnV0IHN0aWxsIG5vdCB3aXRoCiAgIC0tICAgICAgICAgICAgICAgICAgICB0aGUgdXN1YWwgTGF0aW4tMSBlbmNvZGluZy4gSW4gdGhpcyBtb2RlLCBhbGwgdGhlc2UKICAgLS0gICAgICAgICAgICAgICAgICAgIGxldHRlcnMgYXJlIGFsbG93ZWQgaW4gaWRlbnRpZmllcnMgd2l0aCB1cHBlcmNhc2UgYW5kCiAgIC0tICAgICAgICAgICAgICAgICAgICBsb3dlciBjYXNlIGVxdWl2YWxlbmNlLgogICAtLQogICAtLSAgICAgICAgRlVMTF9VUFBFUiAgQW55IGNoYXJhY3RlciBpbiB0aGUgcmFuZ2UgODAtRkYgYWxsb3dlZCBpbgogICAtLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcnMsIGFuZCBhbGwgYXJlIGNvbnNpZGVyZWQgZGlzdGluY3QuICBJbgogICAtLSAgICAgICAgICAgICAgICAgICAgb3RoZXIgd29yZHMsIHRoZXJlIGFyZSBubyB1cHBlcmNhc2UgYW5kIGxvd2VyIGNhc2UKICAgLS0gICAgICAgICAgICAgICAgICAgIGVxdWl2YWxlbmNlcyBpbiB0aGlzIHJhbmdlLgogICAtLQogICAtLSAgICAgICAgTk9fVVBQRVIgICAgTm8gdXBwZXItaGFsZiBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSA4MC1GRiBhcmUKICAgLS0gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQgaW4gaWRlbnRpZmllcnMuICBUaGlzIGdpdmVzIEFkYSA5NQogICAtLSAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eSBmb3IgaWRlbnRpZmllciBuYW1lcy4KICAgLS0KICAgLS0gICAgICAgIFdJREUgICAgICAgIEdOQVQgYWxsb3dzIHdpZGUgY2hhcmFjdGVyIGNvZGVzIHRvIGFwcGVhciBpbgogICAtLSAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIGFuZCBzdHJpbmcgbGl0ZXJhbHMsIGFuZCBhbHNvIG9wdGlvbmFsbHkKICAgLS0gICAgICAgICAgICAgICAgICAgIGluIGlkZW50aWZpZXJzLiAgU2VlIHRoZSAvV0lERV9DSEFSQUNURVJfRU5DT0RJTkcKICAgLS0gICAgICAgICAgICAgICAgICAgIHF1YWxpZmllciBmb3IgaW5mb3JtYXRpb24gb24gZW5jb2RpbmcgZm9ybWF0cy4KCiAgIFNfR0NDX0lkZW50WCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT0lERU5USUZJRVJfQ0hBUkFDVEVSX1NFVCAiICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0aTEiOwogICAtLSAgTk9ET0MgKHNlZSAvSURFTlRJRklFUl9DSEFSQUNURVJfU0VUKQoKICAgU19HQ0NfSW1tZWQgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0lNTUVESUFURV9FUlJPUlMgIiAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGRPIjsKICAgLS0gICAgICAgIC9OT0lNTUVESUFURV9FUlJPUlMgKEQpCiAgIC0tICAgICAgICAvSU1NRURJQVRFX0VSUk9SUwogICAtLQogICAtLSAgIENhdXNlcyBlcnJvcnMgdG8gYmUgZGlzcGxheWVkIGFzIHNvb24gYXMgdGhleSBhcmUgZW5jb3VudGVyZWQsIHJhdGhlcgogICAtLSAgIHRoYW4gYWZ0ZXIgY29tcGlsYXRpb24gaXMgdGVybWluYXRlZC4gSWYgR05BVCB0ZXJtaW5hdGVzIHByZW1hdHVyZWx5CiAgIC0tICAgb3IgZ29lcyBpbnRvIGFuIGluZmluaXRlIGxvb3AsIHRoZSBsYXN0IGVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIG1heQogICAtLSAgIGhlbHAgdG8gcGlucG9pbnQgdGhlIGN1bHByaXQuCgogICBTX0dDQ19JbmxpbmUgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvSU5MSU5FPSIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBSQUdNQSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdG4gIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGVUxMICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXROICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1VQUFJFU1MgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1mbm8taW5saW5lIjsKICAgLS0gICAgICAgIC9OT0lOTElORSAoRCkKICAgLS0gICAgICAgIC9JTkxJTkVbPWtleXdvcmRdCiAgIC0tCiAgIC0tICAgU2VsZWN0cyB0aGUgbGV2ZWwgb2YgaW5saW5pbmcgZm9yIHlvdXIgcHJvZ3JhbS4gIEluIHRoZSBhYnNlbmNlIG9mIHRoaXMKICAgLS0gICBxdWFsaWZpZXIsIEdOQVQgZG9lcyBub3QgYXR0ZW1wdCBpbmxpbmluZyBhY3Jvc3MgdW5pdHMgYW5kIGRvZXMgbm90CiAgIC0tICAgbmVlZCB0byBhY2Nlc3MgdGhlIGJvZGllcyBvZiBzdWJwcm9ncmFtcyBmb3Igd2hpY2ggInByYWdtYSBJbmxpbmUiIGlzCiAgIC0tICAgc3BlY2lmaWVkIGlmIHRoZXkgYXJlIG5vdCBpbiB0aGUgY3VycmVudCB1bml0LgogICAtLQogICAtLSAgIFRoZSBzdXBwb3J0ZWQga2V5d29yZHMgYXJlIGFzIGZvbGxvd3M6CiAgIC0tCiAgIC0tICAgICAgICBQUkFHTUEgKEQpICBSZWNvZ25pemUgYW5kIHByb2Nlc3MgIklubGluZSIgcHJhZ21hcy4gIEhvd2V2ZXIsCiAgIC0tICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGlubGluaW5nIHRvIGFjdHVhbGx5IG9jY3VyLCBvcHRpbWl6YXRpb24KICAgLS0gICAgICAgICAgICAgICAgICAgIG11c3QgYmUgZW5hYmxlZC4gIFRoaXMgZW5hYmxlcyBpbmxpbmluZyBhY3Jvc3MgdW5pdAogICAtLSAgICAgICAgICAgICAgICAgICAgYm91bmRhcmllcywgdGhhdCBpcywgaW5saW5pbmcgYSBjYWxsIGluIG9uZSB1bml0IG9mCiAgIC0tICAgICAgICAgICAgICAgICAgICBhIHN1YnByb2dyYW0gZGVjbGFyZWQgaW4gYSB3aXRoJ2VkIHVuaXQuIFRoZSBjb21waWxlcgogICAtLSAgICAgICAgICAgICAgICAgICAgd2lsbCBhY2Nlc3MgdGhlc2UgYm9kaWVzLCBjcmVhdGluZyBhbiBleHRyYSBzb3VyY2UKICAgLS0gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgZm9yIHRoZSByZXN1bHRpbmcgb2JqZWN0IGZpbGUsIGFuZCB3aGVyZQogICAtLSAgICAgICAgICAgICAgICAgICAgcG9zc2libGUsIHRoZSBjYWxsIHdpbGwgYmUgaW5saW5lZC4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgIFRoaXMgcXVhbGlmaWVyIGFsc28gdHVybnMgb24gZnVsbCBvcHRpbWl6YXRpb24gYW5kCiAgIC0tICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyBHTkFUIHRvIHRyeSB0byBhdHRlbXB0IGF1dG9tYXRpYyBpbmxpbmluZwogICAtLSAgICAgICAgICAgICAgICAgICAgb2Ygc21hbGwgc3VicHJvZ3JhbXMgd2l0aGluIGEgdW5pdC4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgL09QVElNSVpFPU5PTkUgd2lsbCBkaXNhYmxlIHRoZSBtYWluIGVmZmVjdAogICAtLSAgICAgICAgICAgICAgICAgICAgb2YgdGhpcyBxdWFsaWZpZXIsIGJ1dCB5b3UgbWF5IHNwZWNpZnkgb3RoZXIKICAgLS0gICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbiBvcHRpb25zLCB0byBnZXQgZWl0aGVyIGxvd2VyCiAgIC0tICAgICAgICAgICAgICAgICAgICAoL09QVElNSVpFPVNPTUUpIG9yIGhpZ2hlciAoL09QVElNSVpFPVVOUk9MTF9MT09QUykKICAgLS0gICAgICAgICAgICAgICAgICAgIGxldmVscyBvZiBvcHRpbWl6YXRpb24uCiAgIC0tCiAgIC0tICAgICAgICBGVUxMICAgICAgICBGcm9udCBlbmQgaW5saW5pbmcuIFRoZSBmcm9udCBlbmQgaW5saW5pbmcgYWN0aXZhdGVkCiAgIC0tICAgICAgICAgICAgICAgICAgICBieSB0aGlzIHN3aXRjaCBpcyBnZW5lcmFsbHkgbW9yZSBleHRlbnNpdmUsIGFuZCBxdWl0ZQogICAtLSAgICAgICAgICAgICAgICAgICAgb2Z0ZW4gbW9yZSBlZmZlY3RpdmUgdGhhbiB0aGUgc3RhbmRhcmQgUFJBR01BIGlubGluaW5nCiAgIC0tICAgICAgICAgICAgICAgICAgICBtb2RlLiBJdCB3aWxsIGFsc28gZ2VuZXJhdGUgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMuCiAgIC0tCiAgIC0tICAgICAgICBTVVBQUkVTUyAgICBTdXBwcmVzc2VzIGFsbCBpbmxpbmluZywgZXZlbiBpZiBvdGhlciBvcHRpbWl6YXRpb24KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBvciBpbmxpbmluZyBzd2l0Y2hlcyBhcmUgc2V0LgoKICAgU19HQ0NfSW5saW5lWCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PSU5MSU5FICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1nbmF0biwhLWduYXROIjsKICAgLS0gIE5PRE9DIChzZWUgL0lOTElORSkKCiAgIFNfR0NDX0p1bXBzICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9MT05HSk1QX1NFVEpNUCAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0TCI7CiAgIC0tICAgICAgICAvTk9MT05HSk1QX1NFVEpNUCAoRCkKICAgLS0gICAgICAgIC9MT05HSk1QX1NFVEpNUAogICAtLQogICAtLSAgIENhdXNlcyB0aGUgbG9uZ2ptcC9zZXRqbXAgYXBwcm9hY2ggdG8gYmUgdXNlZCBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgogICAtLQogICAtLSAgIFRoZSBkZWZhdWx0IG1lY2hhbmlzbSBmb3IgT3BlblZNUyBpcyB6ZXJvIGNvc3QgZXhjZXB0aW9ucy4gVGhpcwogICAtLSAgIHF1YWxpZmllciBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhpcyBkZWZhdWx0LCBidXQgaXQgbXVzdCBiZSB1c2VkIGZvcgogICAtLSAgIGFsbCB1bml0cyBpbiB0aGUgcGFydGl0aW9uLCBpbmNsdWRpbmcgYWxsIHJ1bi10aW1lIGxpYnJhcnkgdW5pdHMuCiAgIC0tICAgT25lIHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gdXNlIHRoZSAvQUxMX0ZJTEVTIGFuZCAvRk9SQ0VfQ09NUElMRQogICAtLSAgIGZvciBnbmF0bWFrZS4KICAgLS0gICBUaGlzIG9wdGlvbiBpcyByYXJlbHkgdXNlZC4gT25lIGNhc2UgaW4gd2hpY2ggaXQgbWF5IGJlIGFkdmFudGFnZW91cyBpcwogICAtLSAgIGluIGFuIGFwcGxpY2F0aW9uIHdoZXJlIGV4Y2VwdGlvbiByYWlzaW5nIGlzIGNvbW1vbiBhbmQgdGhlIG92ZXJhbGwKICAgLS0gICBwZXJmb3JtYW5jZSBvZiB0aGUgYXBwbGljYXRpb24gaXMgaW1wcm92ZWQgYnkgZmF2b3JpbmcgZXhjZXB0aW9uCiAgIC0tICAgcHJvcGFnYXRpb24uCgogICBTX0dDQ19MZW5ndGggIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTUFYX0xJTkVfTEVOR1RIPSMiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHlNIyI7CiAgIC0tICAgICAgICAvTUFYX0xJTkVfTEVOR1RIPW5ubgogICAtLQogICAtLSAgIFNldCBtYXhpbXVtIGxpbmUgbGVuZ3RoLgogICAtLSAgIFRoZSBsZW5ndGggb2YgbGluZXMgbXVzdCBub3QgZXhjZWVkIHRoZSBnaXZlbiB2YWx1ZSBubm4uCgogICBTX0dDQ19MaXN0ICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTElTVCAiICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGwiOwogICAtLSAgICAgICAgL05PTElTVCAoRCkKICAgLS0gICAgICAgIC9MSVNUCiAgIC0tCiAgIC0tICAgQ2F1c2UgYSBmdWxsIGxpc3Rpbmcgb2YgdGhlIGZpbGUgdG8gYmUgZ2VuZXJhdGVkLgoKICAgU19HQ0NfTWFwcGluZyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL01BUFBJTkdfRklMRT08IiAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGVtPiI7CiAgIC0tICAgICAgICAvTUFQUElOR19GSUxFPWZpbGVfbmFtZQogICAtLQogICAtLSAgIFVzZSBtYXBwaW5nIGZpbGUgZmlsZV9uYW1lCiAgIC0tCiAgIC0tICAgQSBtYXBwaW5nIGZpbGUgaXMgYSB3YXkgdG8gY29tbXVuaWNhdGUgdG8gdGhlIGNvbXBpbGVyIHR3byBtYXBwaW5nczoKICAgLS0gICBmcm9tIHVuaXQgbmFtZXMgdG8gZmlsZSBuYW1lcyAod2l0aG91dCBhbnkgZGlyZWN0b3J5IGluZm9ybWF0aW9uKSBhbmQKICAgLS0gICBmcm9tIGZpbGUgbmFtZXMgdG8gcGF0aCBuYW1lcyAod2l0aCBmdWxsIGRpcmVjdG9yeSBpbmZvcm1hdGlvbikuCiAgIC0tICAgVGhlc2UgbWFwcGluZ3MgYXJlIHVzZWQgYnkgdGhlIGNvbXBpbGVyIHRvIHNob3J0LWNpcmN1aXQgdGhlIHBhdGgKICAgLS0gICBzZWFyY2guCiAgIC0tCiAgIC0tICAgVGhlIHVzZSBvZiBtYXBwaW5nIGZpbGVzIGlzIG5vdCByZXF1aXJlZCBmb3IgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlCiAgIC0tICAgY29tcGlsZXIsIGJ1dCBtYXBwaW5nIGZpbGVzIGNhbiBpbXByb3ZlIGVmZmljaWVuY3ksIHBhcnRpY3VsYXJseSB3aGVuCiAgIC0tICAgc291cmNlcyBhcmUgcmVhZCBvdmVyIGEgc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb24uIEluIG5vcm1hbCBvcGVyYXRpb24sCiAgIC0tICAgeW91IG5lZWQgbm90IGJlIGNvbmNlcm5lZCB3aXRoIHRoZSBmb3JtYXQgb3IgdXNlIG9mIG1hcHBpbmcgZmlsZXMsCiAgIC0tICAgYW5kIC9NQVBQSU5HX0ZJTEUgaXMgbm90IGEgcXVhbGlmaWVyIHRoYXQgeW91IHdvdWxkIHVzZSBleHBsaWNpdGx5LgogICAtLSAgIEl0IGlzIGludGVuZGVkIG9ubHkgZm9yIHVzZSBieSBhdXRvbWF0aWMgdG9vbHMgc3VjaCBhcyBHTkFUIE1BS0UKICAgLS0gICBydW5uaW5nIHVuZGVyIHRoZSBwcm9qZWN0IGZpbGUgZmFjaWxpdHkuIFRoZSBkZXNjcmlwdGlvbiBoZXJlIG9mIHRoZQogICAtLSAgIGZvcm1hdCBvZiBtYXBwaW5nIGZpbGVzIGlzIHByb3ZpZGVkIGZvciBjb21wbGV0ZW5lc3MgYW5kIGZvciBwb3NzaWJsZQogICAtLSAgIHVzZSBieSBvdGhlciB0b29scy4KICAgLS0KICAgLS0gICBBIG1hcHBpbmcgZmlsZSBpcyBhIHNlcXVlbmNlIG9mIHNldHMgb2YgdGhyZWUgbGluZXMuIEluIGVhY2ggc2V0LCB0aGUKICAgLS0gICBmaXJzdCBsaW5lIGlzIHRoZSB1bml0IG5hbWUsIGluIGxvd2VyIGNhc2UsIHdpdGggIiVzIiBhcHBlbmRlZCBmb3IKICAgLS0gICBzcGVjaWZpY2F0aW9ucyBhbmQgIiViIiBhcHBlbmRlZCBmb3IgYm9kaWVzOyB0aGUgc2Vjb25kIGxpbmUgaXMgdGhlCiAgIC0tICAgZmlsZSBuYW1lOyBhbmQgdGhlIHRoaXJkIGxpbmUgaXMgdGhlIHBhdGggbmFtZS4KICAgLS0KICAgLS0gICBFeGFtcGxlOgogICAtLQogICAtLSAgICAgIG1haW4lYgogICAtLSAgICAgIG1haW4uMl9hZGEKICAgLS0gICAgICAvZ25hdC9wcm9qZWN0MS9zb3VyY2VzL21haW4uMl9hZGEKICAgLS0KICAgLS0gICBXaGVuIHF1YWxpZmllciA/TUFQUElOR19GSUxFIGlzIHNwZWNpZmllZCwgdGhlIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGluCiAgIC0tICAgbWVtb3J5IHRoZSB0d28gbWFwcGluZ3MgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuIElmIHRoZXJlIGlzIGFueQogICAtLSAgIHByb2JsZW0gKG5vbiBleGlzdGVudCBmaWxlLCB0cnVuY2F0ZWQgZmlsZSBvciBkdXBsaWNhdGUgZW50cmllcyksCiAgIC0tICAgbm8gbWFwcGluZyB3aWxsIGJlIGNyZWF0ZWQuCiAgIC0tCiAgIC0tICAgU2V2ZXJhbCAvTUFQUElOR19GSUxFIHF1YWxpZmllcnMgbWF5IGJlIHNwZWNpZmllZDsgaG93ZXZlciwgb25seSB0aGUKICAgLS0gICBsYXN0IG9uZSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpbGwgYmUgdGFrZW4gaW50byBhY2NvdW50LgogICAtLQogICAtLSAgIFdoZW4gdXNpbmcgYSBwcm9qZWN0IGZpbGUsIEdOQVQgTUFLRSBjcmVhdGVzIGEgdGVtcG9yYXJ5IG1hcHBpbmcgZmlsZQogICAtLSAgIGFuZCBjb21tdW5pY2F0ZXMgaXQgdG8gdGhlIGNvbXBpbGVyIHVzaW5nIHRoaXMgc3dpdGNoLgoKICAgU19HQ0NfTWVzcyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL01FU1NBR0VTX1BST0pFQ1RfRklMRT0iICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUZBVUxUICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDAgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUVESVVNICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAxICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJR0ggIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMiI7CiAgIC0tICAgICAgICAvTUVTU0FHRVNfUFJPSkVDVF9GSUxFWz1tZXNzYWdlcy1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSAidmVyYm9zaXR5IiBvZiB0aGUgcGFyc2luZyBvZiBwcm9qZWN0IGZpbGVzLgogICAtLSAgIG1lc3NhZ2VzLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgREVGQVVMVCAoRCkgTm8gbWVzc2FnZXMgYXJlIG91dHB1dCBpZiB0aGVyZSBpcyBubyBlcnJvciBvciB3YXJuaW5nLgogICAtLQogICAtLSAgICAgIE1FRElVTSAgICAgIEEgc21hbGwgbnVtYmVyIG9mIG1lc3NhZ2VzIGFyZSBvdXRwdXQuCiAgIC0tCiAgIC0tICAgICAgSElHSCAgICAgICAgQSBncmVhdCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dCwgbW9zdCBvZiB0aGVtIG5vdAogICAtLSAgICAgICAgICAgICAgICAgIGJlaW5nIHVzZWZ1bCBmb3IgdGhlIHVzZXIuCgogICBTX0dDQ19OZXN0aW5nICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL01BWF9ORVNUSU5HPSMiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eUwjIjsKICAgLS0gICAgICAgIC9NQVhfTkVTVElORz1ubm4KICAgLS0KICAgLS0gICBTZXQgbWF4aW11bSBsZXZlbCBvZiBuZXN0aW5nIG9mIGNvbnN0cnVjdHMgKGluY2x1ZGluZyBzdWJwcm9ncmFtcywKICAgLS0gICBsb29wcywgYmxvY2tzLCBwYWNrYWdlcywgYW5kIGNvbmRpdGlvbmFscykuCiAgIC0tICAgVGhlIGxldmVsIG9mIG5lc3RpbmcgbXVzdCBub3QgZXhjZWVkIHRoZSBnaXZlbiB2YWx1ZSBubm4uCiAgIC0tICAgQSB2YWx1ZSBvZiB6ZXJvIGRpc2FibGUgdGhpcyBzdHlsZSBjaGVjayAobm90IGVuYWJsZWQgYnkgZGVmYXVsdCkuCgogICBTX0dDQ19Ob2FkYyAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9fR05BVF9BREMgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdEEiOwogICAtLSAgICAgICAgL05PX0dOQVRfQURDCiAgIC0tCiAgIC0tICAgQ2F1c2UgdGhlIGNvbXBpbGVyIHRvIGlnbm9yZSBhbnkgY29uZmlndXJhdGlvbiBwcmFnbWFzIGZpbGUgR05BVC5BREMKICAgLS0gICBpbiB0aGUgZGVmYXVsdCBkaXJlY3RvcnkuIEltcGxpZWQgYnkgcXVhbGlmaWVyIC9QUk9KRUNUX0ZJTEUuCiAgIC0tICAgT2Z0ZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHF1YWxpZmllciAvQ09ORklHVVJBVElPTl9QUkFHTUFTX0ZJTEUuCgogICBTX0dDQ19Ob2xvYWQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9MT0FEICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGMiOwogICAtLSAgICAgICAgL05PTE9BRAogICAtLQogICAtLSAgIENhdXNlIHRoZSBjb21waWxlciB0byBvcGVyYXRlIGluIHNlbWFudGljIGNoZWNrIG1vZGUgd2l0aCBmdWxsCiAgIC0tICAgY2hlY2tpbmcgZm9yIGFsbCBpbGxlZ2FsaXRpZXMgc3BlY2lmaWVkIGluIHRoZSByZWZlcmVuY2UgbWFudWFsLCBidXQKICAgLS0gICB3aXRob3V0IGdlbmVyYXRpb24gb2YgYW55IHNvdXJjZSBjb2RlIChubyBvYmplY3Qgb3IgQUxJIGZpbGUKICAgLS0gICBnZW5lcmF0ZWQpLgogICAtLQogICAtLSAgIFNpbmNlIGRlcGVuZGVudCBmaWxlcyBtdXN0IGJlIGFjY2Vzc2VkLCB5b3UgbXVzdCBmb2xsb3cgdGhlIEdOQVQKICAgLS0gICBzZW1hbnRpYyByZXN0cmljdGlvbnMgb24gZmlsZSBzdHJ1Y3R1cmluZyB0byBvcGVyYXRlIGluIHRoaXMgbW9kZToKICAgLS0KICAgLS0gICBvIFRoZSBuZWVkZWQgc291cmNlIGZpbGVzIG11c3QgYmUgYWNjZXNzaWJsZS4KICAgLS0gICBvIEVhY2ggZmlsZSBtdXN0IGNvbnRhaW4gb25seSBvbmUgY29tcGlsYXRpb24gdW5pdC4KICAgLS0gICBvIFRoZSBmaWxlIG5hbWUgYW5kIHVuaXQgbmFtZSBtdXN0IG1hdGNoLgogICAtLQogICAtLSAgIFRoZSBvdXRwdXQgY29uc2lzdHMgb2YgZXJyb3IgbWVzc2FnZXMgYXMgYXBwcm9wcmlhdGUuIE5vIG9iamVjdCBmaWxlCiAgIC0tICAgb3IgQUxJIGZpbGUgaXMgZ2VuZXJhdGVkLiBUaGUgY2hlY2tpbmcgY29ycmVzcG9uZHMgZXhhY3RseSB0byB0aGUKICAgLS0gICBub3Rpb24gb2YgbGVnYWxpdHkgaW4gdGhlIEFkYSByZWZlcmVuY2UgbWFudWFsLgogICAtLQogICAtLSAgIEFueSB1bml0IGNhbiBiZSBjb21waWxlZCBpbiBzZW1hbnRpY3MtY2hlY2tpbmctb25seSBtb2RlLCBpbmNsdWRpbmcKICAgLS0gICB1bml0cyB0aGF0IHdvdWxkIG5vdCBub3JtYWxseSBiZSBjb21waWxlZCAoZ2VuZXJpYyBsaWJyYXJ5IHVuaXRzLAogICAtLSAgIHN1YnVuaXRzLCBhbmQgc3BlY2lmaWNhdGlvbnMgd2hlcmUgYSBzZXBhcmF0ZSBib2R5IGlzIHByZXNlbnQpLgoKICAgU19HQ0NfTm9zdGluYyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PU1REX0lOQ0xVREVTICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5vc3RkaW5jIjsKICAgLS0gICAgICAgIC9OT1NURF9JTkNMVURFUwogICAtLQogICAtLSAgIERvIG5vdCBsb29rIGluIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSBmb3Igc291cmNlIGZpbGVzIG9mIHRoZSBydW50aW1lLgoKICAgU19HQ0NfTm9zdGxpYiA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PU1REX0xJQlJBUklFUyAiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1ub3N0ZGxpYiI7CiAgIC0tICAgICAgICAvTk9TVERfTElCUkFSSUVTCiAgIC0tCiAgIC0tICAgIERvIG5vdCBsb29rIGZvciBsaWJyYXJ5IGZpbGVzIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBkaXJlY3RvcnkuCgogICBTX0dDQ19PcHQgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvT1BUSU1JWkU9IiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFMTCAiICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLU8yLCEtTzAsIS1PMSwhLU8zICIgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT05FICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1PMCwhLU8xLCEtTzIsIS1PMyAiICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU09NRSAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItTzEsIS1PMCwhLU8yLCEtTzMgIiAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFVkVMT1BNRU5UICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLU8xLCEtTzAsIS1PMiwhLU8zICIgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTlJPTExfTE9PUFMgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1mdW5yb2xsLWxvb3BzICIgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9fU1RSSUNUX0FMSUFTSU5HICIgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZm5vLXN0cmljdC1hbGlhc2luZyAiICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklOTElOSU5HICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLU8zLCEtTzAsIS1PMSwhLU8yIjsKICAgLS0gICAgICAgIC9OT09QVElNSVpFIChEKQogICAtLSAgICAgICAgL09QVElNSVpFWz0oa2V5d29yZFssLi4uXSldCiAgIC0tCiAgIC0tICAgU2VsZWN0cyB0aGUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIGZvciB5b3VyIHByb2dyYW0uICBUaGUgc3VwcG9ydGVkCiAgIC0tICAga2V5d29yZHMgYXJlIGFzIGZvbGxvd3M6CiAgIC0tCiAgIC0tICAgICAgQUxMIChEKSAgICAgICBQZXJmb3JtIG1vc3Qgb3B0aW1pemF0aW9ucywgaW5jbHVkaW5nIHRob3NlIHRoYXQKICAgLS0gICAgICAgICAgICAgICAgICAgIG1heSBiZSBleHBlbnNpdmUuCiAgIC0tCiAgIC0tICAgICAgTk9ORSAgICAgICAgICBEbyBub3QgZG8gYW55IG9wdGltaXphdGlvbnMuIFNhbWUgYXMgL05PT1BUSU1JWkUuCiAgIC0tCiAgIC0tICAgICAgU09NRSAgICAgICAgICBQZXJmb3JtIHNvbWUgb3B0aW1pemF0aW9ucywgYnV0IG9taXQgb25lcyB0aGF0CiAgIC0tICAgICAgICAgICAgICAgICAgICBhcmUgY29zdGx5IGluIGNvbXBpbGF0aW9uIHRpbWUuCiAgIC0tCiAgIC0tICAgICAgREVWRUxPUE1FTlQgICBTYW1lIGFzIFNPTUUuCiAgIC0tCiAgIC0tICAgICAgSU5MSU5JTkcgICAgICBGdWxsIG9wdGltaXphdGlvbiwgYW5kIGFsc28gYXR0ZW1wdCBhdXRvbWF0aWMgaW5saW5pbmcKICAgLS0gICAgICAgICAgICAgICAgICAgIG9mIHNtYWxsIHN1YnByb2dyYW1zIHdpdGhpbiBhIHVuaXQKICAgLS0KICAgLS0gICAgICBVTlJPTExfTE9PUFMgIFRyeSB0byB1bnJvbGwgbG9vcHMuIFRoaXMga2V5d29yZCBtYXkgYmUgc3BlY2lmaWVkCiAgIC0tICAgICAgICAgICAgICAgICAgICB3aXRoIGFueSBrZXl3b3JkIGFib3ZlIG90aGVyIHRoYW4gTk9ORS4gTG9vcAogICAtLSAgICAgICAgICAgICAgICAgICAgdW5yb2xsaW5nIHVzdWFsbHksIGJ1dCBub3QgYWx3YXlzLCBpbXByb3ZlcyB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIG9mIHByb2dyYW1zLgogICAtLQogICAtLSAgICAgIE5PX1NUUklDVF9BTElBU0lORwogICAtLSAgICAgICAgICAgICAgICAgICAgU3VwcHJlc3MgYWxpYXNpbmcgYW5hbHlzaXMuIFdoZW4gb3B0aW1pemF0aW9uIGlzCiAgIC0tICAgICAgICAgICAgICAgICAgICBlbmFibGVkIChBTEwgb3IgU09NRSBhYm92ZSksIHRoZSBjb21waWxlciBhc3N1bWVzCiAgIC0tICAgICAgICAgICAgICAgICAgICB0aGF0IHBvaW50ZXJzIGRvIGluIGZhY3QgcG9pbnQgdG8gbGVnaXRpbWF0ZSB2YWx1ZXMKICAgLS0gICAgICAgICAgICAgICAgICAgIG9mIHRoZSBwb2ludGVyIHR5cGUgKGFsbG9jYXRlZCBmcm9tIHRoZSBwcm9wZXIgcG9vbCkuCiAgIC0tICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGFzc3VtcHRpb24gaXMgdmlvbGF0ZWQsIGUuZy4gYnkgdGhlIHVzZSBvZgogICAtLSAgICAgICAgICAgICAgICAgICAgdW5jaGVja2VkIGNvbnZlcnNpb24sIHRoZW4gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0bwogICAtLSAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3MgdGhpcyBhc3N1bXB0aW9uIHVzaW5nIHRoaXMga2V5d29yZCAod2hpY2gKICAgLS0gICAgICAgICAgICAgICAgICAgIG1heSBiZSBzcGVjaWZpZWQgb25seSBpbiBjb25qdW5jdGlvbiB3aXRoIGFueQogICAtLSAgICAgICAgICAgICAgICAgICAga2V5d29yZCBhYm92ZSwgb3RoZXIgdGhhbiBOT05FKS4KCiAgIFNfR0NDX09wdFggICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT09QVElNSVpFICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLU8wLCEtTzEsIS1PMiwhLU8zIjsKICAgLS0gIE5PRE9DIChzZWUgL09QVElNSVpFKQoKICAgU19HQ0NfUG9sbGluZyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BPTExJTkcgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFAiOwogICAtLSAgICAgICAgL05PUE9MTElORyAoRCkKICAgLS0gICAgICAgIC9QT0xMSU5HCiAgIC0tCiAgIC0tICAgRW5hYmxlIHBvbGxpbmcuIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgcHJhZ21hIFBvbGxpbmcgaW4gdGhlIEdOQVQKICAgLS0gICBSZWZlcmVuY2UgTWFudWFsIGZvciBmdWxsIGRldGFpbHMuCgogICBTX0dDQ19Qcm9qZWN0IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUFJPSkVDVF9GSUxFPTwiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgd2lsbCBiZSBwYXJzZWQgYmVmb3JlIHRoZSBpbnZvY2F0aW9uIG9mIHRoZQogICAtLSAgIGNvbXBpbGVyLiBUaGUgc291cmNlIGFuZCBvYmplY3QgZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQgd2lsbCBiZQogICAtLSAgIGNvbW11bmljYXRlZCB0byB0aGUgY29tcGlsZXIgdGhyb3VnaCBsb2dpY2FsIG5hbWVzCiAgIC0tICAgQURBX1BSSl9JTkNMVURFX0ZJTEUgYW5kIEFEQV9QUkpfT0JKRUNUU19GSUxFLgoKICAgU19HQ0NfUHN0YSAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BSSU5UX1NUQU5EQVJEICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFMiOwogICAtLSAgICAgICAgL1BSSU5UX1NUQU5EQVJECiAgIC0tCiAgIC0tICAgY2F1c2UgdGhlIGNvbXBpbGVyIHRvIG91dHB1dCBhIHJlcHJlc2VudGF0aW9uIG9mIHBhY2thZ2UgU3RhbmRhcmQKICAgLS0gICBpbiBhIGZvcm0gdmVyeSBjbG9zZSB0byBzdGFuZGFyZCBBZGEuIEl0IGlzIG5vdCBxdWl0ZSBwb3NzaWJsZSB0bwogICAtLSAgIGRvIHRoaXMgYW5kIHJlbWFpbiBlbnRpcmVseSBTdGFuZGFyZCAoc2luY2UgbmV3IG51bWVyaWMgYmFzZSB0eXBlcwogICAtLSAgIGNhbm5vdCBiZSBjcmVhdGVkIGluIHN0YW5kYXJkIEFkYSksIGJ1dCB0aGUgb3V0cHV0IGlzIGVhc2lseQogICAtLSAgIHJlYWRhYmxlIHRvIGFueSBBZGEgcHJvZ3JhbW1lciwgYW5kIGlzIHVzZWZ1bCB0byBkZXRlcm1pbmUgdGhlCiAgIC0tICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRhcmdldCBkZXBlbmRlbnQgdHlwZXMgaW4gcGFja2FnZSBTdGFuZGFyZC4KCiAgIFNfR0NDX1JlcG9ydCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9SRVBPUlRfRVJST1JTPSIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkVSQk9TRSAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHYgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJSSUVGICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRiICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGVUxMICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0ZiAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU1NRURJQVRFICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGRPICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFRkFVTFQgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1nbmF0YiwhLWduYXR2IjsKICAgLS0gICAgICAgIC9OT1JFUE9SVF9FUlJPUlMgKEQpCiAgIC0tICAgICAgICAvUkVQT1JUX0VSUk9SU1s9KGtleXdvcmRbLC4uLl0pXQogICAtLQogICAtLSAgIENoYW5nZSB0aGUgd2F5IGVycm9ycyBhcmUgcmVwb3J0ZWQuICBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGFyZQogICAtLSAgIHN1cHBvcnRlZDoKICAgLS0KICAgLS0gICAgICAgIFZFUkJPU0UgKEQpICBWZXJib3NlIG1vZGUuIEZ1bGwgZXJyb3Igb3V0cHV0IHdpdGggc291cmNlIGxpbmVzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgdG8gU1lTJE9VVFBVVC4KICAgLS0KICAgLS0gICAgICAgIEJSSUVGICAgICAgICBHZW5lcmF0ZSB0aGUgYnJpZWYgZm9ybWF0IGVycm9yIG1lc3NhZ2VzIHRvCiAgIC0tICAgICAgICAgICAgICAgICAgICAgU1lTJE9VVFBVVCBhcyB3ZWxsIGFzIHRoZSB2ZXJib3NlIGZvcm1hdCBtZXNzYWdlIG9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgZnVsbCBsaXN0aW5nLgogICAtLQogICAtLSAgICAgICAgRlVMTCAgICAgICAgIE5vcm1hbGx5LCB0aGUgY29tcGlsZXIgc3VwcHJlc3NlcyBlcnJvciBtZXNzYWdlcyB0aGF0CiAgIC0tICAgICAgICAgICAgICAgICAgICAgYXJlIGxpa2VseSB0byBiZSByZWR1bmRhbnQuIFRoaXMga2V5d29yZCBjYXVzZXMgYWxsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgZXJyb3IgbWVzc2FnZXMgdG8gYmUgZ2VuZXJhdGVkLiBPbmUgcGFydGljdWxhciBlZmZlY3QKICAgLS0gICAgICAgICAgICAgICAgICAgICBpcyBmb3IgdGhlIGNhc2Ugb2YgcmVmZXJlbmNlcyB0byB1bmRlZmluZWQgdmFyaWFibGVzLgogICAtLSAgICAgICAgICAgICAgICAgICAgIElmIGEgZ2l2ZW4gdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBzZXZlcmFsIHRpbWVzLCB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICBub3JtYWwgZm9ybWF0IG9mIG1lc3NhZ2VzIHByb2R1Y2VzIG9uZSBlcnJvci4gIFdpdGgKICAgLS0gICAgICAgICAgICAgICAgICAgICBGVUxMLCBlYWNoIHVuZGVmaW5lZCByZWZlcmVuY2UgcHJvZHVjZXMgYSBzZXBhcmF0ZQogICAtLSAgICAgICAgICAgICAgICAgICAgIGVycm9yIG1lc3NhZ2UuCiAgIC0tCiAgIC0tICAgICAgICBJTU1FRElBVEUgICAgTm9ybWFsbHksIHRoZSBjb21waWxlciBzYXZlcyB1cCBlcnJvciBtZXNzYWdlcyBhbmQKICAgLS0gICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZXMgdGhlbSBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uIGluIHByb3BlcgogICAtLSAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlLiAgVGhpcyBrZXl3b3JkIGNhdXNlcyBlcnJvciBtZXNzYWdlcyB0byBiZQogICAtLSAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBhcyBzb29uIGFzIHRoZXkgYXJlIGRldGVjdGVkLiBUaGUgdXNlIG9mCiAgIC0tICAgICAgICAgICAgICAgICAgICAgSU1NRURJQVRFIHVzdWFsbHkgY2F1c2VzIGVycm9yIG1lc3NhZ2VzIHRvIGJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIG91dCBvZiBzZXF1ZW5jZS4gVXNlIGl0IHdoZW4gdGhlIGNvbXBpbGVyCiAgIC0tICAgICAgICAgICAgICAgICAgICAgYmxvd3MgdXAgZHVlIHRvIGFuIGludGVybmFsIGVycm9yLiAgSW4gdGhpcyBjYXNlLCB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICBlcnJvciBtZXNzYWdlcyBtYXkgYmUgbG9zdC4gU29tZXRpbWVzIGJsb3d1cHMgYXJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3VsdCBvZiBtaXNoYW5kbGVkIGVycm9yIG1lc3NhZ2VzLCBzbyB5b3UgbWF5CiAgIC0tICAgICAgICAgICAgICAgICAgICAgd2FudCB0byBydW4gd2l0aCB0aGlzIGtleXdvcmQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKICAgLS0gICAgICAgICAgICAgICAgICAgICBhbnkgZXJyb3IgbWVzc2FnZXMgd2VyZSBnZW5lcmF0ZWQuCiAgIC0tCiAgIC0tICAgICAgREVGQVVMVCAgICAgICAgVHVybiBvZmYgVkVSQk9TRSBhbmQgQlJJRUYuIFNhbWUgYXMgL05PUkVQT1JUX0VSUk9SUy4KCiAgIFNfR0NDX1JlcG9ydFggOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1JFUE9SVF9FUlJPUlMgIiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1nbmF0YiwhLWduYXR2IjsKICAgLS0gIE5PRE9DIChzZWUgL1JFUE9SVF9FUlJPUlMpCgogICBTX0dDQ19SZXBpbmZvIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUkVQUkVTRU5UQVRJT05fSU5GTz0iICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFRkFVTFQgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRSICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT05FICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0UjAgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVJSQVlTICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFIxICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFSUkFZU19GSUxFICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRSMXMgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPQkpFQ1RTICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0UjIgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0JKRUNUU19GSUxFICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFIycyAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNZTUJPTElDICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRSMyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTWU1CT0xJQ19GSUxFICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0UjNzIjsKICAgLS0gICAgICAgIC9OT1JFUFJFU0VOVEFUSU9OX0lORk8gKEQpCiAgIC0tICAgICAgICAvUkVQUkVTRU5UQVRJT05fSU5GT1s9KGtleXdvcmRbLC4uLl0pXQogICAtLQogICAtLSAgIFRoaXMgcXVhbGlmaWVyIGNvbnRyb2xzIG91dHB1dCBmcm9tIHRoZSBjb21waWxlciBvZiBhIGxpc3Rpbmcgc2hvd2luZwogICAtLSAgIHJlcHJlc2VudGF0aW9uIGluZm9ybWF0aW9uIGZvciBkZWNsYXJlZCB0eXBlcyBhbmQgb2JqZWN0cy4KICAgLS0KICAgLS0gICAgICAgIEFSUkFZUyAoRCkgICAgICBTaXplIGFuZCBhbGlnbm1lbnQgaW5mb3JtYXRpb24gaXMgbGlzdGVkIGZvcgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmVkIGFycmF5IGFuZCByZWNvcmQgdHlwZXMuCiAgIC0tCiAgIC0tICAgICAgICBBUlJBWVNfRklMRSAgICAgU2ltaWxhciB0byBBUlJBWVMsIGJ1dCB0aGUgb3V0cHV0IGlzIHRvIGEgZmlsZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIG5hbWUgJ2ZpbGVfcmVwJyB3aGVyZSAnZmlsZScgaXMgdGhlIG5hbWUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgZmlsZS4KICAgLS0KICAgLS0gICAgICAgIE5PTkUgICAgICAgICAgICBubyBpbmZvcm1hdGlvbiBpcyBvdXRwdXQgKGVxdWl2YWxlbnQgdG8gb21pdHRpbmcKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgL1JFUFJFU0VOVEFUSU9OX0lORk8gcXVhbGlmaWVycykuCiAgIC0tCiAgIC0tICAgICAgICBPQkpFQ1RTICAgICAgICAgU2l6ZSBhbmQgYWxpZ25tZW50IGluZm9ybWF0aW9uIGlzIGxpc3RlZCBmb3IgYWxsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZWQgdHlwZXMgYW5kIG9iamVjdHMuCiAgIC0tCiAgIC0tICAgICAgICBPQkpFQ1RTX0ZJTEUgICAgU2ltaWxhciB0byBPQkpFQ1RTLCBidXQgdGhlIG91dHB1dCBpcyB0byBhIGZpbGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBuYW1lICdmaWxlX3JlcCcgd2hlcmUgJ2ZpbGUnIGlzIHRoZSBuYW1lCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGZpbGUuCiAgIC0tCiAgIC0tICAgICAgICBTWU1CT0xJQyAgICAgICAgU3ltYm9saWMgZXhwcmVzc2lvbiBpbmZvcm1hdGlvbiBmb3IgdmFsdWVzIHRoYXQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBhcmUgY29tcHV0ZWQgYXQgcnVuIHRpbWUgZm9yIHZhcmlhbnQgcmVjb3Jkcy4KICAgLS0KICAgLS0gICAgICAgIFNZTUJPTElDX0ZJTEUgICBTaW1pbGFyIHRvIFNZTUJPTElDLCBidXQgdGhlIG91dHB1dCBpcyB0byBhIGZpbGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBuYW1lICdmaWxlX3JlcCcgd2hlcmUgJ2ZpbGUnIGlzIHRoZSBuYW1lCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGZpbGUuCiAgIC0tCiAgIC0tICAgICAgICBERUZBVUxUICAgICAgICAgRXF1aXZhbGVudCB0byBBUlJBWVMuCgogICBTX0dDQ19SZXBpbmZYIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9SRVBSRVNFTlRBVElPTl9JTkZPICIgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtZ25hdFIiOwogICAtLSAgTk9ET0MgKHNlZSAvUkVQUkVTRU5UQVRJT05fSU5GTykKCiAgIFNfR0NDX1JUUyAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9SVU5USU1FX1NZU1RFTT18IiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1SVFM9fCI7CiAgIC0tICAgICAgICAvUlVOVElNRV9TWVNURU09eHh4CiAgIC0tCiAgIC0tICAgIEJ1aWxkIGFnYWluc3QgYW4gYWx0ZXJuYXRlIHJ1bnRpbWUgc3lzdGVtIG5hbWVkIHh4eCBvciBSVFMteHh4LgoKICAgU19HQ0NfU2VhcmNoICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NFQVJDSD0qIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItSSoiOwogICAtLSAgICAgICAgL1NFQVJDSD0oZGlyZWN0b3J5WywuLi5dKQogICAtLQogICAtLSAgICBXaGVuIGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcyBhbHNvIGxvb2sgaW4gZGlyZWN0b3JpZXMgc3BlY2lmaWVkLgoKICAgU19HQ0NfU3R5bGUgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NUWUxFX0NIRUNLUz0iICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBTExfQlVJTFRJTiAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eSAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHkxICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5MiAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzICIgICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eTMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHk0ICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5NSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eTYgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHk3ICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjggIiAgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5OCAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eTkgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVRUUklCVVRFICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHlhICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMQU5LUyAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5YiAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT01NRU5UUyAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eWMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU5EICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHllICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZUQUJTICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5ZiAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHTkFUICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0ZyAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFRBQlMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHloICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklGX1RIRU4gIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5aSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLRVlXT1JEICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eWsgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTEFZT1VUICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHlsICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxJTkVfTEVOR1RIICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5bSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT05FICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eU4gIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1RBTkRBUkRfQ0FTSU5HICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHluICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9SREVSRURfU1VCUFJPR1JBTVMgIiAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5byAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT05FICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtZ25hdGcsIS1nbmF0eSogIiAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUFJBR01BICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHlwICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFRkVSRU5DRVMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5ciAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTUEVDUyAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0eXMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVE9LRU4gIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHl0ICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlhUUkFfUEFSRU5TICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR5eCAiOwogICAtLSAgICAgICAgL05PU1RZTEVfQ0hFQ0tTIChEKQogICAtLSAgICAgICAgL1NUWUxFX0NIRUNLU1s9KGtleXdvcmQsWy4uLl0pXQogICAtLQogICAtLSAgIE5vcm1hbGx5LCBHTkFUIHBlcm1pdHMgYW55IGNvZGUgbGF5b3V0IGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVmZXJlbmNlCiAgIC0tICAgbWFudWFsIHJlcXVpcmVtZW50cy4gIFRoaXMgcXVhbGlmaWVyIGltcG9zZXMgc3R5bGUgY2hlY2tpbmcgb24gdGhlCiAgIC0tICAgaW5wdXQgc291cmNlIGNvZGUuICBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGFyZSBzdXBwb3J0ZWQ6CiAgIC0tCiAgIC0tICAgICAgQUxMX0JVSUxUSU4gKEQpICAgICAgRXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGxpc3Qgb2Ygb3B0aW9uczoKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAzLCBBVFRSSUJVVEUsIEJMQU5LUywgQ09NTUVOVFMsIEVORCwgVlRBQlMsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRBQlMsIElGX1RIRU4sIEtFWVdPUkQsIExBWU9VVCwgTElORV9MRU5HVEgsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJBR01BLCBSRUZFUkVOQ0VTLCBTUEVDUywgVE9LRU4uCiAgIC0tCiAgIC0tICAgICAgMSAuLiA5ICAgICAgICAgICAgICAgU3BlY2lmeSBpbmRlbnRhdGlvbiBsZXZlbCBmcm9tIDEgdG8gOS4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2VuZXJhbCBzdHlsZSBvZiByZXF1aXJlZCBpbmRlbnRhdGlvbiBpcyBhcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSB0aGUgZXhhbXBsZXMgaW4gdGhlIEFkYSBSZWZlcmVuY2UKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwuIEZ1bGwgbGluZSBjb21tZW50cyBtdXN0IGJlIGFsaWduZWQgd2l0aAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAtLSBzdGFydGluZyBvbiBhIGNvbHVtbiB0aGF0IGlzIGEgbXVsdGlwbGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgYWxpZ25tZW50IGxldmVsLgogICAtLQogICAtLSAgICAgIEFUVFJJQlVURSAgICAgICAgICAgIENoZWNrIGF0dHJpYnV0ZSBjYXNpbmcuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlIG5hbWVzLCBpbmNsdWRpbmcgdGhlIGNhc2Ugb2Yga2V5d29yZHMKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIGRpZ2l0cyB1c2VkIGFzIGF0dHJpYnV0ZXMgbmFtZXMsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSB3cml0dGVuIGluIG1peGVkIGNhc2UsIHRoYXQgaXMsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluaXRpYWwgbGV0dGVyIGFuZCBhbnkgbGV0dGVyIGZvbGxvd2luZyBhbgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmUgbXVzdCBiZSB1cHBlcmNhc2UuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIGxldHRlcnMgbXVzdCBiZSBsb3dlcmNhc2UuCiAgIC0tCiAgIC0tICAgICAgQkxBTktTICAgICAgICAgICAgICAgQmxhbmtzIG5vdCBhbGxvd2VkIGF0IHN0YXRlbWVudCBlbmQuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhaWxpbmcgYmxhbmtzIGFyZSBub3QgYWxsb3dlZCBhdCB0aGUgZW5kIG9mCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBydWxlLCB0b2dldGhlcgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3B0aW9uIEhUQUJTIChubyBob3Jpem9udGFsIHRhYnMpLCBpcyB0bwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZm9yY2UgYSBjYW5vbmljYWwgZm9ybWF0IGZvciB0aGUgdXNlIG9mCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhbmtzIHRvIHNlcGFyYXRlIHNvdXJjZSB0b2tlbnMuCiAgIC0tCiAgIC0tICAgICAgQ09NTUVOVFMgICAgICAgICAgICAgQ2hlY2sgY29tbWVudHMuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHMgbXVzdCBtZWV0IHRoZSBmb2xsb3dpbmcgc2V0IG9mIHJ1bGVzOgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgIi0tIiB0aGF0IHN0YXJ0cyB0aGUgY29sdW1uIG11c3QgZWl0aGVyCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGluIGNvbHVtbiBvbmUsIG9yIGVsc2UgYXQgbGVhc3Qgb25lCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYW5rIG11c3QgcHJlY2VkZSB0aGlzIHNlcXVlbmNlLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBDb21tZW50cyB0aGF0IGZvbGxvdyBvdGhlciB0b2tlbnMgb24gYSBsaW5lCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYmxhbmsgZm9sbG93aW5nIHRoZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0iIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWVudC4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRnVsbCBsaW5lIGNvbW1lbnRzIG11c3QgaGF2ZSB0d28gYmxhbmtzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyB0aGUgIi0tIiB0aGF0IHN0YXJ0cyB0aGUgY29tbWVudCwKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMuCiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEEgbGluZSBjb25zaXN0aW5nIG9ubHkgb2YgdGhlICItLSIKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycywgcG9zc2libHkgcHJlY2VkZWQgYnkgYmxhbmtzIGlzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdHRlZC4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQSBjb21tZW50IHN0YXJ0aW5nIHdpdGggIi0teCIgd2hlcmUgeCBpcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNwZWNpYWwgY2hhcmFjdGVyIGlzIHBlcm1pdHRlZC4gVGhpcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd3MgcHJvcGVyIHByb2Nlc3Npbmcgb2YgdGhlIG91dHB1dAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgYnkgc3BlY2lhbGl6ZWQgdG9vbHMgaW5jbHVkaW5nCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGduYXRwcmVwICh3aGVyZSAtLSEgaXMgdXNlZCkgYW5kIHRoZSBTUEFSSwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5ub3RhdGlvbiBsYW5ndWFnZSAod2hlcmUgLS0jIGlzIHVzZWQpLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgcnVsZSwgYSBzcGVjaWFsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBpcyBkZWZpbmVkIGFzIGJlaW5nIGluIG9uZSBvZiB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNDSUkgcmFuZ2VzIDE2IzIxIy4uMTYjMkYjIG9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2IzNBIy4uMTYjM0YjLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBBIGxpbmUgY29uc2lzdGluZyBlbnRpcmVseSBvZiBtaW51cyBzaWducywKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libHkgcHJlY2VkZWQgYnkgYmxhbmtzLCBpcyBwZXJtaXR0ZWQuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYm94CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzIHdoZXJlIGxpbmVzIG9mIG1pbnVzIHNpZ25zIGFyZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGZvcm0gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBib3guCiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElmIGEgY29tbWVudCBzdGFydHMgYW5kIGVuZHMgd2l0aCAiLS0iIGlzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdHRlZCBhcyBsb25nIGFzIGF0IGxlYXN0IG9uZSBibGFuawogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dzIHRoZSBpbml0aWFsICItLSIuIFRvZ2V0aGVyIHdpdGgKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByZWNlZGluZyBydWxlLCB0aGlzIGFsbG93cyB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0aW9uIG9mIGJveCBjb21tZW50cywgYXMgc2hvd24gaW4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBleGFtcGxlOgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gVGhpcyBpcyBhIGJveCBjb21tZW50IC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLQogICAtLSAgICAgIEVORCAgICAgICAgICAgICAgICAgIENoZWNrIGVuZC9leGl0IGxhYmVscy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBsYWJlbHMgb24gZW5kIHN0YXRlbWVudHMgZW5kaW5nCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvZ3JhbXMgYW5kIG9uIGV4aXQgc3RhdGVtZW50cyBleGl0aW5nCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQgbG9vcHMsIGFyZSByZXF1aXJlZCB0byBiZSBwcmVzZW50LgogICAtLQogICAtLSAgICAgIEdOQVQgICAgICAgICAgICAgICAgIEVuZm9yY2VzIGEgc2V0IG9mIHN0eWxlIGNvbnZlbnRpb25zIHRoYXQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kIHRvIHRoZSBzdHlsZSB1c2VkIGluIHRoZSBHTkFUCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUuICBBbGwgY29tcGlsZXIgdW5pdHMgYXJlIGFsd2F5cwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUgd2l0aCB0aGlzIGtleXdvcmQgc3BlY2lmaWVkLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgZnVsbCBkb2N1bWVudGF0aW9uIGZvciB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSBjb252ZW50aW9ucyBpbXBvc2VkIGJ5IHRoaXMga2V5d29yZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBib2R5IG9mIHRoZSBwYWNrYWdlICJTdHlsZSIgaW4gdGhlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIgc291cmNlcy4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCBub3JtYWxseSB1c2UgdGhpcyBrZXl3b3JkLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBNVVNUIHVzZSBpdCBmb3IgY29tcGlsaW5nIGFueQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlLWRlZmluZWQgdW5pdCwgb3IgZm9yIGFkZGluZyBjaGlsZHJlbgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFueSBsYW5ndWFnZS1kZWZpbmVkIHVuaXQgb3RoZXIgdGhhbgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFuZGFyZCIuCiAgIC0tCiAgIC0tICAgICAgSFRBQlMgICAgICAgICAgICAgICAgTm8gaG9yaXpvbnRhbCB0YWJzLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWwgdGFiIGNoYXJhY3RlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIHRleHQuIFRvZ2V0aGVyIHdpdGggdGhlIEJMQU5LUwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChubyBibGFua3MgYXQgZW5kIG9mIGxpbmUpIG9wdGlvbiwgdGhpcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZm9yY2VzIGEgY2Fub25pY2FsIGZvcm0gZm9yIHRoZSB1c2Ugb2YgYmxhbmtzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc2VwYXJhdGUgc291cmNlIHRva2Vucy4KICAgLS0KICAgLS0gICAgICBJRl9USEVOICAgICAgICAgICAgICBDaGVjayBpZi10aGVuIGxheW91dC4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUga2V5d29yZCB0aGVuIG11c3QgYXBwZWFyIGVpdGhlciBvbiB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIGxpbmUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgaWYsIG9yIG9uIGEgbGluZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGl0cyBvd24sIGxpbmVkIHVwIHVuZGVyIHRoZSBpZiB3aXRoIGF0IGxlYXN0CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIG5vbi1ibGFuayBsaW5lIGluIGJldHdlZW4gY29udGFpbmluZyBhbGwgb3IKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBjb25kaXRpb24gdG8gYmUgdGVzdGVkLgogICAtLQogICAtLSAgICAgIEtFWVdPUkQgICAgICAgICAgICAgIENoZWNrIGtleXdvcmQgY2FzaW5nLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBrZXl3b3JkcyBtdXN0IGJlIGluIGxvd2VyIGNhc2UgKHdpdGggdGhlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uIG9mIGtleXdvcmRzIHN1Y2ggYXMgZGlnaXRzIHVzZWQgYXMKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgbmFtZXMgdG8gd2hpY2ggdGhpcyBjaGVjayBkb2VzIG5vdAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5KS4KICAgLS0KICAgLS0gICAgICBMQVlPVVQgICAgICAgICAgICAgICBDaGVjayBsYXlvdXQuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0IG9mIHN0YXRlbWVudCBhbmQgZGVjbGFyYXRpb24gY29uc3RydWN0cwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgZm9sbG93IHRoZSByZWNvbW1lbmRhdGlvbnMgaW4gdGhlIEFkYQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBNYW51YWwsIGFzIGluZGljYXRlZCBieSB0aGUgZm9ybSBvZgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzeW50YXggcnVsZXMuIEZvciBleGFtcGxlIGFuIGVsc2Uga2V5d29yZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgbGluZWQgdXAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpZgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQuCiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHR3byByZXNwZWN0cyBpbiB3aGljaCB0aGUgc3R5bGUgcnVsZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZm9yY2VkIGJ5IHRoaXMgY2hlY2sgb3B0aW9uIGFyZSBtb3JlIGxpYmVyYWwKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRob3NlIGluIHRoZSBBZGEgUmVmZXJlbmNlIE1hbnVhbC4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJzdCBpbiB0aGUgY2FzZSBvZiByZWNvcmQgZGVjbGFyYXRpb25zLAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHBlcm1pc3NpYmxlIHRvIHB1dCB0aGUgcmVjb3JkIGtleXdvcmQgb24KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBsaW5lIGFzIHRoZSB0eXBlIGtleXdvcmQsIGFuZCB0aGVuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVuZCBpbiBlbmQgcmVjb3JkIG11c3QgbGluZSB1cCB1bmRlciB0eXBlLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyB0d28KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRzIGlzIGFjY2VwdGFibGU6CiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSBxIGlzIHJlY29yZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgOiBpbnRlZ2VyOwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgOiBpbnRlZ2VyOwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCByZWNvcmQ7CiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSBxIGlzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA6IGludGVnZXI7CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA6IGludGVnZXI7CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIHJlY29yZDsKICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmQsIGluIHRoZSBjYXNlIG9mIGEgYmxvY2sgc3RhdGVtZW50LAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGVybWl0dGVkIGFsdGVybmF0aXZlIGlzIHRvIHB1dCB0aGUgYmxvY2sKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBkZWNsYXJlIG9yIGJlZ2luCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZCwgYW5kIHRoZW4gbGluZSB0aGUgZW5kIGtleXdvcmQgdXAgdW5kZXIKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYmxvY2sgbGFiZWwuIEZvciBleGFtcGxlIGJvdGggdGhlIGZvbGxvd2luZwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBwZXJtaXR0ZWQ6CiAgIC0tCiAgIC0tCiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2sgOiBkZWNsYXJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA6IEludGVnZXIgOj0gMzsKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgKEEsIEEpOwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBCbG9jazsKICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9jayA6CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgOiBJbnRlZ2VyIDo9IDM7CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIChBLCBBKTsKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgQmxvY2s7CiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNhbWUgYWx0ZXJuYXRpdmUgZm9ybWF0IGlzIGFsbG93ZWQgZm9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcHMuIEZvciBleGFtcGxlLCBib3RoIG9mIHRoZSBmb2xsb3dpbmcgYXJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0dGVkOgogICAtLQogICAtLQogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyIDogd2hpbGUgSiA8IDEwIGxvb3AKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIChKKSA6PSAwOwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBsb29wIENsZWFyOwogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyIDoKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBKIDwgMTAgbG9vcAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgKEopIDo9IDA7CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGxvb3AgQ2xlYXI7CiAgIC0tCiAgIC0tCiAgIC0tCiAgIC0tICAgICAgTElORV9MRU5HVEggICAgICAgICAgQ2hlY2sgbWF4aW11bSBsaW5lIGxlbmd0aC4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHNvdXJjZSBsaW5lcyBtdXN0IG5vdCBleGNlZWQgNzkKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgYW55IHRyYWlsaW5nIGJsYW5rcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiA3OSBhbGxvd3MgY29udmVuaWVudCBkaXNwbGF5IG9uCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gODAgY2hhcmFjdGVyIHdpZGUgZGV2aWNlIG9yIHdpbmRvdywgYWxsb3dpbmcKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcG9zc2libGUgc3BlY2lhbCB0cmVhdG1lbnQgb2YgODAgY2hhcmFjdGVyCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuCiAgIC0tCiAgIC0tICAgICAgTk9ORSAgICAgICAgICAgICAgICAgQ2xlYXIgYW55IHByZXZpb3VzbHkgc2V0IHN0eWxlIGNoZWNrcy4KICAgLS0KICAgLS0gICAgICBPUkRFUkVEX1NVQlBST0dSQU1TICBDaGVjayBvcmRlciBvZiBzdWJwcm9ncmFtIGJvZGllcy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgc3VicHJvZ3JhbSBib2RpZXMgaW4gYSBnaXZlbiBzY29wZSAoZS5nLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGFja2FnZSBib2R5KSBtdXN0IGJlIGluIGFscGhhYmV0aWNhbCBvcmRlci4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb3JkZXJpbmcgcnVsZSB1c2VzIG5vcm1hbCBBZGEgcnVsZXMgZm9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaW5nIHN0cmluZ3MsIGlnbm9yaW5nIGNhc2luZyBvZiBsZXR0ZXJzLAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCB0aGF0IGlmIHRoZXJlIGlzIGEgdHJhaWxpbmcgbnVtZXJpYwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCwgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyBzdWZmaXggaXMgdXNlZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBvcmRlcmluZyAoZS5nLiBKdW5rMiBjb21lcyBiZWZvcmUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBKdW5rMTApLgogICAtLQogICAtLSAgICAgIE5PTkUgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGJlaGF2aW9yLiAgU2FtZSBhcyAvTk9TVFlMRV9DSEVDS1MuCiAgIC0tCiAgIC0tICAgICAgUFJBR01BICAgICAgICAgICAgICAgQ2hlY2sgcHJhZ21hIGNhc2luZy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBQcmFnbWEgbmFtZXMgbXVzdCBiZSB3cml0dGVuIGluIG1peGVkIGNhc2UsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBpcywgdGhlIGluaXRpYWwgbGV0dGVyIGFuZCBhbnkgbGV0dGVyCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGFuIHVuZGVyc2NvcmUgbXVzdCBiZSB1cHBlcmNhc2UuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIGxldHRlcnMgbXVzdCBiZSBsb3dlcmNhc2UuCiAgIC0tCiAgIC0tICAgICAgUkVGRVJFTkNFUyAgICAgICAgICAgQ2hlY2sgcmVmZXJlbmNlcy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgaWRlbnRpZmllciByZWZlcmVuY2VzIG11c3QgYmUgY2FzZWQgaW4gdGhlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSB3YXkgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb24uCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gc3BlY2lmaWMgY2FzaW5nIHN0eWxlIGlzIGltcG9zZWQgb24KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVycy4gVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgZm9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2lzdGVuY3kgb2YgcmVmZXJlbmNlcyB3aXRoIGRlY2xhcmF0aW9ucy4KICAgLS0KICAgLS0gICAgICBSTV9DT0xVTU5fTEFZT1VUICAgICBFbmZvcmNlIHRoZSBsYXlvdXQgY29udmVudGlvbnMgc3VnZ2VzdGVkIGJ5CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV4YW1wbGVzIGFuZCBzeW50YXggcnVsZXMgb2YgdGhlIEFkYQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlIFJlZmVyZW5jZSBNYW51YWwuIEZvciBleGFtcGxlLCBhbgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbHNlIiBtdXN0IGxpbmUgdXAgd2l0aCBhbiAiaWYiIGFuZCBjb2RlIGluCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJ0aGVuIiBhbmQgImVsc2UiIHBhcnRzIG11c3QgYmUgaW5kZW50ZWQuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbXBpbGVyIGNvbnNpZGVycyB2aW9sYXRpb25zIG9mIHRoZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dCBydWxlcyBhIHN5bnRheCBlcnJvciBpZiB5b3Ugc3BlY2lmeQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMga2V5d29yZC4KICAgLS0KICAgLS0gICAgICBTUEVDUyAgICAgICAgICAgICAgICBDaGVjayBzZXBhcmF0ZSBzcGVjcy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZXBhcmF0ZSBkZWNsYXJhdGlvbnMgKCJzcGVjcyIpIGFyZSByZXF1aXJlZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJwcm9ncmFtcyAoYSBib2R5IGlzIG5vdCBhbGxvd2VkIHRvIHNlcnZlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaXRzIG93biBkZWNsYXJhdGlvbikuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgcGFyYW1ldGVybGVzcyBsaWJyYXJ5IGxldmVsIHByb2NlZHVyZXMgYXJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHJlcXVpcmVkIHRvIGhhdmUgYSBzZXBhcmF0ZSBkZWNsYXJhdGlvbi4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4Y2VwdGlvbiBjb3ZlcnMgdGhlIG1vc3QgZnJlcXVlbnQgZm9ybSBvZgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gcHJvZ3JhbSBwcm9jZWR1cmVzLgogICAtLQogICAtLSAgICAgIFNUQU5EQVJEX0NBU0lORyAgICAgIENoZWNrIGNhc2luZyBvZiBlbnRpdGllcyBpbiBTdGFuZGFyZC4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgaWRlbnRpZmllciBmcm9tIFN0YW5kYXJkIG11c3QgYmUgY2FzZWQgdG8KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgcHJlc2VudGF0aW9uIGluIHRoZSBBZGEgUmVmZXJlbmNlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsIChmb3IgZXhhbXBsZSwgSW50ZWdlciBhbmQgQVNDSUkuTlVMKS4KICAgLS0KICAgLS0gICAgICBUT0tFTiAgICAgICAgICAgICAgICBDaGVjayB0b2tlbiBzcGFjaW5nLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdG9rZW4gc3BhY2luZyBydWxlcyBhcmUgZW5mb3JjZWQ6CiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSBrZXl3b3JkcyBhYnMgYW5kIG5vdCBtdXN0IGJlIGZvbGxvd2VkCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGEgc3BhY2UuCiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSB0b2tlbiA9PiBtdXN0IGJlIHN1cnJvdW5kZWQgYnkgc3BhY2VzLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgdG9rZW4gPD4gbXVzdCBiZSBwcmVjZWRlZCBieSBhIHNwYWNlIG9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbGVmdCBwYXJlbnRoZXNpcy4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQmluYXJ5IG9wZXJhdG9ycyBvdGhlciB0aGFuICoqIG11c3QgYmUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm91bmRlZCBieSBzcGFjZXMuIFRoZXJlIGlzIG5vCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uIG9uIHRoZSBsYXlvdXQgb2YgdGhlICoqIGJpbmFyeQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ29sb24gbXVzdCBiZSBzdXJyb3VuZGVkIGJ5IHNwYWNlcy4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ29sb24tZXF1YWwgKGFzc2lnbm1lbnQpIG11c3QgYmUgc3Vycm91bmRlZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBzcGFjZXMuCiAgIC0tCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbW1hIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGxpbmUsIG9yIGJlIGltbWVkaWF0ZWx5IHByZWNlZGVkIGJ5CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbm9uLWJsYW5rIGNoYXJhY3RlciwgYW5kIG11c3QgYmUgZm9sbG93ZWQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgYSBzcGFjZS4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSWYgdGhlIHRva2VuIHByZWNlZGluZyBhIGxlZnQgcGFyZW4gZW5kcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgbGV0dGVyIG9yIGRpZ2l0LCB0aGVuIGEgc3BhY2UgbXVzdAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSB0aGUgdHdvIHRva2Vucy4KICAgLS0KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQSByaWdodCBwYXJlbnRoZXNpcyBtdXN0IGVpdGhlciBiZSB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlciBvbiBhIGxpbmUsIG9yIGl0CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgcHJlY2VkZWQgYnkgYSBub24tYmxhbmsgY2hhcmFjdGVyLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBBIHNlbWljb2xvbiBtdXN0IG5vdCBiZSBwcmVjZWRlZCBieQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNwYWNlLCBhbmQgbXVzdCBub3QgYmUgZm9sbG93ZWQgYnkKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBub24tYmxhbmsgY2hhcmFjdGVyLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBBIHVuYXJ5IHBsdXMgb3IgbWludXMgbWF5IG5vdCBiZSBmb2xsb3dlZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBhIHNwYWNlLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBBIHZlcnRpY2FsIGJhciBtdXN0IGJlIHN1cnJvdW5kZWQgYnkKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBydWxlcywgYXBwZWFyaW5nIGluIGNvbHVtbiBvbmUgaXMKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBhbHdheXMgcGVybWl0dGVkLCB0aGF0IGlzLCBjb3VudHMgYXMgbWVldGluZwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciBhIHJlcXVpcmVtZW50IGZvciBhIHJlcXVpcmVkIHByZWNlZGluZwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLCBvciBhcyBtZWV0aW5nIGEgcmVxdWlyZW1lbnQgZm9yIG5vCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nIHNwYWNlLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGVhcmluZyBhdCB0aGUgZW5kIG9mIGEgbGluZSBpcyBhbHNvIGFsd2F5cwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdHRlZCwgdGhhdCBpcywgY291bnRzIGFzIG1lZXRpbmcgZWl0aGVyCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYSByZXF1aXJlbWVudCBmb3IgYSBmb2xsb3dpbmcgc3BhY2UsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgbWVldGluZyBhIHJlcXVpcmVtZW50IGZvciBubyBmb2xsb3dpbmcKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS4KICAgLS0KICAgLS0gICAgICBWVEFCUyAgICAgICAgICAgICAgICBObyBmb3JtIGZlZWRzIG9yIHZlcnRpY2FsIHRhYnMuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybSBmZWVkcyBvciB2ZXJ0aWNhbCB0YWIgY2hhcmFjdGVycyBhcmUgbm90CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0dGVkIGluIHRoZSBzb3VyY2UgdGV4dC4KCiAgIFNfR0NDX1N0eWxlWCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1NUWUxFX0NIRUNLUyAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1nbmF0ZywhLWduYXR5KiI7CiAgIC0tICBOT0RPQyAoc2VlIC9TVFlMRV9DSEVDS1MpCgogICBTX0dDQ19TeW1ib2wgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU1lNQk9MX1BSRVBST0NFU1NJTkc9IiAmICciJyAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0ZUQiICYgJyInOwogICAtLSAgICAgICAgL1NZTUJPTF9QUkVQUk9DRVNTSU5HPSJzeW1ib2w9dmFsdWUiCiAgIC0tCiAgIC0tICAgRGVmaW5lIG9yIHJlZGVmaW5lIGEgcHJlcHJvY2Vzc2luZyBzeW1ib2wsIGFzc29jaWF0ZWQgd2l0aCB2YWx1ZS4KICAgLS0gICBJZiAiPXZhbHVlIiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIGlzIFRydWUuCiAgIC0tICAgQSBzeW1ib2wgaXMgYW4gaWRlbnRpZmllciwgZm9sbG93aW5nIG5vcm1hbCBBZGEgKGNhc2UtaW5zZW5zaXRpdmUpCiAgIC0tICAgcnVsZXMgZm9yIGl0cyBzeW50YXgsIGFuZCB2YWx1ZSBpcyBhbnkgc2VxdWVuY2UgKGluY2x1ZGluZyBhbiBlbXB0eQogICAtLSAgIHNlcXVlbmNlKSBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIHNldCAobGV0dGVycywgZGlnaXRzLCBwZXJpb2QsCiAgIC0tICAgdW5kZXJsaW5lKS4gQWRhIHJlc2VydmVkIHdvcmRzIG1heSBiZSB1c2VkIGFzIHN5bWJvbHMsIHdpdGggdGhlCiAgIC0tICAgZXhjZXB0aW9ucyBvZiAiaWYiLCAiZWxzZSIsICJlbHNpZiIsICJlbmQiLCAiYW5kIiwgIm9yIiBhbmQgInRoZW4iLgogICAtLQogICAtLSAgIEEgc3ltYm9sIGRlY2xhcmVkIHdpdGggdGhpcyBxdWFsaWZpZXIgb24gdGhlIGNvbW1hbmQgbGluZSByZXBsYWNlcwogICAtLSAgIGEgc3ltYm9sIHdpdGggdGhlIHNhbWUgbmFtZSBlaXRoZXIgaW4gYSBkZWZpbml0aW9uIGZpbGUgb3Igc3BlY2lmaWVkCiAgIC0tICAgd2l0aCBhIHN3aXRjaCAtRCBpbiB0aGUgcHJlcHJvY2Vzc29yIGRhdGEgZmlsZS4KICAgLS0KICAgLS0gICBUaGlzIHF1YWxpZmllciBpcyBzaW1pbGFyIHRvIHF1YWxpZmllciAvQVNTT0NJQVRFIG9mCiAgIC0tICAgR05BVCBQUkVQUk9DRVNTSU5HLgoKICAgU19HQ0NfU3ludGF4ICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NZTlRBWF9PTkxZICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHMiOwogICAtLSAgICAgICAgL05PU1lOVEFYX09OTFkgKEQpCiAgIC0tICAgICAgICAvU1lOVEFYX09OTFkKICAgLS0KICAgLS0gICBSdW4gR05BVCBpbiBzeW50YXggY2hlY2tpbmcgb25seSBtb2RlLiAgWW91IGNhbiBjaGVjayBhIHNlcmllcyBvZgogICAtLSAgIGZpbGVzIGluIGEgc2luZ2xlIGNvbW1hbmQsIGFuZCBjYW4gdXNlIHdpbGQgY2FyZHMgdG8gc3BlY2lmeSBzdWNoIGEKICAgLS0gICBncm91cCBvZiBmaWxlcy4KICAgLS0KICAgLS0gICBZb3UgbWF5IHVzZSBvdGhlciBxdWFsaWZpZXJzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBxdWFsaWZpZXIuIEluCiAgIC0tICAgcGFydGljdWxhciwgL0xJU1QgYW5kIC9SRVBPUlRfRVJST1JTPVZFUkJPU0UgYXJlIHVzZWZ1bCB0byBjb250cm9sIHRoZQogICAtLSAgIGZvcm1hdCBvZiBhbnkgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgogICAtLQogICAtLSAgIFRoZSBvdXRwdXQgaXMgc2ltcGx5IHRoZSBlcnJvciBtZXNzYWdlcywgaWYgYW55LiBObyBvYmplY3QgZmlsZSBvciBBTEkKICAgLS0gICBmaWxlIGlzIGdlbmVyYXRlZCBieSBhIHN5bnRheC1vbmx5IGNvbXBpbGF0aW9uLiBBbHNvLCBubyB1bml0cyBvdGhlcgogICAtLSAgIHRoYW4gdGhlIG9uZSBzcGVjaWZpZWQgYXJlIGFjY2Vzc2VkLiBGb3IgZXhhbXBsZSwgaWYgYSB1bml0ICJYIiB3aXRoJ3MKICAgLS0gICBhIHVuaXQgIlkiLCBjb21waWxpbmcgdW5pdCAiWCIgaW4gc3ludGF4IGNoZWNrIG9ubHkgbW9kZSBkb2VzIG5vdAogICAtLSAgIGFjY2VzcyB0aGUgc291cmNlIGZpbGUgY29udGFpbmluZyB1bml0ICJZIi4KICAgLS0KICAgLS0gICBOb3JtYWxseSwgR05BVCBhbGxvd3Mgb25seSBhIHNpbmdsZSB1bml0IGluIGEgc291cmNlIGZpbGUuIEhvd2V2ZXIsCiAgIC0tICAgdGhpcyByZXN0cmljdGlvbiBkb2VzIG5vdCBhcHBseSBpbiBzeW50YXgtY2hlY2stb25seSBtb2RlLCBhbmQgaXQgaXMKICAgLS0gICBwb3NzaWJsZSB0byBjaGVjayBhIGZpbGUgY29udGFpbmluZyBtdWx0aXBsZSBjb21waWxhdGlvbiB1bml0cwogICAtLSAgIGNvbmNhdGVuYXRlZCB0b2dldGhlci4gVGhpcyBpcyBwcmltYXJpbHkgdXNlZCBieSB0aGUgR05BVCBDSE9QCiAgIC0tICAgY29tbWFuZC4KCiAgIFNfR0NDX1RhYmxlICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9UQUJMRV9NVUxUSVBMSUVSPSMiICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRUIyI7CiAgIC0tICAgICAgICAvVEFCTEVfTVVMVElQTElFUj1ubm4KICAgLS0KICAgLS0gICBBbGwgY29tcGlsZXIgdGFibGVzIHN0YXJ0IGF0IG5ubiB0aW1lcyB1c3VhbCBzdGFydGluZyBzaXplLgoKICAgU19HQ0NfVHJhY2UgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1RSQUNFX1VOSVRTICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGRjIjsKICAgLS0gICAgICAgIC9UUkFDRV9VTklUUwogICAtLSAgICAgICAgL05PVFJBQ0VfVU5JVFMKICAgLS0KICAgLS0gICBUaGlzIHN3aXRjaCB0aGF0IGRvZXMgZm9yIHRoZSBmcm9udGVuZCB3aGF0IC9WRVJCT1NFIGRvZXMgZm9yIHRoZQogICAtLSAgIGJhY2tlbmQuIFRoZSBzeXN0ZW0gcHJpbnRzIHRoZSBuYW1lIG9mIGVhY2ggdW5pdCwgZWl0aGVyIGEgY29tcGlsYXRpb24KICAgLS0gICB1bml0IG9yIG5lc3RlZCB1bml0LCBhcyBpdCBpcyBiZWluZyBhbmFseXplZC4KCiAgIFNfR0NDX1RyZWUgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9UUkVFX09VVFBVVCAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR0IjsKICAgLS0gICAgICAgIC9UUkVFX09VVFBVVAogICAtLSAgICAgICAgL05PVFJFRV9PVVRQVVQKICAgLS0KICAgLS0gICBDYXVzZSBHTkFUIHRvIHdyaXRlIHRoZSBpbnRlcm5hbCB0cmVlIGZvciBhIHVuaXQgdG8gYSBmaWxlICh3aXRoIHRoZQogICAtLSAgIGZpbGV0eXBlIEFUQiBmb3IgYSBib2R5IG9yIEFUUyBmb3IgYSBzcGVjKS4gIFRoaXMgaXMgbm90IG5vcm1hbGx5CiAgIC0tICAgcmVxdWlyZWQsIGJ1dCBpcyB1c2VkIGJ5IHNlcGFyYXRlIGFuYWx5c2lzIHRvb2xzLiBUeXBpY2FsbHkgdGhlc2UKICAgLS0gICB0b29scyBkbyB0aGUgbmVjZXNzYXJ5IGNvbXBpbGF0aW9ucyBhdXRvbWF0aWNhbGx5LCBzbyB5b3Ugc2hvdWxkIG5ldmVyCiAgIC0tICAgaGF2ZSB0byBzcGVjaWZ5IHRoaXMgc3dpdGNoIGluIG5vcm1hbCBvcGVyYXRpb24uCgogICBTX0dDQ19UcnlzICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVFJZX1NFTUFOVElDUyAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0cSI7CiAgIC0tICAgICAgICAvVFJZX1NFTUFOVElDUwogICAtLSAgICAgICAgL05PVFJZX1NFTUFOVElDUwogICAtLQogICAtLSAgIEluIG5vcm1hbCBvcGVyYXRpb24gbW9kZSB0aGUgY29tcGlsZXIgZmlyc3QgcGFyc2VzIHRoZSBwcm9ncmFtIGFuZAogICAtLSAgIGRldGVybWluZXMgaWYgdGhlcmUgYXJlIGFueSBzeW50YXggZXJyb3JzLiBJZiB0aGVyZSBhcmUsIGFwcHJvcHJpYXRlCiAgIC0tICAgZXJyb3IgbWVzc2FnZXMgYXJlIGdlbmVyYXRlZCBhbmQgY29tcGlsYXRpb24gaXMgaW1tZWRpYXRlbHkKICAgLS0gICB0ZXJtaW5hdGVkLiAgVGhpcyBxdWFsaWZpZXIgdGVsbHMgR05BVCB0byBjb250aW51ZSB3aXRoIHNlbWFudGljCiAgIC0tICAgYW5hbHlzaXMgZXZlbiBpZiBzeW50YXggZXJyb3JzIGhhdmUgYmVlbiBmb3VuZC4gIFRoaXMgbWF5IGVuYWJsZSB0aGUKICAgLS0gICBkZXRlY3Rpb24gb2YgbW9yZSBlcnJvcnMgaW4gYSBzaW5nbGUgcnVuLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlCiAgIC0tICAgc2VtYW50aWMgYW5hbHl6ZXIgaXMgbW9yZSBsaWtlbHkgdG8gZW5jb3VudGVyIHNvbWUgaW50ZXJuYWwgZmF0YWwKICAgLS0gICBlcnJvciB3aGVuIGdpdmVuIGEgc3ludGFjdGljYWxseSBpbnZhbGlkIHRyZWUuCgogICBTX0dDQ19Vbml0cyAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVU5JVFNfTElTVCAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0dSI7CiAgIC0tICAgICAgICAvTk9VTklUU19MSVNUIChEKQogICAtLSAgICAgICAgL1VOSVRTX0xJU1QKICAgLS0KICAgLS0gICBQcmludCBhIGxpc3Qgb2YgdW5pdHMgcmVxdWlyZWQgYnkgdGhpcyBjb21waWxhdGlvbiBvbiBTWVMkT1VUUFVULiAgVGhlCiAgIC0tICAgbGlzdGluZyBpbmNsdWRlcyBhbGwgdW5pdHMgb24gd2hpY2ggdGhlIHVuaXQgYmVpbmcgY29tcGlsZWQgZGVwZW5kcwogICAtLSAgIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LgoKICAgU19HQ0NfVW5pcXVlICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1VOSVFVRV9FUlJPUl9UQUcgIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFUiOwogICAtLSAgICAgICAgL05PVU5JUVVFX0VSUk9SX1RBRyAoRCkKICAgLS0gICAgICAgIC9VTklRVUVfRVJST1JfVEFHCiAgIC0tCiAgIC0tICAgVGFnIGNvbXBpbGVyIGVycm9yIG1lc3NhZ2VzIHdpdGggdGhlIHN0cmluZyAiZXJyb3I6ICIuCgogICBTX0dDQ19VcGNhc2UgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVVBQRVJDQVNFX0VYVEVSTkFMUyAiICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0RiI7CiAgIC0tICAgICAgICAvTk9VUFBFUkNBU0VfRVhURVJOQUxTIChEKQogICAtLSAgICAgICAgL1VQUEVSQ0FTRV9FWFRFUk5BTFMKICAgLS0KICAgLS0gICBGb2xkIGRlZmF1bHQgYW5kIGV4cGxpY2l0IGV4dGVybmFsIG5hbWVzIGluIHByYWdtYXMgSW1wb3J0IGFuZCBFeHBvcnQKICAgLS0gICB0byB1cHBlcmNhc2UgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBERUMgQy4KCiAgIFNfR0NDX1ZhbGlkICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9WQUxJRElUWV9DSEVDS0lORz0iICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVGQVVMVCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFZkICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PREVGQVVMVCAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRWRCAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT1BJRVMgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0VmMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9DT1BJRVMgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFZDICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZMT0FUUyAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRWZiAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT0ZMT0FUUyAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0VkYgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5fUEFSQU1TICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFZpICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PSU5fUEFSQU1TICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRWSSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNT0RfUEFSQU1TICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0Vm0gIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9NT0RfUEFSQU1TICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFZNICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QRVJBTkRTICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRWbyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT09QRVJBTkRTICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0Vk8gIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFSQU1FVEVSUyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFZwICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PUEFSQU1FVEVSUyAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRWUCAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRVRVUk5TICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0VnIgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9SRVRVUk5TICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFZSICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNVQlNDUklQVFMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRWcyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT1NVQlNDUklQVFMgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0VlMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVEVTVFMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFZ0ICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PVEVTVFMgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRWVCAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBTEwgIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0VmEgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9ORSAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFZuIjsKICAgLS0gICAgICAgIC9WQUxJRElUWV9DSEVDS0lOR1s9KGtleXdvcmQsWy4uLl0pXQogICAtLQogICAtLSAgIENvbnRyb2wgbGV2ZWwgb2YgdmFsaWRpdHkgY2hlY2tpbmcuCiAgIC0tCiAgIC0tICAgICAgICBERUZBVUxUIChEKSAgICAgSW4gdGhpcyBtb2RlIGNoZWNrcyBhcmUgbWFkZSB0byBwcmV2ZW50CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgZXJyb25lb3VzIGJlaGF2aW9yIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgUk0uCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgTm90YWJseSBleHRyYSBjaGVja3MgbWF5IGJlIG5lZWRlZCBmb3IgY2FzZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgYW5kIHN1YnNjcmlwdGVkIGFycmF5IGFzc2lnbm1lbnRzLgogICAtLQogICAtLSAgICAgICAgTk9ORSAgICAgICAgICAgIE5vIHNwZWNpYWwgY2hlY2tzIGZvciBpbnZhbGlkIHZhbHVlcyBhcmUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtZWQuIFRoaXMgbWVhbnMgdGhhdCByZWZlcmVuY2VzIHRvCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgY2FuIGNhdXNlIGVycm9uZW91cwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yIGZyb20gY29uc3RydWN0cyBsaWtlIGNhc2Ugc3RhdGVtZW50cwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzdWJzY3JpcHRlZCBhcnJheSBhc3NpZ25tZW50cy4gSW4gdGhpcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUsIGludmFsaWQgdmFsdWVzIGNhbiBsZWFkIHRvIGVycm9uZW91cwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yLgogICAtLQogICAtLSAgICAgICAgRlVMTCAgICAgICAgICAgIEV2ZXJ5IGFzc2lnbm1lbnQgaXMgY2hlY2tlZCBmb3IgdmFsaWRpdHksIHNvCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBpdCBpcyBpbXBvc3NpYmxlIHRvIGFzc2lnbiBpbnZhbGlkIHZhbHVlcy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgUk0gc3BlY2lmaWNhbGx5IGFsbG93cyBzdWNoIGFzc2lnbm1lbnRzLAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBpbiB0aGlzIG1vZGUsIGludmFsaWQgdmFsdWVzIGNhbiBuZXZlciBiZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbmVkLCBhbmQgYW4gYXR0ZW1wdCB0byBwZXJmb3JtIHN1Y2ggYW4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50IGltbWVkaWF0ZWx5IHJhaXNlcyBDb25zdHJhaW50X0Vycm9yLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgaXMgYWxsb3dlZCAoYnV0IG5vdCByZXF1aXJlZCkgYnkKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgUk0uIFRoaXMgbW9kZSBpcyBpbnRlbmRlZCBhcyBhIGRlYnVnZ2luZyBhaWQsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1heSBiZSB1c2VmdWwgaW4gaGVscGluZyB0byB0cmFjayBkb3duCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEl0IG1heSBiZSB1c2VmdWwgdG8KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhpcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBOb3JtYWxpemVfU2NhbGFycwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIHByYWdtYSB3aGljaCBhdHRlbXB0cyB0byBpbml0aWFsaXplIHdpdGggaW52YWxpZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB3aGVyZSBwb3NzaWJsZS4KCiAgIFNfR0NDX1ZlcmJvc2UgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9WRVJCT1NFICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXYiOwogICAtLSAgICAgICAgL1ZFUkJPU0UKICAgLS0gICAgICAgIC9OT1ZFUkJPU0UKICAgLS0KICAgLS0gICBTaG93IGNvbW1hbmRzIGdlbmVyYXRlZCBieSB0aGUgR0NDIGRyaXZlci4gTm9ybWFsbHkgdXNlZCBvbmx5IGZvcgogICAtLSAgIGRlYnVnZ2luZyBwdXJwb3NlcyBvciBpZiB5b3UgbmVlZCB0byBiZSBzdXJlIHdoYXQgdmVyc2lvbiBvZiB0aGUKICAgLS0gICBjb21waWxlciB5b3UgYXJlIGV4ZWN1dGluZy4KCiAgIFNfR0NDX1ZlcmJfQXNtIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVkVSQk9TRV9BU00gIiAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItUywtdmVyYm9zZV9hc20sIS1jIjsKICAgLS0gICAgICAgIC9OT0FTTSAoRCkKICAgLS0gICAgICAgIC9BU00KICAgLS0KICAgLS0gICBVc2UgdG8gY2F1c2UgdGhlIGFzc2VtYmxlciBzb3VyY2UgZmlsZSB0byBiZSBnZW5lcmF0ZWQsIHVzaW5nIFMgYXMgdGhlCiAgIC0tICAgZmlsZXR5cGUsIGluc3RlYWQgb2YgdGhlIG9iamVjdCBmaWxlLiBUaGlzIG1heSBiZSB1c2VmdWwgaWYgeW91IG5lZWQKICAgLS0gICB0byBleGFtaW5lIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibHkgY29kZS4KCiAgIFNfR0NDX1dhcm4gICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9XQVJOSU5HUz0iICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVGQVVMVCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLWduYXR3cywhLWduYXR3ZSAiICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFMTCAiICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3YSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT0FMTCAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d0EgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUxMX0dDQyAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItV2FsbCAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTkRJVElPTkFMUyAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3YyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT0NPTkRJVElPTkFMUyAiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d0MgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ09OU1RBTlRfVkFSSUFCTEVTICIgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdrICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PQ09OU1RBTlRfVkFSSUFCTEVTICIgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3SyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTVBMSUNJVF9ERVJFRkVSRU5DRSAiICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d2QgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9fSU1QTElDSVRfREVSRUZFUkVOQ0UgIiAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdEICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVMQUJPUkFUSU9OICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3bCAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT0VMQUJPUkFUSU9OICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d0wgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRVJST1JTICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdlICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJRElORyAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3aCAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT0hJRElORyAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d0ggIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU1QTEVNRU5UQVRJT04gIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdpICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PSU1QTEVNRU5UQVRJT04gIiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3SSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTkVGRkVDVElWRV9JTkxJTkUgIiAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d3AgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9JTkVGRkVDVElWRV9JTkxJTkUgIiAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdQICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1PRElGSUVEX1VOUkVGICIgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3bSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT01PRElGSUVEX1VOUkVGICIgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d00gIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT1BUSU9OQUwgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdhICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PT1BUSU9OQUwgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3QSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT1JNQUwgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d24gIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0JTT0xFU0NFTlQgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdqICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PT0JTT0xFU0NFTlQgIiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3SiAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPVkVSTEFZUyAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d28gIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9PVkVSTEFZUyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdPICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFRFVOREFOVCAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3ciAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT1JFRFVOREFOVCAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d1IgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1VQUFJFU1MgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdzICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVOSU5JVElBTElaRUQgIiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVd1bmluaXRpYWxpemVkICIgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTlJFRkVSRU5DRURfRk9STUFMUyAiICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d2YgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9VTlJFRkVSRU5DRURfRk9STUFMUyAiICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdGICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVOUkVDT0dOSVpFRF9QUkFHTUFTICIgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3ZyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT1VOUkVDT0dOSVpFRF9QUkFHTUFTICIgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d0cgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5VU0VEICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHd1ICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PVU5VU0VEICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3VSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWQVJJQUJMRVNfVU5JTklUSUFMSVpFRCAiICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d3YgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9WQVJJQUJMRVNfVU5JTklUSUFMSVpFRCAiICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHdWICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklNUE9SVF9FWFBPUlRfUFJBR01BUyAiICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3eCAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT0lNUE9SVF9FWFBPUlRfUFJBR01BUyAiICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0d1ggIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5DSEVDS0VEX0NPTlZFUlNJT05TICIgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHd6ICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PVU5DSEVDS0VEX0NPTlZFUlNJT05TICIgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3WiI7CiAgIC0tICAgICAgICAvTk9XQVJOSU5HUwogICAtLQogICAtLSAgIFN1cHByZXNzIHRoZSBvdXRwdXQgb2YgYWxsIHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgR05BVCBmcm9udCBlbmQuCiAgIC0tICAgTm90ZSB0aGF0IGl0IGRvZXMgbm90IHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIGdjYyBiYWNrIGVuZC4KICAgLS0KICAgLS0gICAgICAgIC9XQVJOSU5HU1s9KGtleXdvcmRbLC4uLl0pXQogICAtLQogICAtLSAgIEluIGFkZGl0aW9uIHRvIGVycm9yIG1lc3NhZ2VzLCBjb3JyZXNwb25kaW5nIHRvIGlsbGVnYWxpdGllcyBhcwogICAtLSAgIGRlZmluZWQgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWwsIHRoZSBjb21waWxlciBkZXRlY3RzIHR3byBraW5kcyBvZgogICAtLSAgIHdhcm5pbmcgc2l0dWF0aW9ucy4gIEZpcnN0LCB0aGUgY29tcGlsZXIgY29uc2lkZXJzIHNvbWUgY29uc3RydWN0cwogICAtLSAgIHN1c3BpY2lvdXMgYW5kIGdlbmVyYXRlcyBhIHdhcm5pbmcgbWVzc2FnZSB0byBhbGVydCB5b3UgdG8gYSBwb3NzaWJsZQogICAtLSAgIGVycm9yLiBTZWNvbmQsIGlmIHRoZSBjb21waWxlciBkZXRlY3RzIGEgc2l0dWF0aW9uIHRoYXQgaXMgc3VyZSB0bwogICAtLSAgIHJhaXNlIGFuIGV4Y2VwdGlvbiBhdCBydW50aW1lLCBpdCBnZW5lcmF0ZXMgYSB3YXJuaW5nIG1lc3NhZ2UuCiAgIC0tCiAgIC0tICAgWW91IG1heSBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcga2V5d29yZHMgdG8gY2hhbmdlIHRoaXMgYmVoYXZpb3I6CiAgIC0tCiAgIC0tICAgREVGQVVMVCAoRCkgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgYWJvdmUuCiAgIC0tCiAgIC0tICAgQUxMICAgICAgICAgICAgICAgICAgICAgQWN0aXZhdGUgYWxsIG9wdGlvbmFsIHdhcm5pbmdzLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2YXRlcyBtb3N0IG9wdGlvbmFsIHdhcm5pbmcgbWVzc2FnZXMsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHJlbWFpbmluZyBsaXN0IGluIHRoaXMgc2VjdGlvbiBmb3IKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzIG9uIG9wdGlvbmFsIHdhcm5pbmcgbWVzc2FnZXMgdGhhdAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBpbmRpdmlkdWFsbHkgY29udHJvbGxlZC4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgd2FybmluZ3MgdGhhdCBhcmUgbm90IHR1cm5lZCBvbiBieQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgb3B0aW9uIGFyZSBCSUFTRURfUk9VTkRJTkcsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QTElDSVRfREVSRUZFUkVOQ0UsIEhJRElORyBhbmQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBFTEFCT1JBVElPTi4gQWxsIG90aGVyIG9wdGlvbmFsIEFkYQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzIGFyZSB0dXJuZWQgb24uCiAgIC0tCiAgIC0tICAgTk9BTEwgICAgICAgICAgICAgICAgICAgU3VwcHJlc3MgYWxsIG9wdGlvbmFsIGVycm9ycy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwcmVzc2VzIGFsbCBvcHRpb25hbCB3YXJuaW5nIG1lc3NhZ2VzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgYWN0aXZhdGVkIGJ5IG9wdGlvbiBBTEwuCiAgIC0tCiAgIC0tICAgQUxMX0dDQyAgICAgICAgICAgICAgICAgUmVxdWVzdCBhZGRpdGlvbmFsIG1lc3NhZ2VzIGZyb20gdGhlIEdDQwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tlbmQuICBNb3N0IG9mIHRoZXNlIGFyZSBub3QgcmVsZXZhbnQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBZGEuCiAgIC0tCiAgIC0tICAgQ09ORElUSU9OQUxTICAgICAgICAgICAgQWN0aXZhdGUgd2FybmluZ3MgZm9yIGNvbmRpdGlvbmFsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMgdXNlZCBpbiB0ZXN0cyB0aGF0IGFyZSBrbm93bgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIFRydWUgb3IgRmFsc2UgYXQgY29tcGlsZSB0aW1lLiBUaGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzIHRoYXQgc3VjaCB3YXJuaW5ncyBhcmUgbm90CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLgogICAtLQogICAtLSAgIE5PQ09ORElUSU9OQUxTICAgICAgICAgIFN1cHByZXNzIHdhcm5pbmdzIGZvciBjb25kaXRpb25hbAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zIHVzZWQgaW4gdGVzdHMgdGhhdCBhcmUga25vd24KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBUcnVlIG9yIEZhbHNlIGF0IGNvbXBpbGUgdGltZS4KICAgLS0KICAgLS0gICBJTVBMSUNJVF9ERVJFRkVSRU5DRSAgICBBY3RpdmF0ZSB3YXJuaW5ncyBvbiBpbXBsaWNpdCBkZXJlZmVyZW5jaW5nLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1c2Ugb2YgYSBwcmVmaXggb2YgYW4gYWNjZXNzIHR5cGUgaW4gYW4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkIGNvbXBvbmVudCwgc2xpY2UsIG9yIHNlbGVjdGVkIGNvbXBvbmVudAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgYW4gZXhwbGljaXQgLmFsbCB3aWxsIGdlbmVyYXRlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB3YXJuaW5nLiBXaXRoIHRoaXMgd2FybmluZyBlbmFibGVkLCBhY2Nlc3MKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3Mgb2NjdXIgb25seSBhdCBwb2ludHMgd2hlcmUgYW4gZXhwbGljaXQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAuYWxsIGFwcGVhcnMgaW4gdGhlIHNvdXJjZSBjb2RlIChhc3N1bWluZyBubwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzIGFyZSBnZW5lcmF0ZWQgYXMgYSByZXN1bHQgb2YgdGhpcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbikuIFRoZSBkZWZhdWx0IGlzIHRoYXQgc3VjaCB3YXJuaW5ncyBhcmUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgL1dBUk5JTkdTPUFMTCBkb2VzIG5vdAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdCB0aGUgc2V0dGluZyBvZiB0aGlzIHdhcm5pbmcgb3B0aW9uLgogICAtLQogICAtLSAgIE5PSU1QTElDSVRfREVSRUZFUkVOQ0UgIFN1cHByZXNzIHdhcm5pbmdzIG9uIGltcGxpY2l0IGRlcmVmZXJlbmNpbmcuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gaW5kZXhlZCBjb21wb25lbnRzLCBzbGljZXMsIGFuZCBzZWxlY3RlZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuCiAgIC0tCiAgIC0tICAgRUxBQk9SQVRJT04gICAgICAgICAgICAgQWN0aXZhdGUgd2FybmluZ3Mgb24gbWlzc2luZyBwcmFnbWEKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBFbGFib3JhdGVfQWxsIHN0YXRlbWVudHMuIFRoZSBkZWZhdWx0IGlzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzdWNoIHdhcm5pbmdzIGFyZSBub3QgZ2VuZXJhdGVkLgogICAtLQogICAtLSAgIE5PRUxBQk9SQVRJT04gICAgICAgICAgIFN1cHByZXNzIHdhcm5pbmdzIG9uIG1pc3NpbmcgcHJhZ21hCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxhYm9yYXRlX0FsbCBzdGF0ZW1lbnRzLgogICAtLQogICAtLSAgIEVSUk9SUyAgICAgICAgICAgICAgICAgIFdhcm5pbmcgbWVzc2FnZXMgYXJlIHRvIGJlIHRyZWF0ZWQgYXMgZXJyb3JzLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB3YXJuaW5nIHN0cmluZyBzdGlsbCBhcHBlYXJzLCBidXQgdGhlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZyBtZXNzYWdlcyBhcmUgY291bnRlZCBhcyBlcnJvcnMsIGFuZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnQgdGhlIGdlbmVyYXRpb24gb2YgYW4gb2JqZWN0IGZpbGUuCiAgIC0tCiAgIC0tICAgSElESU5HICAgICAgICAgICAgICAgICAgQWN0aXZhdGUgd2FybmluZ3Mgb24gaGlkaW5nIGRlY2xhcmF0aW9ucy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBBIGRlY2xhcmF0aW9uIGlzIGNvbnNpZGVyZWQgaGlkaW5nIGlmIGl0IGlzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbm9uLW92ZXJsb2FkYWJsZSBlbnRpdHksIGFuZCBpdCBkZWNsYXJlcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGVudGl0eSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgc29tZSBvdGhlcgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eSB0aGF0IGlzIGRpcmVjdGx5IG9yIHVzZS12aXNpYmxlLiBUaGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzIHRoYXQgc3VjaCB3YXJuaW5ncyBhcmUgbm90CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLgogICAtLQogICAtLSAgIE5PSElESU5HICAgICAgICAgICAgICAgIFN1cHByZXNzIHdhcm5pbmdzIG9uIGhpZGluZyBkZWNsYXJhdGlvbnMuCiAgIC0tCiAgIC0tICAgSU1QTEVNRU5UQVRJT04gICAgICAgICAgQWN0aXZhdGUgd2FybmluZ3MgZm9yIGEgd2l0aCBvZiBhbiBpbnRlcm5hbAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgaW1wbGVtZW50YXRpb24gdW5pdCwgZGVmaW5lZCBhcyBhbnkgdW5pdAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIEFkYSwgSW50ZXJmYWNlcywgR05BVCwgREVDIG9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIGhpZXJhcmNoaWVzIHRoYXQgaXMgbm90IGRvY3VtZW50ZWQgaW4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBlaXRoZXIgdGhlIEFkYSBSZWZlcmVuY2UgTWFudWFsIG9yIHRoZSBHTkFUCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbW1lcidzIFJlZmVyZW5jZSBNYW51YWwuIFN1Y2ggdW5pdHMgYXJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW5kZWQgb25seSBmb3IgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlcyBhbmQgc2hvdWxkIG5vdCBiZSB3aXRoJ2VkIGJ5IHVzZXIKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtcy4gVGhlIGRlZmF1bHQgaXMgdGhhdCBzdWNoIHdhcm5pbmdzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGdlbmVyYXRlZC4KICAgLS0KICAgLS0gICBOT0lNUExFTUVOVEFUSU9OICAgICAgICBEaXNhYmxlcyB3YXJuaW5ncyBmb3IgYSB3aXRoIG9mIGFuIGludGVybmFsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBpbXBsZW1lbnRhdGlvbiB1bml0LgogICAtLQogICAtLSAgIElORUZGRUNUSVZFX0lOTElORSAgICAgIEFjdGl2YXRlIHdhcm5pbmdzIG9uIGluZWZmZWN0aXZlIHByYWdtYSBJbmxpbmVzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZhdGVzIHdhcm5pbmdzIGZvciBmYWlsdXJlIG9mIGZyb250IGVuZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluaW5nIChhY3RpdmF0ZWQgYnkgL0lOTElORT1GVUxMKSB0byBpbmxpbmUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBhcnRpY3VsYXIgY2FsbC4gVGhlcmUgYXJlIG1hbnkgcmVhc29ucyBmb3IKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVpbmcgYWJsZSB0byBpbmxpbmUgYSBjYWxsLCBpbmNsdWRpbmcgbW9zdAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbmx5IHRoYXQgdGhlIGNhbGwgaXMgdG9vIGNvbXBsZXggdG8KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmUuIFRoaXMgd2FybmluZyBjYW4gYWxzbyBiZSB0dXJuZWQgb24KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyAvSU5MSU5FPUZVTEwuCiAgIC0tCiAgIC0tICAgTk9JTkVGRkVDVElWRV9JTkxJTkUgICAgU3VwcHJlc3Mgd2FybmluZ3Mgb24gaW5lZmZlY3RpdmUgcHJhZ21hIElubGluZXMKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwcmVzc2VzIHdhcm5pbmdzIG9uIGluZWZmZWN0aXZlIHByYWdtYQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZXMuIElmIHRoZSBpbmxpbmluZyBtZWNoYW5pc20gY2Fubm90CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lIGEgY2FsbCwgaXQgd2lsbCBzaW1wbHkgaWdub3JlIHRoZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qgc2lsZW50bHkuCiAgIC0tCiAgIC0tICAgTU9ESUZJRURfVU5SRUYgICAgICAgICAgQWN0aXZhdGVzIHdhcm5pbmdzIGZvciB2YXJpYWJsZXMgdGhhdCBhcmUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25lZCAodXNpbmcgYW4gaW5pdGlhbGl6YXRpb24gdmFsdWUgb3Igd2l0aAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBvciBtb3JlIGFzc2lnbm1lbnQgc3RhdGVtZW50cykgYnV0IHdob3NlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgbmV2ZXIgcmVhZC4gVGhlIHdhcm5pbmcgaXMgc3VwcHJlc3NlZAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2b2xhdGlsZSB2YXJpYWJsZXMgYW5kIGFsc28gZm9yIHZhcmlhYmxlcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIHJlbmFtaW5ncyBvZiBvdGhlciB2YXJpYWJsZXMgb3IgZm9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggYW4gYWRkcmVzcyBjbGF1c2UgaXMgZ2l2ZW4uIFRoaXMgd2FybmluZwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBhbHNvIGJlIHR1cm5lZCBvbiB1c2luZyAvV0FSTklOR1MvT1BUSU9OQUwuCiAgIC0tCiAgIC0tICAgTk9NT0RJRklFRF9VTlJFRiAgICAgICAgRGlzYWJsZXMgd2FybmluZ3MgZm9yIHZhcmlhYmxlcyB0aGF0IGFyZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbmVkIG9yIGluaXRpYWxpemVkLCBidXQgbmV2ZXIgcmVhZC4KICAgLS0KICAgLS0gICBOT1JNQUwgICAgICAgICAgICAgICAgICBTZXRzIG5vcm1hbCB3YXJuaW5nIG1vZGUsIGluIHdoaWNoIGVuYWJsZWQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyBhcmUgaXNzdWVkIGFuZCB0cmVhdGVkIGFzIHdhcm5pbmdzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gZXJyb3JzLiBUaGlzIGlzIHRoZSBkZWZhdWx0IG1vZGUuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBlZmZlY3Qgb2YgYW4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdCAvV0FSTklOR1M9U1VQUFJFU1Mgb3IKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAvV0FSTklOR1M9RVJST1JTLiBJdCBhbHNvIGNhbmNlbHMgdGhlIGVmZmVjdAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBpbXBsaWNpdCAvV0FSTklOR1M9RVJST1JTIHRoYXQgaXMKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZWQgYnkgdGhlIHVzZSBvZiAvU1RZTEU9R05BVC4KICAgLS0KICAgLS0gICBPQlNPTEVTQ0VOVCAgICAgICAgICAgICBBY3RpdmF0ZXMgd2FybmluZ3MgZm9yIGNhbGxzIHRvIHN1YnByb2dyYW1zCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VkIHdpdGggcHJhZ21hIE9ic29sZXNjZW50IGFuZCBmb3IgdXNlIG9mCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgaW4gQW5uZXggSiBvZiB0aGUgQWRhIFJlZmVyZW5jZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbC4gSW4gdGhlIGNhc2Ugb2YgQW5uZXggSiwgbm90IGFsbAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIGFyZSBmbGFnZ2VkLiBJbiBwYXJ0aWN1bGFyIHVzZSBvZiB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVkIHBhY2thZ2VzIChsaWtlIFRleHRfSU8pLCB1c2Ugb2YgcGFja2FnZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTQ0lJIGFuZCB1c2Ugb2YgdGhlIGF0dHJpYnV0ZSAnQ29uc3RyYWluZWQgYXJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGZsYWdnZWQsIHNpbmNlIHRoZXNlIGFyZSB2ZXJ5IGNvbW1vbiBhbmQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB3b3VsZCBnZW5lcmF0ZSBtYW55IGFubm95aW5nIHBvc2l0aXZlIHdhcm5pbmdzLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIHRoYXQgc3VjaCB3YXJuaW5ncyBhcmUgbm90CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLgogICAtLQogICAtLSAgIE5PT0JTT0xFU0NFTlQgICAgICAgICAgIERpc2FibGVzIHdhcm5pbmdzIG9uIHVzZSBvZiBvYnNvbGVzY2VudAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLgogICAtLQogICAtLSAgIE9QVElPTkFMICAgICAgICAgICAgICAgIEFjdGl2YXRlIGFsbCBvcHRpb25hbCB3YXJuaW5nIG1lc3NhZ2VzLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBvdGhlciBvcHRpb25zIHVuZGVyIHRoaXMgcXVhbGlmaWVyCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRldGFpbHMgb24gb3B0aW9uYWwgd2FybmluZyBtZXNzYWdlcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIGluZGl2aWR1YWxseSBjb250cm9sbGVkLiBUaGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgZXhjZXB0aW9uIGlzIHRoYXQgL1dBUk5JTkdTPU9QVElPTkFMCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc24ndCBhY3RpdmF0ZSB3YXJuaW5ncyBmb3IgaGlkaW5nCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzICgvV0FSTklOR1M9SElESU5HKSwgc28gaWYgdGhpcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgaXMgcmVxdWlyZWQgaXQgbXVzdCBiZSBleHBsaWNpdGx5CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LgogICAtLQogICAtLSAgIE5PT1BUSU9OQUwgICAgICAgICAgICAgIFN1cHByZXNzIGFsbCBvcHRpb25hbCB3YXJuaW5nIG1lc3NhZ2VzLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBvdGhlciBvcHRpb25zIHVuZGVyIHRoaXMgcXVhbGlmaWVyCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRldGFpbHMgb24gb3B0aW9uYWwgd2FybmluZyBtZXNzYWdlcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIGluZGl2aWR1YWxseSBjb250cm9sbGVkLgogICAtLQogICAtLSAgIE9WRVJMQVlTICAgICAgICAgICAgICAgIEFjdGl2YXRlIHdhcm5pbmdzIGZvciBwb3NzaWJseSB1bmludGVuZGVkCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gZWZmZWN0cyBvZiBkZWZpbmluZyBhZGRyZXNzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhdXNlcyB0aGF0IGNhdXNlIG9uZSB2YXJpYWJsZSB0byBvdmVybGFwCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5vdGhlci4gVGhlIGRlZmF1bHQgaXMgdGhhdCBzdWNoIHdhcm5pbmdzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGdlbmVyYXRlZC4KICAgLS0KICAgLS0gICBOT09WRVJMQVlTICAgICAgICAgICAgICBTdXBwcmVzcyB3YXJuaW5ncyBvbiBwb3NzaWJseSB1bmludGVuZGVkCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gZWZmZWN0cyBvZiBkZWZpbmluZyBhZGRyZXNzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhdXNlcyB0aGF0IGNhdXNlIG9uZSB2YXJpYWJsZSB0byBvdmVybGFwCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5vdGhlci4KICAgLS0KICAgLS0gICBSRURVTkRBTlQgICAgICAgICAgICAgICBBY3RpdmF0ZSB3YXJuaW5ncyBmb3IgcmVkdW5kYW50IGNvbnN0cnVjdHMuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciBhc3NpZ25tZW50cyBvZiBhIHZhcmlhYmxlIHRvCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRzZWxmLCBhbmQgYSB0eXBlIGNvbnZlcnNpb24gdGhhdCBjb252ZXJ0cwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIG9iamVjdCB0byBpdHMgb3duIHR5cGUuIFRoZSBkZWZhdWx0CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhhdCBzdWNoIHdhcm5pbmdzIGFyZSBub3QgZ2VuZXJhdGVkLgogICAtLQogICAtLSAgIE5PUkVEVU5EQU5UICAgICAgICAgICAgIFN1cHByZXNzIHdhcm5pbmdzIGZvciByZWR1bmRhbnQgY29uc3RydWN0cy4KICAgLS0KICAgLS0gICBTVVBQUkVTUyAgICAgICAgICAgICAgICBDb21wbGV0ZWx5IHN1cHByZXNzZSB0aGUgb3V0cHV0IG9mIGFsbCB3YXJuaW5nCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMuICBTYW1lIGFzIC9OT1dBUk5JTkdTLgogICAtLQogICAtLSAgIFVOQ0hFQ0tFRF9DT05WRVJTSU9OUyAgIEFjdGl2YXRlcyB3YXJuaW5ncyBvbiB1bmNoZWNrZWQgY29udmVyc2lvbnMuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHdhcm5pbmdzIHRvIGJlIGdlbmVyYXRlZCBmb3IKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNoZWNrZWQgY29udmVyc2lvbnMgd2hlbiB0aGUgdHdvIHR5cGVzIGFyZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duIGF0IGNvbXBpbGUgdGltZSB0byBoYXZlIGRpZmZlcmVudCBzaXplcy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB0aGF0IHN1Y2ggd2FybmluZ3MgYXJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLgogICAtLQogICAtLSAgIE5PVU5DSEVDS0VEX0NPTlZFUlNJT05TIFN1cHByZXNzIHdhcm5pbmdzIGZvciB1bmNoZWNrZWQgY29udmVyc2lvbnMuCiAgIC0tCiAgIC0tICAgVU5JTklUSUFMSVpFRCAgICAgICAgICAgR2VuZXJhdGUgd2FybmluZ3MgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBHQ0Mgb3B0aW9uLCBub3QgYW4gQWRhIG9wdGlvbi4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIC9PUFRJTUlaRSBxdWFsaWZpZXIKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgdmFsdWUgb3RoZXIgdGhhbiBOT05FIChpbiBvdGhlciB3b3JkcywKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGtleXdvcmQgd29ya3Mgb25seSBpZiBvcHRpbWl6YXRpb24gaXMKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0dXJuZWQgb24pLgogICAtLQogICAtLSAgIFVOUkVGRVJFTkNFRF9GT1JNQUxTICAgIEFjdGl2YXRlIHdhcm5pbmdzIG9uIHVucmVmZXJlbmNlZCBmb3JtYWxzLgogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZ2VuZXJhdGVkIGlmIGEgZm9ybWFsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGlzIG5vdCByZWZlcmVuY2VkIGluIHRoZSBib2R5IG9mCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN1YnByb2dyYW0uIFRoaXMgd2FybmluZyBjYW4gYWxzbyBiZSB0dXJuZWQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB1c2luZyBvcHRpb24gQUxMIG9yIFVOVVNFRC4KICAgLS0KICAgLS0gICBOT1VOUkVGRVJFTkNFRF9GT1JNQUxTICBTdXBwcmVzcyB3YXJuaW5ncyBvbiB1bnJlZmVyZW5jZWQgZm9ybWFscy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwcmVzc2VzIHdhcm5pbmdzIGZvciB1bnJlZmVyZW5jZWQgZm9ybWFsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy4gTm90ZSB0aGF0IHRoZSBjb21iaW5hdGlvbiBVTlVTRUQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBOT1VOUkVGRVJFTkNFRF9GT1JNQUxTIGhhcyB0aGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Qgb2Ygd2FybmluZyBvbiB1bnJlZmVyZW5jZWQgZW50aXRpZXMKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIHN1YnByb2dyYW0gZm9ybWFscy4KICAgLS0KICAgLS0gICBVTlVTRUQgICAgICAgICAgICAgICAgICBBY3RpdmF0ZXMgd2FybmluZ3MgdG8gYmUgZ2VuZXJhdGVkIGZvciBlbnRpdGllcwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGRlZmluZWQgYnV0IG5vdCByZWZlcmVuY2VkLCBhbmQgZm9yCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgdGhhdCBhcmUgd2l0aCdlZCBhbmQgbm90IHJlZmVyZW5jZWQuIEluCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNhc2Ugb2YgcGFja2FnZXMsIGEgd2FybmluZyBpcyBhbHNvCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGlmIG5vIGVudGl0aWVzIGluIHRoZSBwYWNrYWdlIGFyZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgcGFja2FnZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlZmVyZW5jZWQgYnV0IHRoZSBvbmx5IHJlZmVyZW5jZXMgYXJlIGluCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGNsYXVzZXMgb3IgcmVuYW1lcyBkZWNsYXJhdGlvbnMsIGEgd2FybmluZwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHN0aWxsIGdlbmVyYXRlZC4gQSB3YXJuaW5nIGlzIGFsc28gZ2VuZXJhdGVkCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgZ2VuZXJpYyBwYWNrYWdlIHRoYXQgaXMgd2l0aCdlZCBidXQgbmV2ZXIKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZWQuICBJbiB0aGUgY2FzZSB3aGVyZSBhIHBhY2thZ2Ugb3IKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9ncmFtIGJvZHkgaXMgY29tcGlsZWQsIGFuZCB0aGVyZSBpcyBhCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvbiB0aGUgY29ycmVzcG9uZGluZyBzcGVjIHRoYXQgaXMgb25seQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQgaW4gdGhlIGJvZHksIGEgd2FybmluZyBpcyBhbHNvCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLCBub3RpbmcgdGhhdCB0aGUgd2l0aCBjYW4gYmUgbW92ZWQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgYm9keS4gVGhlIGRlZmF1bHQgaXMgdGhhdCBzdWNoIHdhcm5pbmdzCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vdCBnZW5lcmF0ZWQuCiAgIC0tCiAgIC0tICAgTk9VTlVTRUQgICAgICAgICAgICAgICAgU3VwcHJlc3Mgd2FybmluZ3MgZm9yIHVudXNlZCBlbnRpdGllcyBhbmQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4KICAgLS0KICAgLS0gICBWQVJJQUJMRVNfVU5JTklUSUFMSVpFRCBBY3RpdmF0ZXMgd2FybmluZ3Mgb24gdW5hc3NpZ25lZCB2YXJpYWJsZXMuCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHdhcm5pbmdzIHRvIGJlIGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhY2Nlc3NlZCB3aGljaCBtYXkgbm90IGJlIHByb3Blcmx5CiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZC4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB0aGF0IHN1Y2ggd2FybmluZ3MgYXJlCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLgogICAtLQogICAtLSAgIE5PVkFSSUFCTEVTX1VOSU5JVElBTElaRUQgICAgICAgU3VwcHJlc3Mgd2FybmluZ3MgZm9yIHVuaW5pdGlhbGl6ZWQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KCiAgIFNfR0NDX1dhcm5YICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1dBUk5JTkdTICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXR3cyI7CiAgIC0tICBOT0RPQyAoc2VlIC9XQVJOSU5HUykKCiAgIFNfR0NDX05vX0JhY2sgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT19CQUNLX0VORF9XQVJOSU5HUyAiICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXciOwogICAtLSAgICAgICAgL05PX0JBQ0tfRU5EX1dBUk5JTkdTCiAgIC0tCiAgIC0tICAgSW5oaWJpdCBhbGwgd2FybmluZyBtZXNzYWdlcyBvZiB0aGUgR0NDIGJhY2stZW5kLgoKICAgU19HQ0NfV2lkZSAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1dJREVfQ0hBUkFDVEVSX0VOQ09ESU5HPSIgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQlJBQ0tFVFMgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFdiICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PTkUgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRXbiAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIRVggIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0V2ggIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVBQRVIgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFd1ICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNISUZUX0pJUyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRXcyAiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVVEY4ICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nbmF0VzggIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRVVDICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFdlIjsKICAgLS0gICAgICAgIC9OT1dJREVfQ0hBUkFDVEVSX0VOQ09ESU5HIChEKQogICAtLSAgICAgICAgL1dJREVfQ0hBUkFDVEVSX0VOQ09ESU5HWz1lbmNvZGUtdHlwZV0KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIG1lY2hhbmlzbSB1c2VkIHRvIGVuY29kZSB3aWRlIGNoYXJhY3RlcnMuICAnZW5jb2RlLXR5cGUnCiAgIC0tICAgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgQlJBQ0tFVFMgKEQpICAgIEEgd2lkZSBjaGFyYWN0ZXIgaXMgZW5jb2RlZCBhcyBbInh4eHgiXSB3aGVyZSBYWFhYCiAgIC0tICAgICAgICAgICAgICAgICAgIGFyZSBmb3VyIGhleGFkZWNpbWFsIGRpZ2l0cyByZXByZXNlbnRpbmcgdGhlIGNvZGluZwogICAtLSAgICAgICAgICAgICAgICAgICAoJ1BvcyB2YWx1ZSkgb2YgdGhlIGNoYXJhY3RlciBpbiB0eXBlCiAgIC0tICAgICAgICAgICAgICAgICAgIFdpZGVfQ2hhcmFjdGVyLiBUaGUgaGV4YWRlY2ltYWwgZGlnaXRzIG1heSB1c2UgdXBwZXIKICAgLS0gICAgICAgICAgICAgICAgICAgb3IgbG93ZXIgY2FzZSBsZXR0ZXJzLgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICBUaGlzIG5vdGF0aW9uIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHVwcGVyIGhhbGYKICAgLS0gICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyIHZhbHVlcyB1c2luZyB0aGUgZm9ybWF0IFsieHgiXSB3aGVyZSBYWCBpcwogICAtLSAgICAgICAgICAgICAgICAgICB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIHJlcHJlc2VudGluZyB0aGUgY29kaW5nICgnUG9zCiAgIC0tICAgICAgICAgICAgICAgICAgIHZhbHVlKSBvZiB0aGUgY2hhcmFjdGVyIGluIHR5cGUgQ2hhcmFjdGVyIChvcgogICAtLSAgICAgICAgICAgICAgICAgICBXaWRlX0NoYXJhY3RlcikuIFRoZSBoZXhhZGVjaW1hbCBkaWdpdHMgbWF5IHVzZSB1cHBlcgogICAtLSAgICAgICAgICAgICAgICAgICBvZiBsb3dlciBjYXNlLgogICAtLQogICAtLSAgIE5PTkUgICAgICAgICAgICBObyB3aWRlIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQuICBTYW1lCiAgIC0tICAgICAgICAgICAgICAgICAgIGFzIC9OT1dJREVfQ0hBUkNURVJfRU5DT0RJTkcuCiAgIC0tCiAgIC0tICAgSEVYICAgICAgICAgICAgIEluIHRoaXMgZW5jb2RpbmcsIGEgd2lkZSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkKICAgLS0gICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmaXZlIGNoYXJhY3RlciBzZXF1ZW5jZTogRVNDIGEgYiBjIGQKICAgLS0gICAgICAgICAgICAgICAgICAgV2hlcmUgJ2EnLCAnYicsICdjJywgYW5kICdkJyBhcmUgdGhlIGZvdXIgaGV4YWRlY2ltYWwKICAgLS0gICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyAodXNpbmcgdXBwZXJjYXNlIGxldHRlcnMpIG9mIHRoZSB3aWRlCiAgIC0tICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBjb2RlLiBGb3IgZXhhbXBsZSwgRVNDIEEzNDUgaXMgdXNlZCB0bwogICAtLSAgICAgICAgICAgICAgICAgICByZXByZXNlbnQgdGhlIHdpZGUgY2hhcmFjdGVyIHdpdGggY29kZSAxNiNBMzQ1Iy4gVGhpcwogICAtLSAgICAgICAgICAgICAgICAgICBzY2hlbWUgaXMgY29tcGF0aWJsZSB3aXRoIHVzZSBvZiB0aGUgZnVsbAogICAtLSAgICAgICAgICAgICAgICAgICBXaWRlX0NoYXJhY3RlciBzZXQuCiAgIC0tCiAgIC0tICAgVVBQRVIgICAgICAgICAgIFRoZSB3aWRlIGNoYXJhY3RlciB3aXRoIGVuY29kaW5nIDE2I2FiY2QjIHdoZXJlIHRoZQogICAtLSAgICAgICAgICAgICAgICAgICB1cHBlciBiaXQgaXMgb24gKGluIG90aGVyIHdvcmRzLCAiYSIgaXMgaW4gdGhlIHJhbmdlCiAgIC0tICAgICAgICAgICAgICAgICAgIDgtRikgaXMgcmVwcmVzZW50ZWQgYXMgdHdvIGJ5dGVzLCAxNiNhYiMgYW5kIDE2I2NkIy4KICAgLS0gICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBieXRlIG1heSBuZXZlciBiZSBhIGZvcm1hdCBjb250cm9sCiAgIC0tICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciwgYnV0IGlzIG5vdCByZXF1aXJlZCB0byBiZSBpbiB0aGUgdXBwZXIKICAgLS0gICAgICAgICAgICAgICAgICAgaGFsZi4gVGhpcyBtZXRob2QgY2FuIGJlIGFsc28gdXNlZCBmb3Igc2hpZnQtSklTIG9yCiAgIC0tICAgICAgICAgICAgICAgICAgIEVVQywgd2hlcmUgdGhlIGludGVybmFsIGNvZGluZyBtYXRjaGVzIHRoZSBleHRlcm5hbAogICAtLSAgICAgICAgICAgICAgICAgICBjb2RpbmcuCiAgIC0tCiAgIC0tICAgU0hJRlRfSklTICAgICAgIEEgd2lkZSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkgYSB0d28tY2hhcmFjdGVyCiAgIC0tICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlLCAxNiNhYiMgYW5kIDE2I2NkIywgd2l0aCB0aGUgcmVzdHJpY3Rpb25zCiAgIC0tICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBmb3IgdXBwZXItaGFsZiBlbmNvZGluZyBhcyBkZXNjcmliZWQgYWJvdmUuCiAgIC0tICAgICAgICAgICAgICAgICAgIFRoZSBpbnRlcm5hbCBjaGFyYWN0ZXIgY29kZSBpcyB0aGUgY29ycmVzcG9uZGluZyBKSVMKICAgLS0gICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtIGZvcgogICAtLSAgICAgICAgICAgICAgICAgICBTaGlmdC1KSVMgY29udmVyc2lvbi4gT25seSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlCiAgIC0tICAgICAgICAgICAgICAgICAgIEpJUyBjb2RlIHNldCB0YWJsZSBjYW4gYmUgdXNlZCB3aXRoIHRoaXMgZW5jb2RpbmcKICAgLS0gICAgICAgICAgICAgICAgICAgbWV0aG9kLgogICAtLQogICAtLSAgIFVURjggICAgICAgICAgICBBIHdpZGUgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHVzaW5nCiAgIC0tICAgICAgICAgICAgICAgICAgIFVDUyBUcmFuc2Zvcm1hdGlvbiBGb3JtYXQgOCAoVVRGLTgpIGFzIGRlZmluZWQgaW4gQW5uZXgKICAgLS0gICAgICAgICAgICAgICAgICAgUiBvZiBJU08gMTA2NDYtMS9BbS4yLiAgRGVwZW5kaW5nIG9uIHRoZSBjaGFyYWN0ZXIKICAgLS0gICAgICAgICAgICAgICAgICAgdmFsdWUsIHRoZSByZXByZXNlbnRhdGlvbiBpcyBhIG9uZSwgdHdvLCBvciB0aHJlZSBieXRlCiAgIC0tICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOgogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICAxNiMwMDAwIy0xNiMwMDdmIzogMiMweHh4eHh4eCMKICAgLS0gICAgICAgICAgICAgICAgICAgMTYjMDA4MCMtMTYjMDdmZiM6IDIjMTEweHh4eHgjIDIjMTB4eHh4eHgjCiAgIC0tICAgICAgICAgICAgICAgICAgIDE2IzA4MDAjLTE2I2ZmZmYjOiAyIzExMTB4eHh4IyAyIzEweHh4eHh4IyAyIzEweHh4eHh4IwogICAtLQogICAtLSAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgeHh4IGJpdHMgY29ycmVzcG9uZCB0byB0aGUgbGVmdC1wYWRkZWQgYml0cwogICAtLSAgICAgICAgICAgICAgICAgICBvZiB0aGUgdGhlIDE2LWJpdCBjaGFyYWN0ZXIgdmFsdWUuIE5vdGUgdGhhdCBhbGwgbG93ZXIKICAgLS0gICAgICAgICAgICAgICAgICAgaGFsZiBBU0NJSSBjaGFyYWN0ZXJzIGFyZSByZXByZXNlbnRlZCBhcyBBU0NJSSBieXRlcwogICAtLSAgICAgICAgICAgICAgICAgICBhbmQgYWxsIHVwcGVyIGhhbGYgY2hhcmFjdGVycyBhbmQgb3RoZXIgd2lkZSBjaGFyYWN0ZXJzCiAgIC0tICAgICAgICAgICAgICAgICAgIGFyZSByZXByZXNlbnRlZCBhcyBzZXF1ZW5jZXMgb2YgdXBwZXItaGFsZiAoVGhlIGZ1bGwKICAgLS0gICAgICAgICAgICAgICAgICAgVVRGLTggc2NoZW1lIGFsbG93cyBmb3IgZW5jb2RpbmcgMzEtYml0IGNoYXJhY3RlcnMgYXMKICAgLS0gICAgICAgICAgICAgICAgICAgNi1ieXRlIHNlcXVlbmNlcywgYnV0IGluIHRoaXMgaW1wbGVtZW50YXRpb24sIGFsbCBVVEYtOAogICAtLSAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZXMgb2YgZm91ciBvciBtb3JlIGJ5dGVzIGxlbmd0aCB3aWxsIGJlIHRyZWF0ZWQKICAgLS0gICAgICAgICAgICAgICAgICAgYXMgaWxsZWdhbCkuCiAgIC0tCiAgIC0tICAgRVVDICAgICAgICAgICAgIEEgd2lkZSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkgYSB0d28tY2hhcmFjdGVyCiAgIC0tICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlIDE2I2FiIyBhbmQgMTYjY2QjLCB3aXRoIGJvdGggY2hhcmFjdGVycyBiZWluZwogICAtLSAgICAgICAgICAgICAgICAgICBpbiB0aGUgdXBwZXIgaGFsZi4gVGhlIGludGVybmFsIGNoYXJhY3RlciBjb2RlIGlzIHRoZQogICAtLSAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEpJUyBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIHRoZSBFVUMKICAgLS0gICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgYWxnb3JpdGhtLiBPbmx5IGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgSklTCiAgIC0tICAgICAgICAgICAgICAgICAgIGNvZGUgc2V0IHRhYmxlIGNhbiBiZSB1c2VkIHdpdGggdGhpcyBlbmNvZGluZyBtZXRob2QuCgogICBTX0dDQ19XaWRlWCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9XSURFX0NIQVJBQ1RFUl9FTkNPRElORyAiICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdFduIjsKICAgLS0gIE5PRE9DIChzZWUgL1dJREVfQ0hBUkFDVEVSX0VOQ09ESU5HKQoKICAgU19HQ0NfWGRlYnVnICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1hERUJVRyAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXREIjsKICAgLS0gICAgICAgIC9OT1hERUJVRyAoRCkKICAgLS0gICAgICAgIC9YREVCVUcKICAgLS0KICAgLS0gICBPdXRwdXQgZXhwYW5kZWQgc291cmNlIGZpbGVzIGZvciBzb3VyY2UgbGV2ZWwgZGVidWdnaW5nLgogICAtLSAgIFRoZSBleHBhbmRlZCBzb3VyY2UgKHNlZSAvRVhQQU5EX1NPVVJDRSkgaXMgd3JpdHRlbiB0byBmaWxlcwogICAtLSAgIHdpdGggbmFtZXMgZm9ybWVkIGJ5IGFwcGVuZGluZyAiX0RHIiB0byB0aGUgaW5wdXQgZmlsZSBuYW1lLAogICAtLSAgIFRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHRoZSAvREVCVUcgcXVhbGlmaWVyIHdpbGwgdGhlbgogICAtLSAgIHJlZmVyIHRvIHRoZSBnZW5lcmF0ZWQgZmlsZS4gVGhpcyBhbGxvd3Mgc291cmNlIGxldmVsIGRlYnVnZ2luZyB1c2luZwogICAtLSAgIHRoZSBnZW5lcmF0ZWQgY29kZSB3aGljaCBpcyBzb21ldGltZXMgdXNlZnVsIGZvciBjb21wbGV4IGNvZGUsIGZvcgogICAtLSAgIGV4YW1wbGUgdG8gZmluZCBvdXQgZXhhY3RseSB3aGljaCBwYXJ0IG9mIGEgY29tcGxleCBjb25zdHJ1Y3Rpb24KICAgLS0gICByYWlzZWQgYW4gZXhjZXB0aW9uLgoKICAgU19HQ0NfWHJlZiAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1hSRUY9IiAgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHRU5FUkFURSAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtZ25hdHggIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1VQUFJFU1MgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdHgiOwogICAtLSAgICAgICAgL1hSRUZbPWtleXdvcmRdCiAgIC0tCiAgIC0tICAgTm9ybWFsbHkgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBmdWxsIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uIGluCiAgIC0tICAgdGhlIC5BTEkgZmlsZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIGJ5IGEgbnVtYmVyIG9mIHRvb2xzLAogICAtLSAgIGluY2x1ZGluZyBHTkFUIEZJTkQgYW5kIEdOQVQgWFJFRi4KICAgLS0KICAgLS0gICAgICAgIEdFTkVSQVRFIChEKSAgICAgICAgICAgIEdlbmVyYXRlIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uLgogICAtLQogICAtLSAgICAgICAgU1VQUFJFU1MgICAgICAgICAgICAgICAgU3VwcHJlc3MgY3Jvc3MtcmVmZXJlbmNpbmcgaW5mb3JtYXRpb24uCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNhdmVzIHNvbWUgc3BhY2UgYW5kIG1heSBzbGlnaHRseQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgdXAgY29tcGlsYXRpb24sIGJ1dCBtZWFucyB0aGF0IHNvbWUKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzIGNhbm5vdCBiZSB1c2VkLgoKICAgU19HQ0NfWmVybyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1pFUk9fQ09TVF9FWENFUFRJT05TICIgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRaIjsKICAgLS0gICAgICAgIC9aRVJPX0NPU1RfRVhDRVBUSU9OUwogICAtLSAgICAgICAgL05PWkVST19DT1NUX0VYQ0VQVElPTlMKICAgLS0KICAgLS0gICBBcyB6ZXJvLWNvc3QgZXhjZXB0aW9ucyBpcyB0aGUgZGVmYXVsdCBvbiBWTVMsIHRoaXMgcXVhbGlmaWVyIGhhcwogICAtLSAgIG5vIGVmZmVjdCwgZXhjZXB0IHRoYXQgaXQgY2FuY2VscyB0aGUgZWZmZWN0IG9mIGEgcHJldmlvdXMKICAgLS0gICAvTE9OR0pNUF9TRVRKVU1QIHF1YWxpZmllci4KCiAgIEdDQ19Td2l0Y2hlcyA6IGFsaWFzZWQgY29uc3RhbnQgU3dpdGNoZXMgOj0KICAgICAoU19HQ0NfQWRhXzgzICAnQWNjZXNzLAogICAgICBTX0dDQ19BZGFfOTUgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0FkYV8wNSAgJ0FjY2VzcywKICAgICAgU19HQ0NfQXNtICAgICAnQWNjZXNzLAogICAgICBTX0dDQ19DaGVja3MgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0NoZWNrc1ggJ0FjY2VzcywKICAgICAgU19HQ0NfQ29tcHJlcyAnQWNjZXNzLAogICAgICBTX0dDQ19Db25maWcgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0N1cnJlbnQgJ0FjY2VzcywKICAgICAgU19HQ0NfRGVidWcgICAnQWNjZXNzLAogICAgICBTX0dDQ19EZWJ1Z1ggICdBY2Nlc3MsCiAgICAgIFNfR0NDX0RhdGEgICAgJ0FjY2VzcywKICAgICAgU19HQ0NfRGlzdCAgICAnQWNjZXNzLAogICAgICBTX0dDQ19EaXN0WCAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0Vycm9yICAgJ0FjY2VzcywKICAgICAgU19HQ0NfRXJyb3JYICAnQWNjZXNzLAogICAgICBTX0dDQ19FeHBhbmQgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0V4dGVuZCAgJ0FjY2VzcywKICAgICAgU19HQ0NfRXh0ICAgICAnQWNjZXNzLAogICAgICBTX0dDQ19GaWxlICAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0ZvcmNlICAgJ0FjY2VzcywKICAgICAgU19HQ0NfRnVsbCAgICAnQWNjZXNzLAogICAgICBTX0dDQ19IZWxwICAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0lkZW50ICAgJ0FjY2VzcywKICAgICAgU19HQ0NfSWRlbnRYICAnQWNjZXNzLAogICAgICBTX0dDQ19JbW1lZCAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0lubGluZSAgJ0FjY2VzcywKICAgICAgU19HQ0NfSW5saW5lWCAnQWNjZXNzLAogICAgICBTX0dDQ19KdW1wcyAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX0xlbmd0aCAgJ0FjY2VzcywKICAgICAgU19HQ0NfTGlzdCAgICAnQWNjZXNzLAogICAgICBTX0dDQ19NYXBwaW5nICdBY2Nlc3MsCiAgICAgIFNfR0NDX01lc3MgICAgJ0FjY2VzcywKICAgICAgU19HQ0NfTmVzdGluZyAnQWNjZXNzLAogICAgICBTX0dDQ19Ob2FkYyAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX05vbG9hZCAgJ0FjY2VzcywKICAgICAgU19HQ0NfTm9zdGluYyAnQWNjZXNzLAogICAgICBTX0dDQ19Ob3N0bGliICdBY2Nlc3MsCiAgICAgIFNfR0NDX09wdCAgICAgJ0FjY2VzcywKICAgICAgU19HQ0NfT3B0WCAgICAnQWNjZXNzLAogICAgICBTX0dDQ19Qb2xsaW5nICdBY2Nlc3MsCiAgICAgIFNfR0NDX1Byb2plY3QgJ0FjY2VzcywKICAgICAgU19HQ0NfUHN0YSAgICAnQWNjZXNzLAogICAgICBTX0dDQ19SZXBvcnQgICdBY2Nlc3MsCiAgICAgIFNfR0NDX1JlcG9ydFggJ0FjY2VzcywKICAgICAgU19HQ0NfUmVwaW5mbyAnQWNjZXNzLAogICAgICBTX0dDQ19SZXBpbmZYICdBY2Nlc3MsCiAgICAgIFNfR0NDX1JUUyAgICAgJ0FjY2VzcywKICAgICAgU19HQ0NfU2VhcmNoICAnQWNjZXNzLAogICAgICBTX0dDQ19TdHlsZSAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX1N0eWxlWCAgJ0FjY2VzcywKICAgICAgU19HQ0NfU3ltYm9sICAnQWNjZXNzLAogICAgICBTX0dDQ19TeW50YXggICdBY2Nlc3MsCiAgICAgIFNfR0NDX1RhYmxlICAgJ0FjY2VzcywKICAgICAgU19HQ0NfVHJhY2UgICAnQWNjZXNzLAogICAgICBTX0dDQ19UcmVlICAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX1RyeXMgICAgJ0FjY2VzcywKICAgICAgU19HQ0NfVW5pdHMgICAnQWNjZXNzLAogICAgICBTX0dDQ19VbmlxdWUgICdBY2Nlc3MsCiAgICAgIFNfR0NDX1VwY2FzZSAgJ0FjY2VzcywKICAgICAgU19HQ0NfVmFsaWQgICAnQWNjZXNzLAogICAgICBTX0dDQ19WZXJib3NlICdBY2Nlc3MsCiAgICAgIFNfR0NDX1ZlcmJfQXNtJ0FjY2VzcywKICAgICAgU19HQ0NfV2FybiAgICAnQWNjZXNzLAogICAgICBTX0dDQ19XYXJuWCAgICdBY2Nlc3MsCiAgICAgIFNfR0NDX1dpZGUgICAgJ0FjY2VzcywKICAgICAgU19HQ0NfV2lkZVggICAnQWNjZXNzLAogICAgICBTX0dDQ19Ob19CYWNrICdBY2Nlc3MsCiAgICAgIFNfR0NDX1hkZWJ1ZyAgJ0FjY2VzcywKICAgICAgU19HQ0NfWHJlZiAgICAnQWNjZXNzLAogICAgICBTX0dDQ19aZXJvICAgICdBY2Nlc3MpOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBFTElNIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfRWxpbV9BbGwgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9BTEwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWEiOwogICAtLSAgICAgICAgL05PQUxMIChEKQogICAtLSAgICAgICAgL0FMTAogICAtLQogICAtLSAgIEFsc28gbG9vayBmb3Igc3VicHJvZ3JhbXMgZnJvbSB0aGUgR05BVCBydW4gdGltZSB0aGF0IGNhbiBiZQogICAtLSAgIGVsaW1pbmF0ZWQuIE5vdGUgdGhhdCB3aGVuICdnbmF0LmFkYycgaXMgcHJvZHVjZWQgdXNpbmcgdGhpcyBzd2l0Y2gsCiAgIC0tICAgdGhlIGVudGlyZSBwcm9ncmFtIG11c3QgYmUgcmVjb21waWxlZCB3aXRoIHF1YWxpZmllciAvQUxMX0ZJTEVTIG9mCiAgIC0tICAgR05BVCBNQUtFLgoKICAgU19FbGltX0JpbmQgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0JJTkRfRklMRT08IiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYj4iOwogICAtLSAgICAgICAgL0JJTkRfRklMRT1maWxlX25hbWUKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgZmlsZV9uYW1lIGFzIHRoZSBiaW5kIGZpbGUgdG8gcHJvY2Vzcy4gSWYgdGhpcyBxdWFsaWZpZXIgaXMKICAgLS0gICBub3QgdXNlZCwgdGhlIG5hbWUgb2YgdGhlIGJpbmQgZmlsZSBpcyBjb21wdXRlZCBmcm9tIHRoZSBmdWxsIGV4cGFuZGVkCiAgIC0tICAgQWRhIG5hbWUgb2YgYSBtYWluIHN1YnByb2dyYW0uCgogICBTX0VsaW1fQ29tcCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQ09NUElMRVI9QCIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tR0NDPUAiOwogICAtLSAgICAgICAgL0NPTVBJTEVSPXBhdGhfbmFtZQogICAtLQogICAtLSAgIEluc3RydWN0cyBHTkFUIEVMSU0gdG8gdXNlIGEgc3BlY2lmaWMgZ2NjIGNvbXBpbGVyIGluc3RlYWQgb2Ygb25lCiAgIC0tICAgYXZhaWxhYmxlIG9uIHRoZSBwYXRoLgoKICAgU19FbGltX0NvbmZpZyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NPTkZJR1VSQVRJT05fUFJBR01BUz08IiAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQz4iOwogICAtLSAgICAgICAgL0NPTkZJR1VSQVRJT05fUFJBR01BUz1wYXRoX25hbWUKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgYSBmaWxlIHRoYXQgY29udGFpbnMgY29uZmlndXJhdGlvbiBwcmFnbWFzLgogICAtLSAgIFRoZSBmaWxlIG11c3QgYmUgc3BlY2lmaWVkIHdpdGggYWJzb2x1dGUgcGF0aC4KCiAgIFNfRWxpbV9DdXJyZW50IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQ1VSUkVOVF9ESVJFQ1RPUlkgIiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLUktIjsKICAgLS0gICAgICAgIC9DVVJSRU5UX0RJUkVDVE9SWSAoRCkKICAgLS0gICAgICAgIC9OT0NVUlJFTlRfRElSRUNUT1JZCiAgIC0tCiAgIC0tICAgICAgICBMb29rIGZvciBzb3VyY2UgZmlsZXMgaW4gdGhlIGRlZmF1bHQgZGlyZWN0b3J5LgoKICAgU19FbGltX0dOQVRNQUtFIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvR05BVE1BS0U9QCIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLUdOQVRNQUtFPUAiOwogICAtLSAgICAgICAgL0dOQVRNQUtFPXBhdGhfbmFtZQogICAtLQogICAtLSAgIEluc3RydWN0cyBHTkFUIE1BS0UgdG8gdXNlIGEgc3BlY2lmaWMgZ25hdG1ha2UgaW5zdGVhZCBvZiBvbmUgYXZhaWxhYmxlCiAgIC0tICAgb24gdGhlIHBhdGguCgogICBTX0VsaW1fUXVpZXQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUVVJRVQgIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1xIjsKICAgLS0gICAgICAgIC9OT1FVSUVUIChEKQogICAtLSAgICAgICAgL1FVSUVUCiAgIC0tCiAgIC0tICAgUXVpZXQgbW9kZTogYnkgZGVmYXVsdCBHTkFUIEVMSU0gb3V0cHV0cyB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCiAgIC0tICAgdGhlIG51bWJlciBvZiBwcm9ncmFtIHVuaXRzIGxlZnQgdG8gYmUgcHJvY2Vzc2VkLiBUaGlzIG9wdGlvbiB0dXJucwogICAtLSAgIHRoaXMgdHJhY2Ugb2ZmLgoKICAgU19FbGltX1NlYXJjaCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NFQVJDSD0qIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItSSoiOwogICAtLSAgICAgICAgL1NFQVJDSD0oZGlyZWN0b3J5LCAuLi4pCiAgIC0tCiAgIC0tICAgV2hlbiBsb29raW5nIGZvciBzb3VyY2UgZmlsZXMgYWxzbyBsb29rIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMuCgogICBTX0VsaW1fVmVyYiAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVkVSQk9TRSAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12IjsKICAgLS0gICAgICAgIC9OT1ZFUkJPU0UgKEQpCiAgIC0tICAgICAgICAvVkVSQk9TRQogICAtLQogICAtLSAgIFZlcmJvc2UgbW9kZTogR05BVCBFTElNIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgb3V0cHV0IGFzIEFkYSBjb21tZW50cwogICAtLSAgIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtLiBBbHNvLCBpbiBhZGRpdGlvbiB0byB0aGUgbnVtYmVyIG9mCiAgIC0tICAgcHJvZ3JhbSB1bml0cyBsZWZ0LCBHTkFUIEVMSU0gd2lsbCBvdXRwdXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdW5pdAogICAtLSAgIGJlaW5nIHByb2Nlc3NlZC4KCiAgIEVsaW1fU3dpdGNoZXMgOiBhbGlhc2VkIGNvbnN0YW50IFN3aXRjaGVzIDo9CiAgICAgKFNfRWxpbV9BbGwgICAgICdBY2Nlc3MsCiAgICAgIFNfRWxpbV9CaW5kICAgICdBY2Nlc3MsCiAgICAgIFNfRWxpbV9Db21wICAgICdBY2Nlc3MsCiAgICAgIFNfRWxpbV9Db25maWcgICdBY2Nlc3MsCiAgICAgIFNfRWxpbV9DdXJyZW50ICdBY2Nlc3MsCiAgICAgIFNfRWxpbV9HTkFUTUFLRSdBY2Nlc3MsCiAgICAgIFNfRWxpbV9RdWlldCAgICdBY2Nlc3MsCiAgICAgIFNfRWxpbV9TZWFyY2ggICdBY2Nlc3MsCiAgICAgIFNfRWxpbV9WZXJiICAgICdBY2Nlc3MpOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBGSU5EIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfRmluZF9BbGwgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQUxMX0ZJTEVTICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWEiOwogICAtLSAgICAgICAgL05PQUxMX0ZJTEVTIChEKQogICAtLSAgICAgICAgL0FMTF9GSUxFUwogICAtLQogICAtLSAgIElmIHRoaXMgc3dpdGNoIGlzIHByZXNlbnQsIEZJTkQgYW5kIFhSRUYgd2lsbCBwYXJzZSB0aGUgcmVhZC1vbmx5CiAgIC0tICAgZmlsZXMgZm91bmQgaW4gdGhlIGxpYnJhcnkgc2VhcmNoIHBhdGguIE90aGVyd2lzZSwgdGhlc2UgZmlsZXMgd2lsbAogICAtLSAgIGJlIGlnbm9yZWQuIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHByb3RlY3QgR25hdCBzb3VyY2VzIG9yIHlvdXIKICAgLS0gICBvd24gbGlicmFyaWVzIGZyb20gYmVpbmcgcGFyc2VkLCB0aHVzIG1ha2luZyBGSU5EIGFuZCBYUkVGIG11Y2gKICAgLS0gICBmYXN0ZXIsIGFuZCB0aGVpciBvdXRwdXQgbXVjaCBzbWFsbGVyLgoKICAgU19GaW5kX0Rlcml2ICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9ERVJJVkVEX1RZUEVfSU5GT1JNQVRJT04gIiAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZCI7CiAgIC0tICAgICAgICAvTk9ERVJJVkVEX1RZUEVfSU5GT1JNQVRJT04gKEQpCiAgIC0tICAgICAgICAvREVSSVZFRF9UWVBFX0lORk9STUFUSU9OCiAgIC0tCiAgIC0tICAgT3V0cHV0IHRoZSBwYXJlbnQgdHlwZSByZWZlcmVuY2UgZm9yIGVhY2ggbWF0Y2hpbmcgZGVyaXZlZCB0eXBlcy4KCiAgIFNfRmluZF9FeHByICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRVhQUkVTU0lPTlMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWUiOwogICAtLSAgICAgICAgL05PRVhQUkVTU0lPTlMgKEQpCiAgIC0tICAgICAgICAvRVhQUkVTU0lPTlMKICAgLS0KICAgLS0gICBCeSBkZWZhdWx0LCBGSU5EIGFjY2VwdHMgdGhlIHNpbXBsZSByZWd1bGFyIGV4cHJlc3Npb24gc2V0IGZvciBwYXR0ZXJuLgogICAtLSAgIElmIHRoaXMgc3dpdGNoIGlzIHNldCwgdGhlbiB0aGUgcGF0dGVybiB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgYSBmdWxsCiAgIC0tICAgVW5peC1zdHlsZSByZWd1bGFyIGV4cHJlc3Npb24uCgogICBTX0ZpbmRfRXh0ICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0VYVEVSTkFMX1JFRkVSRU5DRT0iICYgJyInICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1YIiAmICciJzsKICAgLS0gICAgICAgIC9FWFRFUk5BTF9SRUZFUkVOQ0U9Im5hbWU9dmFsIgogICAtLQogICAtLSAgIFNwZWNpZmllcyBhbiBleHRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIHByb2plY3QgbWFuYWdlci4gVXNlZnVsIG9ubHkgaWYKICAgLS0gICAvUFJPSkVDVF9GSUxFIGlzIHVzZWQuCiAgIC0tCiAgIC0tICAgRXhhbXBsZToKICAgLS0gICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJERUJVRz1UUlVFIgoKICAgU19GaW5kX0Z1bGwgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9GVUxMX1BBVEhOQU1FICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZiI7CiAgIC0tICAgICAgICAvTk9GVUxMX1BBVEhOQU1FIChEKQogICAtLSAgICAgICAgL0ZVTExfUEFUSE5BTUUKICAgLS0KICAgLS0gICBJZiB0aGlzIHN3aXRjaCBpcyBzZXQsIHRoZSBvdXRwdXQgZmlsZSBuYW1lcyB3aWxsIGJlIHByZWNlZGVkIGJ5IHRoZWlyCiAgIC0tICAgZGlyZWN0b3J5IChpZiB0aGUgZmlsZSB3YXMgZm91bmQgaW4gdGhlIHNlYXJjaCBwYXRoKS4gSWYgdGhpcyBzd2l0Y2gKICAgLS0gICBpcyBub3Qgc2V0LCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIHByaW50ZWQuCgogICBTX0ZpbmRfSWdub3JlICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0lHTk9SRV9MT0NBTFMgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nIjsKICAgLS0gICAgICAgIC9OT0lHTk9SRV9MT0NBTFMgKEQpCiAgIC0tICAgICAgICAvSUdOT1JFX0xPQ0FMUwogICAtLQogICAtLSAgIElmIHRoaXMgc3dpdGNoIGlzIHNldCwgaW5mb3JtYXRpb24gaXMgb3V0cHV0IG9ubHkgZm9yIGxpYnJhcnktbGV2ZWwKICAgLS0gICBlbnRpdGllcywgaWdub3JpbmcgbG9jYWwgZW50aXRpZXMuIFRoZSB1c2Ugb2YgdGhpcyBzd2l0Y2ggbWF5CiAgIC0tICAgYWNjZWxlcmF0ZSBGSU5EIGFuZCBYUkVGLgoKICAgU19GaW5kX01lc3MgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9NRVNTQUdFU19QUk9KRUNUX0ZJTEU9IiAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUZBVUxUICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDAgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUVESVVNICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAxICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJR0ggIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMiI7CiAgIC0tICAgICAgICAvTUVTU0FHRVNfUFJPSkVDVF9GSUxFWz1tZXNzYWdlcy1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSAidmVyYm9zaXR5IiBvZiB0aGUgcGFyc2luZyBvZiBwcm9qZWN0IGZpbGVzLgogICAtLSAgIG1lc3NhZ2VzLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgREVGQVVMVCAoRCkgIE5vIG1lc3NhZ2VzIGFyZSBvdXRwdXQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igb3Igd2FybmluZy4KICAgLS0KICAgLS0gICAgICBNRURJVU0gICAgICAgQSBzbWFsbCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dC4KICAgLS0KICAgLS0gICAgICBISUdIICAgICAgICAgQSBncmVhdCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dCwgbW9zdCBvZiB0aGVtIG5vdAogICAtLSAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VmdWwgZm9yIHRoZSB1c2VyLgoKICAgU19GaW5kX05vc3RpbmMgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1NURF9JTkNMVURFUyAiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbm9zdGRpbmMiOwogICAtLSAgICAgICAgL05PU1REX0lOQ0xVREVTCiAgIC0tCiAgIC0tICAgRG8gbm90IGxvb2sgZm9yIHNvdXJjZXMgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IGRpcmVjdG9yeS4KCiAgIFNfRmluZF9Ob3N0bGliIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9TVERfTElCUkFSSUVTICIgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5vc3RkbGliIjsKICAgLS0gICAgICAgIC9OT1NURF9MSUJSQVJJRVMKICAgLS0KICAgLS0gICBEbyBub3QgbG9vayBmb3IgbGlicmFyeSBmaWxlcyBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgZGlyZWN0b3J5LgoKICAgU19GaW5kX09iamVjdCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9PQkpFQ1RfU0VBUkNIPSoiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYU8qIjsKICAgLS0gICAgICAgIC9PQkpFQ1RfU0VBUkNIPShkaXJlY3RvcnksLi4uKQogICAtLQogICAtLSAgIFdoZW4gc2VhcmNoaW5nIGZvciBsaWJyYXJ5IGFuZCBvYmplY3QgZmlsZXMsIGxvb2sgaW4gdGhlIHNwZWNpZmllZAogICAtLSAgIGRpcmVjdG9yaWVzLiBUaGUgb3JkZXIgaW4gd2hpY2ggbGlicmFyeSBmaWxlcyBhcmUgc2VhcmNoZWQgaXMgdGhlIHNhbWUKICAgLS0gICBhcyBmb3IgTUFLRS4KCiAgIFNfRmluZF9QcmludCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUFJJTlRfTElORVMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXMiOwogICAtLSAgICAgICAgL05PUFJJTlRfTElORVMgKEQpCiAgIC0tICAgICAgICAvUFJJTlRfTElORVMKICAgLS0KICAgLS0gICBPdXRwdXQgdGhlIGNvbnRlbnQgb2YgdGhlIEFkYSBzb3VyY2UgZmlsZSBsaW5lcyB3ZXJlIHRoZSBlbnRpdHkgd2FzCiAgIC0tICAgZm91bmQuCgogICBTX0ZpbmRfUHJvamVjdCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1Q9QCIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1wQCI7CiAgIC0tICAgICAgICAvUFJPSkVDVD1maWxlCiAgIC0tCiAgIC0tICAgU3BlY2lmeSBhIHByb2plY3QgZmlsZSB0byB1c2UuIEJ5IGRlZmF1bHQsIEZJTkQgYW5kIFhSRUYgd2lsbCB0cnkgdG8KICAgLS0gICBsb2NhdGUgYSBwcm9qZWN0IGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogICAtLQogICAtLSAgIElmIGEgcHJvamVjdCBmaWxlIGlzIGVpdGhlciBzcGVjaWZpZWQgb3IgZm91bmQgYnkgdGhlIHRvb2xzLCB0aGVuIHRoZQogICAtLSAgIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkgYW5kIG9iamVjdCBkaXJlY3RvcnkgbGluZXMgYXJlIGFkZGVkCiAgIC0tICAgYXMgaWYgdGhleSBoYWQgYmVlbiBzcGVjaWZpZWQgcmVzcGVjdGl2ZWx5IGJ5IC9TT1VSQ0VfU0VBUkNIIGFuZAogICAtLSAgIC9PQkpFQ1RfU0VBUkNILgogICAtLQogICAtLSAgIFRoaXMgcXVhbGlmaWVyIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggL1BST0pFQ1RfRklMRQoKICAgU19GaW5kX1ByaiAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9QUk9KRUNUX0ZJTEU9PCIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgd2lsbCBiZSBwYXJzZWQgYmVmb3JlIGxvb2tpbmcgZm9yIHNvdXJjZXMuCiAgIC0tICAgVGhlIHNvdXJjZSBhbmQgb2JqZWN0IGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkIHdpbGwgYmUgY29tbXVuaWNhdGVkCiAgIC0tICAgdG8gZ25hdGZpbmQgIHRocm91Z2ggbG9naWNhbCBuYW1lcyBBREFfUFJKX0lOQ0xVREVfRklMRSBhbmQKICAgLS0gICBBREFfUFJKX09CSkVDVFNfRklMRS4KCiAgIFNfRmluZF9SZWYgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUkVGRVJFTkNFUyAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXIiOwogICAtLSAgICAgICAgL05PUkVGRVJFTkNFUyAoRCkKICAgLS0gICAgICAgIC9SRUZFUkVOQ0VTCiAgIC0tCiAgIC0tICAgQnkgZGVmYXVsdCwgRklORCB3aWxsIG91dHB1dCBvbmx5IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICAgLS0gICBkZWNsYXJhdGlvbiwgYm9keSBvciB0eXBlIGNvbXBsZXRpb24gb2YgdGhlIGVudGl0aWVzLiBJZiB0aGlzIHN3aXRjaAogICAtLSAgIGlzIHNldCwgdGhlIEZJTkQgd2lsbCBsb2NhdGUgZXZlcnkgcmVmZXJlbmNlIHRvIHRoZSBlbnRpdGllcyBpbiB0aGUKICAgLS0gICBmaWxlcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAob3IgaW4gZXZlcnkgZmlsZSBpbiB0aGUgc2VhcmNoCiAgIC0tICAgcGF0aCBpZiBubyBmaWxlIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUpLgoKICAgU19GaW5kX1NlYXJjaCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9TRUFSQ0g9KiIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItSSoiOwogICAtLSAgICAgICAgL1NFQVJDSD0oZGlyZWN0b3J5LC4uLikKICAgLS0KICAgLS0gICBFcXVpdmFsZW50IHRvOgogICAtLSAgIC9PQkpFQ1RfU0VBUkNIPShkaXJlY3RvcnksLi4uKSAvU09VUkNFX1NFQVJDSD0oZGlyZWN0b3J5LC4uLikKCiAgIFNfRmluZF9Tb3VyY2UgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU09VUkNFX1NFQVJDSD0qIiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWFJKiI7CiAgIC0tICAgICAgICAvU09VUkNFX1NFQVJDSD0oZGlyZWN0b3J5LC4uLikKICAgLS0KICAgLS0gICBXaGVuIGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcyBhbHNvIGxvb2sgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcmllcy4KICAgLS0gICBUaGUgb3JkZXIgaW4gd2hpY2ggc291cmNlIGZpbGUgc2VhcmNoIGlzIHVuZGVydGFrZW4gaXMgdGhlIHNhbWUgYXMgZm9yCiAgIC0tICAgTUFLRS4KCiAgIFNfRmluZF9UeXBlcyAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVFlQRV9ISUVSQVJDSFkgIiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXQiOwogICAtLSAgICAgICAgL05PVFlQRV9ISUVSQVJDSFkgKEQpCiAgIC0tICAgICAgICAvVFlQRV9ISUVSQVJDSFkKICAgLS0KICAgLS0gICBPdXRwdXQgdGhlIHR5cGUgaGllcmFyY2h5IGZvciB0aGUgc3BlY2lmaWVkIHR5cGUuIEl0IGFjdHMgbGlrZSB0aGUKICAgLS0gICAvREVSSVZFRF9UWVBFX0lORk9STUFUSU9OIHF1YWxpZmllciwgYnV0IHJlY3Vyc2l2ZWx5IGZyb20gcGFyZW50IHR5cGUKICAgLS0gICB0byBwYXJlbnQgdHlwZS4gV2hlbiB0aGlzIHF1YWxpZmllciBpcyBzcGVjaWZpZWQgaXQgaXMgbm90IHBvc3NpYmxlIHRvCiAgIC0tICAgc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbGUuCgogICBGaW5kX1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyA6PQogICAgIChTX0ZpbmRfQWxsICAgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfRGVyaXYgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfRXhwciAgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfRXh0ICAgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfRnVsbCAgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfSWdub3JlICAnQWNjZXNzLAogICAgICBTX0ZpbmRfTWVzcyAgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfTm9zdGluYyAnQWNjZXNzLAogICAgICBTX0ZpbmRfTm9zdGxpYiAnQWNjZXNzLAogICAgICBTX0ZpbmRfT2JqZWN0ICAnQWNjZXNzLAogICAgICBTX0ZpbmRfUHJpbnQgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfUHJvamVjdCAnQWNjZXNzLAogICAgICBTX0ZpbmRfUHJqICAgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfUmVmICAgICAnQWNjZXNzLAogICAgICBTX0ZpbmRfU2VhcmNoICAnQWNjZXNzLAogICAgICBTX0ZpbmRfU291cmNlICAnQWNjZXNzLAogICAgICBTX0ZpbmRfVHlwZXMgICAnQWNjZXNzKTsKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBLUlVOQ0ggLS0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBTX0tydW5jaF9Db3VudCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9DT1VOVD0jIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImAjIjsKICAgLS0gICAgICAgIC9DT1VOVD0zOSAoRCkKICAgLS0gICAgICAgIC9DT1VOVD1ubm4KICAgLS0KICAgLS0gICBMaW1pdCBmaWxlIG5hbWVzIHRvIG5ubiBjaGFyYWN0ZXJzICh3aGVyZSBubm4gaXMgYSBkZWNpbWFsCiAgIC0tICAgaW50ZWdlcikuIFRoZSBtYXhpbXVtIGZpbGUgbmFtZSBsZW5ndGggaXMgMzksIGJ1dCBpZiB5b3Ugd2FudCB0bwogICAtLSAgIGdlbmVyYXRlIGEgc2V0IG9mIGZpbGVzIHRoYXQgd291bGQgYmUgdXNhYmxlIGlmIHBvcnRlZCB0byBhIHN5c3RlbQogICAtLSAgIHdpdGggc29tZSBkaWZmZXJlbnQgbWF4aW11bSBmaWxlIGxlbmd0aCwgdGhlbiBhIGRpZmZlcmVudCB2YWx1ZSBjYW4KICAgLS0gICBiZSBzcGVjaWZpZWQuCgogICBLcnVuY2hfU3dpdGNoZXMgOiBhbGlhc2VkIGNvbnN0YW50IFN3aXRjaGVzICA6PQogICAgICgxIC4uIDEgPT4gU19LcnVuY2hfQ291bnQgICdBY2Nlc3MpOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBMSUJSQVJZIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfTGJyX0NvbmZpZyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NPTkZJRz1AIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1jb25maWc9QCI7CiAgIC0tICAgICAgICAvQ09ORklHPWZpbGUKICAgLS0KICAgLS0gICBGaWxlIGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBwcmFnbWFzLgoKICAgU19MYnJfQ3JlYXRlICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQ1JFQVRFPSUiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWNyZWF0ZT0lIjsKICAgLS0gICAgICAgIC9DUkVBVEU9ZGlyZWN0b3J5CiAgIC0tCiAgIC0tICAgRGlyZWN0b3J5IHRvIGNyZWF0ZSBhbmQgYnVpbGQgYWx0ZXJuYXRlIGxpYnJhcnkgaW4uCgogICBTX0xicl9EZWxldGUgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9ERUxFVEU9JSIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZGVsZXRlPSUiOwogICAtLSAgICAgICAgL0RFTEVURT1kaXJlY3RvcnkKICAgLS0KICAgLS0gICBEaXJlY3RvcnkgY29udGFpbmluZyBhbHRlcm5hdGUgbGlicmFyeSB0byBiZSBkZWxldGVkLgoKICAgU19MYnJfU2V0ICAgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU0VUPSUiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLXNldD0lIjsKICAgLS0gICAgICAgIC9TRVQ9ZGlyZWN0b3J5CiAgIC0tCiAgIC0tICAgRGlyZWN0b3J5IGNvbnRhaW5pbmcgYWx0ZXJuYXRlIGxpYnJhcnkgdG8gYmUgbWFkZSB0aGUgY3VycmVudCBsaWJyYXJ5LgoKICAgTGJyX1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyAgOj0KICAgICAoU19MYnJfQ29uZmlnICdBY2Nlc3MsCiAgICAgIFNfTGJyX0NyZWF0ZSAnQWNjZXNzLAogICAgICBTX0xicl9EZWxldGUgJ0FjY2VzcywKICAgICAgU19MYnJfU2V0ICAgICdBY2Nlc3MpOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBMSU5LIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfTGlua19CaW5kICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQklORF9GSUxFPSIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQURBICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQSAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkMgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUMiOwogICAtLSAgICAgICAgL0JJTkRfRklMRT1bYmluZC1maWxlLW9wdGlvbl0KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIGxhbmd1YWdlIG9mIHRoZSBiaW5kZXIgZ2VuZXJhdGVkIGZpbGUuCiAgIC0tCiAgIC0tICAgICAgICBBREEgKEQpICAgICAgICAgQmluZGVyIGZpbGUgaXMgQWRhLgogICAtLQogICAtLSAgICAgICAgQyAgICAgICAgICAgICAgIEJpbmRlciBmaWxlIGlzICdDJy4KCiAgIFNfTGlua19EZWJ1ZyAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvREVCVUc9IiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUxMICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZzMgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PTkUgIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWcwICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUUkFDRUJBQ0sgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nMSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9UUkFDRUJBQ0sgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZzAiOwogICAtLSAgICAgICAgL05PREVCVUcgKEQpCiAgIC0tICAgICAgICAvREVCVUdbPWRlYnVnLW9wdGlvbl0KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW5jbHVkZWQuICdkZWJ1Zy1vcHRpb24nCiAgIC0tICAgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgICBBTEwgKEQpICAgICAgSW5jbHVkZSBmdWxsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KICAgLS0KICAgLS0gICAgICAgIE5PTkUgICAgICAgICBQcm92aWRlIG5vIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIFNhbWUgYXMgL05PREVCVUcuCiAgIC0tCiAgIC0tICAgICAgICBUUkFDRUJBQ0sgICAgUHJvdmlkZSBzdWZmaWNpZW50IGRlYnVnIGluZm9ybWF0aW9uIGZvciBhIHRyYWNlYmFjay4KICAgLS0KICAgLS0gICAgICAgIE5PVFJBQ0VCQUNLICBTYW1lIGFzIE5PTkUuCgogICBTX0xpbmtfTm9kZWJ1ZyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PREVCVUcgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nMCI7CiAgIC0tICBOT0RPQyAoc2VlIC9ERUJVRykKCiAgIFNfTGlua19FeGVjdXQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRVhFQ1VUQUJMRT1AIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW9AIjsKICAgLS0gICAgICAgIC9FWEVDVVRBQkxFPWV4ZWMtbmFtZQogICAtLQogICAtLSAgICdleGVjLW5hbWUnIHNwZWNpZmllcyBhbiBhbHRlcm5hdGl2ZSBuYW1lIGZvciB0aGUgZ2VuZXJhdGVkIGV4ZWN1dGFibGUKICAgLS0gICBwcm9ncmFtLiBJZiB0aGlzIHF1YWxpZmllciBzd2l0Y2ggaXMgb21pdHRlZCwgdGhlIGV4ZWN1dGFibGUgaXMgY2FsbGVkCiAgIC0tICAgdGhlIG5hbWUgb2YgdGhlIG1haW4gdW5pdC4gU28gIiQgR05BVCBMSU5LIFRSWS5BTEkiIGNyZWF0ZXMgYW4KICAgLS0gICBleGVjdXRhYmxlIGNhbGxlZCBUUlkuRVhFLgoKICAgU19MaW5rX0V4dCAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9FWFRFUk5BTF9SRUZFUkVOQ0U9IiAmICciJyAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItWCIgJiAnIic7CiAgIC0tICAgICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJuYW1lPXZhbCIKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBwcm9qZWN0IG1hbmFnZXIuIFVzZWZ1bCBvbmx5IGlmCiAgIC0tICAgL1BST0pFQ1RfRklMRSBpcyB1c2VkLgogICAtLQogICAtLSAgIEV4YW1wbGU6CiAgIC0tICAgICAgL0VYVEVSTkFMX1JFRkVSRU5DRT0iREVCVUc9VFJVRSIKCiAgIFNfTGlua19Gb3JsaW5rIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRk9SX0xJTktFUj0iICYgJyInICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3ItbGlua2VyPSIgJiAnIic7CiAgIC0tICAgICAgICAvRk9SX0xJTktFUj08c3RyaW5nPgogICAtLQogICAtLSAgIFRyYW5zbWl0IHRoZSBvcHRpb24gPHN0cmluZz4gdG8gdGhlIHVuZGVybHlpbmcgbGlua2VyLgoKICAgU19MaW5rX0ZvcmNlICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9GT1JDRV9PQkpFQ1RfRklMRV9MSVNUICIgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZiI7CiAgIC0tICAgICAgICAvTk9GT1JDRV9PQkpFQ1RfRklMRV9MSVNUIChEKQogICAtLSAgICAgICAgL0ZPUkNFX09CSkVDVF9GSUxFX0xJU1QKICAgLS0KICAgLS0gICBGb3JjZXMgdGhlIGdlbmVyYXRpb24gb2YgYSBmaWxlIHRoYXQgY29udGFpbnMgY29tbWFuZHMgZm9yIHRoZSBsaW5rZXIuCiAgIC0tICAgVGhpcyBpcyB1c2VmdWwgaW4gc29tZSBjYXNlcyB0byBkZWFsIHdpdGggc3BlY2lhbCBzaXR1YXRpb25zIHdoZXJlIHRoZQogICAtLSAgIGNvbW1hbmQgbGluZSBsZW5ndGggaXMgZXhjZWVkZWQuCgogICBTX0xpbmtfSWRlbnQgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0lERU5USUZJQ0FUSU9OPSIgJiAnIicgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZm9yLWxpbmtlcj1JREVOVD0iICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIic7CiAgIC0tICAgICAgICAvSURFTlRJRklDQVRJT049IjxzdHJpbmc+IgogICAtLQogICAtLSAgICI8c3RyaW5nPiIgc3BlY2lmaWVzIHRoZSBzdHJpbmcgdG8gYmUgc3RvcmVkIGluIHRoZSBpbWFnZSBmaWxlIGlkZW50LQogICAtLSAgIGlmaWNhdGlvbiBmaWVsZCBpbiB0aGUgaW1hZ2UgaGVhZGVyLiBJdCBvdmVycmlkZXMgYW55IHByYWdtYSBJZGVudAogICAtLSAgIHNwZWNpZmllZCBzdHJpbmcuCgogICBTX0xpbmtfTGliZGlyICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0xJQkRJUj0qIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1MKiI7CiAgIC0tICAgICAgICAvTElCRElSPShkaXJlY3RvcnksIC4uLikKICAgLS0KICAgLS0gICBMb29rIGZvciBsaWJyYXJpZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcmllcy4KCiAgIFNfTGlua19MaWJyYXJ5IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTElCUkFSWT18IiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWx8IjsKICAgLS0gICAgICAgIC9MWUJSQVJZPXh5egogICAtLQogICAtLSAgIExpbmsgd2l0aCBsaWJyYXJ5IG5hbWVkICJ4eXoiLgoKICAgU19MaW5rX01lc3MgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9NRVNTQUdFU19QUk9KRUNUX0ZJTEU9IiAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUZBVUxUICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDAgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUVESVVNICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAxICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJR0ggIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMiI7CiAgIC0tICAgICAgICAvTUVTU0FHRVNfUFJPSkVDVF9GSUxFWz1tZXNzYWdlcy1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSAidmVyYm9zaXR5IiBvZiB0aGUgcGFyc2luZyBvZiBwcm9qZWN0IGZpbGVzLgogICAtLSAgIG1lc3NhZ2VzLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgREVGQVVMVCAoRCkgIE5vIG1lc3NhZ2VzIGFyZSBvdXRwdXQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igb3Igd2FybmluZy4KICAgLS0KICAgLS0gICAgICBNRURJVU0gICAgICAgQSBzbWFsbCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dC4KICAgLS0KICAgLS0gICAgICBISUdIICAgICAgICAgQSBncmVhdCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dCwgbW9zdCBvZiB0aGVtIG5vdAogICAtLSAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VmdWwgZm9yIHRoZSB1c2VyLgoKICAgU19MaW5rX05vY29tcCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT0NPTVBJTEUgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbiI7CiAgIC0tICAgICAgICAvTk9DT01QSUxFCiAgIC0tCiAgIC0tICAgRG8gbm90IGNvbXBpbGUgdGhlIGZpbGUgZ2VuZXJhdGVkIGJ5IHRoZSBiaW5kZXIuCiAgIC0tICAgVGhpcyBtYXkgYmUgdXNlZCB3aGVuIGEgbGluayBpcyByZXJ1biB3aXRoIGRpZmZlcmVudCBvcHRpb25zLAogICAtLSAgIGJ1dCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlY29tcGlsZSB0aGUgYmluZGVyIGdlbmVyYXRlZCBmaWxlLgoKICAgU19MaW5rX05vaW5oaWIgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT0lOSElCSVQtRVhFQyAiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZvci1saW5rZXI9LS1ub2luaGliaXQtZXhlYyI7CiAgIC0tICAgICAgICAvTk9JTkhJQklULUVYRUMKICAgLS0KICAgLS0gICBEZWxldGUgZXhlY3V0YWJsZSBpZiB0aGVyZSBhcmUgZXJyb3JzIG9yIHdhcm5pbmdzLgoKICAgU19MaW5rX05vZmlsZXMgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1NUQVJUX0ZJTEVTICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbm9zdGFydGZpbGVzIjsKICAgLS0gICAgICAgIC9OT1NUQVJUX0ZJTEVTCiAgIC0tCiAgIC0tICAgTGluayBpbiBkZWZhdWx0IGltYWdlIGluaXRpYWxpemF0aW9uIGFuZCBzdGFydHVwIGZ1bmN0aW9ucy4KCiAgIFNfTGlua19Qcm9qZWN0IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUFJPSkVDVF9GSUxFPTwiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVA+IjsKICAgLS0gICAgICAgIC9QUk9KRUNUX0ZJTEU9ZmlsZW5hbWUKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIG1haW4gcHJvamVjdCBmaWxlIHRvIGJlIHVzZWQuIFRoZSBwcm9qZWN0IGZpbGVzIHJvb3RlZAogICAtLSAgIGF0IHRoZSBtYWluIHByb2plY3QgZmlsZSB3aWxsIGJlIHBhcnNlZCBiZWZvcmUgdGhlIGludm9jYXRpb24gb2YgdGhlCiAgIC0tICAgbGlua2VyLgogICAtLSAgIFRoZSBzb3VyY2UgYW5kIG9iamVjdCBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCB3aWxsIGJlIGNvbW11bmljYXRlZAogICAtLSAgIHRvIHRoZSBsaW5rZXIgdGhyb3VnaCBsb2dpY2FsIG5hbWVzIEFEQV9QUkpfSU5DTFVERV9GSUxFIGFuZAogICAtLSAgIEFEQV9QUkpfT0JKRUNUU19GSUxFLgoKICAgU19MaW5rX1JldHVybiAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9SRVRVUk5fQ09ERVM9IiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQT1NJWCAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtbXZtcy1yZXR1cm4tY29kZXMgIiAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVk1TICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbXZtcy1yZXR1cm4tY29kZXMiOwogICAtLSAgICAgICAgL1JFVFVSTl9DT0RFUz1QT1NJWCAoRCkKICAgLS0gICAgICAgIC9SRVRVUk5fQ09ERVM9Vk1TCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBzdHlsZSBvZiBjb2RlcyByZXR1cm5lZCBieQogICAtLSAgIEFkYS5Db21tYW5kX0xpbmUuU2V0X0V4aXRfU3RhdHVzLiBNdXN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAogICAtLSAgIGFuZCBtYXRjaCB0aGUgQmluZCBxdWFsaWZlciB3aXRoIHRoZSBzYW1lIG5hbWUuCiAgIC0tCiAgIC0tICAgICAgICBQT1NJWCAoRCkgICBSZXR1cm4gUG9zaXggY29tcGF0aWJsZSBleGl0IGNvZGVzLgogICAtLQogICAtLSAgICAgICAgVk1TICAgICAgICAgUmV0dXJuIFZNUyBjb21wYXRpYmxlIGV4aXQgY29kZXMuIFRoZSB2YWx1ZSByZXR1cm5lZAogICAtLSAgICAgICAgICAgICAgICAgICAgaXMgaWRlbnRpY2FsbHkgZXF1YWwgdG8gdGhlIFNldF9FeGl0X1N0YXR1cyBwYXJhbWV0ZXIuCgogICBTX0xpbmtfU3RhdGljICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NUQVRJQyAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZm9yLWxpbmtlcj0tc3RhdGljIjsKICAgLS0gICAgICAgIC9OT1NUQVRJQyAoRCkKICAgLS0gICAgICAgIC9TVEFUSUMKICAgLS0KICAgLS0gICBJbmRpY2F0ZSB0byB0aGUgbGlua2VyIHRoYXQgdGhlIGxpbmsgaXMgc3RhdGljLgoKICAgU19MaW5rX1ZlcmIgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9WRVJCT1NFICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdiI7CiAgIC0tICAgICAgICAvTk9WRVJCT1NFIChEKQogICAtLSAgICAgICAgL1ZFUkJPU0UKICAgLS0KICAgLS0gICBDYXVzZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBvdXRwdXQsIGluY2x1ZGluZyBhIGZ1bGwgbGlzdCBvZgogICAtLSAgIHRoZSBpbmNsdWRlZCBvYmplY3QgZmlsZXMuIFRoaXMgc3dpdGNoIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCB3aGVuIHlvdQogICAtLSAgIHdhbnQgdG8gc2VlIHdoYXQgc2V0IG9mIG9iamVjdCBmaWxlcyBhcmUgYmVpbmcgdXNlZCBpbiB0aGUgbGluayBzdGVwLgoKICAgU19MaW5rX1paWlpaICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi88b3RoZXI+ICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZvci1saW5rZXI9IjsKICAgLS0gICAgICAgIC88b3RoZXI+CiAgIC0tCiAgIC0tICAgQW55IG90aGVyIHN3aXRjaCB0aGF0IHdpbGwgYmUgdHJhbnNtaXRlZCB0byB0aGUgdW5kZXJseWluZyBsaW5rZXIuCgogICBMaW5rX1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyA6PQogICAgIChTX0xpbmtfQmluZCAgICAnQWNjZXNzLAogICAgICBTX0xpbmtfRGVidWcgICAnQWNjZXNzLAogICAgICBTX0xpbmtfTm9kZWJ1ZyAnQWNjZXNzLAogICAgICBTX0xpbmtfRXhlY3V0ICAnQWNjZXNzLAogICAgICBTX0xpbmtfRXh0ICAgICAnQWNjZXNzLAogICAgICBTX0xpbmtfRm9ybGluayAnQWNjZXNzLAogICAgICBTX0xpbmtfRm9yY2UgICAnQWNjZXNzLAogICAgICBTX0xpbmtfSWRlbnQgICAnQWNjZXNzLAogICAgICBTX0xpbmtfTGliZGlyICAnQWNjZXNzLAogICAgICBTX0xpbmtfTGlicmFyeSAnQWNjZXNzLAogICAgICBTX0xpbmtfTWVzcyAgICAnQWNjZXNzLAogICAgICBTX0xpbmtfTm9jb21wICAnQWNjZXNzLAogICAgICBTX0xpbmtfTm9maWxlcyAnQWNjZXNzLAogICAgICBTX0xpbmtfTm9pbmhpYiAnQWNjZXNzLAogICAgICBTX0xpbmtfUHJvamVjdCAnQWNjZXNzLAogICAgICBTX0xpbmtfUmV0dXJuICAnQWNjZXNzLAogICAgICBTX0xpbmtfU3RhdGljICAnQWNjZXNzLAogICAgICBTX0xpbmtfVmVyYiAgICAnQWNjZXNzLAogICAgICBTX0xpbmtfWlpaWlogICAnQWNjZXNzKTsKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgLS0gU3dpdGNoZXMgZm9yIEdOQVQgTElTVCAtLQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBTX0xpc3RfQWxsICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0FMTF9VTklUUyAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1hIjsKICAgLS0gICAgICAgIC9OT0FMTF9VTklUUyAoRCkKICAgLS0gICAgICAgIC9BTExfVU5JVFMKICAgLS0KICAgLS0gICBDb25zaWRlciBhbGwgdW5pdHMsIGluY2x1ZGluZyB0aG9zZSBvZiB0aGUgcHJlZGVmaW5lZCBBZGEgbGlicmFyeS4KICAgLS0gICBFc3BlY2lhbGx5IHVzZWZ1bCB3aXRoIC9ERVBFTkRFTkNJRVMuCgogICBTX0xpc3RfQ3VycmVudCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NVUlJFTlRfRElSRUNUT1JZICIgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtSS0iOwogICAtLSAgICAgICAgL0NVUlJFTlRfRElSRUNUT1JZIChEKQogICAtLSAgICAgICAgL05PQ1VSUkVOVF9ESVJFQ1RPUlkKICAgLS0KICAgLS0gICBMb29rIGZvciBzb3VyY2UsIGxpYnJhcnkgb3Igb2JqZWN0IGZpbGVzIGluIHRoZSBkZWZhdWx0IGRpcmVjdG9yeS4KCiAgIFNfTGlzdF9EZXBlbmQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvREVQRU5ERU5DSUVTICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWQiOwogICAtLSAgICAgICAgL05PREVQRU5ERU5DSUVTIChEKQogICAtLSAgICAgICAgL0RFUEVOREVOQ0lFUwoKICAgU19MaXN0X0V4dCAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9FWFRFUk5BTF9SRUZFUkVOQ0U9IiAmICciJyAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItWCIgJiAnIic7CiAgIC0tICAgICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJuYW1lPXZhbCIKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBwcm9qZWN0IG1hbmFnZXIuIFVzZWZ1bCBvbmx5IGlmCiAgIC0tICAgL1BST0pFQ1RfRklMRSBpcyB1c2VkLgogICAtLQogICAtLSAgIEV4YW1wbGU6CiAgIC0tICAgICAgL0VYVEVSTkFMX1JFRkVSRU5DRT0iREVCVUc9VFJVRSIKCiAgIFNfTGlzdF9GaWxlcyAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRklMRVM9QCIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWZpbGVzPUAiOwogICAtLSAgICAgICAgL0ZJTEVTPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgVGFrZSBhcyBhcmd1bWVudHMgdGhlIGZpbGVzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUgc3BlY2lmaWVkCiAgIC0tICAgdGV4dCBmaWxlLgoKICAgU19MaXN0X01lc3MgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9NRVNTQUdFU19QUk9KRUNUX0ZJTEU9IiAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUZBVUxUICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDAgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUVESVVNICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAxICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJR0ggIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMiI7CiAgIC0tICAgICAgICAvTUVTU0FHRVNfUFJPSkVDVF9GSUxFWz1tZXNzYWdlcy1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSAidmVyYm9zaXR5IiBvZiB0aGUgcGFyc2luZyBvZiBwcm9qZWN0IGZpbGVzLgogICAtLSAgIG1lc3NhZ2VzLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgREVGQVVMVCAoRCkgIE5vIG1lc3NhZ2VzIGFyZSBvdXRwdXQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igb3Igd2FybmluZy4KICAgLS0KICAgLS0gICAgICBNRURJVU0gICAgICAgQSBzbWFsbCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dC4KICAgLS0KICAgLS0gICAgICBISUdIICAgICAgICAgQSBncmVhdCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dCwgbW9zdCBvZiB0aGVtIG5vdAogICAtLSAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VmdWwgZm9yIHRoZSB1c2VyLgoKICAgU19MaXN0X05vc3RpbmMgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1NURF9JTkNMVURFUyAiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbm9zdGRpbmMiOwogICAtLSAgICAgICAgL05PU1REX0lOQ0xVREVTCiAgIC0tCiAgIC0tICAgRG8gbm90IGxvb2sgZm9yIHNvdXJjZXMgb2YgdGhlIHJ1biB0aW1lIGluIHRoZSBzdGFuZGFyZCBkaXJlY3RvcnkuCgogICBTX0xpc3RfT2JqZWN0ICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL09CSkVDVF9TRUFSQ0g9KiIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1hTyoiOwogICAtLSAgICAgICAgL09CSkVDVF9TRUFSQ0g9KGRpcmVjdG9yeSwuLi4pCiAgIC0tCiAgIC0tICAgV2hlbiBsb29raW5nIGZvciBsaWJyYXJ5IGFuZCBvYmplY3QgZmlsZXMgbG9vayBhbHNvIGluIHRoZSBzcGVjaWZpZWQKICAgLS0gICBkaXJlY3Rvcmllcy4KCiAgIFNfTGlzdF9PdXRwdXQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvT1VUUFVUPSIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU09VUkNFUyAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItcyAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFUEVORCAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWQgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPQkpFQ1RTICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1vICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5JVFMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdSAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTlMgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWggIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWRVJCT1NFICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12ICI7CiAgIC0tICAgICAgICAvT1VUUFVUPShvcHRpb24sb3B0aW9uLC4uLikKICAgLS0KICAgLS0gICAgICAgIFNPVVJDRVMgKEQpICAgICBPbmx5IG91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCBzb3VyY2UgZmlsZXMuCiAgIC0tCiAgIC0tICAgICAgICBERVBFTkQgICAgICAgICAgTGlzdCBzb3VyY2VzIGZyb20gd2hpY2ggc3BlY2lmaWVkIHVuaXRzIGRlcGVuZCBvbi4KICAgLS0KICAgLS0gICAgICAgIE9CSkVDVFMgICAgICAgICBPbmx5IG91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCBvYmplY3QgZmlsZXMuCiAgIC0tCiAgIC0tICAgICAgICBVTklUUyAgICAgICAgICAgT25seSBvdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgY29tcGlsYXRpb24gdW5pdHMuCiAgIC0tCiAgIC0tICAgICAgICBPUFRJT05TICAgICAgICAgT3V0cHV0IHRoZSBsaXN0IG9mIG9wdGlvbnMuCiAgIC0tCiAgIC0tICAgICAgICBWRVJCT1NFICAgICAgICAgT3V0cHV0IHRoZSBjb21wbGV0ZSBzb3VyY2UgYW5kIG9iamVjdCBwYXRocy4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIHRoZSBkZWZhdWx0IGNvbHVtbiBsYXlvdXQgYnV0IGluc3RlYWQKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICB1c2UgbG9uZyBmb3JtYXQgZ2l2aW5nIGFzIG11Y2ggYXMgaW5mb3JtYXRpb24KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSBvbiBlYWNoIHJlcXVlc3RlZCB1bml0cywgaW5jbHVkaW5nCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCBjaGFyYWN0ZXJpc3RpY3MuCgogICBTX0xpc3RfUHJvamVjdCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgd2lsbCBiZSBwYXJzZWQgYmVmb3JlIGRvaW5nIGFueSBsaXN0aW5nLgogICAtLSAgIFRoZSBzb3VyY2UgYW5kIG9iamVjdCBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCB3aWxsIGJlIGNvbW11bmljYXRlZAogICAtLSAgIHRvIGduYXRsaXN0IHRocm91Z2ggbG9naWNhbCBuYW1lcyBBREFfUFJKX0lOQ0xVREVfRklMRSBhbmQKICAgLS0gICBBREFfUFJKX09CSkVDVFNfRklMRS4KCiAgIFNfTGlzdF9TZWFyY2ggIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU0VBUkNIPSoiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUkqIjsKICAgLS0gICAgICAgIC9TRUFSQ0g9KGRpcmVjdG9yeSwuLi4pCiAgIC0tCiAgIC0tICAgU2VhcmNoIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMgZm9yIGJvdGggc291cmNlIGFuZCBvYmplY3QgZmlsZXMuCgogICBTX0xpc3RfU291cmNlICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NPVVJDRV9TRUFSQ0g9KiIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1hSSoiOwogICAtLSAgICAgICAgL1NPVVJDRV9TRUFSQ0g9KGRpcmVjdG9yeSwuLi4pCiAgIC0tCiAgIC0tICAgV2hlbiBsb29raW5nIGZvciBzb3VyY2UgZmlsZXMgYWxzbyBsb29rIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMuCgogICBMaXN0X1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyA6PQogICAgIChTX0xpc3RfQWxsICAgICAnQWNjZXNzLAogICAgICBTX0xpc3RfQ3VycmVudCAnQWNjZXNzLAogICAgICBTX0xpc3RfRGVwZW5kICAnQWNjZXNzLAogICAgICBTX0xpc3RfRXh0ICAgICAnQWNjZXNzLAogICAgICBTX0xpc3RfRmlsZXMgICAnQWNjZXNzLAogICAgICBTX0xpc3RfTWVzcyAgICAnQWNjZXNzLAogICAgICBTX0xpc3RfTm9zdGluYyAnQWNjZXNzLAogICAgICBTX0xpc3RfT2JqZWN0ICAnQWNjZXNzLAogICAgICBTX0xpc3RfT3V0cHV0ICAnQWNjZXNzLAogICAgICBTX0xpc3RfUHJvamVjdCAnQWNjZXNzLAogICAgICBTX0xpc3RfU2VhcmNoICAnQWNjZXNzLAogICAgICBTX0xpc3RfU291cmNlICAnQWNjZXNzKTsKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgLS0gU3dpdGNoZXMgZm9yIEdOQVQgTUFLRSAtLQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBTX01ha2VfQWN0aW9ucyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0FDVElPTlM9IiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTVBJTEUgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCSU5EICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1iICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTElOSyAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbCAiOwogICAtLSAgICAgICAgL0FDVElPTlM9KGtleXdvcmRbLC4uLl0pCiAgIC0tCiAgIC0tICBHTkFUIE1BS0UgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBjaGVjayBpZiB0aGUgc291cmNlcyBhcmUgdXAgdG8gZGF0ZSwKICAgLS0gIGNvbXBpbGUgdGhvc2Ugc291cmNlcyB0aGF0IGFyZSBub3QgdXAgdG8gZGF0ZSwgYmluZCB0aGUgbWFpbiBzb3VyY2UsCiAgIC0tICB0aGVuIGxpbmsgdGhlIGV4ZWN1dGFibGUuCiAgIC0tCiAgIC0tICBXaXRoIHRoZSAvQUNUSU9OUyBxdWFsaWZpZXIsIEdOQVQgTUFLRSBtYXkgYmUgcmVzdHJpY3RlZCB0byBvbmUgb3IKICAgLS0gIHR3byBvZiB0aGVzZSB0aHJlZSBzdGVwczoKICAgLS0KICAgLS0gIG8gQ29tcGlsZQogICAtLSAgbyBCaW5kCiAgIC0tICBvIExpbmsKICAgLS0KICAgLS0KICAgLS0gICBZb3UgbWF5IHNwZWNpZnkgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBrZXl3b3JkcyB0byB0aGUgL0FDVElPTlMKICAgLS0gICBxdWFsaWZpZXI6CiAgIC0tCiAgIC0tICAgQklORCAgICAgICAgICAgIEJpbmQgb25seS4gQ2FuIGJlIGNvbWJpbmVkIHdpdGggL0FDVElPTlM9Q09NUElMRQogICAtLSAgICAgICAgICAgICAgICAgICB0byBkbyBjb21waWxhdGlvbiBhbmQgYmluZGluZywgYnV0IG5vIGxpbmtpbmcuCiAgIC0tICAgICAgICAgICAgICAgICAgIENhbiBiZSBjb21iaW5lZCB3aXRoIC9BQ1RJT05TPUxJTksgdG8gZG8gYmluZGluZyBhbmQKICAgLS0gICAgICAgICAgICAgICAgICAgbGlua2luZy4gV2hlbiBub3QgY29tYmluZWQgd2l0aCAvQUNUSU9OUz1DT01QSUxFLAogICAtLSAgICAgICAgICAgICAgICAgICBhbGwgdGhlIHVuaXRzIGluIHRoZSBjbG9zdXJlIG9mIHRoZSBtYWluIHByb2dyYW0gbXVzdAogICAtLSAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gcHJldmlvdXNseSBjb21waWxlZCBhbmQgbXVzdCBiZSB1cCB0byBkYXRlLgogICAtLQogICAtLSAgIENPTVBJTEUgICAgICAgICBDb21waWxlIG9ubHkuIERvIG5vdCBwZXJmb3JtIGJpbmRpbmcsIGV4Y2VwdCB3aGVuCiAgIC0tICAgICAgICAgICAgICAgICAgIC9BQ1RJT05TPUJJTkQgaXMgYWxzbyBzcGVjaWZpZWQuIERvIG5vdCBwZXJmb3JtCiAgIC0tICAgICAgICAgICAgICAgICAgIGxpbmtpbmcsIGV4Y2VwdCBpZiBib3RoIC9BQ1RJT05TPUJJTkQgYW5kIC9BQ1RJT05TPUxJTksKICAgLS0gICAgICAgICAgICAgICAgICAgYXJlIGFsc28gc3BlY2lmaWVkLgogICAtLQogICAtLSAgIExJTksgICAgICAgICAgICBMaW5rIG9ubHkuIENhbiBiZSBjb21iaW5lZCB3aXRoIC9BQ1RJT05TPUJJTkQgdG8gZG8KICAgLS0gICAgICAgICAgICAgICAgICAgYmluZGluZyBhbmQgbGlua2luZy4gTGlua2luZyB3aWxsIG5vdCBiZSBwZXJmb3JtZWQKICAgLS0gICAgICAgICAgICAgICAgICAgaWYgY29tYmluZWQgd2l0aCAvQUNUSU9OUz1DT01QSUxFIGJ1dCBub3Qgd2l0aAogICAtLSAgICAgICAgICAgICAgICAgICAvQUNUSU9OUz1CSU5EXC4gV2hlbiBub3QgY29tYmluZWQgd2l0aCAvQUNUSU9OUz1CSU5ECiAgIC0tICAgICAgICAgICAgICAgICAgIGFsbCB0aGUgdW5pdHMgaW4gdGhlIGNsb3N1cmUgb2YgdGhlIG1haW4gcHJvZ3JhbSBtdXN0CiAgIC0tICAgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBwcmV2aW91c2x5IGNvbXBpbGVkIGFuZCBtdXN0IGJlIHVwIHRvIGRhdGUsCiAgIC0tICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbWFpbiBwcm9ncmFtIG5lZWQgdG8gaGF2ZSBiZWVuIGJvdW5kLgoKICAgU19NYWtlX0FsbCAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9BTExfRklMRVMgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYSI7CiAgIC0tICAgICAgICAvTk9BTExfRklMRVMgKEQpCiAgIC0tICAgICAgICAvQUxMX0ZJTEVTCiAgIC0tCiAgIC0tICAgQ29uc2lkZXIgYWxsIGZpbGVzIGluIHRoZSBtYWtlIHByb2Nlc3MsIGV2ZW4gdGhlIEdOQVQgaW50ZXJuYWwgc3lzdGVtCiAgIC0tICAgZmlsZXMgKGZvciBleGFtcGxlLCB0aGUgcHJlZGVmaW5lZCBBZGEgbGlicmFyeSBmaWxlcykuIEJ5IGRlZmF1bHQsCiAgIC0tICAgR05BVCBNQUtFIGRvZXMgbm90IGNoZWNrIHRoZXNlIGZpbGVzIChob3dldmVyLCBpZiB0aGVyZSBpcyBhbgogICAtLSAgIGluc3RhbGxhdGlvbiBwcm9ibGVtLCBpdCB3aWxsIGJlIGNhdWdodCB3aGVuIEdOQVQgTUFLRSBiaW5kcyB5b3VyCiAgIC0tICAgcHJvZ3JhbSkuIFlvdSBtYXkgaGF2ZSB0byBzcGVjaWZ5IHRoaXMgcXVhbGlmaWVyIGlmIHlvdSBhcmUgd29ya2luZyBvbgogICAtLSAgIEdOQVQgaXRzZWxmLiAgVGhlIHZhc3QgbWFqb3JpdHkgb2YgR05BVCBNQUtFIHVzZXJzIG5ldmVyIG5lZWQgdG8KICAgLS0gICBzcGVjaWZ5IHRoaXMgc3dpdGNoLiAgQWxsIEdOQVQgaW50ZXJuYWwgZmlsZXMgd2l0aCB3aWxsIGJlIGNvbXBpbGVkCiAgIC0tICAgd2l0aCAvU1RZTEVfQ0hFQ0s9R05BVC4KCiAgIFNfTWFrZV9BbGxwcm9qIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQUxMX1BST0pFQ1RTICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVUiOwogICAtLSAgICAgICAgL05PQUxMX1BST0pFQ1RTIChEKQogICAtLSAgICAgICAgL0FMTF9QUk9KRUNUUwogICAtLQogICAtLSAgIEltcGxpZXMgL1VuaXF1ZS4KICAgLS0gICBXaGVuIHVzZWQgd2l0aG91dCBwcm9qZWN0IGZpbGVzLCBpdCBpcyBlcXVpdmFsZW50IHRvIC9VTklRVUUuCiAgIC0tICAgV2hlbiB1c2VkIHdpdGggYSBwcm9qZWN0IGZpbGUgd2l0IG5vIG1haW4gKG5laXRoZXIgb24gdGhlIGNvbW1hbmQKICAgLS0gICBsaW5lIG5vciBpbiB0aGUgYXR0cmlidXRlIE1haW4pIGNoZWNrIGV2ZXJ5IHNvdXJjZSBvZiBldmVyeSBwcm9qZWN0LAogICAtLSAgIHJlY29tcGlsZSBhbGwgc291cmNlcyB0aGF0IGFyZSBub3QgdXAgdG8gZGF0ZSBhbmQgcmVidWlsZCBsaWJyYXJpZXMKICAgLS0gICBpZiBuZWNlc3NhcnkuCgogICBTX01ha2VfQmluZCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0JJTkRFUl9RVUFMSUZJRVJTPT8iICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1iYXJncyBCSU5EIjsKICAgLS0gICAgICAgIC9CSU5ERVJfUVVBTElGSUVSUwogICAtLQogICAtLSAgIEFueSBxdWFsaWZpZXJzIHNwZWNpZmllZCBhZnRlciB0aGlzIHF1YWxpZmllciBvdGhlciB0aGFuCiAgIC0tICAgL0NPTVBJTEVSX1FVQUxJRklFUlMsIC9MSU5LRVJfUVVBTElGSUVSUyBhbmQgL01BS0VfUVVBTElGSUVSUyB3aWxsIGJlCiAgIC0tICAgcGFzc2VkIHRvIGFueSBHTkFUIEJJTkQgY29tbWFuZHMgZ2VuZXJhdGVkIGJ5IEdOQVQgTUFLRS4KCiAgIFNfTWFrZV9CaW5kcHJqIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvQk5EX0xOS19GVUxMX1BST0pFQ1QgIiAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUIiOwogICAtLSAgICAgICAgL0JORF9MTktfRlVMTF9QUk9KRUNUCiAgIC0tCiAgIC0tICAgQmluZCBhbmQgbGluayBhbGwgc291cmNlcyBvZiBhIHByb2plY3QsIHdpdGhvdXQgYW55IGNvbnNpZGVyYXRpb24KICAgLS0gICB0byBhdHRyaWJ1dGUgTWFpbiwgaWYgdGhlcmUgaXMgb25lLiBUaGlzIHF1YWxpZmllciBuZWVkIHRvIGJlCiAgIC0tICAgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSAvUFJPSkVDVF9GSUxFPSBxdWFsaWZpZXIgYW5kIGNhbm5vdAogICAtLSAgIGJlIHVzZWQgd2l0aCBhIG1haW4gc3VicHJvZ3JhbSBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGZvcgogICAtLSAgIGEgbGlicmFyeSBwcm9qZWN0IGZpbGUuIEFzIHRoZSBiaW5kZXIgaXMgaW52b2tlZCB3aXRoIHRoZSBvcHRpb24KICAgLS0gICBtZWFuaW5nICJObyBBZGEgbWFpbiBzdWJwcm9ncmFtIiwgdGhlIHVzZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUKICAgLS0gICBwcm9wZXIgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIHRvIHRoZSBsaW5rZXIuIFRoaXMgcXVhbGlmaWVyIGlzCiAgIC0tICAgbm9ybWFsbHkgdXNlZCB3aGVuIHRoZSBtYWluIHN1YnByb2dyYW0gaXMgaW4gYSBmb3JlaWduIGxhbmd1YWdlCiAgIC0tICAgc3VjaCBhcyBDLgoKICAgU19NYWtlX0NvbXAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9DT01QSUxFUl9RVUFMSUZJRVJTPT8iICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItY2FyZ3MgQ09NUElMRSI7CiAgIC0tICAgICAgICAvQ09NUElMRVJfUVVBTElGSUVSUwogICAtLQogICAtLSAgIEFueSBxdWFsaWZpZXJzIHNwZWNpZmllZCBhZnRlciB0aGlzIHF1YWxpZmllciBvdGhlciB0aGFuCiAgIC0tICAgL0JJTkRFUl9RVUFMSUZJRVJTLCAvTElOS0VSX1FVQUxJRklFUlMgYW5kIC9NQUtFX1FVQUxJRklFUlMgd2lsbCBiZQogICAtLSAgIHBhc3NlZCB0byBhbnkgR05BVCBDT01QSUxFIGNvbW1hbmRzIGdlbmVyYXRlZCBieSBHTkFUIE1BS0UuCgogICBTX01ha2VfQ29uZCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NPTkRJVElPTkFMX1NPVVJDRV9TRUFSQ0g9KiIgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1BKiI7CiAgIC0tICAgICAgICAvQ09ORElUSU9OQUxfU09VUkNFX1NFQVJDSD1kaXIKICAgLS0KICAgLS0gICBFcXVpdmFsZW50IHRvICIvU09VUkNFX1NFQVJDSD1kaXIgL1NLSVBfTUlTU0lORz1kaXIiLgoKICAgU19NYWtlX0NvbnQgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9DT05USU5VRV9PTl9FUlJPUiAiICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItayI7CiAgIC0tICAgICAgICAvTk9DT05USU5VRV9PTl9FUlJPUiAoRCkKICAgLS0gICAgICAgIC9DT05USU5VRV9PTl9FUlJPUgogICAtLQogICAtLSAgIEtlZXAgZ29pbmcuIENvbnRpbnVlIGFzIG11Y2ggYXMgcG9zc2libGUgYWZ0ZXIgYSBjb21waWxhdGlvbiBlcnJvci4KICAgLS0gICBUbyBlYXNlIHRoZSBwcm9ncmFtbWVyJ3MgdGFzayBpbiBjYXNlIG9mIGNvbXBpbGF0aW9uIGVycm9ycywgdGhlIGxpc3QKICAgLS0gICBvZiBzb3VyY2VzIGZvciB3aGljaCB0aGUgY29tcGlsZSBmYWlscyBpcyBnaXZlbiB3aGVuIEdOQVQgTUFLRQogICAtLSAgIHRlcm1pbmF0ZXMuCgogICBTX01ha2VfQ3VycmVudCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NVUlJFTlRfRElSRUNUT1JZICIgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtSS0iOwogICAtLSAgICAgICAgL0NVUlJFTlRfRElSRUNUT1JZIChEKQogICAtLSAgICAgICAgL05PQ1VSUkVOVF9ESVJFQ1RPUlkKICAgLS0KICAgLS0gICBMb29rIGZvciBzb3VyY2UsIGxpYnJhcnkgb3Igb2JqZWN0IGZpbGVzIGluIHRoZSBkZWZhdWx0IGRpcmVjdG9yeS4KCiAgIFNfTWFrZV9EZXAgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvREVQRU5ERU5DSUVTX0xJU1QgIiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLU0iOwogICAtLSAgICAgICAgL05PREVQRU5ERU5DSUVTX0xJU1QgKEQpCiAgIC0tICAgICAgICAvREVQRU5ERU5DSUVTX0xJU1QKICAgLS0KICAgLS0gICBDaGVjayBpZiBhbGwgb2JqZWN0cyBhcmUgdXAgdG8gZGF0ZS4gSWYgdGhleSBhcmUsIG91dHB1dCB0aGUgb2JqZWN0CiAgIC0tICAgZGVwZW5kZW5jZXMgdG8gU1lTJE9VVFBVVCBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgZGlyZWN0bHkgZXhwbG9pdGVkIGluCiAgIC0tICAgYSBVbml4LXN0eWxlIE1ha2VmaWxlLiBCeSBkZWZhdWx0LCBlYWNoIHNvdXJjZSBmaWxlIGlzIHByZWZpeGVkIHdpdGgKICAgLS0gICBpdHMgKHJlbGF0aXZlIG9yIGFic29sdXRlKSBkaXJlY3RvcnkgbmFtZS4gVGhpcyBuYW1lIGlzIHdoYXRldmVyIHlvdQogICAtLSAgIHNwZWNpZmllZCBpbiB0aGUgdmFyaW91cyAvU09VUkNFX1NFQVJDSCBhbmQgL1NFQVJDSCBxdWFsaWZpZXJzLiAgSWYKICAgLS0gICB5b3UgYWxzbyBzcGVmaWN5IHRoZSAvUVVJRVQgcXVhbGlmaWVyLCBvbmx5IHRoZSBzb3VyY2UgZmlsZSBuYW1lcywKICAgLS0gICB3aXRob3V0IHJlbGF0aXZlIHBhdGhzLCBhcmUgb3V0cHV0LiBJZiB5b3UganVzdCBzcGVjaWZ5IHRoZQogICAtLSAgIC9ERVBFTkRFTkNZX0xJU1QgcXVhbGlmaWVyLCBkZXBlbmRlbmNpZXMgb2YgdGhlIEdOQVQgaW50ZXJuYWwgc3lzdGVtCiAgIC0tICAgZmlsZXMgYXJlIG9taXR0ZWQuICBUaGlzIGlzIHR5cGljYWxseSB3aGF0IHlvdSB3YW50LiBJZiB5b3UgYWxzbwogICAtLSAgIHNwZWNpZnkgdGhlIC9BTExfRklMRVMgcXVhbGlmaWVyLCBkZXBlbmRlbmNpZXMgb2YgdGhlIEdOQVQgaW50ZXJuYWwKICAgLS0gICBmaWxlcyBhcmUgYWxzbyBsaXN0ZWQuIE5vdGUgdGhhdCBkZXBlbmRlbmNpZXMgb2YgdGhlIG9iamVjdHMgaW4KICAgLS0gICBleHRlcm5hbCBBZGEgbGlicmFyaWVzIChzZWUgdGhlIC9TS0lQX01JU1NJTkcgcXVhbGlmaWVyKSBhcmUgbmV2ZXIKICAgLS0gICByZXBvcnRlZC4KCiAgIFNfTWFrZV9EaXJvYmogIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRElSRUNUT1JZX09CSkVDVFM9QCIgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLURAIjsKICAgLS0gICAgICAgIC9ESVJFQ1RPUllfT0JKRUNUUz08ZmlsZT4KICAgLS0KICAgLS0gICBQdXQgYWxsIG9iamVjdCBmaWxlcyBhbmQgLkFMSSBmaWxlcyBpbiA8ZmlsZT4uCiAgIC0tICAgVGhpcyBxdWFsaWZpZXIgaXMgbm90IGNvbXBhdGlibGUgd2l0aCAvUFJPSkVDVF9GSUxFLgoKICAgU19NYWtlX0Rvb2JqICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9ET19PQkpFQ1RfQ0hFQ0sgIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbiI7CiAgIC0tICAgICAgICAvTk9ET19PQkpFQ1RfQ0hFQ0sgKEQpCiAgIC0tICAgICAgICAvRE9fT0JKRUNUX0NIRUNLCiAgIC0tCiAgIC0tICAgRG9uJ3QgY29tcGlsZSwgYmluZCwgb3IgbGluay4gT3V0cHV0IGEgc2luZ2xlIGNvbW1hbmQgdGhhdCB3aWxsCiAgIC0tICAgcmVjb21waWxlIGFuIG91dCBvZiBkYXRlIHVuaXQsIGlmIGFueS4gUmVwZWF0ZWQgdXNlIG9mIHRoaXMgb3B0aW9uLAogICAtLSAgIGZvbGxvd2VkIGJ5IGNhcnJ5aW5nIG91dCB0aGUgaW5kaWNhdGVkIGNvbXBpbGF0aW9uLCB3aWxsIGV2ZW50dWFsbHkKICAgLS0gICByZXN1bHQgaW4gcmVjb21waWxpbmcgYWxsIHJlcXVpcmVkIHVuaXRzLgogICAtLQogICAtLSAgIElmIGFueSBBTEkgaXMgbWlzc2luZyBkdXJpbmcgdGhlIHByb2Nlc3MsIEdOQVQgTUFLRSBoYWx0cyBhbmQKICAgLS0gICBkaXNwbGF5cyBhbiBlcnJvciBtZXNzYWdlLgoKICAgU19NYWtlX0V4ZWN1dCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9FWEVDVVRBQkxFPUAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItb0AiOwogICAtLSAgICAgICAgL0VYRUNVVEFCTEU9ZXhlYy1uYW1lCiAgIC0tCiAgIC0tICAgVGhlIG5hbWUgb2YgdGhlIGZpbmFsIGV4ZWN1dGFibGUgcHJvZ3JhbSB3aWxsIGJlICdleGVjX25hbWUnLiBJZiB0aGlzCiAgIC0tICAgcXVhbGlmaWVyIGlzIG9taXR0ZWQgdGhlIGRlZmF1bHQgbmFtZSBmb3IgdGhlIGV4ZWN1dGFibGUgd2lsbCBiZSB0aGUKICAgLS0gICBuYW1lIG9mIHRoZSBpbnB1dCBmaWxlIHdpdGggYW4gRVhFIGZpbGV0eXBlLiAgWW91IG1heSBwcmVmaXgKICAgLS0gICAnZXhlY19uYW1lJyB3aXRoIGEgcmVsYXRpdmUgb3IgYWJzb2x1dGUgZGlyZWN0b3J5IHBhdGguCgogICBTX01ha2VfRXh0ICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0VYVEVSTkFMX1JFRkVSRU5DRT0iICYgJyInICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1YIiAmICciJzsKICAgLS0gICAgICAgIC9FWFRFUk5BTF9SRUZFUkVOQ0U9Im5hbWU9dmFsIgogICAtLQogICAtLSAgIFNwZWNpZmllcyBhbiBleHRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIHByb2plY3QgbWFuYWdlci4gVXNlZnVsIG9ubHkgaWYKICAgLS0gICAvUFJPSkVDVF9GSUxFIGlzIHVzZWQuCiAgIC0tCiAgIC0tICAgRXhhbXBsZToKICAgLS0gICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJERUJVRz1UUlVFIgoKICAgU19NYWtlX0ZvcmNlICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9GT1JDRV9DT01QSUxFICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZiI7CiAgIC0tICAgICAgICAvTk9GT1JDRV9DT01QSUxFIChEKQogICAtLSAgICAgICAgL0ZPUkNFX0NPTVBJTEUKICAgLS0KICAgLS0gICBGb3JjZSByZWNvbXBpbGF0aW9ucy4gUmVjb21waWxlIGFsbCBzb3VyY2VzLCBldmVuIHRob3VnaCBzb21lIG9iamVjdAogICAtLSAgIGZpbGVzIG1heSBiZSB1cCB0byBkYXRlLCBidXQgZG9uJ3QgcmVjb21waWxlIHByZWRlZmluZWQgb3IgR05BVAogICAtLSAgIGludGVybmFsIGZpbGVzIHVubGVzcyB0aGUgL0FMTF9GSUxFUyBxdWFsZmllciBpcyBhbHNvIHNwZWNpZmllZC4KCiAgIFNfTWFrZV9GdWxsICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRlVMTF9QQVRIX0lOX0JSSUVGX01FU1NBR0VTICIgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUYiOwogICAtLSAgICAgICAgL05PRlVMTF9QQVRIX0lOX0JSSUVGX01FU1NBR0VTIChEKQogICAtLSAgICAgICAgL0ZVTExfUEFUSF9JTl9CUklFRl9NRVNTQUdFUwogICAtLQogICAtLSAgIFdoZW4gdXNpbmcgcHJvamVjdCBmaWxlcywgaWYgc29tZSBlcnJvcnMgb3Igd2FybmluZ3MgYXJlIGRldGVjdGVkCiAgIC0tICAgZHVyaW5nIHBhcnNpbmcgYW5kIHZlcmJvc2UgbW9kZSBpcyBub3QgaW4gZWZmZWN0IChubyB1c2Ugb2YgcXVhbGlmaWVyCiAgIC0tICAgL1ZFUkJPU0UpLCB0aGVuIGVycm9yIGxpbmVzIHN0YXJ0IHdpdGggdGhlIGZ1bGwgcGF0aCBuYW1lIG9mIHRoZQogICAtLSAgIHByb2plY3QgZmlsZSwgcmF0aGVyIHRoYW4gaXRzIHNpbXBsZSBmaWxlIG5hbWUuCgogICBTX01ha2VfSW5wbGFjZSA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0lOX1BMQUNFICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1pIjsKICAgLS0gICAgICAgIC9OT0lOX1BMQUNFIChEKQogICAtLSAgICAgICAgL0lOX1BMQUNFCiAgIC0tCiAgIC0tICAgSW4gbm9ybWFsIG1vZGUsIEdOQVQgTUFLRSBjb21waWxlcyBhbGwgb2JqZWN0IGZpbGVzIGFuZCBBTEkgZmlsZXMKICAgLS0gICBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gSWYgdGhlIC9JTl9QTEFDRSBzd2l0Y2ggaXMgdXNlZCwKICAgLS0gICB0aGVuIGluc3RlYWQgb2JqZWN0IGZpbGVzIGFuZCBBTEkgZmlsZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGFyZSBvdmVyLQogICAtLSAgIHdyaXR0ZW4gaW4gcGxhY2UuIFRoaXMgbWVhbnMgdGhhdCBvbmNlIGEgbGFyZ2UgcHJvamVjdCBpcyBvcmdhbml6ZWQKICAgLS0gICBpbnRvIHNlcGFyYXRlIGRpcmVjdG9yaWVzIGluIHRoZSBkZXNpcmVkIG1hbm5lciwgdGhlbiBHTkFUIE1BS0Ugd2lsbAogICAtLSAgIGF1dG9tYXRpY2FsbHkgbWFpbnRhaW4gYW5kIHVwZGF0ZSB0aGlzIG9yZ2FuaXphdGlvbi4gSWYgbm8gQUxJIGZpbGVzCiAgIC0tICAgYXJlIGZvdW5kIG9uIHRoZSBBZGEgb2JqZWN0IHBhdGgsIHRoZSBuZXcgb2JqZWN0IGFuZCBBTEkgZmlsZXMgYXJlCiAgIC0tICAgY3JlYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBiZWluZyBjb21waWxlZC4KCiAgIFNfTWFrZV9JbmRleCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU09VUkNFX0lOREVYPSMiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWVJIyI7CiAgIC0tICAgICAgICAvU09VUkNFX0lOREVYPW5ubgogICAtLQogICAtLSAgIFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIHVuaXRzIGluIHRoZSBzb3VyY2UgZmlsZQogICAtLSAgIEJ5IGRlZmF1bHQsIHNvdXJjZSBmaWxlcyBhcmUgbW9uby11bml0IGFuZCB0aGVyZSBpcyBubyBpbmRleAogICAtLSAgIFdoZW4gL1NPVVJDRV9JTkRFWD1ubm4gaXMgc3BlY2lmaWVkLCBvbmx5IG9uZSBtYWluIG1heSBiZSBzcGVjaWZpZWQKICAgLS0gICBvbiB0aGUgY29tbWFuZCBsaW5lLgoKICAgU19NYWtlX0xpYnJhcnkgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9MSUJSQVJZX1NFQVJDSD0qIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItTCoiOwogICAtLSAgICAgICAgL0xJQlJBUllfU0VBUkNIPShkaXJlY3RvcnlbLC4uLl0pCiAgIC0tCiAgIC0tICAgQWRkIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgaW4gd2hpY2ggdGhlCiAgIC0tICAgbGlua2VyIHdpbGwgc2VhcmNoIGZvciBsaWJyYXJpZXMuCgogICBTX01ha2VfTGluayAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0xJTktFUl9RVUFMSUZJRVJTPT8iICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1sYXJncyBMSU5LIjsKICAgLS0gICAgICAgIC9MSU5LRVJfUVVBTElGSUVSUwogICAtLQogICAtLSAgIEFueSBxdWFsaWZpZXJzIHNwZWNpZmllZCBhZnRlciB0aGlzIHF1YWxpZmllciBvdGhlciB0aGFuCiAgIC0tICAgL0NPTVBJTEVSX1FVQUxJRklFUlMsIC9CSU5ERVJfUVVBTElGSUVSUyBhbmQgL01BS0VfUVVBTElGSUVSUyB3aWxsIGJlCiAgIC0tICAgcGFzc2VkIHRvIGFueSBHTkFUIExJTksgY29tbWFuZHMgZ2VuZXJhdGVkIGJ5IEdOQVQgTElOSy4KCiAgIFNfTWFrZV9NYWtlICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTUFLRV9RVUFMSUZJRVJTPT8iICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW1hcmdzIE1BS0UiOwogICAtLSAgICAgICAgL01BS0VfUVVBTElGSUVSUwogICAtLQogICAtLSAgIEFueSBxdWFsaWZpZXJzIHNwZWNpZmllZCBhZnRlciB0aGlzIHF1YWxpZmllciBvdGhlciB0aGFuCiAgIC0tICAgL0NPTVBJTEVSX1FVQUxJRklFUlMsIC9CSU5ERVJfUVVBTElGSUVSUyBhbmQgL0xJTktFUl9RVUFMSUZJRVJTCiAgIC0tICAgYXJlIGZvciB0aGUgYmVuZWZpdCBvZiBHTkFUIE1BS0UgaXRzZWxmLgoKICAgU19NYWtlX01hcHBpbmcgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9NQVBQSU5HICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQyI7CiAgIC0tICAgICAgICAvTk9NQVBQSU5HIChEKQogICAtLSAgICAgICAgL01BUFBJTkcKICAgLS0KICAgLS0gICBVc2UgYSBtYXBwaW5nIGZpbGUuICBBIG1hcHBpbmcgZmlsZSBpcyBhIHdheSB0byBjb21tdW5pY2F0ZSB0byB0aGUKICAgLS0gICBjb21waWxlciB0d28gbWFwcGluZ3M6IGZyb20gdW5pdCBuYW1lcyB0byBmaWxlIG5hbWVzICh3aXRob3V0IGFueQogICAtLSAgIGRpcmVjdG9yeSBpbmZvcm1hdGlvbikgYW5kIGZyb20gZmlsZSBuYW1lcyB0byBwYXRoIG5hbWVzICh3aXRoIGZ1bGwKICAgLS0gICBkaXJlY3RvcnkgaW5mb3JtYXRpb24pLiBUaGVzZSBtYXBwaW5ncyBhcmUgdXNlZCBieSB0aGUgY29tcGlsZXIgdG8KICAgLS0gICBzaG9ydC1jaXJjdWl0IHRoZSBwYXRoIHNlYXJjaC4gV2hlbiBHTkFUIE1BS0UgaXMgaW52b2tlZCB3aXRoIHRoaXMKICAgLS0gICBxdWFsaWZpZXIsIGl0IHdpbGwgY3JlYXRlIGEgbWFwcGluZyBmaWxlLCBpbml0aWFsbHkgcG9wdWxhdGVkIGJ5IHRoZQogICAtLSAgIHByb2plY3QgbWFuYWdlciwgaWYgL1BST0pFQ1RfRmlsZT0gaXMgdXNlZCwgb3RoZXJ3aXNlIGluaXRpYWxseSBlbXB0eS4KICAgLS0gICBFYWNoIGludm9jYXRpb24gb2YgdGhlIGNvbXBpbGVyIHdpbGwgYWRkIHRoZSBuZXdseSBhY2Nlc3NlZCBzb3VyY2VzIHRvCiAgIC0tICAgdGhlIG1hcHBpbmcgZmlsZS4gVGhpcyB3aWxsIGltcHJvdmUgdGhlIHNvdXJjZSBzZWFyY2ggZHVyaW5nIHRoZSBuZXh0CiAgIC0tICAgaW52b2NhdGlvbnMgb2YgdGhlIGNvbXBpbGVyCgogICBTX01ha2VfTWVzcyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL01FU1NBR0VTX1BST0pFQ1RfRklMRT0iICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFRkFVTFQgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNRURJVU0gIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDEgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSElHSCAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAyIjsKICAgLS0gICAgICAgIC9NRVNTQUdFU19QUk9KRUNUX0ZJTEVbPW1lc3NhZ2VzLW9wdGlvbl0KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlICJ2ZXJib3NpdHkiIG9mIHRoZSBwYXJzaW5nIG9mIHByb2plY3QgZmlsZXMuCiAgIC0tICAgbWVzc2FnZXMtb3B0aW9uIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgICBERUZBVUxUIChEKSAgTm8gbWVzc2FnZXMgYXJlIG91dHB1dCBpZiB0aGVyZSBpcyBubyBlcnJvciBvciB3YXJuaW5nLgogICAtLQogICAtLSAgICAgIE1FRElVTSAgICAgICBBIHNtYWxsIG51bWJlciBvZiBtZXNzYWdlcyBhcmUgb3V0cHV0LgogICAtLQogICAtLSAgICAgIEhJR0ggICAgICAgICBBIGdyZWF0IG51bWJlciBvZiBtZXNzYWdlcyBhcmUgb3V0cHV0LCBtb3N0IG9mIHRoZW0gbm90CiAgIC0tICAgICAgICAgICAgICAgICAgIGJlaW5nIHVzZWZ1bCBmb3IgdGhlIHVzZXIuCgogICBTX01ha2VfTWluaW1hbCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL01JTklNQUxfUkVDT01QSUxBVElPTiAiICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1tIjsKICAgLS0gICAgICAgIC9OT01JTklNQUxfUkVDT01QSUxBVElPTiAoRCkKICAgLS0gICAgICAgIC9NSU5JTUFMX1JFQ09NUElMQVRJT04KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhhdCB0aGUgbWluaW11bSBuZWNlc3NhcnkgYW1vdW50IG9mIHJlY29tcGlsYXRpb24KICAgLS0gICBiZSBwZXJmb3JtZWQuIEluIHRoaXMgbW9kZSBHTkFUIE1BS0UgaWdub3JlcyB0aW1lIHN0YW1wIGRpZmZlcmVuY2VzCiAgIC0tICAgd2hlbiB0aGUgb25seSBtb2RpZmljYXRpb25zIHRvIGEgc291cmNlIGZpbGUgY29uc2lzdCBpbgogICAtLSAgIGFkZGluZy9yZW1vdmluZyBjb21tZW50cywgZW1wdHkgbGluZXMsIHNwYWNlcyBvciB0YWJzLgoKICAgU19NYWtlX05vbGluayAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT0xJTksgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyI7CiAgIC0tICAgICAgICAvTk9MSU5LCiAgIC0tCiAgIC0tICAgQ29tcGlsZSBvbmx5LiBEbyBub3QgcGVyZm9ybSBiaW5kaW5nIGFuZCBsaW5raW5nLiBJZiB0aGUgcm9vdCB1bml0IGlzCiAgIC0tICAgbm90IGEgbWFpbiB1bml0LCB0aGlzIGlzIHRoZSBkZWZhdWx0LiAgT3RoZXJ3aXNlIEdOQVQgTUFLRSB3aWxsCiAgIC0tICAgYXR0ZW1wdCBiaW5kaW5nIGFuZCBsaW5raW5nIHVubGVzcyBhbGwgb2JqZWN0cyBhcmUgdXAgdG8gZGF0ZSBhbmQgdGhlCiAgIC0tICAgZXhlY3V0YWJsZSBpcyBtb3JlIHJlY2VudCB0aGFuIHRoZSBvYmplY3RzLgogICAtLSAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byAvQUNUSU9OUz1DT01QSUxFCgogICBTX01ha2VfTm9tYWluICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PTUFJTiAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi16IjsKICAgLS0gICAgICAgIC9OT01BSU4KICAgLS0KICAgLS0gICBObyBtYWluIHN1YnByb2dyYW0uIEJpbmQgYW5kIGxpbmsgdGhlIHByb2dyYW0gZXZlbiBpZiB0aGUgdW5pdCBuYW1lCiAgIC0tICAgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBpcyBhIHBhY2thZ2UgbmFtZS4gVGhlIHJlc3VsdGluZyBleGVjdXRhYmxlCiAgIC0tICAgd2lsbCBleGVjdXRlIHRoZSBlbGFib3JhdGlvbiByb3V0aW5lcyBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIGNsb3N1cmUsCiAgIC0tICAgdGhlbiB0aGUgZmluYWxpemF0aW9uIHJvdXRpbmVzLgoKICAgU19NYWtlX05vbnBybyAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT05fUFJPSkVDVF9VTklUX0NPTVBJTEFUSU9OICIgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIteCI7CiAgIC0tICAgICAgICAvTk9OX1BST0pFQ1RfVU5JVF9DT01QSUxBVElPTgogICAtLQogICAtLSAgICBOb3JtYWxseSwgd2hlbiB1c2luZyBwcm9qZWN0IGZpbGVzLCBhIHVuaXQgdGhhdCBpcyBub3QgcGFydCBvZiBhbnkKICAgLS0gICAgcHJvamVjdCBmaWxlLCBjYW5ub3QgYmUgY29tcGlsZS4gVGhlc2UgdW5pdHMgbWF5IGJlIGNvbXBpbGUsIHdoZW4KICAgLS0gICAgbmVlZGVkLCBpZiB0aGlzIHF1YWxpZmllciBpcyBzcGVjaWZpZWQuCgogICBTX01ha2VfTm9zdGluYyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PU1REX0lOQ0xVREVTICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1ub3N0ZGluYyI7CiAgIC0tICAgICAgICAvTk9TVERfSU5DTFVERVMKICAgLS0KICAgLS0gICAgRG8gbm90IGxvb2sgZm9yIHNvdXJjZXMgdGhlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBkaXJlY3RvcnkuCgogICBTX01ha2VfTm9zdGxpYiA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PU1REX0xJQlJBUklFUyAiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1ub3N0ZGxpYiI7CiAgIC0tICAgICAgICAvTk9TVERfTElCUkFSSUVTCiAgIC0tCiAgIC0tICAgIERvIG5vdCBsb29rIGZvciBsaWJyYXJ5IGZpbGVzIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBkaXJlY3RvcnkuCgogICBTX01ha2VfT2JqZWN0ICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL09CSkVDVF9TRUFSQ0g9KiIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1hTyoiOwogICAtLSAgICAgICAgL09CSkVDVF9TRUFSQ0g9KGRpcmVjdG9yeVssLi4uXSkKICAgLS0KICAgLS0gICBXaGVuIGxvb2tpbmcgZm9yIGxpYnJhcnkgYW5kIG9iamVjdCBmaWxlcyBsb29rIGFsc28gaW4gdGhlIHNwZWNpZmllZAogICAtLSAgIGRpcmVjdG9yaWVzLgoKICAgU19NYWtlX1Byb2MgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9QUk9DRVNTRVM9IyIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItaiMiOwogICAtLSAgICAgICAgL05PUFJPQ0VTU0VTIChEKQogICAtLSAgICAgICAgL1BST0NFU1NFUz1OTk4KICAgLS0KICAgLS0gICBVc2UgTk5OIHByb2Nlc3NlcyB0byBjYXJyeSBvdXQgdGhlIChyZSljb21wbGF0aW9ucy4gSWYgeW91IGhhdmUgYQogICAtLSAgIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUsIGNvbXBpbGF0aW9ucyB3aWxsIG9jY3VyIGluIHBhcmFsbGVsLiAgSW4gdGhlCiAgIC0tICAgZXZlbnQgb2YgY29tcGlsYXRpb24gZXJyb3JzLCBtZXNzYWdlcyBmcm9tIHZhcmlvdXMgY29tcGlsYXRpb25zIG1pZ2h0CiAgIC0tICAgZ2V0IGludGVyc3BlcnNlZCAoYnV0IEdOQVQgTUFLRSB3aWxsIGdpdmUgeW91IHRoZSBmdWxsIG9yZGVyZWQgbGlzdCBvZgogICAtLSAgIGZhaWxpbmcgY29tcGlsZXMgYXQgdGhlIGVuZCkuIFRoaXMgY2FuIGF0IHRpbWVzIGJlIGFubm95aW5nLiAgVG8gZ2V0IGEKICAgLS0gICBjbGVhbiBsaXN0IG9mIGVycm9yIG1lc3NhZ2VzIGRvbid0IHVzZSB0aGlzIHF1YWxpZmllci4KCiAgIFNfTWFrZV9Ob2pvYnMgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9QUk9DRVNTRVMgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWoxIjsKICAgLS0gIE5PRE9DIChzZWUgL1BST0NFU1MpCgogICBTX01ha2VfUHJvamVjdCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgd2lsbCBiZSBwYXJzZWQgYmVmb3JlIGFueSBvdGhlciBwcm9jZXNzaW5nIHRvCiAgIC0tICAgc2V0IHRoZSBidWlsZGluZyBlbnZpcm9ubWVudC4KCiAgIFNfTWFrZV9RdWlldCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUVVJRVQgIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXEiOwogICAtLSAgICAgICAgL05PUVVJRVQgKEQpCiAgIC0tICAgICAgICAvUVVJRVQKICAgLS0KICAgLS0gICBXaGVuIHRoaXMgcXVhbGlmaWVycyBpcyBzcGVjaWZpZWQsIHRoZSBjb21tYW5kcyBjYXJyaWVkIG91dCBieSBHTkFUCiAgIC0tICAgTUFLRSBhcmUgbm90IGRpc3BsYXllZC4KCiAgIFNfTWFrZV9SZWFzb24gIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUkVBU09OUyAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXYiOwogICAtLSAgICAgICAgL05PUkVBU09OUyAoRCkKICAgLS0gICAgICAgIC9SRUFTT05TCiAgIC0tCiAgIC0tICAgRGlzcGxheXMgdGhlIHJlYXNvbiBmb3IgYWxsIHJlY29tcGlsYXRpb25zIEdOQVQgTUFLRSBkZWNpZGVzIGFyZQogICAtLSAgIG5lY2Vzc2FyeS4KCiAgIFNfTWFrZV9SVFMgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUlVOVElNRV9TWVNURU09fCIgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1SVFM9fCI7CiAgIC0tICAgICAgICAvUlVOVElNRV9TWVNURU09eHh4CiAgIC0tCiAgIC0tICAgIEJ1aWxkIGFnYWluc3QgYW4gYWx0ZXJuYXRlIHJ1bnRpbWUgc3lzdGVtIG5hbWVkIHh4eCBvciBSVFMteHh4LgoKICAgU19NYWtlX1NlYXJjaCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9TRUFSQ0g9KiIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItSSoiOwogICAtLSAgICAgICAgL1NFQVJDSD0oZGlyZWN0b3J5WywuLi5dKQogICAtLQogICAtLSAgIFNlYXJjaCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yaWVzIGZvciBib3RoIHNvdXJjZSBhbmQgb2JqZWN0IGZpbGVzLgoKICAgU19NYWtlX1NraXAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9TS0lQX01JU1NJTkc9KiIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYUwqIjsKICAgLS0gICAgICAgIC9TS0lQX01JU1NJTkc9KGRpcmVjdG9yeVssLi4uXSkKICAgLS0KICAgLS0gICBTa2lwIG1pc3NpbmcgbGlicmFyeSBzb3VyY2VzIGlmIEFMSSBpbiAnZGlyZWN0b3J5Jy4KCiAgIFNfTWFrZV9Tb3VyY2UgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU09VUkNFX1NFQVJDSD0qIiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWFJKiI7CiAgIC0tICAgICAgICAvU09VUkNFX1NFQVJDSD0oZGlyZWN0b3J5WywuLi5dKQogICAtLQogICAtLSAgIFdoZW4gbG9va2luZyBmb3Igc291cmNlIGZpbGVzIGFsc28gbG9vayBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yaWVzLgoKICAgU19NYWtlX1N3aXRjaCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9TV0lUQ0hfQ0hFQ0sgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItcyI7CiAgIC0tICAgICAgICAvTk9TV0lUQ0hfQ0hFQ0sgKEQpCiAgIC0tICAgICAgICAvU1dJVENIX0NIRUNLCiAgIC0tCiAgIC0tICAgUmVjb21waWxlIGlmIGNvbXBpbGVyIHN3aXRjaGVzIGhhdmUgY2hhbmdlZCBzaW5jZSBsYXN0IGNvbXBpbGF0aW9uLgogICAtLSAgIEFsbCBjb21waWxlciBzd2l0Y2hlcyBidXQgLUkgYW5kIC1vIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gdGhlCiAgIC0tICAgZm9sbG93aW5nIHdheTogb3JkZXJzIGJldHdlZW4gZGlmZmVyZW50ICJmaXJzdCBsZXR0ZXIiIHN3aXRjaGVzIGFyZQogICAtLSAgIGlnbm9yZWQsIGJ1dCBvcmRlcnMgYmV0d2VlbiBzYW1lIHN3aXRjaGVzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQuCiAgIC0tICAgRm9yIGV4YW1wbGUsIC1PIC1PMiBpcyBkaWZmZXJlbnQgdGhhbiAtTzIgLU8sIGJ1dCAtZyAtTyBpcyBlcXVpdmFsZW50CiAgIC0tICAgdG8gLU8gLWcuCgogICBTX01ha2VfVW5pcXVlICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1VOSVFVRSAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi11IjsKICAgLS0gICAgICAgIC9OT1VOSVFVRSAoRCkKICAgLS0gICAgICAgIC9VTklRVUUKICAgLS0KICAgLS0gIFJlY29tcGlsZSBhdCBtb3N0IHRoZSBtYWluIGZpbGUuIEl0IGltcGxpZXMgL0FDVElPTlM9Q09NUElMRS4KICAgLS0gIENvbWJpbmVkIHdpdGggL0ZPUkNFX0NPTVBJTEUsIGl0IGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyB0aGUgY29tcGlsZXIKICAgLS0gIGRpcmVjdGx5LgoKICAgU19NYWtlX1VzZV9NYXAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9VU0VfTUFQUElOR19GaWxlPUAiICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQz1AIjsKICAgLS0gICAgICAgIC9VU0VfTUFQUElOR19GSUxFPWZpbGVfbmFtZQogICAtLQogICAtLSAgIFVzZSBhIHNwZWNpZmljIG1hcHBpbmcgZmlsZS4gVGhlIGZpbGUgJ2ZpbGVfbmFtZScsIHNwZWNpZmllZCBhcyBhIHBhdGgKICAgLS0gICBuYW1lIChhYnNvbHV0ZSBvciByZWxhdGl2ZSkgYnkgdGhpcyBxdWFsaWZpZXIsIHNob3VsZCBhbHJlYWR5IGV4aXN0LAogICAtLSAgIG90aGVyd2lzZSB0aGUgcXVhbGlmaWVyIGlzIGluZWZmZWN0aXZlLiBUaGUgc3BlY2lmaWVkIG1hcHBpbmcgZmlsZQogICAtLSAgIHdpbGwgYmUgY29tbXVuaWNhdGVkIHRvIHRoZSBjb21waWxlci4gVGhpcyBzd2l0Y2ggaXMgbm90IGNvbXBhdGlibGUKICAgLS0gICB3aXRoIGEgcHJvamVjdCBmaWxlICgvUFJPSkVDVF9GSUxFPSkgb3Igd2l0aCBtdWx0aXBsZSBjb21waWxpbmcKICAgLS0gICBwcm9jZXNzZXMgKC9QUk9DRVNTRVM9bm5uLCB3aGVuIG5ubiBpcyBncmVhdGVyIHRoYW4gMSkuCgogICBTX01ha2VfVmVyYm9zZSA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1ZFUkJPU0UgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12IjsKICAgLS0gICAgICAgIC9OT1ZFUkJPU0UgKEQpCiAgIC0tICAgICAgICAvVkVSQk9TRQogICAtLQogICAtLSAgIERpc3BsYXlzIHRoZSByZWFzb24gZm9yIGFsbCByZWNvbXBpbGF0aW9ucyBHTkFUIE1BS0UgZGVjaWRlcyBhcmUKICAgLS0gICBuZWNlc3NhcnkuCgogICBNYWtlX1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyA6PQogICAgIChTX01ha2VfQWN0aW9ucyAnQWNjZXNzLAogICAgICBTX01ha2VfQWxsICAgICAnQWNjZXNzLAogICAgICBTX01ha2VfQWxscHJvaiAnQWNjZXNzLAogICAgICBTX01ha2VfQmluZCAgICAnQWNjZXNzLAogICAgICBTX01ha2VfQ29tcCAgICAnQWNjZXNzLAogICAgICBTX01ha2VfQ29uZCAgICAnQWNjZXNzLAogICAgICBTX01ha2VfQ29udCAgICAnQWNjZXNzLAogICAgICBTX01ha2VfQ3VycmVudCAnQWNjZXNzLAogICAgICBTX01ha2VfRGVwICAgICAnQWNjZXNzLAogICAgICBTX01ha2VfRGlyb2JqICAnQWNjZXNzLAogICAgICBTX01ha2VfRG9vYmogICAnQWNjZXNzLAogICAgICBTX01ha2VfRXhlY3V0ICAnQWNjZXNzLAogICAgICBTX01ha2VfRXh0ICAgICAnQWNjZXNzLAogICAgICBTX01ha2VfRm9yY2UgICAnQWNjZXNzLAogICAgICBTX01ha2VfRnVsbCAgICAnQWNjZXNzLAogICAgICBTX01ha2VfSW5wbGFjZSAnQWNjZXNzLAogICAgICBTX01ha2VfSW5kZXggICAnQWNjZXNzLAogICAgICBTX01ha2VfTGlicmFyeSAnQWNjZXNzLAogICAgICBTX01ha2VfTGluayAgICAnQWNjZXNzLAogICAgICBTX01ha2VfTWFrZSAgICAnQWNjZXNzLAogICAgICBTX01ha2VfTWFwcGluZyAnQWNjZXNzLAogICAgICBTX01ha2VfTWVzcyAgICAnQWNjZXNzLAogICAgICBTX01ha2VfTWluaW1hbCAnQWNjZXNzLAogICAgICBTX01ha2VfTm9saW5rICAnQWNjZXNzLAogICAgICBTX01ha2VfTm9tYWluICAnQWNjZXNzLAogICAgICBTX01ha2VfTm9ucHJvICAnQWNjZXNzLAogICAgICBTX01ha2VfTm9zdGluYyAnQWNjZXNzLAogICAgICBTX01ha2VfTm9zdGxpYiAnQWNjZXNzLAogICAgICBTX01ha2VfT2JqZWN0ICAnQWNjZXNzLAogICAgICBTX01ha2VfUHJvYyAgICAnQWNjZXNzLAogICAgICBTX01ha2VfTm9qb2JzICAnQWNjZXNzLAogICAgICBTX01ha2VfUHJvamVjdCAnQWNjZXNzLAogICAgICBTX01ha2VfUXVpZXQgICAnQWNjZXNzLAogICAgICBTX01ha2VfUmVhc29uICAnQWNjZXNzLAogICAgICBTX01ha2VfUlRTICAgICAnQWNjZXNzLAogICAgICBTX01ha2VfU2VhcmNoICAnQWNjZXNzLAogICAgICBTX01ha2VfU2tpcCAgICAnQWNjZXNzLAogICAgICBTX01ha2VfU291cmNlICAnQWNjZXNzLAogICAgICBTX01ha2VfU3dpdGNoICAnQWNjZXNzLAogICAgICBTX01ha2VfVW5pcXVlICAnQWNjZXNzLAogICAgICBTX01ha2VfVXNlX01hcCAnQWNjZXNzLAogICAgICBTX01ha2VfVmVyYm9zZSAnQWNjZXNzKTsKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTd2l0Y2hlcyBmb3IgR05BVCBNRVRSSUMgLS0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBTX01ldHJpY19EZWJ1ZyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0RFQlVHX09VVFBVVCAiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWR2IjsKICAgLS0gICAgICAvREVCVUdfT1VUUFVUCiAgIC0tCiAgIC0tICAgR2VuZXJhdGUgdGhlIGRlYnVnIGluZm9ybWF0aW9uCgogICBTX01ldHJpY19EaXJlY3QgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0RJUkVDVE9SWT1AIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWQ9QCI7CiAgIC0tICAgICAgL0RJUkVDVE9SWT1wYXRobmFtZQogICAtLQogICAtLSAgIFB1dCB0aGUgZmlsZXMgd2l0aCBkZXRhaWxlZCBtZXRyaWMgaW5mb3JtYXRpb24gaW50byB0aGUgc3BlY2lmaWVkCiAgIC0tICAgZGlyZWN0b3J5CgogICBTX01ldHJpY19FbGVtZW50IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRUxFTUVOVF9NRVRSSUNTPSIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUxMICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtZWQsIS1lcywhLWVubCwhLWVwcywiICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtZWFzLCEtZXB0LCEtZWF0LCEtZW51LCIgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtZWMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVDTEFSQVRJT05fVE9UQUwgIiAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lZCAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1RBVEVNRU5UX1RPVEFMICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lcyAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTE9PUF9ORVNUSU5HX01BWCAiICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lbmwgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5UX1NVQlBST0dSQU1TICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lcHMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1VCUFJPR1JBTVNfQUxMICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lYXMgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5UX1RZUEVTICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lcHQgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVFlQRVNfQUxMICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lYXQgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUFJPR1JBTV9ORVNUSU5HX01BWCAiICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lbnUgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ09OU1RSVUNUX05FU1RJTkdfTUFYICIgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1lYyI7CiAgIC0tICAgICAgIC9FTEVNRU5UX01FVFJJQ1M9KG9wdGlvbiwgb3B0aW9uIC4uLikKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIGVsZW1lbnQgbWV0cmljcyB0byBiZSBjb21wdXRlZCAoaWYgbm90IHNldCwgYWxsIHRoZQogICAtLSAgIGVsZW1lbnQgbWV0cmljcyBhcmUgc2V0IG9uLCBvdGhlcndpc2Ugb25seSBzcGVjaWZpZWQgbWV0cmljcyBhcmUKICAgLS0gICBjb21wdXRlZCBhbmQgcmVwb3J0ZWQpCiAgIC0tCiAgIC0tICAgb3B0aW9uIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgIEFMTCAoRCkgICAgICAgICAgICAgICBBbGwgdGhlIGVsZW1lbnQgbWV0cmljcyBhcmUgY29tcHV0ZWQKICAgLS0gICAgIERFQ0xBUkFUSU9OX1RPVEFMICAgICBDb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgZGVjbGFyYXRpb25zCiAgIC0tICAgICBTVEFURU1FTlRfVE9UQUwgICAgICAgQ29tcHV0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHN0YXRlbWVudHMKICAgLS0gICAgIExPT1BfTkVTVElOR19NQVggICAgICBDb21wdXRlIHRoZSBtYXhpbWFsIGxvb3AgbmVzdGluZyBsZXZlbAogICAtLSAgICAgSU5UX1NVQlBST0dSQU1TICAgICAgIENvbXB1dGUgdGhlIG51bWJlciBvZiBpbnRlcmZhY2Ugc3VicHJvZ3JhbXMKICAgLS0gICAgIFNVQlBST0dSQU1TX0FMTCAgICAgICBDb21wdXRlIHRoZSBudW1iZXIgb2YgYWxsIHRoZSBzdWJwcm9ncmFtcwogICAtLSAgICAgSU5UX1RZUEVTICAgICAgICAgICAgIENvbXB1dGUgdGhlIG51bWJlciBvZiBpbnRlcmZhY2UgdHlwZXMKICAgLS0gICAgIFRZUEVTX0FMTCAgICAgICAgICAgICBDb21wdXRlIHRoZSBudW1iZXIgb2YgYWxsIHRoZSB0eXBlcwogICAtLSAgICAgUFJPR1JBTV9ORVNUSU5HX01BWCAgIENvbXB1dGUgdGhlIG1heGltYWwgcHJvZ3JhbSB1bml0IG5lc3RpbmcgbGV2ZWwKICAgLS0KICAgLS0gICBBbGwgY29tYmluYXRpb25zIG9mIGVsZW1lbnQgbWV0cmljcyBvcHRpb25zIGFyZSBhbGxvd2VkLgoKICAgU19NZXRyaWNfRXh0ICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0VYVEVSTkFMX1JFRkVSRU5DRT0iICYgJyInICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1YIiAmICciJzsKICAgLS0gICAgICAgL0VYVEVSTkFMX1JFRkVSRU5DRT0ibmFtZT12YWwiCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIGFuIGV4dGVybmFsIHJlZmVyZW5jZSB0byB0aGUgcHJvamVjdCBtYW5hZ2VyLiBVc2VmdWwgb25seSBpZgogICAtLSAgIC9QUk9KRUNUX0ZJTEUgaXMgdXNlZC4KICAgLS0KICAgLS0gICBFeGFtcGxlOgogICAtLSAgICAgIC9FWFRFUk5BTF9SRUZFUkVOQ0U9IkRFQlVHPVRSVUUiCgogICBTX01ldHJpY19GaWxlcyAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRklMRVM9QCIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1maWxlcz1AIjsKICAgLS0gICAgICAvRklMRVM9ZmlsZW5hbWUKICAgLS0KICAgLS0gICBUYWtlIGFzIGFyZ3VtZW50cyB0aGUgZmlsZXMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSBzcGVjaWZpZWQKICAgLS0gICB0ZXh0IGZpbGUuCgogICBTX01ldHJpY19Gb3JtYXQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRk9STUFUX09VVFBVVD0iICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVGQVVMVCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEteCwhLW50LCEtc2ZuICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWE1MICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi14ICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9fVEVYVCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1udCAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0hPUlRfU09VUkNFX0ZJTEVfTkFNRSAiICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1zZm4iOwogICAtLSAgICAgICAvRk9STUFUX09VVFBVVD0ob3B0aW9uLCBvcHRpb24gLi4uKQogICAtLQogICAtLSAgIFNwZWNpZmllcyB0aGUgZGV0YWlscyBvZiB0aGUgdG9vbCBvdXRwdXQKICAgLS0KICAgLS0gICBvcHRpb24gbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAtLQogICAtLSAgICAgREVGQVVMVCAoRCkgICAgICAgICAgICAgR2VuZXJhdGUgdGhlIHRleHQgb3V0cHV0IG9ubHksIHVzZSBmdWxsCiAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCBzb3VyY2UgbmFtZXMgaW4gZ2xvYmFsIGluZm9ybWF0aW9uCiAgIC0tICAgICBYTUwgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZSB0aGUgb3V0cHV0IGluIFhNTCBmb3JtYXQKICAgLS0gICAgIE5PX1RFWFQgICAgICAgICAgICAgICAgIERvIG5vdCBnZW5lcmF0ZSB0aGUgdGV4dCBvdXRwdXQgKGltcGxpZXMgWE1MKQogICAtLSAgICAgU0hPUlRfU09VUkNFX0ZJTEVfTkFNRSAgVXNlIHNob3J0IGFyZ3VtZW50IHNvdXJjZSBuYW1lcyBpbiBvdXRwdXQKCiAgIFNfTWV0cmljX0dsb2JvdXQgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9HTE9CQUxfT1VUUFVUPUAiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItb2dAIjsKICAgLS0gICAgICAgIC9HTE9CQUxfT1VUUFVUPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgUHV0IHRoZSB0ZXh0dWFsIGdsb2JhbCBtZXRyaWMgaW5mb3JtYXRpb24gaW50byB0aGUgc3BlY2lmaWVkIGZpbGUKCiAgIFNfTWV0cmljX0xpbmUgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTElORV9NRVRSSUNTPSIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBTEwgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1sYSwhLWxjb2RlLCEtbGNvbW0sIiAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1sZW9sLCEtbGIgIiAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMSU5FU19BTEwgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWxhICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT0RFX0xJTkVTICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWxjb2RlICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT01FTlRfTElORVMgIiAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWxjb21tICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNSVhFRF9DT0RFX0NPTU1FTlRTICIgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWxlb2wgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCTEFOS19MSU5FUyAiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWxiICI7CiAgIC0tICAgICAgL0xJTkVfTUVUUklDUz0ob3B0aW9uLCBvcHRpb24gLi4uKQoKICAgLS0gICBTcGVjaWZpZXMgdGhlIGxpbmUgbWV0cmljcyB0byBiZSBjb21wdXRlZCAoaWYgbm90IHNldCwgYWxsIHRoZSBsaW5lCiAgIC0tICAgbWV0cmljcyBhcmUgc2V0IG9uLCBvdGhlcndpc2Ugb25seSBzcGVjaWZpZWQgbWV0cmljcyBhcmUgY29tcHV0ZWQgYW5kCiAgIC0tICAgcmVwb3J0ZWQpCiAgIC0tCiAgIC0tICAgb3B0aW9uIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgIEFMTCAoRCkgICAgICAgICAgICAgIEFsbCB0aGUgbGluZSBtZXRyaWNzIGFyZSBjb21wdXRlZAogICAtLSAgICAgTElORVNfQUxMICAgICAgICAgICAgQWxsIGxpbmVzIGFyZSBjb21wdXRlZAogICAtLSAgICAgQ09ERV9MSU5FUyAgICAgICAgICAgTGluZXMgd2l0aCBBZGEgY29kZSBhcmUgY29tcHV0ZWQKICAgLS0gICAgIENPTUVOVF9MSU5FUyAgICAgICAgIEFsbCBjb21tZW50IGxpbmVzIGFyZSBjb21wdXRlZAogICAtLSAgICAgTUlYRURfQ09ERV9DT01NRU5UUyAgQWxsIGxpbmVzIGNvbnRhaW5pbmcgYm90aCBjb2RlIGFuZCBjb21tZW50IGFyZQogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQKICAgLS0gICAgIEJMQU5LX0xJTkVTICAgICAgICAgIEJsYW5rIGxpbmVzIGFyZSBjb21wdXRlZAogICAtLQogICAtLSAgIEFsbCBjb21iaW5hdGlvbnMgb2YgbGluZSBtZXRyaWNzIG9wdGlvbnMgYXJlIGFsbG93ZWQuCgogICBTX01ldHJpY19NZXNzICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTUVTU0FHRVNfUFJPSkVDVF9GSUxFPSIgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVGQVVMVCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUVESVVNICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMSAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSElHSCAiICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMiI7CiAgIC0tICAgICAgICAvTUVTU0FHRVNfUFJPSkVDVF9GSUxFWz1tZXNzYWdlcy1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSAidmVyYm9zaXR5IiBvZiB0aGUgcGFyc2luZyBvZiBwcm9qZWN0IGZpbGVzLgogICAtLSAgIG1lc3NhZ2VzLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgREVGQVVMVCAoRCkgIE5vIG1lc3NhZ2VzIGFyZSBvdXRwdXQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igb3Igd2FybmluZy4KICAgLS0KICAgLS0gICAgICBNRURJVU0gICAgICAgQSBzbWFsbCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dC4KICAgLS0KICAgLS0gICAgICBISUdIICAgICAgICAgQSBncmVhdCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dCwgbW9zdCBvZiB0aGVtIG5vdAogICAtLSAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VmdWwgZm9yIHRoZSB1c2VyLgoKICAgU19NZXRyaWNfUHJvamVjdCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgd2lsbCBiZSBwYXJzZWQgYmVmb3JlIHRoZSBpbnZvY2F0aW9uIG9mIHRoZQogICAtLSAgIGJpbmRlci4KCiAgIFNfTWV0cmljX1F1aWV0ICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUVVJRVQgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItcSI7CiAgIC0tICAgICAgICAvTk9RVUlFVCAoRCkKICAgLS0gICAgICAgIC9RVUlFVAogICAtLQogICAtLSAgIFF1aWV0IG1vZGU6IGJ5IGRlZmF1bHQgR05BVCBNRVRSSUMgb3V0cHV0cyB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCiAgIC0tICAgdGhlIG51bWJlciBvZiBwcm9ncmFtIHVuaXRzIGxlZnQgdG8gYmUgcHJvY2Vzc2VkLiBUaGlzIG9wdGlvbiB0dXJucwogICAtLSAgIHRoaXMgdHJhY2Ugb2ZmLgoKICAgU19NZXRyaWNfU3VmZml4ICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NVRkZJWF9ERVRBSUxTPSIgJiAnIicgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1vIiAmICciJzsKICAgLS0gICAgICAgIC9TVUZGSVhfREVUQUlMUz1zdWZmaXgKICAgLS0KICAgLS0gICBVc2UgdGhlIGdpdmVuIHN1ZmZpeCBhcyB0aGUgc3VmZml4IGZvciB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBwbGFjZQogICAtLSAgIHRoZSBkZXRhaWxlZCBtZXRyaWNzIGludG8uCgogICBTX01ldHJpY19TdXBwcmVzcyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAgIi9TVVBQUkVTUz0iICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOT1RISU5HICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1ub2NjLCEtbm9lYywhLW5vbmwsIiAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1uZSwhLW5vbG9jYWwgIiAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDWUNMT01BVElDX0NPTVBMRVhJVFkgIiAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5vY2MgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFU1NFTlRJQUxfQ09NUExFWElUWSAiICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5vZWMgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNQVhJTUFMX0xPT1BfTkVTVElORyAiICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5vbmwgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFWElUU19BU19HT1RPUyAiICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5lICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMT0NBTF9ERVRBSUxTICIgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5vbG9jYWwgIjsKICAgLS0gICAgICAvU1VQUFJFU1M9KG9wdGlvbiwgb3B0aW9uIC4uLikKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIG1ldHJpYyB0aGF0IHNob3VsZCBub3QgYmUgY29tcHV0ZWQKICAgLS0KICAgLS0gICBvcHRpb24gbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAtLQogICAtLSAgICAgTk9USElORyAoRCkgICAgICAgICAgICAgRG8gbm90IHN1cHByZXNzIGNvbXB1dGF0aW9uIG9mIGFueSBtZXRyaWMKICAgLS0gICAgIENZQ0xPTUFUSUNfQ09NUExFWElUWSAgIERvIG5vdCBjb21wdXRlIHRoZSBDeWNsb21hdGljIENvbXBsZXhpdHkKICAgLS0gICAgIEVTU0VOVElBTF9DT01QTEVYSVRZICAgIERvIG5vdCBjb21wdXRlIHRoZSBFc3NlbnRpYWwgQ29tcGxleGl0eQogICAtLSAgICAgTUFYSU1BTF9MT09QX05FU1RJTkcgICAgRG8gbm90IGNvbXB1dGUgdGhlIG1heGltYWwgbG9vcCBuZXN0aW5nCiAgIC0tICAgICBFWElUU19BU19HT1RPUyAgICAgICAgICBEbyBub3QgY291bnQgRVhJVCBzdGF0ZW1lbnRzIGFzIEdPVE9zIHdoZW4KICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGluZyB0aGUgIEVzc2VudGlhbCBDb21wbGV4aXR5CiAgIC0tICAgICBMT0NBTF9ERVRBSUxTICAgICAgICAgICBEbyBub3QgY29tcHV0ZSB0aGUgZGV0YWlsZWQgbWV0cmljcyBmb3IgbG9jYWwKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0gdW5pdHMKICAgLS0KICAgLS0gICBBbGwgY29tYmluYXRpb25zIG9mIG9wdGlvbnMgYXJlIGFsbG93ZWQuCgogICBTX01ldHJpY19WZXJib3NlICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1ZFUkJPU0UgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXYiOwogICAtLSAgICAgICAgL05PVkVSQk9TRSAoRCkKICAgLS0gICAgICAgIC9WRVJCT1NFCiAgIC0tCiAgIC0tICAgVmVyYm9zZSBtb2RlLgoKICAgU19NZXRyaWNfWE1Mb3V0ICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1hNTF9PVVRQVVQ9QCIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1veEAiOwogICAtLSAgICAgICAgL1hNTF9PVVRQVVQ9ZmlsZW5hbWUKICAgLS0KICAgLS0gICBQbGFjZSB0aGUgWE1MIG91dHB1dCBpbnRvIHRoZSBzcGVjaWZpZWQgZmlsZQoKICAgTWV0cmljX1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyA6PQogICAgIChTX01ldHJpY19EZWJ1ZyAgICAnQWNjZXNzLAogICAgICBTX01ldHJpY19EaXJlY3QgICAnQWNjZXNzLAogICAgICBTX01ldHJpY19FbGVtZW50ICAnQWNjZXNzLAogICAgICBTX01ldHJpY19FeHQgICAgICAnQWNjZXNzLAogICAgICBTX01ldHJpY19GaWxlcyAgICAnQWNjZXNzLAogICAgICBTX01ldHJpY19Gb3JtYXQgICAnQWNjZXNzLAogICAgICBTX01ldHJpY19HbG9ib3V0ICAnQWNjZXNzLAogICAgICBTX01ldHJpY19MaW5lICAgICAnQWNjZXNzLAogICAgICBTX01ldHJpY19NZXNzICAgICAnQWNjZXNzLAogICAgICBTX01ldHJpY19Qcm9qZWN0ICAnQWNjZXNzLAogICAgICBTX01ldHJpY19RdWlldCAgICAnQWNjZXNzLAogICAgICBTX01ldHJpY19TdWZmaXggICAnQWNjZXNzLAogICAgICBTX01ldHJpY19TdXBwcmVzcyAnQWNjZXNzLAogICAgICBTX01ldHJpY19WZXJib3NlICAnQWNjZXNzLAogICAgICBTX01ldHJpY19YTUxvdXQgICAnQWNjZXNzKTsKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgLS0gU3dpdGNoZXMgZm9yIEdOQVQgTkFNRSAtLQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBTX05hbWVfQ29uZiAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NPTkZJR19GSUxFPTwiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jPiI7CiAgIC0tICAgICAgICAvQ09ORklHX0ZJTEU9cGF0aF9uYW1lCiAgIC0tCiAgIC0tICAgQ3JlYXRlIGEgY29uZmlndXJhdGlvbiBwcmFnbWFzIGZpbGUgJ3BhdGhfbmFtZScgKGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKICAgLS0gICAnZ25hdC5hZGMnKS4gJ3BhdGhfbmFtZScgbWF5IGluY2x1ZGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLiAncGF0aF9uYW1lJwogICAtLSAgIG11c3QgYmUgd3JpdGFibGUuIFRoZXJlIG1heSBiZSBvbmx5IG9uZSBxdWFsaWZpZXIgL0NPTkZJR19GSUxFLgogICAtLSAgIFRoaXMgcXVhbGlmaWVyIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcXVhbGlmaWVyIC9QUk9KRUNUX0ZJTEUuCgogICBTX05hbWVfRGlycyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NPVVJDRV9ESVJTPSoiICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1kKiI7CiAgIC0tICAgICAgICAvU09VUkNFX0RJUlM9KGRpcmVjdG9yeSwgLi4uKQogICAtLQogICAtLSAgIExvb2sgZm9yIHNvdXJjZSBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yaWVzLiBXaGVuIHRoaXMgcXVhbGlmaWVyCiAgIC0tICAgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBzZWFyY2hlZCBmb3IKICAgLS0gICBzb3VyY2UgZmlsZXMsIHVubGVzcyBpdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCB3aXRoIGEgcXVhbGlmaWVyCiAgIC0tICAgL1NPVVJDRV9ESVJTIG9yIC9ESVJTX0ZJTEUuIFNldmVyYWwgcXVhbGlmaWVycyAvU09VUkNFX0RJUlMgbWF5IGJlCiAgIC0tICAgc3BlY2lmaWVkLiBJZiBhIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBwYXRoLCBpdCBpcwogICAtLSAgIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcHJhZ21hcyBmaWxlIHNwZWNpZmllZAogICAtLSAgIHdpdGggcXVhbGlmaWVyIC9DT05GSUdfRklMRSwgb3IgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCBmaWxlCiAgIC0tICAgc3BlY2lmaWVkIHdpdGggcXVhbGlmaWVyIC9QUk9KRUNUX0ZJTEUgb3IsIGlmIG5laXRoZXIgcXVhbGlmaWVyCiAgIC0tICAgL0NPTkZJR19GSUxFIG5vciBxdWFsaWZpZXIgL1BST0pFQ1RfRklMRSBhcmUgc3BlY2lmaWVkLCBpdCBpcyByZWxhdGl2ZQogICAtLSAgIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBUaGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIHdpdGgKICAgLS0gICBxdWFsaWZpZXJzIC9TT1VSQ0VfRElSUyBtdXN0IGV4aXN0IGFuZCBiZSByZWFkYWJsZS4KCiAgIFNfTmFtZV9EZmlsZSAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRElSU19GSUxFPTwiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUQ+IjsKICAgLS0gICAgICAgIC9ESVJTX0ZJTEU9ZmlsZV9uYW1lCiAgIC0tCiAgIC0tICAgTG9vayBmb3Igc291cmNlIGZpbGVzIGluIGFsbCBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gdGV4dCBmaWxlCiAgIC0tICAgJ2ZpbGVfbmFtZScuICdmaWxlX25hbWUnIG11c3QgYmUgYW4gZXhpc3RpbmcsIHJlYWRhYmxlIHRleHQgZmlsZS4KICAgLS0gICBFYWNoIG5vbiBlbXB0eSBsaW5lIGluIHRoZSBzcGVjaWZpZWQgZmlsZSBtdXN0IGJlIGEgZGlyZWN0b3J5LgogICAtLSAgIFNwZWNpZnlpbmcgcXVhbGlmaWVyIC9ESVJTX0ZJTEUgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIGFzIG1hbnkKICAgLS0gICBxdWFsaWZpZXJzIC9TT1VSQ0VfRElSUyBhcyB0aGVyZSBhcmUgbm9uIGVtcHR5IGxpbmVzIGluIHRoZSBzcGVjaWZpZWQKICAgLS0gICB0ZXh0IGZpbGUuCgogICBTX05hbWVfRnJuZyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0ZPUkVJR05fUEFUVEVSTj0iICYgJyInICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1mIiAmICciJzsKICAgLS0gICAgICAgIC9GT1JFSUdOX1BBVFRFUk49PHN0cmluZz4KICAgLS0KICAgLS0gICBTcGVjaWZ5IGEgZm9yZWlnbiBwYXR0ZXJuLgogICAtLSAgIFVzaW5nIHRoaXMgcXVhbGlmaWVyLCBpdCBpcyBwb3NzaWJsZSB0byBhZGQgc291cmNlcyBvZiBsYW5ndWFnZXMgb3RoZXIKICAgLS0gICB0aGFuIEFkYSB0byB0aGUgbGlzdCBvZiBzb3VyY2VzIG9mIGEgcHJvamVjdCBmaWxlLiBJdCBpcyBvbmx5IHVzZWZ1bAogICAtLSAgIGlmIGEgcXVhbGlmaWVyIC9QUk9KRUNUX0ZJTEUgaXMgdXNlZC4gRm9yIGV4YW1wbGUsCiAgIC0tCiAgIC0tICAgR05BVCBOQU1FIC9QUk9KRUNUX0ZJTEU9UFJKIC9GT1JFSUdOX1BBVFRFUk49IiouQyIgIiouQURBIgogICAtLQogICAtLSAgIHdpbGwgbG9vayBmb3IgQWRhIHVuaXRzIGluIGFsbCBmaWxlcyB3aXRoIHRoZSAnLkFEQScgZXh0ZW5zaW9uLCBhbmQKICAgLS0gICB3aWxsIGFkZCB0byB0aGUgbGlzdCBvZiBmaWxlIGZvciBwcm9qZWN0IFBSSi5HUFIgdGhlIEMgZmlsZXMgd2l0aAogICAtLSAgIGV4dGVuc2lvbiAiLkMiLgoKICAgU19OYW1lX0hlbHAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9IRUxQICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItaCI7CiAgIC0tICAgICAgICAvTk9IRUxQIChEKQogICAtLSAgICAgICAgL0hFTFAKICAgLS0KICAgLS0gICBPdXRwdXQgdXNhZ2UgaW5mb3JtYXRpb24gdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uCgogICBTX05hbWVfUHJvaiAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVfbmFtZQogICAtLQogICAtLSAgIENyZWF0ZSBvciB1cGRhdGUgYSBwcm9qZWN0IGZpbGUuICdmaWxlX25hbWUnIG1heSBpbmNsdWRlIGRpcmVjdG9yeQogICAtLSAgIGluZm9ybWF0aW9uLiBUaGUgc3BlY2lmaWVkIGZpbGUgbXVzdCBiZSB3cml0YWJsZS4gVGhlcmUgbWF5IGJlIG9ubHkKICAgLS0gICBvbmUgcXVhbGlmaWVyIC9QUk9KRUNUX0ZJTEUuIFdoZW4gYSBxdWFsaWZpZXIgL1BST0pFQ1RfRElMRSBpcwogICAtLSAgIHNwZWNpZmllZCwgbm8gcXVhbGlmaWVyIC9DT05GSUdfRklMRSBtYXkgYmUgc3BlY2lmaWVkLgoKICAgU19OYW1lX1ZlcmJvc2UgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9WRVJCT1NFICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdiI7CiAgIC0tICAgICAgICAvTk9WRVJCT1NFIChEKQogICAtLSAgICAgICAgL1ZFUkJPU0UKICAgLS0KICAgLS0gICBWZXJib3NlIG1vZGUuIE91dHB1dCBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBiZWhhdmlvciB0byB0aGUgc3RhbmRhcmQKICAgLS0gICBvdXRwdXQgc3RyZWFtLiBUaGlzIGluY2x1ZGVzIG5hbWUgb2YgdGhlIGZpbGUgd3JpdHRlbiwgdGhlIG5hbWUgb2YgdGhlCiAgIC0tICAgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGFuZCwgZm9yIGVhY2ggZmlsZSBpbiB0aG9zZSBkaXJlY3RvcmllcyB3aG9zZQogICAtLSAgIG5hbWUgbWF0Y2hlcyBhdCBsZWFzdCBvbmUgb2YgdGhlIE5hbWluZyBQYXR0ZXJucywgYW4gaW5kaWNhdGlvbiBvZgogICAtLSAgIHdoZXRoZXIgdGhlIGZpbGUgY29udGFpbnMgYSB1bml0LCBhbmQgaWYgc28gdGhlIG5hbWUgb2YgdGhlIHVuaXQuCgogICBTX05hbWVfRXhjbCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0VYQ0xVREVEX1BBVFRFUk49IiAmICciJyAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi14IiAmICciJzsKICAgLS0gICAgICAvRVhDTFVERURfUEFUVEVSTj08c3RyaW5nPgogICAtLQogICAtLSAgIFNwZWNpZnkgYW4gZXhjbHVkZWQgcGF0dGVybi4KICAgLS0gICBVc2luZyB0aGlzIHF1YWxpZmllciwgaXQgaXMgcG9zc2libGUgdG8gZXhjbHVkZSBzb21lIGZpbGVzIHRoYXQgd291bGQKICAgLS0gICBtYXRjaCB0aGUgTmFtaW5nIHBhdHRlcm5zLiBGb3IgZXhhbXBsZSwKICAgLS0KICAgLS0gICBHTkFUIE5BTUUgL0VYQ0xVREVEX1BBVFRFUk49IipfTlQuQURBIiAiKi5BREEiCiAgIC0tCiAgIC0tICAgd2lsbCBsb29rIGZvciBBZGEgdW5pdHMgaW4gYWxsIGZpbGVzIHdpdGggdGhlICcuQURBJyBleHRlbnNpb24sIGV4Y2VwdAogICAtLSAgIHRob3NlIHdob3NlIG5hbWVzIGVuZCB3aXRoICdfTlQuQURBJy4KCiAgIE5hbWVfU3dpdGNoZXMgOiBhbGlhc2VkIGNvbnN0YW50IFN3aXRjaGVzIDo9CiAgICAgKFNfTmFtZV9Db25mICAgICAgICAgJ0FjY2VzcywKICAgICAgU19OYW1lX0RpcnMgICAgICAgICAnQWNjZXNzLAogICAgICBTX05hbWVfRGZpbGUgICAgICAgICdBY2Nlc3MsCiAgICAgIFNfTmFtZV9Gcm5nICAgICAgICAgJ0FjY2VzcywKICAgICAgU19OYW1lX0hlbHAgICAgICAgICAnQWNjZXNzLAogICAgICBTX05hbWVfUHJvaiAgICAgICAgICdBY2Nlc3MsCiAgICAgIFNfTmFtZV9WZXJib3NlICAgICAgJ0FjY2VzcywKICAgICAgU19OYW1lX0V4Y2wgICAgICAgICAnQWNjZXNzKTsKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgLS0gU3dpdGNoZXMgZm9yIEdOQVQgUFJFUFJPQ0VTUyAtLQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBTX1ByZXBfQXNzb2MgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0FTU09DSUFURT0iICYgJyInICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1EIiAmICciJzsKICAgLS0gICAgICAgIC9BU1NPQ0lBVEU9Im5hbWU9dmFsIgogICAtLQogICAtLSAgIERlZmluZXMgYSBuZXcgc3ltYm9sLCBhc3NvY2lhdGVkIHdpdGggdmFsdWUuIElmIG5vIHZhbHVlIGlzIGdpdmVuCiAgIC0tICAgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlbiBzeW1ib2wgaXMgY29uc2lkZXJlZCB0byBiZSBUcnVlLgogICAtLSAgIFRoaXMgcXVhbGlmaWVyIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIGEgZGVmaW5pdGlvbiBmaWxlLgoKICAgU19QcmVwX0JsYW5rICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9CTEFOS19MSU5FUyAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYiI7CiAgIC0tICAgICAgICAvTk9CTEFOS19MSU5FUyAoRCkKICAgLS0gICAgICAgIC9CTEFOS19MSU5FUwogICAtLQogICAtLSAgIENhdXNlcyBib3RoIHByZXByb2Nlc3NvciBsaW5lcyBhbmQgdGhlIGxpbmVzIGRlbGV0ZWQgYnkgcHJlcHJvY2Vzc2luZwogICAtLSAgIHRvIGJlIHJlcGxhY2VkIGJ5IGJsYW5rIGxpbmVzIGluIHRoZSBvdXRwdXQgc291cmNlIGZpbGUsIHRodXMKICAgLS0gICBwcmVzZXJ2aW5nIGxpbmUgbnVtYmVycyBpbiB0aGUgb3V0cHV0IGZpbGUuCgogICBTX1ByZXBfQ29tICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NPTU1FTlRTICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIjsKICAgLS0gICAgICAgIC9OT0NPTU1FTlRTIChEKQogICAtLSAgICAgICAgL0NPTU1FTlRTCiAgIC0tCiAgIC0tICAgL0NPTU1FTlRTIGNhdXNlcyBib3RoIHByZXByb2Nlc3NvciBsaW5lcyBhbmQgdGhlIGxpbmVzIGRlbGV0ZWQKICAgLS0gICBieSBwcmVwcm9jZXNzaW5nIHRvIGJlIHJldGFpbmVkIGluIHRoZSBvdXRwdXQgc291cmNlIGFzIGNvbW1lbnRzIG1hcmtlZAogICAtLSAgIHdpdGggdGhlIHNwZWNpYWwgc3RyaW5nICItLSEgIi4gVGhpcyBvcHRpb24gd2lsbCByZXN1bHQgaW4gbGluZSBudW1iZXJzCiAgIC0tICAgYmVpbmcgcHJlc2VydmVkIGluIHRoZSBvdXRwdXQgZmlsZS4KICAgLS0KICAgLS0gICAvTk9DT01NRU5UUyBjYXVzZXMgYm90aCBwcmVwcm9jZXNzb3IgbGluZXMgYW5kIHRoZSBsaW5lcyBkZWxldGVkIGJ5CiAgIC0tICAgcHJlcHJvY2Vzc2luZyB0byBiZSByZXBsYWNlZCBieSBibGFuayBsaW5lcyBpbiB0aGUgb3V0cHV0IHNvdXJjZSBmaWxlLAogICAtLSAgIHRodXMgcHJlc2VydmluZyBsaW5lIG51bWJlcnMgaW4gdGhlIG91dHB1dCBmaWxlLgoKICAgU19QcmVwX1JlZiAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9SRUZFUkVOQ0UgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItciI7CiAgIC0tICAgICAgICAvTk9SRUZFUkVOQ0UgKEQpCiAgIC0tICAgICAgICAvUkVGRVJFTkNFCiAgIC0tCiAgIC0tICAgQ2F1c2VzIGEgIlNvdXJjZV9SZWZlcmVuY2UiIHByYWdtYSB0byBiZSBnZW5lcmF0ZWQgdGhhdCByZWZlcmVuY2VzIHRoZQogICAtLSAgIG9yaWdpbmFsIGlucHV0IGZpbGUsIHNvIHRoYXQgZXJyb3IgbWVzc2FnZXMgd2lsbCB1c2UgdGhlIGZpbGUgbmFtZSBvZgogICAtLSAgIHRoaXMgb3JpZ2luYWwgZmlsZS4gIEFsc28gaW1wbGllcyAvQkxBTktfTElORVMgaWYgL0NPTU1FTlRTIGlzIG5vdAogICAtLSAgIHNwZWNpZmllZC4KCiAgIFNfUHJlcF9SZW1vdmUgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUkVNT1ZFICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIS1iLCEtYyI7CiAgIC0tICAgICAgICAvUkVNT1ZFIChEKQogICAtLSAgICAgICAgL05PUkVNT1ZFCiAgIC0tCiAgIC0tICAgUHJlcHJvY2Vzc29yIGxpbmVzIGFuZCBkZWxldGVkIGxpbmVzIGFyZSBjb21wbGV0ZWx5IHJlbW92ZWQgZnJvbSB0aGUKICAgLS0gICBvdXRwdXQuCgogICBTX1ByZXBfU3ltYm9scyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NZTUJPTFMgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1zIjsKICAgLS0gICAgICAgIC9OT1NZTUJPTFMgKEQpCiAgIC0tICAgICAgICAvU1lNQk9MUwogICAtLQogICAtLSAgIENhdXNlcyBhIHNvcnRlZCBsaXN0IG9mIHN5bWJvbCBuYW1lcyBhbmQgdmFsdWVzIHRvIGJlIGxpc3RlZCBvbgogICAtLSAgIFNZUyRPVVRQVVQuCgogICBTX1ByZXBfVW5kZWYgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1VOREVGSU5FRCAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi11IjsKICAgLS0gICAgICAgIC9OT1VOREVGSU5FRCAoRCkKICAgLS0gICAgICAgIC9VTkRFRklORUQKCiAgIFByZXBfU3dpdGNoZXMgOiBhbGlhc2VkIGNvbnN0YW50IFN3aXRjaGVzIDo9CiAgICAgKFNfUHJlcF9Bc3NvYyAgICdBY2Nlc3MsCiAgICAgIFNfUHJlcF9CbGFuayAgICdBY2Nlc3MsCiAgICAgIFNfUHJlcF9Db20gICAgICdBY2Nlc3MsCiAgICAgIFNfUHJlcF9SZWYgICAgICdBY2Nlc3MsCiAgICAgIFNfUHJlcF9SZW1vdmUgICdBY2Nlc3MsCiAgICAgIFNfUHJlcF9TeW1ib2xzICdBY2Nlc3MsCiAgICAgIFNfUHJlcF9VbmRlZiAgICdBY2Nlc3MpOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIC0tIFN3aXRjaGVzIGZvciBHTkFUIFBSRVRUWSAtLQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfUHJldHR5X0FsaWduICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0FMSUdOPSIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUZBVUxUICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQTEyMzQ1ICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0ZGICIgICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUEwICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTE9OUyAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1BMSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUNMQVJBVElPTlMgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQTIgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1RBVEVNRU5UUyAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUEzICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFSUk9XUyAiICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1BNCAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT01QT05FTlRfQ0xBVVNFUyAiICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQTUiOwogICAtLSAgICAgICAgL0FMSUdOWz1hbGlnbi1vcHRpb24sIGFsaWduLW9wdGlvbiwgLi4uXQogICAtLQogICAtLSAgIFNldCBhbGlnbm1lbnRzLiBCeSBkZWZhdWx0LCBhbGwgYWxpZ25tZW50cyAoY29sb25zIGluIGRlY2xhcmF0aW9ucywKICAgLS0gICBpbml0aWFsaXNhdGlvbnMgaW4gZGVjbGFyYXRpb25zLCBhc3NpZ25tZW50cyBhbmQgYXJyb3cgZGVsaW1pdGVycykgYXJlCiAgIC0tICAgT04uCiAgIC0tCiAgIC0tICAgYWxpZ24tb3B0aW9uIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgICBPRkYgKEQpICAgICAgICAgICBTZXQgYWxsIGFsaWdubWVudHMgdG8gT0ZGCiAgIC0tICAgICAgQ09MT05TICAgICAgICAgICAgU2V0IGFsaWdubWVudHMgb2YgY29sb25zIGluIGRlY2xhcmF0aW9ucyB0byBPTgogICAtLSAgICAgIERFQ0xBUkFUSU9OUyAgICAgIFNldCBhbGlnbm1lbnRzIG9mIGluaXRpYWxpc2F0aW9ucyBpbiBkZWNsYXJhdGlvbnMKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICB0byBPTgogICAtLSAgICAgIFNUQVRFTUVOVFMgICAgICAgIFNldCBhbGlnbm1lbnRzIG9mIGFzc2lnbm1lbnRzIHN0YXRlbWVudHMgdG8gT04KICAgLS0gICAgICBBUlJPV1MgICAgICAgICAgICBTZXQgYWxpZ25tZW50cyBvZiBhcnJvdyBkZWxpbWl0ZXJzIHRvIE9OLgogICAtLSAgICAgIENPTVBPTkVOVF9DTEFVU0VTIFNldCBhbGlnbm1lbnRzIG9mIEFUIGtleXdvcmRzIGluIGNvbXBvbmVudAogICAtLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXVzZXMgT04KICAgLS0KICAgLS0gICBTcGVjaWZ5aW5nIG9uZSBvZiB0aGUgT04gb3B0aW9ucyB3aXRob3V0IGZpcnN0IHNwZWNpZnlpbmcgdGhlIE9GRgogICAtLSAgIG9wdGlvbiBoYXMgbm8gZWZmZWN0LCBiZWNhdXNlIGJ5IGRlZmF1bHQgYWxsIGFsaWdubWVudHMgYXJlIHNldCB0byBPTi4KCiAgIFNfUHJldHR5X0F0dHJpYiA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0FUVFJJQlVURV9DQVNJTkc9IiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNSVhFRF9DQVNFICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYU0gIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTE9XRVJfQ0FTRSAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWFMICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVQUEVSX0NBU0UgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1hVSI7CiAgIC0tICAgICAgICAvQVRUUklCVVRFX0NBU0lOR1s9Y2FzaW5nLW9wdGlvbl0KICAgLS0KICAgLS0gICBTZXQgdGhlIGNhc2Ugb2YgdGhlIGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQgdGhlIGF0dHJpYnV0ZXMgYXJlIGluIG1peGVkCiAgIC0tICAgY2FzZS4KICAgLS0gICBjYXNpbmctb3B0aW9uIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgICBNSVhFRF9DQVNFIChEKQogICAtLSAgICAgIExPV0VSX0NBU0UKICAgLS0gICAgICBVUFBFUl9DQVNFCgogICBTX1ByZXR0eV9Db21tZW50cyAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9DT01NRU5UU19MQVlPVVQ9IiAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5UT1VDSEVEICIgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYzAgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFRkFVTFQgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMxICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTVEFOREFSRF9JTkRFTlQgIiAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jMiAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR05BVF9CRUdJTk5JTkcgIiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYzMgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFRk9STUFUICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWM0IjsKICAgLS0gICAgICAgIC9DT01NRU5UU19MQVlPVVRbPWxheW91dC1vcHRpb24sIGxheW91dC1vcHRpb24sIC4uLl0KICAgLS0KICAgLS0gICBTZXQgdGhlIGNvbW1lbnQgbGF5b3V0LiBCeSBkZWZhdWx0LCBjb21tZW50cyB1c2UgdGhlIEdOQVQgc3R5bGUKICAgLS0gICBjb21tZW50IGxpbmUgaW5kZW50YXRpb24uCiAgIC0tCiAgIC0tICAgbGF5b3V0LW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICBVTlRPVUNIRUSgoKCgoKCgoKCgIEFsbCB0aGUgY29tbWVudHMgcmVtYWluIHVuY2hhbmdlZAogICAtLSAgICAgREVGQVVMVCAoRCkgICAgICAgICBHTkFUIHN0eWxlIGNvbW1lbnQgbGluZSBpbmRlbnRhdGlvbgogICAtLSAgICAgU1RBTkRBUkRfSU5ERU5UICAgICBTdGFuZGFyZCBjb21tZW50IGxpbmUgaW5kZW50YXRpb24KICAgLS0gICAgIEdOQVRfQkVHSU5OSU5HICAgICAgR05BVCBzdHlsZSBjb21tZW50IGJlZ2lubmluZwogICAtLSAgICAgUkVGT1JNQVQgICAgICAgICAgICBSZWZvcm1hdCBjb21tZW50IGJsb2NrcwogICAtLQogICAtLSAgICAgQWxsIGNvbWJpbmF0aW9ucyBvZiBsYXlvdXQgb3B0aW9ucyBhcmUgYWxsb3dlZCwgZXhjZXB0IGZvciBERUZBVUxUCiAgIC0tICAgICBhbmQgU1RBTkRBUkRfSU5ERU5UIHdoaWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIGFuZCBhbHNvIGlmCiAgIC0tICAgICBVTlRPVUNIRUQgaXMgc3BlY2lmaWVkLCB0aGlzIG11c3QgYmUgdGhlIG9ubHkgb3B0aW9uLgogICAtLQogICAtLSAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAiR05BVCBzdHlsZSBjb21tZW50IGxpbmUgaW5kZW50YXRpb24iIGFuZAogICAtLSAgICAgInN0YW5kYXJkIGNvbW1lbnQgbGluZSBpbmRlbnRhdGlvbiIgaXMgdGhlIGZvbGxvd2luZzogZm9yIHN0YW5kYXJkCiAgIC0tICAgICBjb21tZW50IGluZGVudGF0aW9uLCBhbnkgY29tbWVudCBsaW5lIGlzIGluZGVudGVkIGFzIGlmIGl0IHdlcmUKICAgLS0gICAgIGEgZGVjbGFyYXRpb24gb3Igc3RhdGVtZW50IGF0IHRoZSBzYW1lIHBsYWNlLgogICAtLSAgICAgRm9yIEdOQVQgc3R5bGUgY29tbWVudCBpbmRlbnRhdGlvbiwgY29tbWVudCBsaW5lcyB3aGljaCBhcmUKICAgLS0gICAgIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGlmIG9yIGNhc2Ugc3RhdGVtZW50IGFsdGVybmF0aXZlLCByZWNvcmQKICAgLS0gICAgIHZhcmlhbnQgb3IgJ2JlZ2luJyBrZXl3b3JkIGFyZSBpbmRlbnRlZCBhcyB0aGUga2V5d29yZCB0aGF0IGZvbGxvd3MKICAgLS0gICAgIHRoZW0uOgogICAtLQogICAtLSAgICAgU3RhbmRhcmQgaW5kZW50YXRpb246CiAgIC0tCiAgIC0tICAgICAgICBpZiBBIHRoZW4KICAgLS0gICAgICAgICAgIG51bGw7CiAgIC0tICAgICAgICAgICAtLSBzb21lIGNvbW1lbnQKICAgLS0gICAgICAgIGVsc2UKICAgLS0gICAgICAgICAgIG51bGw7CiAgIC0tICAgICAgICBlbmQgaWY7CiAgIC0tCiAgIC0tICAgICBHTkFUIHN0eWxlIGluZGVudGF0aW9uOgogICAtLQogICAtLSAgICAgICAgaWYgQSB0aGVuCiAgIC0tICAgICAgICAgICBudWxsOwogICAtLSAgICAgICAgLS0gc29tZSBjb21tZW50CiAgIC0tICAgICAgICBlbHNlCiAgIC0tICAgICAgICAgICBudWxsOwogICAtLSAgICAgICAgZW5kIGlmOwogICAtLQogICAtLSAgICAgT3B0aW9uICJHTkFUIHN0eWxlIGNvbW1lbnQgYmVnaW5uaW5nIiBtZWFucyB0aGF0IGZvciBlYWNoIGNvbW1lbnQKICAgLS0gICAgIHdoaWNoIGlzIG5vdCBjb25zaWRlcmVkIGFzIG5vbi1mb3JtYXR0YWJsZSBzZXBhcmF0b3IgKHRoYXQgaXMsIHRoZQogICAtLSAgICAgY29tbWVudCBsaW5lIGNvbnRhaW5zIG9ubHkgZGFzaGVzLCBvciBhIGNvbW1lbnQgbGluZSBlbmRzIHdpdGggdHdvCiAgIC0tICAgICBkYXNoZXMpLCB0aGVyZSB3aWxsIGJlIGF0IGxlYXN0IHR3byBzcGFjZXMgYmV0d2VlbiBzdGFydGluZyAiLS0iIGFuZAogICAtLSAgICAgdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb2YgdGhlIGNvbW1lbnQuCgogICBTX1ByZXR0eV9Db25maWcgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9DT05GSUdVUkFUSU9OX1BSQUdNQVNfRklMRT08IiAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWduYXRlYz4iOwogICAtLSAgICAgICAgL0NPTkZJR1VSQVRJT05fUFJBR01BU19GSUxFPWZpbGUKICAgLS0KICAgLS0gICBTcGVjaWZ5IGEgY29uZmlndXJhdGlvbiBwcmFnbWFzIGZpbGUgdGhhdCBuZWVkIHRvIGJlIHBhc3NlZCB0byB0aGUKICAgLS0gICBjb21waWxlci4KCiAgIFNfUHJldHR5X0NvbnN0ciAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NPTlNUUlVDVF9MQVlPVVQ9IiAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR05BVCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbDEgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTVBBQ1QgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWwyICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTkNPTVBBQ1QgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbDMiOwogICAtLSAgICAgICAgL0NPTlNUUlVDVF9MQVlPVVRbPWNvbnN0cnVjdC1vcHRpb25dCiAgIC0tCiAgIC0tICAgU2V0IGNvbnN0cnVjdCBsYXlvdXQuIERlZmF1bHQgaXMgR05BVCBzdHlsZSBsYXlvdXQuCiAgIC0tICAgY29uc3RydWN0LW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgR05BVCAoRCkKICAgLS0gICAgICBDT01QQUNUCiAgIC0tICAgICAgVU5DT01QQUNUCiAgIC0tCiAgIC0tICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBHTkFUIHN0eWxlIGFuZCBDb21wYWN0IGxheW91dCBvbiBvbmUgaGFuZAogICAtLSAgIGFuZCBVbmNvbXBhY3QgbGF5b3V0IG9uIHRoZSBvdGhlciBoYW5kIGNhbiBiZSBpbGx1c3RyYXRlZCBieSB0aGUKICAgLS0gICBmb2xsb3dpbmcgZXhhbXBsZXM6CiAgIC0tCiAgIC0tICAgICAgIEdOQVQgc3R5bGUgYW5kICAgICAgICAgICAgICAgICAgICAgICAgICBVbmNvbXBhY3QgbGF5b3V0CiAgIC0tICAgICAgIENvbXBhY3QgbGF5b3V0CiAgIC0tCiAgIC0tICAgICAgIHR5cGUgcSBpcyByZWNvcmQgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIHEgaXMKICAgLS0gICAgICAgICAgYSA6IGludGVnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZAogICAtLSAgICAgICAgICBiIDogaW50ZWdlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA6IGludGVnZXI7CiAgIC0tICAgICAgIGVuZCByZWNvcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIDogaW50ZWdlcjsKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCByZWNvcmQ7CiAgIC0tCiAgIC0tCiAgIC0tICAgICAgIEJsb2NrIDogZGVjbGFyZSAgICAgICAgICAgICAgICAgICAgICAgICBCbG9jayA6CiAgIC0tICAgICAgICAgIEEgOiBJbnRlZ2VyIDo9IDM7ICAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJlCiAgIC0tICAgICAgIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIDogSW50ZWdlciA6PSAzOwogICAtLSAgICAgICAgICBQcm9jIChBLCBBKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgLS0gICAgICAgZW5kIEJsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgKEEsIEEpOwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIEJsb2NrOwogICAtLQogICAtLSAgICAgICBDbGVhciA6IGZvciBKIGluIDEgLi4gMTAgbG9vcCAgICAgICAgICAgQ2xlYXIgOgogICAtLSAgICAgICAgICBBIChKKSA6PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIEogaW4gMSAuLiAxMCBsb29wCiAgIC0tICAgICAgIGVuZCBsb29wIENsZWFyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIChKKSA6PSAwOwogICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGxvb3AgQ2xlYXI7CiAgIC0tCiAgIC0tCiAgIC0tICAgQSBmdXJ0aGVyIGRpZmZlcmVuY2UgYmV0d2VlbiBHTkFUIHN0eWxlIGxheW91dCBhbmQgY29tcGFjdCBsYXlvdXQgaXMKICAgLS0gICB0aGF0IGluIEdOQVQgc3R5bGUgbGF5b3V0IGNvbXBvdW5kIHN0YXRlbWVudHMsIHJldHVybiBzdGF0ZW1lbnRzIGFuZAogICAtLSAgIGJvZGllcyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBlbXB0eSBsaW5lcy4KCiAgIFNfUHJldHR5X0NvbWluZCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NPTlRJTlVBVElPTl9JTkRFTlQ9IyIgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItY2wjIjsKICAgLS0gICAgICAgIC9DT05USU5VQVRJT05fSU5ERU5UPW5ubgogICAtLQogICAtLSAgIEluZGVudGF0aW9uIGxldmVsIGZvciBjb250aW51YXRpb24gbGluZXMsIG5ubiBmcm9tIDEgLi4gOS4KICAgLS0gICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBvbmUgbGVzcyB0aGVuIHRoZSAobm9ybWFsKSBpbmRlbnRhdGlvbiBsZXZlbCwKICAgLS0gICB1bmxlc3MgdGhlIGluZGVudGF0aW9uIGlzIHNldCB0byAxOiBpbiB0aGF0IGNhc2UgdGhlIGRlZmF1bHQgdmFsdWUgZm9yCiAgIC0tICAgY29udGludWF0aW9uIGxpbmUgaW5kZW50YXRpb24gaXMgYWxzbyAxLgoKICAgU19QcmV0dHlfRXh0ICAgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRVhURVJOQUxfUkVGRVJFTkNFPSIgJiAnIicgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItWCIgJiAnIic7CiAgIC0tICAgICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJuYW1lPXZhbCIKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBwcm9qZWN0IG1hbmFnZXIuIFVzZWZ1bCBvbmx5IGlmCiAgIC0tICAgL1BST0pFQ1RfRklMRSBpcyB1c2VkLgogICAtLQogICAtLSAgIEV4YW1wbGU6CiAgIC0tICAgICAgL0VYVEVSTkFMX1JFRkVSRU5DRT0iREVCVUc9VFJVRSIKCiAgIFNfUHJldHR5X0N1cnJlbnQgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NVUlJFTlRfRElSRUNUT1JZICIgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhLUktIjsKICAgLS0gICAgICAgIC9DVVJSRU5UX0RJUkVDVE9SWSAoRCkKICAgLS0KICAgLS0gICBMb29rIGZvciBzb3VyY2UgZmlsZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgIC0tCiAgIC0tICAgICAgICAvTk9DVVJSRU5UX0RJUkVDVE9SWQogICAtLSAgIERvIG5vdCBsb29rIGZvciBzb3VyY2UgZmlsZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCgogICBTX1ByZXR0eV9EaWNvICAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9ESUNUSU9OQVJZPSoiICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUQqIjsKICAgLS0gICAgICAgIC9ESUNUSU9OQVJZPShmaWxlX25hbWUsIC4uLikKICAgLS0KICAgLS0gICBVc2UgZWFjaCBzcGVjaWZpZWQgZmlsZSBhcyBhIGRpY3Rpb25hcnkgZmlsZSB0aGF0IGRlZmluZXMgdGhlIGNhc2luZwogICAtLSAgIGZvciBhIHNldCBvZiBzcGVjaWZpZWQgbmFtZXMsIHRoZXJlYnkgb3ZlcnJpZGluZyB0aGUgZWZmZWN0IG9uIHRoZXNlCiAgIC0tICAgbmFtZXMgYnkgYW55IGV4cGxpY2l0IG9yIGltcGxpY2l0IC9OQU1FX0NBU0lORyBxdWFsaWZpZXIuCiAgIC0tCiAgIC0tICAgR05BVCBQUkVUVFkgaW1wbGljaXRseSB1c2VzIGEgZGVmYXVsdCBkaWN0aW9uYXJ5IGZpbGUgdG8gZGVmaW5lIHRoZQogICAtLSAgIGNhc2luZyBmb3IgdGhlIEFkYSBwcmVkZWZpbmVkIG5hbWVzIGFuZCB0aGUgbmFtZXMgZGVjbGFyZWQgaW4gdGhlIEdOQVQKICAgLS0gICBsaWJyYXJpZXMuCiAgIC0tCiAgIC0tICAgVGhlIHN0cnVjdHVyZSBvZiBhIGRpY3Rpb25hcnkgZmlsZSwgYW5kIGRldGFpbHMgb24gdGhlIGNvbnZlbnRpb25zCiAgIC0tICAgdXNlZCBpbiB0aGUgZGVmYXVsdCBkaWN0aW9uYXJ5IGZpbGUsIGFyZSBkZWZpbmVkIGluIHRoZSBHTkFUIFVzZXIncwogICAtLSAgIEd1aWRlLgoKICAgU19QcmV0dHlfRmlsZXMgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRklMRVM9QCIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1maWxlcz1AIjsKICAgLS0gICAgICAvRklMRVM9ZmlsZW5hbWUKICAgLS0KICAgLS0gICBUYWtlIGFzIGFyZ3VtZW50cyB0aGUgZmlsZXMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSBzcGVjaWZpZWQKICAgLS0gICB0ZXh0IGZpbGUuCgogICBTX1ByZXR0eV9Gb3JjZWQgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9GT1JDRURfT1VUUFVUPUAiICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW9mQCI7CiAgIC0tICAgICAgICAvRk9SQ0VEX09VVFBVVD1maWxlCiAgIC0tCiAgIC0tICAgV3JpdGUgdGhlIG91dHB1dCBpbnRvIHRoZSBzcGVjaWZpZWQgZmlsZSwgb3ZlcnJpZGluZyBhbnkgcG9zc2libHkKICAgLS0gICBleGlzdGluZyBmaWxlLgoKICAgU19QcmV0dHlfRm9ybWZlZWQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRk9STV9GRUVEX0FGVEVSX1BSQUdNQV9QQUdFICIgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1mZiI7CiAgIC0tICAgICAgICAvRk9STV9GRUVEX0FGVEVSX1BSQUdNQV9QQUdFCiAgIC0tCiAgIC0tICAgV2hlbiB0aGVyZSBpcyBhIHByYWdtYSBQYWdlIGluIHRoZSBzb3VyY2UsIGluc2VydCBhIEZvcm0gRmVlZAogICAtLSAgIGNoYXJhY3RlciBpbW1lZGlhdGVseSBhZnRlciB0aGUgc2VtaWNvbG9uIHRoYXQgZm9sbG93cyB0aGUgcHJhZ21hCiAgIC0tICAgUGFnZS4KCiAgIFNfUHJldHR5X0luZGVudCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0lOREVOVEFUSU9OX0xFVkVMPSMiICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1pIyI7CiAgIC0tICAgICAgICAvSU5ERU5UQVRJT05fTEVWRUw9bm5uCiAgIC0tCiAgIC0tICAgU3BlY2lmeSB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0byBhZGQgZm9yIGVhY2ggaW5kZW50YXRpb24gbGV2ZWwuCiAgIC0tICAgbm5uIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5LiBUaGUgZGVmYXVsdCBpcyAzLgoKICAgU19QcmV0dHlfS2V5d29yZCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvS0VZV09SRF9DQVNJTkc9IiAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxPV0VSX0NBU0UgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWtMICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVUFBFUl9DQVNFICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1rVSI7CiAgIC0tICAgICAgICAvS0VZV09SRF9DQVNJTkdbPWtleXdvcmQtb3B0aW9uXQogICAtLQogICAtLSAgIFNwZWNpZnkgdGhlIGNhc2Ugb2YgQWRhIGtleXdvcmRzLiBUaGUgZGVmYXVsdCBpcyBrZXl3b3JkcyBpbiBsb3dlcgogICAtLSAgIGNhc2UuCiAgIC0tICAga2V5d29yZC1vcHRpb24gbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAtLQogICAtLSAgICAgIExPV0VSX0NBU0UgKEQpCiAgIC0tICAgICAgVVBQRVJfQ0FTRQoKICAgU19QcmV0dHlfTWF4bGVuICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTElORV9MRU5HVEhfTUFYPSMiICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1NIyI7CiAgIC0tICAgICAgICAvTElORV9MRU5HVEhfTUFYPW5ubgogICAtLQogICAtLSAgIFNldCB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCwgbm5uIGZyb20gMzIgLi4yNTYuIFRoZSBkZWZhdWx0IGlzIDc5LgoKICAgU19QcmV0dHlfTWF4aW5kICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTUFYX0lOREVOVD0jIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1UIyI7CiAgIC0tICAgICAgICAvTUFYX0lOREVOVD1ubm4KICAgLS0KICAgLS0gICBEbyBub3QgdXNlIGFuIGFkZGl0aW9uYWwgaW5kZW50YXRpb24gbGV2ZWwgZm9yIGNhc2UgYWx0ZXJuYXRpdmVzCiAgIC0tICAgYW5kIHZhcmlhbnRzIGlmIHRoZWlyIG51bWJlciBpcyBubm4gb3IgbW9yZS4gVGhlIGRlZmF1bHQgaXMgIDEwLgogICAtLSAgIElmIG5ubiBpcyB6ZXJvLCBhbiBhZGRpdGlvbmFsIGluZGVudGF0aW9uIGxldmVsIGlzICB1c2VkIGZvciBhbnkgbnVtYmVyCiAgIC0tICAgb2YgY2FzZSBhbHRlcm5hdGl2ZXMgYW5kIHZhcmlhbnRzLgoKICAgU19QcmV0dHlfTWVzcyAgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTUVTU0FHRVNfUFJPSkVDVF9GSUxFPSIgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUZBVUxUICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDAgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUVESVVNICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAxICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJR0ggIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMiI7CiAgIC0tICAgICAgICAvTUVTU0FHRVNfUFJPSkVDVF9GSUxFWz1tZXNzYWdlcy1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSAidmVyYm9zaXR5IiBvZiB0aGUgcGFyc2luZyBvZiBwcm9qZWN0IGZpbGVzLgogICAtLSAgIG1lc3NhZ2VzLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgREVGQVVMVCAoRCkgIE5vIG1lc3NhZ2VzIGFyZSBvdXRwdXQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igb3Igd2FybmluZy4KICAgLS0KICAgLS0gICAgICBNRURJVU0gICAgICAgQSBzbWFsbCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dC4KICAgLS0KICAgLS0gICAgICBISUdIICAgICAgICAgQSBncmVhdCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dCwgbW9zdCBvZiB0aGVtIG5vdAogICAtLSAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VmdWwgZm9yIHRoZSB1c2VyLgoKICAgU19QcmV0dHlfTmFtZXMgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTkFNRV9DQVNJTkc9IiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFTX0RFQ0xBUkVEICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5EICIgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMT1dFUl9DQVNFICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1uTCAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVBQRVJfQ0FTRSAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItblUgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JWEVEX0NBU0UgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5NIjsKICAgLS0gICAgICAgIC9OQU1FX0NBU0lOR1s9bmFtZS1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmeSB0aGUgY2FzaW5nIG9mIG5hbWVzLgogICAtLSAgICduYW1lLW9wdGlvbicgbWF5IGJlIG9uZSBvZjoKICAgLS0KICAgLS0gICAgICBBU19ERUNMQVJFRCAoRCkgICBOYW1lIGNhc2luZyBmb3IgZGVmaW5pbmcgb2NjdXJyZW5jZXMgYXJlIGFzIHRoZXkKICAgLS0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXIgaW4gdGhlIHNvdXJjZSBmaWxlLgogICAtLQogICAtLSAgICAgIExPV0VSX0NBU0UgICAgICAgIE5hbWVzIGFyZSBpbiBsb3dlciBjYXNlLgogICAtLQogICAtLSAgICAgIFVQUEVSX0NBU0UgICAgICAgIE5hbWVzIGFyZSBpbiB1cHBlciBjYXNlLgogICAtLQogICAtLSAgICAgIE1JWEVEX0NBU0UgICAgICAgIE5hbWVzIGFyZSBpbiBtaXhlZCBjYXNlLgoKICAgU19QcmV0dHlfTm9fQmFja3VwIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9fQkFDS1VQICIgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXJuYiI7CiAgIC0tICAgICAgICAvUkVQTEFDRV9OT19CQUNLVVAKICAgLS0KICAgLS0gICBSZXBsYWNlIHRoZSBhcmd1bWVudCBzb3VyY2Ugd2l0aCB0aGUgcHJldHR5LXByaW50ZWQgc291cmNlIHdpdGhvdXQKICAgLS0gICBjcmVhdGluZyBhbnkgYmFja3VwIGNvcHkgb2YgdGhlIGFyZ3VtZW50IHNvdXJjZS4KCiAgIFNfUHJldHR5X05vX0xhYmVscyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PX01JU1NFRF9MQUJFTFMgIiAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZSI7CiAgIC0tICAgICAgICAvTk9fTUlTU0VEX0xBQkVMUwogICAtLQogICAtLSAgIERvIG5vdCBpbnNlcnQgbWlzc2luZyBlbmQvZXhpdCBsYWJlbHMuIFRoZSBlbmQgbGFiZWwgaXMgdGhlIG5hbWUgb2YKICAgLS0gICBhIGNvbnN0cnVjdCB0aGF0IG1heSBvcHRpb25hbGx5IGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBjb25zdHJ1Y3QuCiAgIC0tICAgVGhpcyBpbmNsdWRlcyB0aGUgbmFtZXMgb2YgcGFja2FnZXMgYW5kIHN1YnByb2dyYW1zLgogICAtLSAgIFNpbWlsYXJseSwgdGhlIGV4aXQgbGFiZWwgaXMgdGhlIG5hbWUgb2YgYSBsb29wIHRoYXQgbWF5IGFwcGVhciBhcyB0aGUKICAgLS0gICBhcmd1bWVudCBvZiBhbiBleGl0IHN0YXRlbWVudCB3aXRoaW4gdGhlIGxvb3AuIEJ5IGRlZmF1bHQsIEdOQVQgUFJFVFRZCiAgIC0tICAgaW5zZXJ0cyB0aGVzZSBlbmQvZXhpdCBsYWJlbHMgd2hlbiB0aGV5IGFyZSBhYnNlbnQgaW4gdGhlIG9yaWdpbmFsCiAgIC0tICAgc291cmNlLiBUaGlzIHF1YWxpZmllciAvTk9fTUlTU0VEX0xBQkVMUyBzdXBwcmVzc2VzIHRoaXMgaW5zZXJ0aW9uLAogICAtLSAgIHNvIHRoYXQgdGhlIGZvcm1hdHRlZCBzb3VyY2UgcmVmbGVjdHMgdGhlIG9yaWdpbmFsLgoKICAgU19QcmV0dHlfTm90YWJzICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9UQUJTICIgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1ub3RhYnMiOwogICAtLSAgICAgICAgL05PVEFCUwogICAtLQogICAtLSAgIFJlcGxhY2UgYWxsIHRhYnVsYXRpb25zIGluIGNvbW1lbnRzIHdpdGggc3BhY2VzLgoKICAgU19QcmV0dHlfT3V0cHV0ICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvT1VUUFVUPUAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1vQCI7CiAgIC0tICAgICAgICAvT1VUUFVUPWZpbGUKICAgLS0KICAgLS0gICBXcml0ZSB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsCiAgIC0tICAgYW4gZXJyb3IgaXMgcmVwb3J0ZWQuCgogICBTX1ByZXR0eV9PdmVycmlkZSAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9PVkVSUklESU5HX1JFUExBQ0UgIiAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXJmIjsKICAgLS0gICAgICAgIC9OT09WRVJSSURJTkdfUkVQTEFDRSAoRCkKICAgLS0gICAgICAgIC9PVkVSUklESU5HX1JFUExBQ0UKICAgLS0KICAgLS0gICBSZXBsYWNlIHRoZSBhcmd1bWVudCBzb3VyY2Ugd2l0aCB0aGUgcHJldHR5LXByaW50ZWQgc291cmNlIGFuZCBjb3B5IHRoZQogICAtLSAgIGFyZ3VtZW50IHNvdXJjZSBpbnRvIGZpbGVuYW1lLk5QUCwgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgZmlsZSBpZgogICAtLSAgIG5lZWRlZC4KCiAgIFNfUHJldHR5X1ByYWdtYSAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BSQUdNQV9DQVNJTkc9IiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNSVhFRF9DQVNFICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1wTSAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTE9XRVJfQ0FTRSAiICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItcEwgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVQUEVSX0NBU0UgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXBVIjsKICAgLS0gICAgICAgIC9QUkFHTUFfQ0FTSU5HWz1wcmFnbWEtb3B0aW9uXQogICAtLQogICAtLSAgIFNldCB0aGUgY2FzZSBvZiBwcmFnbWEgaWRlbnRpZmllcnMuIFRoZSBkZWZhdWx0IGlzIE1peGVkIGNhc2UuCiAgIC0tICAgcHJhZ21hLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgTUlYRURfQ0FTRSAoRCkKICAgLS0gICAgICBMT1dFUl9DQVNFCiAgIC0tICAgICAgVVBQRVJfQ0FTRQoKICAgU19QcmV0dHlfUHJvamVjdCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUFJPSkVDVF9GSUxFPTwiICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVA+IjsKICAgLS0gICAgICAgIC9QUk9KRUNUX0ZJTEU9ZmlsZW5hbWUKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlIG1haW4gcHJvamVjdCBmaWxlIHRvIGJlIHVzZWQuIFRoZSBwcm9qZWN0IGZpbGVzIHJvb3RlZAogICAtLSAgIGF0IHRoZSBtYWluIHByb2plY3QgZmlsZSB3aWxsIGJlIHBhcnNlZCBiZWZvcmUgYW55IG90aGVyIHByb2Nlc3NpbmcgdG8KICAgLS0gICBzZXQgdGhlIGJ1aWxkaW5nIGVudmlyb25tZW50LgoKICAgU19QcmV0dHlfUmVwbGFjZSAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUkVQTEFDRSAiICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1yIjsKICAgLS0gICAgICAgIC9OT1JFUExBQ0UgKEQpCiAgIC0tICAgICAgICAvUkVQTEFDRQogICAtLQogICAtLSAgIFJlcGxhY2UgdGhlIGFyZ3VtZW50IHNvdXJjZSB3aXRoIHRoZSBwcmV0dHktcHJpbnRlZCBzb3VyY2UgYW5kIGNvcHkgdGhlCiAgIC0tICAgYXJndW1lbnQgc291cmNlIGludG8gZmlsZW5hbWUuTlBQLiBJZiBmaWxlbmFtZS5OUFAgYWxyZWFkeSBleGlzdHMsCiAgIC0tICAgcmVwb3J0IGFuIGVycm9yIGFuZCBleGl0LgoKICAgU19QcmV0dHlfUlRTICAgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUlVOVElNRV9TWVNURU09fCIgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLVJUUz18IjsKICAgLS0gICAgICAgIC9SVU5USU1FX1NZU1RFTT14eHgKICAgLS0KICAgLS0gICAgQ29tcGlsZSBhZ2FpbnN0IGFuIGFsdGVybmF0ZSBydW50aW1lIHN5c3RlbSBuYW1lZCB4eHggb3IgUlRTLXh4eC4KCiAgIFNfUHJldHR5X1NlYXJjaCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NFQVJDSD0qIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItSSoiOwogICAtLSAgICAgICAgL1NFQVJDSD0oZGlyZWN0b3J5WywuLi5dKQogICAtLQogICAtLSAgICBXaGVuIGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcyBhbHNvIGxvb2sgaW4gZGlyZWN0b3JpZXMgc3BlY2lmaWVkLgoKICAgU19QcmV0dHlfU3BlY2lmaWMgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU1BFQ0lGSUNfQ0FTSU5HICIgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1ELSI7CiAgIC0tICAgICAgICAvU1BFQ0lGSUNfQ0FTSU5HCiAgIC0tCiAgIC0tICAgRG8gbm90IHVzZSB0aGUgZGVmYXVsdCBkaWN0aW9uYXJ5IGZpbGU7IGluc3RlYWQsIHVzZSB0aGUgY2FzaW5nCiAgIC0tICAgZGVmaW5lZCBieSBhIHF1YWxpZmllciAvTkFNRV9DQVNJTkcgYW5kL29yIGFueSBleHBsaWNpdCBkaWN0aW9uYXJ5CiAgIC0tICAgZmlsZSBzcGVjaWZpZWQgYnkgYSBxdWFsaWZpZXIgL0RJQ1RJT05BUlkuCgogICBTX1ByZXR0eV9TdGFuZGFyZCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9TVEFOREFSRF9PVVRQVVQgIiAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXBpcGUiOwogICAtLSAgICAgICAgL05PU1RBTkRBUkRfT1VUUFVUIChEKQogICAtLSAgICAgICAgL1NUQU5EQVJEX09VVFBVVAogICAtLQogICAtLSAgIFJlZGlyZWN0IHRoZSBvdXRwdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KCiAgIFNfUHJldHR5X1ZlcmJvc2UgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1ZFUkJPU0UgIiAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdiI7CiAgIC0tICAgICAgICAvTk9WRVJCT1NFIChEKQogICAtLSAgICAgICAgL1ZFUkJPU0UKICAgLS0KICAgLS0gICBWZXJib3NlIG1vZGU7IEdOQVQgUFJFVFRZIGdlbmVyYXRlcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCB0aGVuIGEKICAgLS0gICB0cmFjZSBvZiB0aGUgYWN0aW9ucyBpdCB0YWtlcyB0byBwcm9kdWNlIG9yIG9idGFpbiB0aGUgQVNJUyB0cmVlLgoKICAgU19QcmV0dHlfV2FybmluZ3MgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvV0FSTklOR1MgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi13IjsKICAgLS0gICAgICAgIC9OT1dBUk5JTkdTIChEKQogICAtLSAgICAgICAgL1dBUk5JTkdTCiAgIC0tCiAgIC0tICAgSXNzdWUgYSB3YXJuaW5nIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gaWYgaXQgaXMgbm90IHBvc3NpYmxlCiAgIC0tICAgdG8gcHJvdmlkZSB0aGUgcmVxdWlyZWQgbGF5b3V0IGluIHRoZSByZXN1bHQgc291cmNlLgogICAtLSAgIEJ5IGRlZmF1bHQgc3VjaCB3YXJuaW5ncyBhcmUgbm90IGFjdGl2YXRlZC4KCiAgIFByZXR0eV9Td2l0Y2hlcyA6IGFsaWFzZWQgY29uc3RhbnQgU3dpdGNoZXMgOj0KICAgICAoU19QcmV0dHlfQWxpZ24gICAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X0F0dHJpYiAgICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9Db21tZW50cyAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfQ29uZmlnICAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X0NvbnN0ciAgICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9Db21pbmQgICAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfRXh0ICAgICAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X0N1cnJlbnQgICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9EaWNvICAgICAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfRmlsZXMgICAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X0ZvcmNlZCAgICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9Gb3JtZmVlZCAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfSW5kZW50ICAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X0tleXdvcmQgICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9NYXhsZW4gICAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfTWF4aW5kICAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X01lc3MgICAgICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9OYW1lcyAgICAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfTm9fQmFja3VwICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X05vX0xhYmVscyAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9Ob3RhYnMgICAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfT3V0cHV0ICAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X092ZXJyaWRlICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9QcmFnbWEgICAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfUmVwbGFjZSAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X1Byb2plY3QgICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9SVFMgICAgICAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfU2VhcmNoICAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X1NwZWNpZmljICAnQWNjZXNzLAogICAgICBTX1ByZXR0eV9TdGFuZGFyZCAgJ0FjY2VzcywKICAgICAgU19QcmV0dHlfVmVyYm9zZSAgICdBY2Nlc3MsCiAgICAgIFNfUHJldHR5X1dhcm5pbmdzICAnQWNjZXNzKTsKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIC0tIFN3aXRjaGVzIGZvciBHTkFUIFNFVFVQIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBTX1NldHVwX0V4dCAgICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0VYVEVSTkFMX1JFRkVSRU5DRT0iICYgJyInICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItWCIgJiAnIic7CiAgIC0tICAgICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJuYW1lPXZhbCIKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBwcm9qZWN0IG1hbmFnZXIuIFVzZWZ1bCBvbmx5IGlmCiAgIC0tICAgL1BST0pFQ1RfRklMRSBpcyB1c2VkLgogICAtLQogICAtLSAgIEV4YW1wbGU6CiAgIC0tICAgICAgL0VYVEVSTkFMX1JFRkVSRU5DRT0iREVCVUc9VFJVRSIKCiAgIFNfU2V0dXBfTWVzcyAgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTUVTU0FHRVNfUFJPSkVDVF9GSUxFPSIgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVGQVVMVCAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDAgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNRURJVU0gIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMSAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJR0ggIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAyIjsKICAgLS0gICAgICAgIC9NRVNTQUdFU19QUk9KRUNUX0ZJTEVbPW1lc3NhZ2VzLW9wdGlvbl0KICAgLS0KICAgLS0gICBTcGVjaWZpZXMgdGhlICJ2ZXJib3NpdHkiIG9mIHRoZSBwYXJzaW5nIG9mIHByb2plY3QgZmlsZXMuCiAgIC0tICAgbWVzc2FnZXMtb3B0aW9uIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgICBERUZBVUxUIChEKSAgTm8gbWVzc2FnZXMgYXJlIG91dHB1dCBpZiB0aGVyZSBpcyBubyBlcnJvciBvciB3YXJuaW5nLgogICAtLQogICAtLSAgICAgIE1FRElVTSAgICAgICBBIHNtYWxsIG51bWJlciBvZiBtZXNzYWdlcyBhcmUgb3V0cHV0LgogICAtLQogICAtLSAgICAgIEhJR0ggICAgICAgICBBIGdyZWF0IG51bWJlciBvZiBtZXNzYWdlcyBhcmUgb3V0cHV0LCBtb3N0IG9mIHRoZW0gbm90CiAgIC0tICAgICAgICAgICAgICAgICAgIGJlaW5nIHVzZWZ1bCBmb3IgdGhlIHVzZXIuCgogICBTX1NldHVwX1Byb2plY3QgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgYXJlIHBhcnNlZCBhbmQgbm9uIGV4aXN0aW5nIG9iamVjdAogICAtLSAgIGRpcmVjdG9yaWVzLCBsaWJyYXJ5IGRpcmVjdG9yaWVzIGFuZCBleGVjIGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkLgoKICAgU19TZXR1cF9RdWlldCAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9RVUlFVCAiICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1xIjsKICAgLS0gICAgICAgIC9OT1FVSUVUIChEKQogICAtLSAgICAgICAgL1FVSUVUCiAgIC0tCiAgIC0tICAgV29yayBxdWlldGx5LCBvbmx5IG91dHB1dCB3YXJuaW5ncyBhbmQgZXJyb3JzLgoKICAgU19TZXR1cF9WZXJib3NlICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9WRVJCT1NFICIgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXYiOwogICAtLSAgICAgICAgL05PVkVSQk9TRSAoRCkKICAgLS0gICAgICAgIC9WRVJCT1NFCiAgIC0tCiAgIC0tICAgVmVyYm9zZSBtb2RlOyBHTkFUIFBSRVRUWSBnZW5lcmF0ZXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgdGhlbiBhCiAgIC0tICAgdHJhY2Ugb2YgdGhlIGFjdGlvbnMgaXQgdGFrZXMgdG8gcHJvZHVjZSBvciBvYnRhaW4gdGhlIEFTSVMgdHJlZS4KCiAgIFNldHVwX1N3aXRjaGVzIDogYWxpYXNlZCBjb25zdGFudCBTd2l0Y2hlcyA6PQogICAgIChTX1NldHVwX0V4dCAgICAgJ0FjY2VzcywKICAgICAgU19TZXR1cF9NZXNzICAgICdBY2Nlc3MsCiAgICAgIFNfU2V0dXBfUHJvamVjdCAnQWNjZXNzLAogICAgICBTX1NldHVwX1F1aWV0ICAgJ0FjY2VzcywKICAgICAgU19TZXR1cF9WZXJib3NlICdBY2Nlc3MpOwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIC0tIFN3aXRjaGVzIGZvciBHTkFUIFNIQVJFRCAtLQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIFNfU2hhcmVkX0RlYnVnICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9ERUJVRz0iICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUxMICIgICAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZzMgIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5PTkUgIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWcwICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUUkFDRUJBQ0sgIiAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nMSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9UUkFDRUJBQ0sgIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZzAiOwogICAtLSAgICAgICAgL0RFQlVHWz1kZWJ1Zy1vcHRpb25dCiAgIC0tICAgICAgICAvTk9ERUJVRwogICAtLQogICAtLSAgIFNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbmNsdWRlZC4gJ2RlYnVnLW9wdGlvbicKICAgLS0gICBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgLS0KICAgLS0gICAgICAgIEFMTCAoRCkgICAgICBJbmNsdWRlIGZ1bGwgZGVidWdnaW5nIGluZm9ybWF0aW9uLgogICAtLQogICAtLSAgICAgICAgTk9ORSAgICAgICAgIFByb3ZpZGUgbm8gZGVidWdnaW5nIGluZm9ybWF0aW9uLiBTYW1lIGFzIC9OT0RFQlVHLgogICAtLQogICAtLSAgICAgICAgVFJBQ0VCQUNLICAgIFByb3ZpZGUgc3VmZmljaWVudCBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgYSB0cmFjZWJhY2suCiAgIC0tCiAgIC0tICAgICAgICBOT1RSQUNFQkFDSyAgU2FtZSBhcyBOT05FLgoKICAgU19TaGFyZWRfSW1hZ2UgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvSU1BR0U9QCIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItb0AiOwogICAtLSAgICAgICAgL0lNQUdFPWltYWdlLW5hbWUKICAgLS0KICAgLS0gICAnaW1hZ2UtbmFtZScgc3BlY2lmaWVzIHRoZSBuYW1lIGZvciB0aGUgZ2VuZXJhdGVkIHNoYXJlZCBsaWJyYXJ5LgoKICAgU19TaGFyZWRfSWRlbnQgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0lERU5USUZJQ0FUSU9OPSIgJiAnIicgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZvci1saW5rZXI9SURFTlQ9IiAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyInOwogICAtLSAgICAgICAgL0lERU5USUZJQ0FUSU9OPSI8c3RyaW5nPiIKICAgLS0KICAgLS0gICAiPHN0cmluZz4iIHNwZWNpZmllcyB0aGUgc3RyaW5nIHRvIGJlIHN0b3JlZCBpbiB0aGUgaW1hZ2UgZmlsZSBpZGVudC0KICAgLS0gICBpZmljYXRpb24gZmllbGQgaW4gdGhlIGltYWdlIGhlYWRlci4gSXQgb3ZlcnJpZGVzIGFueSBwcmFnbWEgSWRlbnQKICAgLS0gICBzcGVjaWZpZWQgc3RyaW5nLgoKICAgU19TaGFyZWRfTm9maWxlcyA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL05PU1RBUlRfRklMRVMgIiAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbm9zdGFydGZpbGVzIjsKICAgLS0gICAgICAgIC9OT1NUQVJUX0ZJTEVTCiAgIC0tCiAgIC0tICAgTGluayBpbiBkZWZhdWx0IGltYWdlIGluaXRpYWxpemF0aW9uIGFuZCBzdGFydHVwIGZ1bmN0aW9ucy4KCiAgIFNfU2hhcmVkX05vaW5oaWIgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT0lOSElCSVQtSU1BR0UgIiAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3ItbGlua2VyPS0tbm9pbmhpYml0LWV4ZWMiOwogICAtLSAgICAgICAgL05PSU5ISUJJVC1JTUFHRQogICAtLQogICAtLSAgIERlbGV0ZSBpbWFnZSBpZiB0aGVyZSBhcmUgZXJyb3JzIG9yIHdhcm5pbmdzLgoKICAgU19TaGFyZWRfVmVyYiAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1ZFUkJPU0UgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdiI7CiAgIC0tICAgICAgICAvTk9WRVJCT1NFIChEKQogICAtLSAgICAgICAgL1ZFUkJPU0UKICAgLS0KICAgLS0gICBDYXVzZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBvdXRwdXQsIGluY2x1ZGluZyBhIGZ1bGwgbGlzdCBvZgogICAtLSAgIHRoZSBpbmNsdWRlZCBvYmplY3QgZmlsZXMuIFRoaXMgc3dpdGNoIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCB3aGVuIHlvdQogICAtLSAgIHdhbnQgdG8gc2VlIHdoYXQgc2V0IG9mIG9iamVjdCBmaWxlcyBhcmUgYmVpbmcgdXNlZCBpbiB0aGUgbGluayBzdGVwLgoKICAgU19TaGFyZWRfWlpaWlogICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiLzxvdGhlcj4gIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZvci1saW5rZXI9IjsKICAgLS0gICAgICAgIC88b3RoZXI+CiAgIC0tCiAgIC0tICAgQW55IG90aGVyIHN3aXRjaCB0cmFuc21pdHRlZCB0byB0aGUgdW5kZXJseWluZyBsaW5rZXIuCgogICBTaGFyZWRfU3dpdGNoZXMgOiBhbGlhc2VkIGNvbnN0YW50IFN3aXRjaGVzIDo9CiAgICAgKFNfU2hhcmVkX0RlYnVnICAgJ0FjY2VzcywKICAgICAgU19TaGFyZWRfSW1hZ2UgICAnQWNjZXNzLAogICAgICBTX1NoYXJlZF9JZGVudCAgICdBY2Nlc3MsCiAgICAgIFNfU2hhcmVkX05vZmlsZXMgJ0FjY2VzcywKICAgICAgU19TaGFyZWRfTm9pbmhpYiAnQWNjZXNzLAogICAgICBTX1NoYXJlZF9WZXJiICAgICdBY2Nlc3MsCiAgICAgIFNfU2hhcmVkX1paWlpaICAgJ0FjY2Vzcyk7CgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIC0tIFN3aXRjaGVzIGZvciBHTkFUIFNUVUIgLS0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgU19TdHViX0NvbmZpZyAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9DT05GSUdVUkFUSU9OX1BSQUdNQVNfRklMRT08IiAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZ25hdGVjPiI7CiAgIC0tICAgICAgICAvQ09ORklHVVJBVElPTl9QUkFHTUFTX0ZJTEU9ZmlsZXNwZWMKICAgLS0KICAgLS0gICBTcGVjaWZpZXMgYSBjb25maWd1cmF0aW9uIHByYWdtYXMgZmlsZSB0aGF0IG11c3QgYmUgdGFrZW4gaW50byBhY2NvdW50CiAgIC0tICAgd2hlbiBjb21waWxpbmcuCgogICBTX1N0dWJfQ3VycmVudCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0NVUlJFTlRfRElSRUNUT1JZICIgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiEtSS0iOwogICAtLSAgICAgICAgL0NVUlJFTlRfRElSRUNUT1JZIChEKQogICAtLSAgICAgICAgL05PQ1VSUkVOVF9ESVJFQ1RPUlkKICAgLS0KICAgLS0gICBMb29rIGZvciBzb3VyY2UsIGxpYnJhcnkgb3Igb2JqZWN0IGZpbGVzIGluIHRoZSBkZWZhdWx0IGRpcmVjdG9yeS4KCiAgIFNfU3R1Yl9FeHQgICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvRVhURVJOQUxfUkVGRVJFTkNFPSIgJiAnIicgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVgiICYgJyInOwogICAtLSAgICAgICAgL0VYVEVSTkFMX1JFRkVSRU5DRT0ibmFtZT12YWwiCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIGFuIGV4dGVybmFsIHJlZmVyZW5jZSB0byB0aGUgcHJvamVjdCBtYW5hZ2VyLiBVc2VmdWwgb25seSBpZgogICAtLSAgIC9QUk9KRUNUX0ZJTEUgaXMgdXNlZC4KICAgLS0KICAgLS0gICBFeGFtcGxlOgogICAtLSAgICAgIC9FWFRFUk5BTF9SRUZFUkVOQ0U9IkRFQlVHPVRSVUUiCgogICBTX1N0dWJfRnVsbCAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0ZVTEwgIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1mIjsKICAgLS0gICAgICAgIC9OT0ZVTEwgKEQpCiAgIC0tICAgICAgICAvRlVMTAogICAtLQogICAtLSAgIElmIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgYWxyZWFkeSBjb250YWlucyBhIGZpbGUgd2l0aCB0aGUgbmFtZSBvZgogICAtLSAgIHRoZSBib2R5IGZpbGUgZm9yIHRoZSBhcmd1bWVudCBmaWxlIHNwZWMsIHJlcGxhY2UgaXQgd2l0aCB0aGUgZ2VuZXJhdGVkCiAgIC0tICAgYm9keSBzdHViLiBJZiAvRlVMTCBpcyBub3QgdXNlZCBhbmQgdGhlcmUgaXMgYWxyZWFkeSBhIGJvZHkgZmlsZSwgdGhpcwogICAtLSAgIGV4aXN0aW5nIGJvZHkgZmlsZSBpcyBub3QgcmVwbGFjZWQuCgogICBTX1N0dWJfSGVhZGVyICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0hFQURFUj0iICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdFTkVSQUwgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWhnICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTUEVDICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1ocyI7CiAgIC0tICAgICAgICAvSEVBREVSWz1oZWFkZXItb3B0aW9uXQogICAtLQogICAtLSAgIFNwZWNpZmllcyB0aGUgZm9ybSBvZiB0aGUgY29tbWVudCBoZWFkZXIgYWJvdmUgdGhlIGdlbmVyYXRlZCBib2R5IHN0dWIuCiAgIC0tICAgSWYgbm8gL0hFQURFUiBxdWFsaWZpZXIgaXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBubyBjb21tZW50IGhlYWRlci4KICAgLS0gICBoZWFkZXItb3B0aW9uIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAtLQogICAtLQogICAtLSAgICAgIEdFTkVSQUwgKEQpICBQdXQgYSBzYW1wbGUgY29tbWVudCBoZWFkZXIgaW50byB0aGUgYm9keSBzdHViLgogICAtLQogICAtLSAgICAgIFNQRUMgICAgICAgICBQdXQgdGhlIGNvbW1lbnQgaGVhZGVyIChpLmUuLCBhbGwgdGhlIGNvbW1lbnRzCiAgIC0tICAgICAgICAgICAgICAgICAgIHByZWNlZGluZyB0aGUgY29tcGlsYXRpb24gdW5pdCkgZnJvbSB0aGUgc291cmNlIG9mIHRoZQogICAtLSAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IHVuaXQgZGVjbGFyYXRpb24gaW50byB0aGUgYm9keSBzdHViLgoKICAgU19TdHViX0luZGVudCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9JTkRFTlRBVElPTj0jIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItaSMiOwogICAtLSAgICAgICAgL0lOREVOVEFUSU9OPW5ubgogICAtLQogICAtLSAgIChubm4gaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlcikuIFNldCB0aGUgaW5kZW50YXRpb24gbGV2ZWwgaW4gdGhlCiAgIC0tICAgZ2VuZXJhdGVkIGJvZHkgc3R1YiB0byBubm4uIG5ubj0wIG1lYW5zICJubyBpbmRlbnRhdGlvbiIuCiAgIC0tICAgRGVmYXVsdCBpbnNkZW50YXRpb24gaXMgMy4KCiAgIFNfU3R1Yl9LZWVwICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvS0VFUCAiICAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWsiOwogICAtLSAgICAgICAgL05PS0VFUCAoRCkKICAgLS0gICAgICAgIC9LRUVQCiAgIC0tCiAgIC0tICAgRG8gbm90IGRlbGV0ZSB0aGUgdHJlZSBmaWxlIChpLmUuLCB0aGUgc25hcHNob3Qgb2YgdGhlIGNvbXBpbGVyCiAgIC0tICAgaW50ZXJuYWwgc3RydWN0dXJlcyB1c2VkIGJ5IGduYXRzdHViKSBhZnRlciBjcmVhdGluZyB0aGUgYm9keSBzdHViLgoKICAgU19TdHViX0xlbmd0aCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9MSU5FX0xFTkdUSD0jIiAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbCMiOwogICAtLSAgICAgICAgL0xJTkVfTEVOR1RIPW5ubgogICAtLQogICAtLSAgIChuIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIpLiBTZXQgdGhlIG1heGltdW0gbGluZSBsZW5ndGggaW4gdGhlIGJvZHkKICAgLS0gICBzdHViIHRvIG5ubi4gRGVmYXVsdCBpcyA3OC4KCiAgIFNfU3R1Yl9NZXNzICAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTUVTU0FHRVNfUFJPSkVDVF9GSUxFPSIgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVGQVVMVCAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAwICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1FRElVTSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMSAiICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJISUdIICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDIiOwogICAtLSAgICAgICAgL01FU1NBR0VTX1BST0pFQ1RfRklMRVs9bWVzc2FnZXMtb3B0aW9uXQogICAtLQogICAtLSAgIFNwZWNpZmllcyB0aGUgInZlcmJvc2l0eSIgb2YgdGhlIHBhcnNpbmcgb2YgcHJvamVjdCBmaWxlcy4KICAgLS0gICBtZXNzYWdlcy1vcHRpb24gbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAtLQogICAtLSAgICAgIERFRkFVTFQgKEQpICBObyBtZXNzYWdlcyBhcmUgb3V0cHV0IGlmIHRoZXJlIGlzIG5vIGVycm9yIG9yIHdhcm5pbmcuCiAgIC0tCiAgIC0tICAgICAgTUVESVVNICAgICAgIEEgc21hbGwgbnVtYmVyIG9mIG1lc3NhZ2VzIGFyZSBvdXRwdXQuCiAgIC0tCiAgIC0tICAgICAgSElHSCAgICAgICAgIEEgZ3JlYXQgbnVtYmVyIG9mIG1lc3NhZ2VzIGFyZSBvdXRwdXQsIG1vc3Qgb2YgdGhlbSBub3QKICAgLS0gICAgICAgICAgICAgICAgICAgYmVpbmcgdXNlZnVsIGZvciB0aGUgdXNlci4KCiAgIFNfU3R1Yl9PdXRwdXQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvT1VUUFVUPUAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW9AIjsKICAgLS0gICAgICAgIC9PVVRQVVQ9ZmlsZXNwZWMKICAgLS0KICAgLS0gICBCb2R5IGZpbGUgbmFtZS4gVGhpcyBzaG91bGQgYmUgc2V0IGlmIHRoZSBhcmd1bWVudCBmaWxlIG5hbWUgZG9lcyBub3QKICAgLS0gICBmb2xsb3cgdGhlIEdOQVQgZmlsZSBuYW1pbmcgY29udmVudGlvbnMuIElmIHRoaXMgc3dpdGNoIGlzIG9taXR0ZWQsCiAgIC0tICAgdGhlIGRlZmF1bHQgbmFtZSBmb3IgdGhlIGJvZHkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBhcmd1bWVudCBmaWxlCiAgIC0tICAgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIEdOQVQgZmlsZSBuYW1pbmcgY29udmVudGlvbnMuCgogICBTX1N0dWJfUHJvamVjdCA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgd2lsbCBiZSBwYXJzZWQgYmVmb3JlIGFueSBvdGhlciBwcm9jZXNzaW5nLgogICAtLSAgIFRoZSBzb3VyY2UgYW5kIG9iamVjdCBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCB3aWxsIGJlIGNvbW11bmljYXRlZAogICAtLSAgIHRvIGduYXRzdHViIHRocm91Z2ggbG9naWNhbCBuYW1lcyBBREFfUFJKX0lOQ0xVREVfRklMRSBhbmQKICAgLS0gICBBREFfUFJKX09CSkVDVFNfRklMRS4KCiAgIFNfU3R1Yl9RdWlldCAgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUVVJRVQgIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXEiOwogICAtLSAgICAgICAgL05PUVVJRVQgKEQpCiAgIC0tICAgICAgICAvUVVJRVQKICAgLS0KICAgLS0gICBRdWlldCBtb2RlOiBkbyBub3QgZ2VuZXJhdGUgYSBjb25maXJtYXRpb24gd2hlbiBhIGJvZHkgaXMgc3VjY2Vzc2Z1bGx5CiAgIC0tICAgY3JlYXRlZCwgYW5kIGRvIG5vdCBnZW5lcmF0ZSBhIG1lc3NhZ2Ugd2hlbiBhIGJvZHkgaXMgbm90IHJlcXVpcmVkIGZvcgogICAtLSAgIGFuIGFyZ3VtZW50IHVuaXQuCgogICBTX1N0dWJfU2VhcmNoICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1NFQVJDSD0qIiAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1JKiI7CiAgIC0tICAgICAgICAvU0VBUkNIPShkaXJlY3RvcnlbLC4uLl0pCiAgIC0tCiAgIC0tICAgIFdoZW4gbG9va2luZyBmb3Igc291cmNlIGZpbGVzIGFsc28gbG9vayBpbiBkaXJlY3RvcmllcyBzcGVjaWZpZWQuCgogICBTX1N0dWJfVHJlZSAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1RSRUVfRklMRT0iICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9WRVJXUklURSAiICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXQgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTQVZFICIgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1rICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUkVVU0UgIiAgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItciI7CiAgIC0tICAgICAgICAvVFJFRV9GSUxFWz10cmVlZmlsZS1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmeSB3aGF0IHRvIGRvIHdpdGggdGhlIHRyZWUgZmlsZS4KICAgLS0gICB0cmVlZmlsZS1vcHRpb24gaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgT1ZFUldSSVRFIChEKSAgT3ZlcndyaXRlIHRoZSBleGlzdGluZyB0cmVlIGZpbGUuIElmIHRoZSBjdXJyZW50CiAgIC0tICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFscmVhZHkgY29udGFpbnMgdGhlIGZpbGUgd2hpY2gsIGFjY29yZGluZwogICAtLSAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBHTkFUIGZpbGUgbmFtaW5nIHJ1bGVzIHNob3VsZCBiZSBjb25zaWRlcmVkCiAgIC0tICAgICAgICAgICAgICAgICAgICAgYXMgYSB0cmVlIGZpbGUgZm9yIHRoZSBhcmd1bWVudCBzb3VyY2UgZmlsZSwKICAgLS0gICAgICAgICAgICAgICAgICAgICBnbmF0c3R1YiB3aWxsIHJlZnVzZSB0byBjcmVhdGUgdGhlIHRyZWUgZmlsZSBuZWVkZWQKICAgLS0gICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgYSBzYW1wbGUgYm9keSB1bmxlc3MgdGhpcyBvcHRpb24gaXMgY2hvc2VuLgogICAtLQogICAtLSAgICAgIFNBVkUgICAgICAgICAgIERvIG5vdCByZW1vdmUgdGhlIHRyZWUgZmlsZSAoaS5lLiwgdGhlIHNuYXBzaG90CiAgIC0tICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvbXBpbGVyIGludGVybmFsIHN0cnVjdHVyZXMgdXNlZCBieSBnbmF0c3R1YikKICAgLS0gICAgICAgICAgICAgICAgICAgICBhZnRlciBjcmVhdGluZyB0aGUgYm9keSBzdHViLgogICAtLQogICAtLSAgICAgIFJFVVNFICAgICAgICAgIFJldXNlIHRoZSB0cmVlIGZpbGUgKGlmIGl0IGV4aXN0cykgaW5zdGVhZCBvZgogICAtLSAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW5nIGl0LgogICAtLSAgICAgICAgICAgICAgICAgICAgIEluc3RlYWQgb2YgY3JlYXRpbmcgdGhlIHRyZWUgZmlsZSBmb3IgdGhlIGxpYnJhcnkKICAgLS0gICAgICAgICAgICAgICAgICAgICB1bml0IGRlY2xhcmF0aW9uLCBnbmF0c3R1YiB0cmllcyB0byBmaW5kIGl0IGluIHRoZQogICAtLSAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCB1c2UgaXQgZm9yIGNyZWF0aW5nIGEgYm9keS4KICAgLS0gICAgICAgICAgICAgICAgICAgICBJZiB0aGUgdHJlZSBmaWxlIGlzIG5vdCBmb3VuZCwgbm8gYm9keSBpcyBjcmVhdGVkLgogICAtLSAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGFsc28gaW1wbGllcyBgU0FWRScsIHdoZXRoZXIgb3Igbm90IHRoZQogICAtLSAgICAgICAgICAgICAgICAgICAgIGxhdHRlciBpcyBzZXQgZXhwbGljaXRseS4KCiAgIFNfU3R1Yl9WZXJib3NlIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVkVSQk9TRSAiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXYiOwogICAtLSAgICAgICAgL05PVkVSQk9TRSAoRCkKICAgLS0gICAgICAgIC9WRVJCT1NFCiAgIC0tCiAgIC0tICAgVmVyYm9zZSBtb2RlOiBnZW5lcmF0ZSB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKICAgU3R1Yl9Td2l0Y2hlcyA6IGFsaWFzZWQgY29uc3RhbnQgU3dpdGNoZXMgOj0KICAgICAoU19TdHViX0NvbmZpZyAgJ0FjY2VzcywKICAgICAgU19TdHViX0N1cnJlbnQgJ0FjY2VzcywKICAgICAgU19TdHViX0V4dCAgICAgJ0FjY2VzcywKICAgICAgU19TdHViX0Z1bGwgICAgJ0FjY2VzcywKICAgICAgU19TdHViX0hlYWRlciAgJ0FjY2VzcywKICAgICAgU19TdHViX0luZGVudCAgJ0FjY2VzcywKICAgICAgU19TdHViX0tlZXAgICAgJ0FjY2VzcywKICAgICAgU19TdHViX0xlbmd0aCAgJ0FjY2VzcywKICAgICAgU19TdHViX01lc3MgICAgJ0FjY2VzcywKICAgICAgU19TdHViX091dHB1dCAgJ0FjY2VzcywKICAgICAgU19TdHViX1Byb2plY3QgJ0FjY2VzcywKICAgICAgU19TdHViX1F1aWV0ICAgJ0FjY2VzcywKICAgICAgU19TdHViX1NlYXJjaCAgJ0FjY2VzcywKICAgICAgU19TdHViX1RyZWUgICAgJ0FjY2VzcywKICAgICAgU19TdHViX1ZlcmJvc2UgJ0FjY2Vzcyk7CgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIC0tIFN3aXRjaGVzIGZvciBHTkFUIFhSRUYgLS0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgU19YcmVmX0FsbCAgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9BTExfRklMRVMgIiAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYSI7CiAgIC0tICAgICAgICAvTk9BTExfRklMRVMgKEQpCiAgIC0tICAgICAgICAvQUxMX0ZJTEVTCiAgIC0tCiAgIC0tICAgSWYgdGhpcyBzd2l0Y2ggaXMgcHJlc2VudCwgRklORCBhbmQgWFJFRiB3aWxsIHBhcnNlIHRoZSByZWFkLW9ubHkKICAgLS0gICBmaWxlcyBmb3VuZCBpbiB0aGUgbGlicmFyeSBzZWFyY2ggcGF0aC4gT3RoZXJ3aXNlLCB0aGVzZSBmaWxlcyB3aWxsCiAgIC0tICAgYmUgaWdub3JlZC4gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcHJvdGVjdCBHbmF0IHNvdXJjZXMgb3IgeW91cgogICAtLSAgIG93biBsaWJyYXJpZXMgZnJvbSBiZWluZyBwYXJzZWQsIHRodXMgbWFraW5nIEZJTkQgYW5kIFhSRUYgbXVjaAogICAtLSAgIGZhc3RlciwgYW5kIHRoZWlyIG91dHB1dCBtdWNoIHNtYWxsZXIuCgogICBTX1hyZWZfRGVyaXYgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0RFUklWRURfVFlQRVMgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1kIjsKICAgLS0gICAgICAgIC9OT0RFUklWRURfVFlQRVMgKEQpCiAgIC0tICAgICAgICAvREVSSVZFRF9UWVBFUwogICAtLQogICAtLSAgIE91dHB1dCB0aGUgcGFyZW50IHR5cGUgcmVmZXJlbmNlIGZvciBlYWNoIG1hdGNoaW5nIGRlcml2ZWQgdHlwZXMuCgogICBTX1hyZWZfRXh0ICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0VYVEVSTkFMX1JFRkVSRU5DRT0iICYgJyInICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1YIiAmICciJzsKICAgLS0gICAgICAgIC9FWFRFUk5BTF9SRUZFUkVOQ0U9Im5hbWU9dmFsIgogICAtLQogICAtLSAgIFNwZWNpZmllcyBhbiBleHRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIHByb2plY3QgbWFuYWdlci4gVXNlZnVsIG9ubHkgaWYKICAgLS0gICAvUFJPSkVDVF9GSUxFIGlzIHVzZWQuCiAgIC0tCiAgIC0tICAgRXhhbXBsZToKICAgLS0gICAgICAvRVhURVJOQUxfUkVGRVJFTkNFPSJERUJVRz1UUlVFIgoKICAgU19YcmVmX0Z1bGwgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9GVUxMX1BBVEhOQU1FICIgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZiI7CiAgIC0tICAgICAgICAvTk9GVUxMX1BBVEhOQU1FIChEKQogICAtLSAgICAgICAgL0ZVTExfUEFUSE5BTUUKICAgLS0KICAgLS0gICBJZiB0aGlzIHN3aXRjaCBpcyBzZXQsIHRoZSBvdXRwdXQgZmlsZSBuYW1lcyB3aWxsIGJlIHByZWNlZGVkIGJ5IHRoZWlyCiAgIC0tICAgZGlyZWN0b3J5IChpZiB0aGUgZmlsZSB3YXMgZm91bmQgaW4gdGhlIHNlYXJjaCBwYXRoKS4gSWYgdGhpcyBzd2l0Y2gKICAgLS0gICBpcyBub3Qgc2V0LCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIHByaW50ZWQuCgogICBTX1hyZWZfR2xvYmFsICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL0lHTk9SRV9MT0NBTFMgIiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1nIjsKICAgLS0gICAgICAgIC9OT0lHTk9SRV9MT0NBTFMgKEQpCiAgIC0tICAgICAgICAvSUdOT1JFX0xPQ0FMUwogICAtLQogICAtLSAgIElmIHRoaXMgc3dpdGNoIGlzIHNldCwgaW5mb3JtYXRpb24gaXMgb3V0cHV0IG9ubHkgZm9yIGxpYnJhcnktbGV2ZWwKICAgLS0gICBlbnRpdGllcywgaWdub3JpbmcgbG9jYWwgZW50aXRpZXMuIFRoZSB1c2Ugb2YgdGhpcyBzd2l0Y2ggbWF5CiAgIC0tICAgYWNjZWxlcmF0ZSBGSU5EIGFuZCBYUkVGLgoKICAgU19YcmVmX01lc3MgICAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9NRVNTQUdFU19QUk9KRUNUX0ZJTEU9IiAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERUZBVUxUICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12UDAgIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUVESVVNICIgICAgICAgICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItdlAxICIgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJR0ggIiAgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXZQMiI7CiAgIC0tICAgICAgICAvTUVTU0FHRVNfUFJPSkVDVF9GSUxFWz1tZXNzYWdlcy1vcHRpb25dCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSAidmVyYm9zaXR5IiBvZiB0aGUgcGFyc2luZyBvZiBwcm9qZWN0IGZpbGVzLgogICAtLSAgIG1lc3NhZ2VzLW9wdGlvbiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgIC0tCiAgIC0tICAgICAgREVGQVVMVCAoRCkgIE5vIG1lc3NhZ2VzIGFyZSBvdXRwdXQgaWYgdGhlcmUgaXMgbm8gZXJyb3Igb3Igd2FybmluZy4KICAgLS0KICAgLS0gICAgICBNRURJVU0gICAgICAgQSBzbWFsbCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dC4KICAgLS0KICAgLS0gICAgICBISUdIICAgICAgICAgQSBncmVhdCBudW1iZXIgb2YgbWVzc2FnZXMgYXJlIG91dHB1dCwgbW9zdCBvZiB0aGVtIG5vdAogICAtLSAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VmdWwgZm9yIHRoZSB1c2VyLgoKICAgU19YcmVmX05vc3RpbmMgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9OT1NURF9JTkNMVURFUyAiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbm9zdGRpbmMiOwogICAtLSAgICAgICAgL05PU1REX0lOQ0xVREVTCiAgIC0tCiAgIC0tICAgRG8gbm90IGxvb2sgZm9yIHNvdXJjZXMgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IGRpcmVjdG9yeS4KCiAgIFNfWHJlZl9Ob3N0bGliIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvTk9TVERfTElCUkFSSUVTICIgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLW5vc3RkbGliIjsKICAgLS0gICAgICAgIC9OT1NURF9MSUJSQVJJRVMKICAgLS0KICAgLS0gICBEbyBub3QgbG9vayBmb3IgbGlicmFyeSBmaWxlcyBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgZGlyZWN0b3J5LgoKICAgU19YcmVmX09iamVjdCAgOiBhbGlhc2VkIGNvbnN0YW50IFMgOj0gIi9PQkpFQ1RfU0VBUkNIPSoiICAgICAgICAgICAgICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYU8qIjsKICAgLS0gICAgICAgIC9PQkpFQ1RfU0VBUkNIPShkaXJlY3RvcnksLi4uKQogICAtLQogICAtLSAgIFdoZW4gc2VhcmNoaW5nIGZvciBsaWJyYXJ5IGFuZCBvYmplY3QgZmlsZXMsIGxvb2sgaW4gdGhlIHNwZWNpZmllZAogICAtLSAgIGRpcmVjdG9yaWVzLiBUaGUgb3JkZXIgaW4gd2hpY2ggbGlicmFyeSBmaWxlcyBhcmUgc2VhcmNoZWQgaXMgdGhlIHNhbWUKICAgLS0gICBhcyBmb3IgTUFLRS4KCiAgIFNfWHJlZl9Qcm9qZWN0IDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvUFJPSkVDVD1AIiAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXBAIjsKICAgLS0gICAgICAgIC9QUk9KRUNUPWZpbGUKICAgLS0KICAgLS0gICBTcGVjaWZ5IGEgcHJvamVjdCBmaWxlIHRvIHVzZS4gQnkgZGVmYXVsdCwgRklORCBhbmQgWFJFRiB3aWxsIHRyeSB0bwogICAtLSAgIGxvY2F0ZSBhIHByb2plY3QgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgIC0tCiAgIC0tICAgSWYgYSBwcm9qZWN0IGZpbGUgaXMgZWl0aGVyIHNwZWNpZmllZCBvciBmb3VuZCBieSB0aGUgdG9vbHMsIHRoZW4gdGhlCiAgIC0tICAgY29udGVudCBvZiB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQgb2JqZWN0IGRpcmVjdG9yeSBsaW5lcyBhcmUgYWRkZWQKICAgLS0gICBhcyBpZiB0aGV5IGhhZCBiZWVuIHNwZWNpZmllZCByZXNwZWN0aXZlbHkgYnkgL1NPVVJDRV9TRUFSQ0ggYW5kCiAgIC0tICAgL09CSkVDVF9TRUFSQ0guCgogICBTX1hyZWZfUHJqICAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1BST0pFQ1RfRklMRT08IiAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1QPiI7CiAgIC0tICAgICAgICAvUFJPSkVDVF9GSUxFPWZpbGVuYW1lCiAgIC0tCiAgIC0tICAgU3BlY2lmaWVzIHRoZSBtYWluIHByb2plY3QgZmlsZSB0byBiZSB1c2VkLiBUaGUgcHJvamVjdCBmaWxlcyByb290ZWQKICAgLS0gICBhdCB0aGUgbWFpbiBwcm9qZWN0IGZpbGUgd2lsbCBiZSBwYXJzZWQgYmVmb3JlIGRvaW5nIGFueSBwcm9jZXNzaW5nLgogICAtLSAgIFRoZSBzb3VyY2UgYW5kIG9iamVjdCBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCB3aWxsIGJlIGNvbW11bmljYXRlZAogICAtLSAgIHRvIGduYXR4cmVmIHRocm91Z2ggbG9naWNhbCBuYW1lcyBBREFfUFJKX0lOQ0xVREVfRklMRSBhbmQKICAgLS0gICBBREFfUFJKX09CSkVDVFNfRklMRS4KCiAgIFNfWHJlZl9TZWFyY2ggIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU0VBUkNIPSoiICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUkqIjsKICAgLS0gICAgICAgIC9TRUFSQ0g9KGRpcmVjdG9yeSwuLi4pCiAgIC0tCiAgIC0tICAgRXF1aXZhbGVudCB0bzoKICAgLS0gICAgICAgICAgIC9PQkpFQ1RfU0VBUkNIPShkaXJlY3RvcnksLi4uKSAvU09VUkNFX1NFQVJDSD0oZGlyZWN0b3J5LC4uLikKCiAgIFNfWHJlZl9Tb3VyY2UgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvU09VUkNFX1NFQVJDSD0qIiAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWFJKiI7CiAgIC0tICAgICAgICAvU09VUkNFX1NFQVJDSD0oZGlyZWN0b3J5LC4uLikKICAgLS0KICAgLS0gICBXaGVuIGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcyBhbHNvIGxvb2sgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcmllcy4KICAgLS0gICBUaGUgb3JkZXIgaW4gd2hpY2ggc291cmNlIGZpbGUgc2VhcmNoIGlzIHVuZGVydGFrZW4gaXMgdGhlIHNhbWUgYXMgZm9yCiAgIC0tICAgTUFLRS4KCiAgIFNfWHJlZl9PdXRwdXQgIDogYWxpYXNlZCBjb25zdGFudCBTIDo9ICIvVU5VU0VEICIgICAgICAgICAgICAgICAgICAgICAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXUiOwogICAtLSAgICAgICAgL1NPVVJDRV9TRUFSQ0g9KGRpcmVjdG9yeSwuLi4pCiAgIC0tCiAgIC0tICAgV2hlbiBsb29raW5nIGZvciBzb3VyY2UgZmlsZXMgYWxzbyBsb29rIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3JpZXMuCiAgIC0tICAgVGhlIG9yZGVyIGluIHdoaWNoIHNvdXJjZSBmaWxlIHNlYXJjaCBpcyB1bmRlcnRha2VuIGlzIHRoZSBzYW1lIGFzIGZvcgogICAtLSAgIE1BS0UuCgogICBTX1hyZWZfVGFncyAgICA6IGFsaWFzZWQgY29uc3RhbnQgUyA6PSAiL1RBR1MgIiAgICAgICAgICAgICAgICAgICAgICAgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi12IjsKICAgLS0gICAgICAgIC9OT1RBR1MgKEQpCiAgIC0tICAgICAgICAvVEFHUwogICAtLQogICAtLSAgIFByaW50IGEgJ3RhZ3MnIGZpbGUgZm9yIHZpLgoKICAgWHJlZl9Td2l0Y2hlcyA6IGFsaWFzZWQgY29uc3RhbnQgU3dpdGNoZXMgOj0KICAgICAoU19YcmVmX0FsbCAgICAgJ0FjY2VzcywKICAgICAgU19YcmVmX0Rlcml2ICAgJ0FjY2VzcywKICAgICAgU19YcmVmX0V4dCAgICAgJ0FjY2VzcywKICAgICAgU19YcmVmX0Z1bGwgICAgJ0FjY2VzcywKICAgICAgU19YcmVmX0dsb2JhbCAgJ0FjY2VzcywKICAgICAgU19YcmVmX01lc3MgICAgJ0FjY2VzcywKICAgICAgU19YcmVmX05vc3RpbmMgJ0FjY2VzcywKICAgICAgU19YcmVmX05vc3RsaWIgJ0FjY2VzcywKICAgICAgU19YcmVmX09iamVjdCAgJ0FjY2VzcywKICAgICAgU19YcmVmX1Byb2plY3QgJ0FjY2VzcywKICAgICAgU19YcmVmX1ByaiAgICAgJ0FjY2VzcywKICAgICAgU19YcmVmX1NlYXJjaCAgJ0FjY2VzcywKICAgICAgU19YcmVmX1NvdXJjZSAgJ0FjY2VzcywKICAgICAgU19YcmVmX091dHB1dCAgJ0FjY2VzcywKICAgICAgU19YcmVmX1RhZ3MgICAgJ0FjY2Vzcyk7CgplbmQgVk1TX0RhdGE7Cg==