YQ0NCgAAAABGGnxj6RgAAOMAAAAAAAAAAAAAAAAAAAAAAwAAAEAAAABzXAAAAGQAWgBkAWQCbAFtAloCAQBkA2QEhABaA2QUZAZkB4QBWgRkCGQJhABaBWQKZAuEAFoGZBVkDGQNhAFaB2QWZA5kD4QBWghkF2QQZBGEAVoJZBJkE4QAWgpkBVMAKRh6ngpyZXF1ZXN0cy5hcGkKfn5+fn5+fn5+fn5+CgpUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBSZXF1ZXN0cyBBUEkuCgo6Y29weXJpZ2h0OiAoYykgMjAxMiBieSBLZW5uZXRoIFJlaXR6Lgo6bGljZW5zZTogQXBhY2hlMiwgc2VlIExJQ0VOU0UgZm9yIG1vcmUgZGV0YWlscy4K6QEAAAApAdoIc2Vzc2lvbnNjAgAAAAAAAAAAAAAABAAAAAgAAABLAAAAc0IAAAB0AKABoQCPJn0DfANqAmYAfAB8AWQBnAJ8AqQBjgFXAAIAZAIEAAQAgwMBAFMAMQBzNDAAAQABAAEAWQABAGQCUwApA2H4CQAAQ29uc3RydWN0cyBhbmQgc2VuZHMgYSA6Y2xhc3M6YFJlcXVlc3QgPFJlcXVlc3Q+YC4KCiAgICA6cGFyYW0gbWV0aG9kOiBtZXRob2QgZm9yIHRoZSBuZXcgOmNsYXNzOmBSZXF1ZXN0YCBvYmplY3Q6IGBgR0VUYGAsIGBgT1BUSU9OU2BgLCBgYEhFQURgYCwgYGBQT1NUYGAsIGBgUFVUYGAsIGBgUEFUQ0hgYCwgb3IgYGBERUxFVEVgYC4KICAgIDpwYXJhbSB1cmw6IFVSTCBmb3IgdGhlIG5ldyA6Y2xhc3M6YFJlcXVlc3RgIG9iamVjdC4KICAgIDpwYXJhbSBwYXJhbXM6IChvcHRpb25hbCkgRGljdGlvbmFyeSwgbGlzdCBvZiB0dXBsZXMgb3IgYnl0ZXMgdG8gc2VuZAogICAgICAgIGluIHRoZSBxdWVyeSBzdHJpbmcgZm9yIHRoZSA6Y2xhc3M6YFJlcXVlc3RgLgogICAgOnBhcmFtIGRhdGE6IChvcHRpb25hbCkgRGljdGlvbmFyeSwgbGlzdCBvZiB0dXBsZXMsIGJ5dGVzLCBvciBmaWxlLWxpa2UKICAgICAgICBvYmplY3QgdG8gc2VuZCBpbiB0aGUgYm9keSBvZiB0aGUgOmNsYXNzOmBSZXF1ZXN0YC4KICAgIDpwYXJhbSBqc29uOiAob3B0aW9uYWwpIEEgSlNPTiBzZXJpYWxpemFibGUgUHl0aG9uIG9iamVjdCB0byBzZW5kIGluIHRoZSBib2R5IG9mIHRoZSA6Y2xhc3M6YFJlcXVlc3RgLgogICAgOnBhcmFtIGhlYWRlcnM6IChvcHRpb25hbCkgRGljdGlvbmFyeSBvZiBIVFRQIEhlYWRlcnMgdG8gc2VuZCB3aXRoIHRoZSA6Y2xhc3M6YFJlcXVlc3RgLgogICAgOnBhcmFtIGNvb2tpZXM6IChvcHRpb25hbCkgRGljdCBvciBDb29raWVKYXIgb2JqZWN0IHRvIHNlbmQgd2l0aCB0aGUgOmNsYXNzOmBSZXF1ZXN0YC4KICAgIDpwYXJhbSBmaWxlczogKG9wdGlvbmFsKSBEaWN0aW9uYXJ5IG9mIGBgJ25hbWUnOiBmaWxlLWxpa2Utb2JqZWN0c2BgIChvciBgYHsnbmFtZSc6IGZpbGUtdHVwbGV9YGApIGZvciBtdWx0aXBhcnQgZW5jb2RpbmcgdXBsb2FkLgogICAgICAgIGBgZmlsZS10dXBsZWBgIGNhbiBiZSBhIDItdHVwbGUgYGAoJ2ZpbGVuYW1lJywgZmlsZW9iailgYCwgMy10dXBsZSBgYCgnZmlsZW5hbWUnLCBmaWxlb2JqLCAnY29udGVudF90eXBlJylgYAogICAgICAgIG9yIGEgNC10dXBsZSBgYCgnZmlsZW5hbWUnLCBmaWxlb2JqLCAnY29udGVudF90eXBlJywgY3VzdG9tX2hlYWRlcnMpYGAsIHdoZXJlIGBgJ2NvbnRlbnQtdHlwZSdgYCBpcyBhIHN0cmluZwogICAgICAgIGRlZmluaW5nIHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIGdpdmVuIGZpbGUgYW5kIGBgY3VzdG9tX2hlYWRlcnNgYCBhIGRpY3QtbGlrZSBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIGhlYWRlcnMKICAgICAgICB0byBhZGQgZm9yIHRoZSBmaWxlLgogICAgOnBhcmFtIGF1dGg6IChvcHRpb25hbCkgQXV0aCB0dXBsZSB0byBlbmFibGUgQmFzaWMvRGlnZXN0L0N1c3RvbSBIVFRQIEF1dGguCiAgICA6cGFyYW0gdGltZW91dDogKG9wdGlvbmFsKSBIb3cgbWFueSBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdG8gc2VuZCBkYXRhCiAgICAgICAgYmVmb3JlIGdpdmluZyB1cCwgYXMgYSBmbG9hdCwgb3IgYSA6cmVmOmAoY29ubmVjdCB0aW1lb3V0LCByZWFkCiAgICAgICAgdGltZW91dCkgPHRpbWVvdXRzPmAgdHVwbGUuCiAgICA6dHlwZSB0aW1lb3V0OiBmbG9hdCBvciB0dXBsZQogICAgOnBhcmFtIGFsbG93X3JlZGlyZWN0czogKG9wdGlvbmFsKSBCb29sZWFuLiBFbmFibGUvZGlzYWJsZSBHRVQvT1BUSU9OUy9QT1NUL1BVVC9QQVRDSC9ERUxFVEUvSEVBRCByZWRpcmVjdGlvbi4gRGVmYXVsdHMgdG8gYGBUcnVlYGAuCiAgICA6dHlwZSBhbGxvd19yZWRpcmVjdHM6IGJvb2wKICAgIDpwYXJhbSBwcm94aWVzOiAob3B0aW9uYWwpIERpY3Rpb25hcnkgbWFwcGluZyBwcm90b2NvbCB0byB0aGUgVVJMIG9mIHRoZSBwcm94eS4KICAgIDpwYXJhbSB2ZXJpZnk6IChvcHRpb25hbCkgRWl0aGVyIGEgYm9vbGVhbiwgaW4gd2hpY2ggY2FzZSBpdCBjb250cm9scyB3aGV0aGVyIHdlIHZlcmlmeQogICAgICAgICAgICB0aGUgc2VydmVyJ3MgVExTIGNlcnRpZmljYXRlLCBvciBhIHN0cmluZywgaW4gd2hpY2ggY2FzZSBpdCBtdXN0IGJlIGEgcGF0aAogICAgICAgICAgICB0byBhIENBIGJ1bmRsZSB0byB1c2UuIERlZmF1bHRzIHRvIGBgVHJ1ZWBgLgogICAgOnBhcmFtIHN0cmVhbTogKG9wdGlvbmFsKSBpZiBgYEZhbHNlYGAsIHRoZSByZXNwb25zZSBjb250ZW50IHdpbGwgYmUgaW1tZWRpYXRlbHkgZG93bmxvYWRlZC4KICAgIDpwYXJhbSBjZXJ0OiAob3B0aW9uYWwpIGlmIFN0cmluZywgcGF0aCB0byBzc2wgY2xpZW50IGNlcnQgZmlsZSAoLnBlbSkuIElmIFR1cGxlLCAoJ2NlcnQnLCAna2V5JykgcGFpci4KICAgIDpyZXR1cm46IDpjbGFzczpgUmVzcG9uc2UgPFJlc3BvbnNlPmAgb2JqZWN0CiAgICA6cnR5cGU6IHJlcXVlc3RzLlJlc3BvbnNlCgogICAgVXNhZ2U6OgoKICAgICAgPj4+IGltcG9ydCByZXF1ZXN0cwogICAgICA+Pj4gcmVxID0gcmVxdWVzdHMucmVxdWVzdCgnR0VUJywgJ2h0dHBzOi8vaHR0cGJpbi5vcmcvZ2V0JykKICAgICAgPj4+IHJlcQogICAgICA8UmVzcG9uc2UgWzIwMF0+CiAgICApAtoGbWV0aG9k2gN1cmxOKQNyAgAAANoHU2Vzc2lvbtoHcmVxdWVzdCkEcgMAAAByBAAAANoGa3dhcmdz2gdzZXNzaW9uqQByCQAAAPpVL2hvbWUvaG5pL1RvcG1ldGFsU2UtRFBTL3ZlbnYvbGliL3B5dGhvbjMuOS9zaXRlLXBhY2thZ2VzL3BpcC9fdmVuZG9yL3JlcXVlc3RzL2FwaS5weXIGAAAADgAAAHMEAAAAACwKAXIGAAAATmMCAAAAAAAAAAAAAAADAAAABAAAAEsAAABzFgAAAHQAZAF8AGYCZAJ8AWkBfAKkAY4BUwApA2FkAQAAU2VuZHMgYSBHRVQgcmVxdWVzdC4KCiAgICA6cGFyYW0gdXJsOiBVUkwgZm9yIHRoZSBuZXcgOmNsYXNzOmBSZXF1ZXN0YCBvYmplY3QuCiAgICA6cGFyYW0gcGFyYW1zOiAob3B0aW9uYWwpIERpY3Rpb25hcnksIGxpc3Qgb2YgdHVwbGVzIG9yIGJ5dGVzIHRvIHNlbmQKICAgICAgICBpbiB0aGUgcXVlcnkgc3RyaW5nIGZvciB0aGUgOmNsYXNzOmBSZXF1ZXN0YC4KICAgIDpwYXJhbSBcKlwqa3dhcmdzOiBPcHRpb25hbCBhcmd1bWVudHMgdGhhdCBgYHJlcXVlc3RgYCB0YWtlcy4KICAgIDpyZXR1cm46IDpjbGFzczpgUmVzcG9uc2UgPFJlc3BvbnNlPmAgb2JqZWN0CiAgICA6cnR5cGU6IHJlcXVlc3RzLlJlc3BvbnNlCiAgICDaA2dldNoGcGFyYW1zqQFyBgAAACkDcgQA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