ZGlmZiAtLWdpdCBhLy5pZGVhL2RhdGFTb3VyY2VzLmxvY2FsLnhtbCBiLy5pZGVhL2RhdGFTb3VyY2VzLmxvY2FsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkZjU3MC4uMDAwMDAwMAotLS0gYS8uaWRlYS9kYXRhU291cmNlcy5sb2NhbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgdmVyc2lvbj0iNCI+Ci0gIDxjb21wb25lbnQgbmFtZT0iZGF0YVNvdXJjZVN0b3JhZ2VMb2NhbCIgY3JlYXRlZC1pbj0iSVUtMjQzLjIxNTY1LjE5MyI+Ci0gICAgPGRhdGEtc291cmNlIG5hbWU9InB0UHJvamVjdEBsb2NhbGhvc3QiIHV1aWQ9IjY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMiI+Ci0gICAgICA8ZGF0YWJhc2UtaW5mbyBwcm9kdWN0PSJNeVNRTCIgdmVyc2lvbj0iOC4wLjQwIiBqZGJjLXZlcnNpb249IjQuMiIgZHJpdmVyLW5hbWU9Ik15U1FMIENvbm5lY3Rvci9KIiBkcml2ZXItdmVyc2lvbj0ibXlzcWwtY29ubmVjdG9yLWotOC4yLjAgKFJldmlzaW9uOiAwNmExZjcyNDQ5N2ZkODFjNmE2NTkxMzFmZGE4MjJjOWU1MDg1YjZjKSIgZGJtcz0iTVlTUUwiIGV4YWN0LXZlcnNpb249IjguMC40MCIgZXhhY3QtZHJpdmVyLXZlcnNpb249IjguMiI+Ci0gICAgICAgIDxleHRyYS1uYW1lLWNoYXJhY3RlcnM+I0A8L2V4dHJhLW5hbWUtY2hhcmFjdGVycz4KLSAgICAgICAgPGlkZW50aWZpZXItcXVvdGUtc3RyaW5nPmA8L2lkZW50aWZpZXItcXVvdGUtc3RyaW5nPgotICAgICAgPC9kYXRhYmFzZS1pbmZvPgotICAgICAgPGNhc2Utc2Vuc2l0aXZpdHkgcGxhaW4taWRlbnRpZmllcnM9Imxvd2VyIiBxdW90ZWQtaWRlbnRpZmllcnM9Imxvd2VyIiAvPgotICAgICAgPHVzZXItbmFtZT5yb290PC91c2VyLW5hbWU+Ci0gICAgICA8c2NoZW1hLW1hcHBpbmc+Ci0gICAgICAgIDxpbnRyb3NwZWN0aW9uLXNjb3BlPgotICAgICAgICAgIDxub2RlIGtpbmQ9InNjaGVtYSIgcW5hbWU9IkAiIC8+Ci0gICAgICAgIDwvaW50cm9zcGVjdGlvbi1zY29wZT4KLSAgICAgIDwvc2NoZW1hLW1hcHBpbmc+Ci0gICAgPC9kYXRhLXNvdXJjZT4KLSAgPC9jb21wb25lbnQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvZGF0YVNvdXJjZXMueG1sIGIvLmlkZWEvZGF0YVNvdXJjZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTA0MWU0Li4wMDAwMDAwCi0tLSBhLy5pZGVhL2RhdGFTb3VyY2VzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB2ZXJzaW9uPSI0Ij4KLSAgPGNvbXBvbmVudCBuYW1lPSJEYXRhU291cmNlTWFuYWdlckltcGwiIGZvcm1hdD0ieG1sIiBtdWx0aWZpbGUtbW9kZWw9InRydWUiPgotICAgIDxkYXRhLXNvdXJjZSBzb3VyY2U9IkxPQ0FMIiBuYW1lPSJwdFByb2plY3RAbG9jYWxob3N0IiB1dWlkPSI2Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIiPgotICAgICAgPGRyaXZlci1yZWY+bXlzcWwuODwvZHJpdmVyLXJlZj4KLSAgICAgIDxzeW5jaHJvbml6ZT50cnVlPC9zeW5jaHJvbml6ZT4KLSAgICAgIDxpbXBvcnRlZD50cnVlPC9pbXBvcnRlZD4KLSAgICAgIDxqZGJjLWRyaXZlcj5jb20ubXlzcWwuY2ouamRiYy5Ecml2ZXI8L2pkYmMtZHJpdmVyPgotICAgICAgPGpkYmMtdXJsPmpkYmM6bXlzcWw6Ly9sb2NhbGhvc3Q6MzMwNi9wdFByb2plY3Q8L2pkYmMtdXJsPgotICAgICAgPGpkYmMtYWRkaXRpb25hbC1wcm9wZXJ0aWVzPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29tLmludGVsbGlqLmNsb3Vkcy5rdWJlcm5ldGVzLmRiLmhvc3QucG9ydCIgLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbS5pbnRlbGxpai5jbG91ZHMua3ViZXJuZXRlcy5kYi5lbmFibGVkIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb20uaW50ZWxsaWouY2xvdWRzLmt1YmVybmV0ZXMuZGIucmVzb3VyY2UudHlwZSIgdmFsdWU9IkRlcGxveW1lbnQiIC8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb20uaW50ZWxsaWouY2xvdWRzLmt1YmVybmV0ZXMuZGIuY29udGFpbmVyLnBvcnQiIC8+Ci0gICAgICA8L2pkYmMtYWRkaXRpb25hbC1wcm9wZXJ0aWVzPgotICAgICAgPHdvcmtpbmctZGlyPiRQcm9qZWN0RmlsZURpciQ8L3dvcmtpbmctZGlyPgotICAgIDwvZGF0YS1zb3VyY2U+Ci0gIDwvY29tcG9uZW50PgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi54bWwgYi8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGQ2MDY4Li4wMDAwMDAwCi0tLSBhLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzA4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZGF0YVNvdXJjZSBuYW1lPSJwdFByb2plY3RAbG9jYWxob3N0Ij4KLSAgPGRhdGFiYXNlLW1vZGVsIHNlcmlhbGl6ZXI9ImRibSIgZGJtcz0iTVlTUUwiIGZhbWlseS1pZD0iTVlTUUwiIGZvcm1hdC12ZXJzaW9uPSI0LjUzIj4KLSAgICA8cm9vdCBpZD0iMSI+Ci0gICAgICA8RGVmYXVsdENhc2luZz5sb3dlci9sb3dlcjwvRGVmYXVsdENhc2luZz4KLSAgICAgIDxEZWZhdWx0RW5naW5lPklubm9EQjwvRGVmYXVsdEVuZ2luZT4KLSAgICAgIDxEZWZhdWx0VG1wRW5naW5lPklubm9EQjwvRGVmYXVsdFRtcEVuZ2luZT4KLSAgICAgIDxHcmFudHM+fHJvb3R8fHJvb3R8bG9jYWxob3N0fEFMVEVSfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxBTFRFUiBST1VUSU5FfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxBUFBMSUNBVElPTl9QQVNTV09SRF9BRE1JTnxHCi18cm9vdHx8bXlzcWwuaW5mb3NjaGVtYXxsb2NhbGhvc3R8QVVESVRfQUJPUlRfRVhFTVBUfEcKLXxyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxBVURJVF9BQk9SVF9FWEVNUFR8RwotfHJvb3R8fG15c3FsLnN5c3xsb2NhbGhvc3R8QVVESVRfQUJPUlRfRVhFTVBUfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxBVURJVF9BQk9SVF9FWEVNUFR8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEFVRElUX0FETUlOfEcKLXxyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxBVVRIRU5USUNBVElPTl9QT0xJQ1lfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEFVVEhFTlRJQ0FUSU9OX1BPTElDWV9BRE1JTnxHCi18cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8QkFDS1VQX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxCQUNLVVBfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEJJTkxPR19BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8QklOTE9HX0VOQ1JZUFRJT05fQURNSU58RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fENMT05FX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxDTE9ORV9BRE1JTnxHCi18cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8Q09OTkVDVElPTl9BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q09OTkVDVElPTl9BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxDUkVBVEUgUk9MRXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFIFJPVVRJTkV8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fENSRUFURSBUQUJMRVNQQUNFfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxDUkVBVEUgVEVNUE9SQVJZIFRBQkxFU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Q1JFQVRFIFVTRVJ8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fENSRUFURSBWSUVXfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxERUxFVEV8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fERST1B8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fERST1AgUk9MRXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8RU5DUllQVElPTl9LRVlfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEVWRU5UfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxFWEVDVVRFfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxGSUxFfEcKLXxyb290fHxteXNxbC5pbmZvc2NoZW1hfGxvY2FsaG9zdHxGSVJFV0FMTF9FWEVNUFR8RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fEZJUkVXQUxMX0VYRU1QVHxHCi18cm9vdHx8bXlzcWwuc3lzfGxvY2FsaG9zdHxGSVJFV0FMTF9FWEVNUFR8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEZJUkVXQUxMX0VYRU1QVHxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8RkxVU0hfT1BUSU1JWkVSX0NPU1RTfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxGTFVTSF9TVEFUVVN8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEZMVVNIX1RBQkxFU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8RkxVU0hfVVNFUl9SRVNPVVJDRVN8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fEdST1VQX1JFUExJQ0FUSU9OX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxHUk9VUF9SRVBMSUNBVElPTl9TVFJFQU18RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fElOREVYfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxJTk5PREJfUkVET19MT0dfQVJDSElWRXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8SU5OT0RCX1JFRE9fTE9HX0VOQUJMRXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8SU5TRVJUfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxMT0NLIFRBQkxFU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UEFTU1dPUkRMRVNTX1VTRVJfQURNSU58RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFBFUlNJU1RfUk9fVkFSSUFCTEVTX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxQRVJTSVNUX1JPX1ZBUklBQkxFU19BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UFJPQ0VTU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVGRVJFTkNFU3xHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVMT0FEfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTiBDTElFTlR8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJFUExJQ0FUSU9OIFNMQVZFfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTl9BUFBMSUVSfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxSRVBMSUNBVElPTl9TTEFWRV9BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8UkVTT1VSQ0VfR1JPVVBfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJFU09VUkNFX0dST1VQX1VTRVJ8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFJPTEVfQURNSU58RwotfHJvb3R8fG15c3FsLmluZm9zY2hlbWF8bG9jYWxob3N0fFNFTEVDVHxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8U0VMRUNUfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxTRU5TSVRJVkVfVkFSSUFCTEVTX09CU0VSVkVSfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxTRVJWSUNFX0NPTk5FQ1RJT05fQURNSU58RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNFU1NJT05fVkFSSUFCTEVTX0FETUlOfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxTRVNTSU9OX1ZBUklBQkxFU19BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8U0VUX1VTRVJfSUR8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIT1cgREFUQUJBU0VTfEcKLXxyb290fHxyb290fGxvY2FsaG9zdHxTSE9XIFZJRVd8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIT1dfUk9VVElORXxHCi18cm9vdHx8bXlzcWwuc2Vzc2lvbnxsb2NhbGhvc3R8U0hVVERPV058RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNIVVRET1dOfEcKLXxyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxTVVBFUnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8U1VQRVJ8RwotfHJvb3R8fG15c3FsLmluZm9zY2hlbWF8bG9jYWxob3N0fFNZU1RFTV9VU0VSfEcKLXxyb290fHxteXNxbC5zZXNzaW9ufGxvY2FsaG9zdHxTWVNURU1fVVNFUnxHCi18cm9vdHx8bXlzcWwuc3lzfGxvY2FsaG9zdHxTWVNURU1fVVNFUnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8U1lTVEVNX1VTRVJ8RwotfHJvb3R8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNZU1RFTV9WQVJJQUJMRVNfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFNZU1RFTV9WQVJJQUJMRVNfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRBQkxFX0VOQ1JZUFRJT05fQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRFTEVNRVRSWV9MT0dfQURNSU58RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFRSSUdHRVJ8RwotfHJvb3R8fHJvb3R8bG9jYWxob3N0fFVQREFURXxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8WEFfUkVDT1ZFUl9BRE1JTnxHCi18cm9vdHx8cm9vdHxsb2NhbGhvc3R8Z3JhbnQgb3B0aW9ufEcKLXBlcmZvcm1hbmNlX3NjaGVtYXxzY2hlbWF8fG15c3FsLnNlc3Npb258bG9jYWxob3N0fFNFTEVDVHxHCi1zeXN8c2NoZW1hfHxteXNxbC5zeXN8bG9jYWxob3N0fFRSSUdHRVJ8RzwvR3JhbnRzPgotICAgICAgPFNlcnZlclZlcnNpb24+OC4wLjQwPC9TZXJ2ZXJWZXJzaW9uPgotICAgIDwvcm9vdD4KLSAgICA8Y29sbGF0aW9uIGlkPSIyIiBwYXJlbnQ9IjEiIG5hbWU9ImFybXNjaWk4X2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+YXJtc2NpaTg8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMyIgcGFyZW50PSIxIiBuYW1lPSJhcm1zY2lpOF9iaW4iPgotICAgICAgPENoYXJzZXQ+YXJtc2NpaTg8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNCIgcGFyZW50PSIxIiBuYW1lPSJhc2NpaV9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmFzY2lpPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjUiIHBhcmVudD0iMSIgbmFtZT0iYXNjaWlfYmluIj4KLSAgICAgIDxDaGFyc2V0PmFzY2lpPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjYiIHBhcmVudD0iMSIgbmFtZT0iYmlnNV9jaGluZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PmJpZzU8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNyIgcGFyZW50PSIxIiBuYW1lPSJiaWc1X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5iaWc1PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjgiIHBhcmVudD0iMSIgbmFtZT0iYmluYXJ5Ij4KLSAgICAgIDxDaGFyc2V0PmJpbmFyeTwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5IiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MF9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwMTI1MDwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMCIgcGFyZW50PSIxIiBuYW1lPSJjcDEyNTBfY3plY2hfY3MiPgotICAgICAgPENoYXJzZXQ+Y3AxMjUwPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjExIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MF9jcm9hdGlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTIiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUwX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTMiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUwX3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTA8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTQiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2J1bGdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTUiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX3VrcmFpbmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTYiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTciIHBhcmVudD0iMSIgbmFtZT0iY3AxMjUxX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+Y3AxMjUxPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE4IiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1MV9nZW5lcmFsX2NzIj4KLSAgICAgIDxDaGFyc2V0PmNwMTI1MTwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOSIgcGFyZW50PSIxIiBuYW1lPSJjcDEyNTZfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTY8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjAiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjU2X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDEyNTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjEiIHBhcmVudD0iMSIgbmFtZT0iY3AxMjU3X2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+Y3AxMjU3PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIyIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1N19iaW4iPgotICAgICAgPENoYXJzZXQ+Y3AxMjU3PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzIiBwYXJlbnQ9IjEiIG5hbWU9ImNwMTI1N19nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwMTI1NzwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNCIgcGFyZW50PSIxIiBuYW1lPSJjcDg1MF9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwODUwPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI1IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODUwX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDg1MDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNiIgcGFyZW50PSIxIiBuYW1lPSJjcDg1Ml9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwODUyPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI3IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODUyX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDg1MjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyOCIgcGFyZW50PSIxIiBuYW1lPSJjcDg2Nl9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmNwODY2PC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI5IiBwYXJlbnQ9IjEiIG5hbWU9ImNwODY2X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5jcDg2NjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIzMCIgcGFyZW50PSIxIiBuYW1lPSJjcDkzMl9qYXBhbmVzZV9jaSI+Ci0gICAgICA8Q2hhcnNldD5jcDkzMjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIzMSIgcGFyZW50PSIxIiBuYW1lPSJjcDkzMl9iaW4iPgotICAgICAgPENoYXJzZXQ+Y3A5MzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMzIiIHBhcmVudD0iMSIgbmFtZT0iZGVjOF9zd2VkaXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PmRlYzg8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMzMiIHBhcmVudD0iMSIgbmFtZT0iZGVjOF9iaW4iPgotICAgICAgPENoYXJzZXQ+ZGVjODwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIzNCIgcGFyZW50PSIxIiBuYW1lPSJldWNqcG1zX2phcGFuZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PmV1Y2pwbXM8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMzUiIHBhcmVudD0iMSIgbmFtZT0iZXVjanBtc19iaW4iPgotICAgICAgPENoYXJzZXQ+ZXVjanBtczwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIzNiIgcGFyZW50PSIxIiBuYW1lPSJldWNrcl9rb3JlYW5fY2kiPgotICAgICAgPENoYXJzZXQ+ZXVja3I8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMzciIHBhcmVudD0iMSIgbmFtZT0iZXVja3JfYmluIj4KLSAgICAgIDxDaGFyc2V0PmV1Y2tyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjM4IiBwYXJlbnQ9IjEiIG5hbWU9ImdiMTgwMzBfY2hpbmVzZV9jaSI+Ci0gICAgICA8Q2hhcnNldD5nYjE4MDMwPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjM5IiBwYXJlbnQ9IjEiIG5hbWU9ImdiMTgwMzBfYmluIj4KLSAgICAgIDxDaGFyc2V0PmdiMTgwMzA8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNDAiIHBhcmVudD0iMSIgbmFtZT0iZ2IxODAzMF91bmljb2RlXzUyMF9jaSI+Ci0gICAgICA8Q2hhcnNldD5nYjE4MDMwPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjQxIiBwYXJlbnQ9IjEiIG5hbWU9ImdiMjMxMl9jaGluZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PmdiMjMxMjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI0MiIgcGFyZW50PSIxIiBuYW1lPSJnYjIzMTJfYmluIj4KLSAgICAgIDxDaGFyc2V0PmdiMjMxMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI0MyIgcGFyZW50PSIxIiBuYW1lPSJnYmtfY2hpbmVzZV9jaSI+Ci0gICAgICA8Q2hhcnNldD5nYms8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNDQiIHBhcmVudD0iMSIgbmFtZT0iZ2JrX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5nYms8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNDUiIHBhcmVudD0iMSIgbmFtZT0iZ2Vvc3RkOF9nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0Pmdlb3N0ZDg8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNDYiIHBhcmVudD0iMSIgbmFtZT0iZ2Vvc3RkOF9iaW4iPgotICAgICAgPENoYXJzZXQ+Z2Vvc3RkODwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI0NyIgcGFyZW50PSIxIiBuYW1lPSJncmVla19nZW5lcmFsX2NpIj4KLSAgICAgIDxDaGFyc2V0PmdyZWVrPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjQ4IiBwYXJlbnQ9IjEiIG5hbWU9ImdyZWVrX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5ncmVlazwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI0OSIgcGFyZW50PSIxIiBuYW1lPSJoZWJyZXdfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5oZWJyZXc8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTAiIHBhcmVudD0iMSIgbmFtZT0iaGVicmV3X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5oZWJyZXc8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTEiIHBhcmVudD0iMSIgbmFtZT0iaHA4X2VuZ2xpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+aHA4PC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjUyIiBwYXJlbnQ9IjEiIG5hbWU9ImhwOF9iaW4iPgotICAgICAgPENoYXJzZXQ+aHA4PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjUzIiBwYXJlbnQ9IjEiIG5hbWU9ImtleWJjczJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5rZXliY3MyPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjU0IiBwYXJlbnQ9IjEiIG5hbWU9ImtleWJjczJfYmluIj4KLSAgICAgIDxDaGFyc2V0PmtleWJjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTUiIHBhcmVudD0iMSIgbmFtZT0ia29pOHJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5rb2k4cjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI1NiIgcGFyZW50PSIxIiBuYW1lPSJrb2k4cl9iaW4iPgotICAgICAgPENoYXJzZXQ+a29pOHI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTciIHBhcmVudD0iMSIgbmFtZT0ia29pOHVfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5rb2k4dTwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI1OCIgcGFyZW50PSIxIiBuYW1lPSJrb2k4dV9iaW4iPgotICAgICAgPENoYXJzZXQ+a29pOHU8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNTkiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2dlcm1hbjFfY2kiPgotICAgICAgPENoYXJzZXQ+bGF0aW4xPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjYwIiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluMV9zd2VkaXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI2MSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfZGFuaXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI2MiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfZ2VybWFuMl9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNjMiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNjQiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4xX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+bGF0aW4xPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjY1IiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluMV9nZW5lcmFsX2NzIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMTwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI2NiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjFfc3BhbmlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjE8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNjciIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2N6ZWNoX2NzIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI2OCIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjI8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNjkiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzAiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW4yX2Nyb2F0aWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI3MSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjJfYmluIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI3MiIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjVfdHVya2lzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjU8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzMiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW41X2JpbiI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjU8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzQiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW43X2VzdG9uaWFuX2NzIj4KLSAgICAgIDxDaGFyc2V0PmxhdGluNzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI3NSIgcGFyZW50PSIxIiBuYW1lPSJsYXRpbjdfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD5sYXRpbjc8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzYiIHBhcmVudD0iMSIgbmFtZT0ibGF0aW43X2dlbmVyYWxfY3MiPgotICAgICAgPENoYXJzZXQ+bGF0aW43PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijc3IiBwYXJlbnQ9IjEiIG5hbWU9ImxhdGluN19iaW4iPgotICAgICAgPENoYXJzZXQ+bGF0aW43PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijc4IiBwYXJlbnQ9IjEiIG5hbWU9Im1hY2NlX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+bWFjY2U8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iNzkiIHBhcmVudD0iMSIgbmFtZT0ibWFjY2VfYmluIj4KLSAgICAgIDxDaGFyc2V0Pm1hY2NlPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjgwIiBwYXJlbnQ9IjEiIG5hbWU9Im1hY3JvbWFuX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+bWFjcm9tYW48L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iODEiIHBhcmVudD0iMSIgbmFtZT0ibWFjcm9tYW5fYmluIj4KLSAgICAgIDxDaGFyc2V0Pm1hY3JvbWFuPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjgyIiBwYXJlbnQ9IjEiIG5hbWU9InNqaXNfamFwYW5lc2VfY2kiPgotICAgICAgPENoYXJzZXQ+c2ppczwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI4MyIgcGFyZW50PSIxIiBuYW1lPSJzamlzX2JpbiI+Ci0gICAgICA8Q2hhcnNldD5zamlzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg0IiBwYXJlbnQ9IjEiIG5hbWU9InN3ZTdfc3dlZGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD5zd2U3PC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg1IiBwYXJlbnQ9IjEiIG5hbWU9InN3ZTdfYmluIj4KLSAgICAgIDxDaGFyc2V0PnN3ZTc8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iODYiIHBhcmVudD0iMSIgbmFtZT0idGlzNjIwX3RoYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dGlzNjIwPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg3IiBwYXJlbnQ9IjEiIG5hbWU9InRpczYyMF9iaW4iPgotICAgICAgPENoYXJzZXQ+dGlzNjIwPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg4IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgICAgPERlZmF1bHRGb3JDaGFyc2V0PjE8L0RlZmF1bHRGb3JDaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijg5IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfYmluIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iOTAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl91bmljb2RlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iOTEiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9pY2VsYW5kaWNfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5MiIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2xhdHZpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5MyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3JvbWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iOTQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zbG92ZW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5NSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9Ijk2IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfZXN0b25pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5NyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3NwYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5OCIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3N3ZWRpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSI5OSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3R1cmtpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMDAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9jemVjaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwMSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2RhbmlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwMiIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMDMiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zbG92YWtfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMDQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9zcGFuaXNoMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwNSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3JvbWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTA2IiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfcGVyc2lhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwNyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2VzcGVyYW50b19jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwOCIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEwOSIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3NpbmhhbGFfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTAiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9nZXJtYW4yX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTExIiBwYXJlbnQ9IjEiIG5hbWU9InVjczJfY3JvYXRpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTIiIHBhcmVudD0iMSIgbmFtZT0idWNzMl91bmljb2RlXzUyMF9jaSI+Ci0gICAgICA8Q2hhcnNldD51Y3MyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjExMyIgcGFyZW50PSIxIiBuYW1lPSJ1Y3MyX3ZpZXRuYW1lc2VfY2kiPgotICAgICAgPENoYXJzZXQ+dWNzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTQiIHBhcmVudD0iMSIgbmFtZT0idWNzMl9nZW5lcmFsX215c3FsNTAwX2NpIj4KLSAgICAgIDxDaGFyc2V0PnVjczI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTE1IiBwYXJlbnQ9IjEiIG5hbWU9InVqaXNfamFwYW5lc2VfY2kiPgotICAgICAgPENoYXJzZXQ+dWppczwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTYiIHBhcmVudD0iMSIgbmFtZT0idWppc19iaW4iPgotICAgICAgPENoYXJzZXQ+dWppczwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTciIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMTgiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfYmluIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjExOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl91bmljb2RlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEyMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9pY2VsYW5kaWNfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTIxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2xhdHZpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTIyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3JvbWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEyMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9zbG92ZW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMjUiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZXN0b25pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3NwYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3N3ZWRpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3R1cmtpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTI5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2N6ZWNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEzMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9kYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTMxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTMyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3Nsb3Zha19jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMzMiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfc3BhbmlzaDJfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTM0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3JvbWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEzNSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9wZXJzaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjEzNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl9lc3BlcmFudG9fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTM3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMzgiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfc2luaGFsYV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxMzkiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfZ2VybWFuMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYxNjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNDAiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZfY3JvYXRpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTY8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTQxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjE2X3VuaWNvZGVfNTIwX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE0MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNl92aWV0bmFtZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjE2PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE0MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYxNmxlX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMTZsZTwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNDQiIHBhcmVudD0iMSIgbmFtZT0idXRmMTZsZV9iaW4iPgotICAgICAgPENoYXJzZXQ+dXRmMTZsZTwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNDUiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZ2VuZXJhbF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNDYiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfYmluIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE0NyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl91bmljb2RlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE0OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9pY2VsYW5kaWNfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTQ5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2xhdHZpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTUwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3JvbWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE1MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9zbG92ZW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTUyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNTMiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZXN0b25pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3NwYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3N3ZWRpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3R1cmtpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2N6ZWNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE1OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9kYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTU5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTYwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3Nsb3Zha19jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNjEiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfc3BhbmlzaDJfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTYyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3JvbWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE2MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9wZXJzaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE2NCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl9lc3BlcmFudG9fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTY1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNjYiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfc2luaGFsYV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNjciIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfZ2VybWFuMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGYzMjwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNjgiIHBhcmVudD0iMSIgbmFtZT0idXRmMzJfY3JvYXRpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmMzI8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTY5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjMyX3VuaWNvZGVfNTIwX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGYzMl92aWV0bmFtZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjMyPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICAgIDxEZWZhdWx0Rm9yQ2hhcnNldD4xPC9EZWZhdWx0Rm9yQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNzIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM190b2xvd2VyX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTczIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfYmluIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTc0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfdW5pY29kZV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2ljZWxhbmRpY19jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2xhdHZpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxNzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19yb21hbmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3Nsb3Zlbmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE3OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3BvbGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE4MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2VzdG9uaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTgxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc3BhbmlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE4MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3N3ZWRpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxODMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM190dXJraXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTg0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfY3plY2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxODUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19kYW5pc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxODYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19saXRodWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTg3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc2xvdmFrX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTg4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfc3BhbmlzaDJfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxODkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19yb21hbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE5MCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX3BlcnNpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOTEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19lc3BlcmFudG9fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOTIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19odW5nYXJpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOTMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM19zaW5oYWxhX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTk0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfZ2VybWFuMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE5NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWIzX2Nyb2F0aWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTk2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfdW5pY29kZV81MjBfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iMzwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIxOTciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iM192aWV0bmFtZXNlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjM8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMTk4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjNfZ2VuZXJhbF9teXNxbDUwMF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWIzPC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjE5OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2dlbmVyYWxfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMDAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9iaW4iPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMDEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF91bmljb2RlX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjAyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaWNlbGFuZGljX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjAzIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbGF0dmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIwNCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3JvbWFuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjA1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2xvdmVuaWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjA2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcG9saXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjA3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXN0b25pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMDgiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zcGFuaXNoX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjA5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3dlZGlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3R1cmtpc2hfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMTEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9jemVjaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxMiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2RhbmlzaF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2xpdGh1YW5pYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMTQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zbG92YWtfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMTUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zcGFuaXNoMl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3JvbWFuX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjE3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcGVyc2lhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxOCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzcGVyYW50b19jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIxOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2h1bmdhcmlhbl9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIyMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NpbmhhbGFfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMjEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9nZXJtYW4yX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjIyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfY3JvYXRpYW5fY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMjMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF91bmljb2RlXzUyMF9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIyNCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3ZpZXRuYW1lc2VfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMjUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgICA8RGVmYXVsdEZvckNoYXJzZXQ+MTwvRGVmYXVsdEZvckNoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjI2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZGVfcGJfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIyNyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2lzXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMjgiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sdl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjI5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcm9fMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzMCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NsXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMzEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9wbF8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjMyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXRfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzMyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMzQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9zdl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjM1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfdHJfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzNiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2NzXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyMzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9kYV8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjM4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbHRfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjIzOSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3NrXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNDAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9lc190cmFkXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNDEiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sYV8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjQyIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZW9fMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI0MyIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2h1XzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNDQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ocl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjQ1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfdmlfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI0NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0XzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNDciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9kZV9wYl8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjQ4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaXNfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI0OSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2x2XzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNTAiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9yb18wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjUxIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2xfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI1MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3BsXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNTMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ldF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjU0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfZXNfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI1NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3N2XzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNTYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF90cl8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjU3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfY3NfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI1OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2RhXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNTkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9sdF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjYwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc2tfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI2MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2VzX3RyYWRfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI2MiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2xhXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNjMiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9lb18wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjY0IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfaHVfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI2NSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2hyXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNjYiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF92aV8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjY3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfamFfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI2OCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2phXzA5MDBfYXNfY3Nfa3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNjkiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF8wOTAwX2FzX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjcwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfcnVfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI3MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X3J1XzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNzIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF96aF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjczIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfMDkwMF9iaW4iPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNzQiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9uYl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjc1IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbmJfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI3NiIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X25uXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyNzciIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9ubl8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjc4IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3JfbGF0bl8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjc5IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfc3JfbGF0bl8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjgwIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfYnNfMDkwMF9haV9jaSI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI4MSIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2JzXzA5MDBfYXNfY3MiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyODIiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9iZ18wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjgzIiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfYmdfMDkwMF9hc19jcyI+Ci0gICAgICA8Q2hhcnNldD51dGY4bWI0PC9DaGFyc2V0PgotICAgIDwvY29sbGF0aW9uPgotICAgIDxjb2xsYXRpb24gaWQ9IjI4NCIgcGFyZW50PSIxIiBuYW1lPSJ1dGY4bWI0X2dsXzA5MDBfYWlfY2kiPgotICAgICAgPENoYXJzZXQ+dXRmOG1iNDwvQ2hhcnNldD4KLSAgICA8L2NvbGxhdGlvbj4KLSAgICA8Y29sbGF0aW9uIGlkPSIyODUiIHBhcmVudD0iMSIgbmFtZT0idXRmOG1iNF9nbF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjg2IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbW5fY3lybF8wOTAwX2FpX2NpIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPGNvbGxhdGlvbiBpZD0iMjg3IiBwYXJlbnQ9IjEiIG5hbWU9InV0ZjhtYjRfbW5fY3lybF8wOTAwX2FzX2NzIj4KLSAgICAgIDxDaGFyc2V0PnV0ZjhtYjQ8L0NoYXJzZXQ+Ci0gICAgPC9jb2xsYXRpb24+Ci0gICAgPHNjaGVtYSBpZD0iMjg4IiBwYXJlbnQ9IjEiIG5hbWU9Im15c3FsIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyODkiIHBhcmVudD0iMSIgbmFtZT0iaW5mb3JtYXRpb25fc2NoZW1hIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjNfZ2VuZXJhbF9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTAiIHBhcmVudD0iMSIgbmFtZT0icGVyZm9ybWFuY2Vfc2NoZW1hIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTEiIHBhcmVudD0iMSIgbmFtZT0ic3lzIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTIiIHBhcmVudD0iMSIgbmFtZT0iemhpaHVpIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTMiIHBhcmVudD0iMSIgbmFtZT0ic2NwIj4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfMDkwMF9haV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8c2NoZW1hIGlkPSIyOTQiIHBhcmVudD0iMSIgbmFtZT0ic3AiPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF8wOTAwX2FpX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvc2NoZW1hPgotICAgIDxzY2hlbWEgaWQ9IjI5NSIgcGFyZW50PSIxIiBuYW1lPSJlbmdsaXNoX2FwcCI+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0XzA5MDBfYWlfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC9zY2hlbWE+Ci0gICAgPHNjaGVtYSBpZD0iMjk2IiBwYXJlbnQ9IjEiIG5hbWU9InB0cHJvamVjdCI+Ci0gICAgICA8Q3VycmVudD4xPC9DdXJyZW50PgotICAgICAgPExhc3RJbnRyb3NwZWN0aW9uTG9jYWxUaW1lc3RhbXA+MjAyNS0wNS0yNi4wNDoxMTo0NjwvTGFzdEludHJvc3BlY3Rpb25Mb2NhbFRpbWVzdGFtcD4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3NjaGVtYT4KLSAgICA8dXNlciBpZD0iMjk3IiBwYXJlbnQ9IjEiIG5hbWU9Im15c3FsLmluZm9zY2hlbWEiPgotICAgICAgPENhbkxvZ2luPjA8L0NhbkxvZ2luPgotICAgICAgPEhvc3Q+bG9jYWxob3N0PC9Ib3N0PgotICAgICAgPFBsdWdpbj5jYWNoaW5nX3NoYTJfcGFzc3dvcmQ8L1BsdWdpbj4KLSAgICA8L3VzZXI+Ci0gICAgPHVzZXIgaWQ9IjI5OCIgcGFyZW50PSIxIiBuYW1lPSJteXNxbC5zZXNzaW9uIj4KLSAgICAgIDxDYW5Mb2dpbj4wPC9DYW5Mb2dpbj4KLSAgICAgIDxIb3N0PmxvY2FsaG9zdDwvSG9zdD4KLSAgICAgIDxQbHVnaW4+Y2FjaGluZ19zaGEyX3Bhc3N3b3JkPC9QbHVnaW4+Ci0gICAgPC91c2VyPgotICAgIDx1c2VyIGlkPSIyOTkiIHBhcmVudD0iMSIgbmFtZT0ibXlzcWwuc3lzIj4KLSAgICAgIDxDYW5Mb2dpbj4wPC9DYW5Mb2dpbj4KLSAgICAgIDxIb3N0PmxvY2FsaG9zdDwvSG9zdD4KLSAgICAgIDxQbHVnaW4+Y2FjaGluZ19zaGEyX3Bhc3N3b3JkPC9QbHVnaW4+Ci0gICAgPC91c2VyPgotICAgIDx1c2VyIGlkPSIzMDAiIHBhcmVudD0iMSIgbmFtZT0icm9vdCI+Ci0gICAgICA8SG9zdD5sb2NhbGhvc3Q8L0hvc3Q+Ci0gICAgICA8UGx1Z2luPmNhY2hpbmdfc2hhMl9wYXNzd29yZDwvUGx1Z2luPgotICAgIDwvdXNlcj4KLSAgICA8dGFibGUgaWQ9IjMwMSIgcGFyZW50PSIyOTYiIG5hbWU9ImNvbGxlY3Rpb25zIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMwMiIgcGFyZW50PSIyOTYiIG5hbWU9ImNvbW1lbnRfbGlrZXMiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzAzIiBwYXJlbnQ9IjI5NiIgbmFtZT0iY29tbWVudHMiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzA0IiBwYXJlbnQ9IjI5NiIgbmFtZT0iZG93bmxvYWRzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMwNSIgcGFyZW50PSIyOTYiIG5hbWU9ImR5bmFtaWNfY29tbWVudCI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMDYiIHBhcmVudD0iMjk2IiBuYW1lPSJkeW5hbWljX2xpa2VzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMwNyIgcGFyZW50PSIyOTYiIG5hbWU9ImV4cGVyaWVuY2VfaGlzdG9yeSI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMDgiIHBhcmVudD0iMjk2IiBuYW1lPSJmb2xsb3ciPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzA5IiBwYXJlbnQ9IjI5NiIgbmFtZT0iZnJpZW5kX3JlbGF0aW9uIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMxMCIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX2NvbW1lbnRzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMxMSIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX2ludGVyZXN0cyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMTIiIHBhcmVudD0iMjk2IiBuYW1lPSJncm91cF9tZW1iZXJzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMxMyIgcGFyZW50PSIyOTYiIG5hbWU9Imdyb3VwX3Bvc3QiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzE0IiBwYXJlbnQ9IjI5NiIgbmFtZT0ibGV2ZWwiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzE1IiBwYXJlbnQ9IjI5NiIgbmFtZT0ibGlrZXMiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzE2IiBwYXJlbnQ9IjI5NiIgbmFtZT0icG9zdCI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMTciIHBhcmVudD0iMjk2IiBuYW1lPSJwcm9tb3Rpb25zIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMxOCIgcGFyZW50PSIyOTYiIG5hbWU9InNlZWRfY29tbWVudF9saWtlcyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMTkiIHBhcmVudD0iMjk2IiBuYW1lPSJzZWVkX2NvbW1lbnRzIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMyMCIgcGFyZW50PSIyOTYiIG5hbWU9InNlZWRjb21tZW50bGlrZSI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjEiIHBhcmVudD0iMjk2IiBuYW1lPSJzZWVkcyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjIiIHBhcmVudD0iMjk2IiBuYW1lPSJ0YXNrcyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjMiIHBhcmVudD0iMjk2IiBuYW1lPSJ0b3JyZW50cyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjQiIHBhcmVudD0iMjk2IiBuYW1lPSJ1c2VyIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMyNSIgcGFyZW50PSIyOTYiIG5hbWU9InVzZXJfZHluYW1pYyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGlkPSIzMjYiIHBhcmVudD0iMjk2IiBuYW1lPSJ1c2VyX2ludml0ZV9jb2RlIj4KLSAgICAgIDxFbmdpbmU+SW5ub0RCPC9FbmdpbmU+Ci0gICAgICA8Q29sbGF0aW9uTmFtZT51dGY4bWI0X3VuaWNvZGVfY2k8L0NvbGxhdGlvbk5hbWU+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgaWQ9IjMyNyIgcGFyZW50PSIyOTYiIG5hbWU9InVzZXJfbWVzc2FnZXMiPgotICAgICAgPEVuZ2luZT5Jbm5vREI8L0VuZ2luZT4KLSAgICAgIDxDb2xsYXRpb25OYW1lPnV0ZjhtYjRfdW5pY29kZV9jaTwvQ29sbGF0aW9uTmFtZT4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBpZD0iMzI4IiBwYXJlbnQ9IjI5NiIgbmFtZT0idXNlcl90YXNrX3N0YXR1cyI+Ci0gICAgICA8RW5naW5lPklubm9EQjwvRW5naW5lPgotICAgICAgPENvbGxhdGlvbk5hbWU+dXRmOG1iNF91bmljb2RlX2NpPC9Db2xsYXRpb25OYW1lPgotICAgIDwvdGFibGU+Ci0gICAgPGNvbHVtbiBpZD0iMzI5IiBwYXJlbnQ9IjMwMSIgbmFtZT0iY29sbGVjdGlvbklkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjE8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjMzMCIgcGFyZW50PSIzMDEiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzMzEiIHBhcmVudD0iMzAxIiBuYW1lPSJwb3N0Tm8iPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjMzMiIgcGFyZW50PSIzMDEiIG5hbWU9ImNvbGxlY3Rpb25zX2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iMzMzIiBwYXJlbnQ9IjMwMSIgbmFtZT0iY29sbGVjdGlvbnNfaWJma18yIj4KLSAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgotICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgotICAgICAgPE9uVXBkYXRlPmNhc2NhZGU8L09uVXBkYXRlPgotICAgICAgPFJlZkNvbE5hbWVzPnBvc3RObzwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnBvc3Q8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iMzM0IiBwYXJlbnQ9IjMwMSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+Y29sbGVjdGlvbklkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjMzNSIgcGFyZW50PSIzMDEiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjMzNiIgcGFyZW50PSIzMDEiIG5hbWU9InBvc3RObyI+Ci0gICAgICA8Q29sTmFtZXM+cG9zdE5vPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iMzM3IiBwYXJlbnQ9IjMwMSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iMzM4IiBwYXJlbnQ9IjMwMiIgbmFtZT0iY29tbWVudF9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjMzOSIgcGFyZW50PSIzMDIiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNDAiIHBhcmVudD0iMzAyIiBuYW1lPSJpc19saWtlZCI+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iMzQxIiBwYXJlbnQ9IjMwMiIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzEwIj4KLSAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz5jb21tZW50X2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+Y29tbWVudHM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iMzQyIiBwYXJlbnQ9IjMwMiIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzExIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSIzNDMiIHBhcmVudD0iMzAyIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkCi11c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM0NCIgcGFyZW50PSIzMDIiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8xMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjM0NSIgcGFyZW50PSIzMDIiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjM0NiIgcGFyZW50PSIzMDMiIG5hbWU9ImNvbW1lbnRfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MTU8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM0NyIgcGFyZW50PSIzMDMiIG5hbWU9InBvc3RfaWQiPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM0OCIgcGFyZW50PSIzMDMiIG5hbWU9ImNvbV9jb21tZW50X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNDkiIHBhcmVudD0iMzAzIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNTAiIHBhcmVudD0iMzAzIiBuYW1lPSJjb250ZW50Ij4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzUxIiBwYXJlbnQ9IjMwMyIgbmFtZT0iaXNfYW5vbnltb3VzIj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnRpbnlpbnQoMSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzUyIiBwYXJlbnQ9IjMwMyIgbmFtZT0ibGlrZXNfY291bnQiPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM1MyIgcGFyZW50PSIzMDMiIG5hbWU9InJlcGx5X2NvdW50Ij4KLSAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNTQiIHBhcmVudD0iMzAzIiBuYW1lPSJjb21tZW50X3RpbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj45PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iMzU1IiBwYXJlbnQ9IjMwMyIgbmFtZT0iZmtfcG9zdF9pZCI+Ci0gICAgICA8Q29sTmFtZXM+cG9zdF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+cG9zdE5vPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+cG9zdDwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSIzNTYiIHBhcmVudD0iMzAzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfNiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iMzU3IiBwYXJlbnQ9IjMwMyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSIzNTgiIHBhcmVudD0iMzAzIiBuYW1lPSJma19wb3N0X2lkIj4KLSAgICAgIDxDb2xOYW1lcz5wb3N0X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSIzNTkiIHBhcmVudD0iMzAzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfOSI+Ci0gICAgICA8Q29sTmFtZXM+Y29tX2NvbW1lbnRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM2MCIgcGFyZW50PSIzMDMiIG5hbWU9ImZrX3VzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSIzNjEiIHBhcmVudD0iMzAzIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSIzNjIiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF9pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4zPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNjMiIHBhcmVudD0iMzA0IiBuYW1lPSJ0b3JyZW50X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNjQiIHBhcmVudD0iMzA0IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNjUiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF90aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNjYiIHBhcmVudD0iMzA0IiBuYW1lPSJkb3dubG9hZF9zaXplIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjM2NyIgcGFyZW50PSIzMDQiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF81Ij4KLSAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz50b3JyZW50X2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dG9ycmVudHM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iMzY4IiBwYXJlbnQ9IjMwNCIgbmFtZT0iRktfUmVsYXRpb25zaGlwXzQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjM2OSIgcGFyZW50PSIzMDQiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmRvd25sb2FkX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM3MCIgcGFyZW50PSIzMDQiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF81Ij4KLSAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSIzNzEiIHBhcmVudD0iMzA0IiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfNCI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjM3MiIgcGFyZW50PSIzMDQiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjM3MyIgcGFyZW50PSIzMDUiIG5hbWU9ImNvbW1lbnRfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzc0IiBwYXJlbnQ9IjMwNSIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM3NSIgcGFyZW50PSIzMDUiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzNzYiIHBhcmVudD0iMzA1IiBuYW1lPSJjb21tZW50X2NvbnRlbnQiPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM3NyIgcGFyZW50PSIzMDUiIG5hbWU9ImNvbW1lbnRfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzc4IiBwYXJlbnQ9IjMwNSIgbmFtZT0iaXNfYW5vbnltb3VzIj4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnRpbnlpbnQoMSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzc5IiBwYXJlbnQ9IjMwNSIgbmFtZT0icGFyZW50X2NvbW1lbnRfaWQiPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iMzgwIiBwYXJlbnQ9IjMwNSIgbmFtZT0iZHluYW1pY19jb21tZW50X2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+ZHluYW1pY19pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+ZHluYW1pY19pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXJfZHluYW1pYzwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSIzODEiIHBhcmVudD0iMzA1IiBuYW1lPSJkeW5hbWljX2NvbW1lbnRfaWJma18yIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSIzODIiIHBhcmVudD0iMzA1IiBuYW1lPSJkeW5hbWljX2NvbW1lbnRfaWJma18zIj4KLSAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPmR5bmFtaWNfY29tbWVudDwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSIzODMiIHBhcmVudD0iMzA1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5jb21tZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM4NCIgcGFyZW50PSIzMDUiIG5hbWU9ImR5bmFtaWNfaWQiPgotICAgICAgPENvbE5hbWVzPmR5bmFtaWNfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM4NSIgcGFyZW50PSIzMDUiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjM4NiIgcGFyZW50PSIzMDUiIG5hbWU9InBhcmVudF9jb21tZW50X2lkIj4KLSAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjM4NyIgcGFyZW50PSIzMDUiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjM4OCIgcGFyZW50PSIzMDYiIG5hbWU9Imxpa2VfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iMzg5IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjM5MCIgcGFyZW50PSIzMDYiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSIzOTEiIHBhcmVudD0iMzA2IiBuYW1lPSJsaWtlX3RpbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iMzkyIiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19saWtlc19pYmZrXzEiPgotICAgICAgPENvbE5hbWVzPmR5bmFtaWNfaWQ8L0NvbE5hbWVzPgotICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgotICAgICAgPFJlZkNvbE5hbWVzPmR5bmFtaWNfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyX2R5bmFtaWM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iMzkzIiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19saWtlc19pYmZrXzIiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjM5NCIgcGFyZW50PSIzMDYiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmxpa2VfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iMzk1IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8Q29sTmFtZXM+ZHluYW1pY19pZAotdXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSIzOTYiIHBhcmVudD0iMzA2IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iMzk3IiBwYXJlbnQ9IjMwNiIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGtleSBpZD0iMzk4IiBwYXJlbnQ9IjMwNiIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5keW5hbWljX2lkPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjM5OSIgcGFyZW50PSIzMDciIG5hbWU9Imhpc3RvcnlfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MTwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDAwIiBwYXJlbnQ9IjMwNyIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQwMSIgcGFyZW50PSIzMDciIG5hbWU9ImV4cGVyaWVuY2VfY2hhbmdlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDAyIiBwYXJlbnQ9IjMwNyIgbmFtZT0ic291cmNlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDAzIiBwYXJlbnQ9IjMwNyIgbmFtZT0idXBkYXRlX3RpbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNDA0IiBwYXJlbnQ9IjMwNyIgbmFtZT0iZXhwZXJpZW5jZV9oaXN0b3J5X2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNDA1IiBwYXJlbnQ9IjMwNyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+aGlzdG9yeV9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI0MDYiIHBhcmVudD0iMzA3IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNDA3IiBwYXJlbnQ9IjMwNyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNDA4IiBwYXJlbnQ9IjMwOCIgbmFtZT0icmVjb3JkX2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjU8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQwOSIgcGFyZW50PSIzMDgiIG5hbWU9ImZvbGxvd2VyX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDEwIiBwYXJlbnQ9IjMwOCIgbmFtZT0iZm9sbG93ZWRfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MTEiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0MTIiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz5mb2xsb3dlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iNDEzIiBwYXJlbnQ9IjMwOCIgbmFtZT0iZm9sbG93X2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+Zm9sbG93ZWRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjQxNCIgcGFyZW50PSIzMDgiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnJlY29yZF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI0MTUiIHBhcmVudD0iMzA4IiBuYW1lPSJmb2xsb3dlcl9pZCI+Ci0gICAgICA8Q29sTmFtZXM+Zm9sbG93ZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjQxNiIgcGFyZW50PSIzMDgiIG5hbWU9ImZvbGxvd2VkX2lkIj4KLSAgICAgIDxDb2xOYW1lcz5mb2xsb3dlZF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjQxNyIgcGFyZW50PSIzMDgiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjQxOCIgcGFyZW50PSIzMDkiIG5hbWU9InJlbGF0aW9uX2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjI8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQxOSIgcGFyZW50PSIzMDkiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MjAiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MjEiIHBhcmVudD0iMzA5IiBuYW1lPSJjcmVhdGVfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0MjIiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfcmVsYXRpb25faWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0MjMiIHBhcmVudD0iMzA5IiBuYW1lPSJmcmllbmRfcmVsYXRpb25faWJma18yIj4KLSAgICAgIDxDb2xOYW1lcz5mcmllbmRfaWQ8L0NvbE5hbWVzPgotICAgICAgPE9uRGVsZXRlPmNhc2NhZGU8L09uRGVsZXRlPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjQyNCIgcGFyZW50PSIzMDkiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnJlbGF0aW9uX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjQyNSIgcGFyZW50PSIzMDkiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjQyNiIgcGFyZW50PSIzMDkiIG5hbWU9ImZyaWVuZF9pZCI+Ci0gICAgICA8Q29sTmFtZXM+ZnJpZW5kX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNDI3IiBwYXJlbnQ9IjMwOSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNDI4IiBwYXJlbnQ9IjMxMCIgbmFtZT0iY29tbWVudF9pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD41PC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MjkiIHBhcmVudD0iMzEwIiBuYW1lPSJncm91cF9wb3N0X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MzAiIHBhcmVudD0iMzEwIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MzEiIHBhcmVudD0iMzEwIiBuYW1lPSJjb250ZW50Ij4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0MzIiIHBhcmVudD0iMzEwIiBuYW1lPSJwYXJlbnRfY29tbWVudF9pZCI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDMzIiBwYXJlbnQ9IjMxMCIgbmFtZT0idGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjY8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0MzQiIHBhcmVudD0iMzEwIiBuYW1lPSJncm91cF9jb21tZW50c19pYmZrXzEiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT5ncm91cF9wb3N0PC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjQzNSIgcGFyZW50PSIzMTAiIG5hbWU9Imdyb3VwX2NvbW1lbnRzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iNDM2IiBwYXJlbnQ9IjMxMCIgbmFtZT0iZ3JvdXBfY29tbWVudHNfaWJma18zIj4KLSAgICAgIDxDb2xOYW1lcz5wYXJlbnRfY29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPmdyb3VwX2NvbW1lbnRzPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjQzNyIgcGFyZW50PSIzMTAiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmNvbW1lbnRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDM4IiBwYXJlbnQ9IjMxMCIgbmFtZT0iZ3JvdXBfcG9zdF9pZCI+Ci0gICAgICA8Q29sTmFtZXM+Z3JvdXBfcG9zdF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDM5IiBwYXJlbnQ9IjMxMCIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDQwIiBwYXJlbnQ9IjMxMCIgbmFtZT0icGFyZW50X2NvbW1lbnRfaWQiPgotICAgICAgPENvbE5hbWVzPnBhcmVudF9jb21tZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNDQxIiBwYXJlbnQ9IjMxMCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNDQyIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+NDwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDQzIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfbmFtZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ0NCIgcGFyZW50PSIzMTEiIG5hbWU9ImRlc2NyaXB0aW9uIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NDUiIHBhcmVudD0iMzExIiBuYW1lPSJjcmVhdGVfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDQ2IiBwYXJlbnQ9IjMxMSIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDQ3IiBwYXJlbnQ9IjMxMSIgbmFtZT0ibWVtYmVyX2NvdW50Ij4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NDgiIHBhcmVudD0iMzExIiBuYW1lPSJjYXRlZ29yeSI+Ci0gICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDQ5IiBwYXJlbnQ9IjMxMSIgbmFtZT0iY292ZXJfaW1hZ2UiPgotICAgICAgPFBvc2l0aW9uPjg8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNDUwIiBwYXJlbnQ9IjMxMSIgbmFtZT0iZ3JvdXBfaW50ZXJlc3RzX2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNDUxIiBwYXJlbnQ9IjMxMSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+Z3JvdXBfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDUyIiBwYXJlbnQ9IjMxMSIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjQ1MyIgcGFyZW50PSIzMTEiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjQ1NCIgcGFyZW50PSIzMTIiIG5hbWU9InJlbGF0aW9uX2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjQ8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ1NSIgcGFyZW50PSIzMTIiIG5hbWU9Imdyb3VwX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDU2IiBwYXJlbnQ9IjMxMiIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNDU3IiBwYXJlbnQ9IjMxMiIgbmFtZT0iZ3JvdXBfbWVtYmVyc19pYmZrXzEiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz5ncm91cF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPmdyb3VwX2ludGVyZXN0czwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0NTgiIHBhcmVudD0iMzEyIiBuYW1lPSJncm91cF9tZW1iZXJzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNDU5IiBwYXJlbnQ9IjMxMiIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+cmVsYXRpb25faWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDYwIiBwYXJlbnQ9IjMxMiIgbmFtZT0idW5pcXVlX2dyb3VwX3VzZXIiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX2lkCi11c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjQ2MSIgcGFyZW50PSIzMTIiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI0NjIiIHBhcmVudD0iMzEyIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8a2V5IGlkPSI0NjMiIHBhcmVudD0iMzEyIiBuYW1lPSJ1bmlxdWVfZ3JvdXBfdXNlciI+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT51bmlxdWVfZ3JvdXBfdXNlcjwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI0NjQiIHBhcmVudD0iMzEzIiBuYW1lPSJncm91cF9wb3N0X2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjU8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ2NSIgcGFyZW50PSIzMTMiIG5hbWU9Imdyb3VwX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NjYiIHBhcmVudD0iMzEzIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NjciIHBhcmVudD0iMzEzIiBuYW1lPSJjb250ZW50Ij4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NjgiIHBhcmVudD0iMzEzIiBuYW1lPSJ0aXRsZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ2OSIgcGFyZW50PSIzMTMiIG5hbWU9ImltYWdlIj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NzAiIHBhcmVudD0iMzEzIiBuYW1lPSJsaWtlX2NvdW50Ij4KLSAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NzEiIHBhcmVudD0iMzEzIiBuYW1lPSJjb21tZW50X2NvdW50Ij4KLSAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0NzIiIHBhcmVudD0iMzEzIiBuYW1lPSJ0aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+OTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjQ3MyIgcGFyZW50PSIzMTMiIG5hbWU9Imdyb3VwX3Bvc3RfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz5ncm91cF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+Z3JvdXBfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT5ncm91cF9pbnRlcmVzdHM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iNDc0IiBwYXJlbnQ9IjMxMyIgbmFtZT0iZ3JvdXBfcG9zdF9pYmZrXzIiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjQ3NSIgcGFyZW50PSIzMTMiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX3Bvc3RfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDc2IiBwYXJlbnQ9IjMxMyIgbmFtZT0iZ3JvdXBfaWQiPgotICAgICAgPENvbE5hbWVzPmdyb3VwX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI0NzciIHBhcmVudD0iMzEzIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNDc4IiBwYXJlbnQ9IjMxMyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNDc5IiBwYXJlbnQ9IjMxNCIgbmFtZT0ibGV2ZWxfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0ODAiIHBhcmVudD0iMzE0IiBuYW1lPSJsZXZlbF9uYW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDgxIiBwYXJlbnQ9IjMxNCIgbmFtZT0icmVxdWlyZWRfZXhwZXJpZW5jZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ4MiIgcGFyZW50PSIzMTQiIG5hbWU9InJlcXVpcmVkX3NoYXJlX3JhdGlvIj4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ4MyIgcGFyZW50PSIzMTQiIG5hbWU9InJlcXVpcmVkX3VwbG9hZF9nYiI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI0ODQiIHBhcmVudD0iMzE0IiBuYW1lPSJyZXF1aXJlZF9zZWVkaW5nX2hvdXJzIj4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ4NSIgcGFyZW50PSIzMTQiIG5hbWU9InBlcm1pc3Npb25zIj4KLSAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8aW5kZXggaWQ9IjQ4NiIgcGFyZW50PSIzMTQiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPmxldmVsX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI0ODciIHBhcmVudD0iMzE0IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI0ODgiIHBhcmVudD0iMzE1IiBuYW1lPSJsaWtlSWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDg5IiBwYXJlbnQ9IjMxNSIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ5MCIgcGFyZW50PSIzMTUiIG5hbWU9InBvc3RObyI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNDkxIiBwYXJlbnQ9IjMxNSIgbmFtZT0ibGlrZXNfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxPblVwZGF0ZT5jYXNjYWRlPC9PblVwZGF0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI0OTIiIHBhcmVudD0iMzE1IiBuYW1lPSJsaWtlc19pYmZrXzIiPgotICAgICAgPENvbE5hbWVzPnBvc3RObzwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+cG9zdE5vPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+cG9zdDwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI0OTMiIHBhcmVudD0iMzE1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5saWtlSWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDk0IiBwYXJlbnQ9IjMxNSIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNDk1IiBwYXJlbnQ9IjMxNSIgbmFtZT0icG9zdE5vIj4KLSAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI0OTYiIHBhcmVudD0iMzE1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI0OTciIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0Tm8iPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+Mjc8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjQ5OCIgcGFyZW50PSIzMTYiIG5hbWU9InVzZXJJZCI+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNDk5IiBwYXJlbnQ9IjMxNiIgbmFtZT0icG9zdENvbnRlbnQiPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUwMCIgcGFyZW50PSIzMTYiIG5hbWU9ImltYWdlVXJsIj4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MDEiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0VGltZSI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MDIiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0TGlrZU51bSI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTAzIiBwYXJlbnQ9IjMxNiIgbmFtZT0icG9zdENvbGxlY3ROdW0iPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUwNCIgcGFyZW50PSIzMTYiIG5hbWU9InRpdGxlIj4KLSAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MDUiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0VHlwZSI+Ci0gICAgICA8UG9zaXRpb24+OTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI1MDYiIHBhcmVudD0iMzE2IiBuYW1lPSJwb3N0X2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcklkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI1MDciIHBhcmVudD0iMzE2IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5wb3N0Tm88L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNTA4IiBwYXJlbnQ9IjMxNiIgbmFtZT0idXNlcklkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VySWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI1MDkiIHBhcmVudD0iMzE2IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI1MTAiIHBhcmVudD0iMzE3IiBuYW1lPSJwcm9tb19pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4zPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTEiIHBhcmVudD0iMzE3IiBuYW1lPSJuYW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTEyIiBwYXJlbnQ9IjMxNyIgbmFtZT0idXBsb2FkX2NvZWZmIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTMiIHBhcmVudD0iMzE3IiBuYW1lPSJkb3dubG9hZF9jb2VmZiI+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTQiIHBhcmVudD0iMzE3IiBuYW1lPSJ0aW1lX3JhbmdlIj4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTUiIHBhcmVudD0iMzE3IiBuYW1lPSJjcml0ZXJpYSI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTE2IiBwYXJlbnQ9IjMxNyIgbmFtZT0icF9zdGFydF90aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MTciIHBhcmVudD0iMzE3IiBuYW1lPSJwX2VuZF90aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8aW5kZXggaWQ9IjUxOCIgcGFyZW50PSIzMTciIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnByb21vX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI1MTkiIHBhcmVudD0iMzE3IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI1MjAiIHBhcmVudD0iMzE4IiBuYW1lPSJpZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4xPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MjEiIHBhcmVudD0iMzE4IiBuYW1lPSJjb21tZW50X2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTIyIiBwYXJlbnQ9IjMxOCIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUyMyIgcGFyZW50PSIzMTgiIG5hbWU9ImlzX2xpa2VkIj4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4xPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNTI0IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfY29tbWVudCI+Ci0gICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+Y29tbWVudF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnNlZWRfY29tbWVudHM8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxmb3JlaWduLWtleSBpZD0iNTI1IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfdXNlciI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNTI2IiBwYXJlbnQ9IjMxOCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+aWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNTI3IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfY29tbWVudCI+Ci0gICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNTI4IiBwYXJlbnQ9IjMxOCIgbmFtZT0iZmtfdXNlciI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjUyOSIgcGFyZW50PSIzMTgiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjUzMCIgcGFyZW50PSIzMTkiIG5hbWU9ImNvbW1lbnRfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MTwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTMxIiBwYXJlbnQ9IjMxOSIgbmFtZT0ic2VlZF9pZCI+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTMyIiBwYXJlbnQ9IjMxOSIgbmFtZT0iY29tX2NvbW1lbnRfaWQiPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUzMyIgcGFyZW50PSIzMTkiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUzNCIgcGFyZW50PSIzMTkiIG5hbWU9ImNvbnRlbnQiPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUzNSIgcGFyZW50PSIzMTkiIG5hbWU9ImlzX2Fub255bW91cyI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjUzNiIgcGFyZW50PSIzMTkiIG5hbWU9Imxpa2VzX2NvdW50Ij4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1MzciIHBhcmVudD0iMzE5IiBuYW1lPSJyZXBseV9jb3VudCI+Ci0gICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+Ci0gICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTM4IiBwYXJlbnQ9IjMxOSIgbmFtZT0iY29tbWVudF90aW1lIj4KLSAgICAgIDxQb3NpdGlvbj45PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxmb3JlaWduLWtleSBpZD0iNTM5IiBwYXJlbnQ9IjMxOSIgbmFtZT0ic2VlZF9jb21tZW50c19pYmZrXzEiPgotICAgICAgPENvbE5hbWVzPnNlZWRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnNlZWRfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT5zZWVkczwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI1NDAiIHBhcmVudD0iMzE5IiBuYW1lPSJzZWVkX2NvbW1lbnRzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNTQxIiBwYXJlbnQ9IjMxOSIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+Y29tbWVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI1NDIiIHBhcmVudD0iMzE5IiBuYW1lPSJzZWVkX2lkIj4KLSAgICAgIDxDb2xOYW1lcz5zZWVkX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI1NDMiIHBhcmVudD0iMzE5IiBuYW1lPSJjb21fY29tbWVudF9pZCI+Ci0gICAgICA8Q29sTmFtZXM+Y29tX2NvbW1lbnRfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjU0NCIgcGFyZW50PSIzMTkiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI1NDUiIHBhcmVudD0iMzE5IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI1NDYiIHBhcmVudD0iMzIwIiBuYW1lPSJpZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4xPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NDciIHBhcmVudD0iMzIwIiBuYW1lPSJjb21tZW50X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NDgiIHBhcmVudD0iMzIwIiBuYW1lPSJpc19saWtlZCI+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaXQoMSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTQ5IiBwYXJlbnQ9IjMyMCIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGluZGV4IGlkPSI1NTAiIHBhcmVudD0iMzIwIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNTUxIiBwYXJlbnQ9IjMyMCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNTUyIiBwYXJlbnQ9IjMyMSIgbmFtZT0ic2VlZF9pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD40PC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTMiIHBhcmVudD0iMzIxIiBuYW1lPSJ0b3JyZW50X2lkIj4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTQiIHBhcmVudD0iMzIxIiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTUiIHBhcmVudD0iMzIxIiBuYW1lPSJzdGFydF90aW1lIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTYiIHBhcmVudD0iMzIxIiBuYW1lPSJlbmRfdGltZSI+Ci0gICAgICA8UG9zaXRpb24+NTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NTciIHBhcmVudD0iMzIxIiBuYW1lPSJkdXJhdGlvbiI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI1NTgiIHBhcmVudD0iMzIxIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMyI+Ci0gICAgICA8Q29sTmFtZXM+dG9ycmVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dG9ycmVudF9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnRvcnJlbnRzPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjU1OSIgcGFyZW50PSIzMjEiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8yIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI1NjAiIHBhcmVudD0iMzIxIiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5zZWVkX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjU2MSIgcGFyZW50PSIzMjEiIG5hbWU9IkZLX1JlbGF0aW9uc2hpcF8zIj4KLSAgICAgIDxDb2xOYW1lcz50b3JyZW50X2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI1NjIiIHBhcmVudD0iMzIxIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMiI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjU2MyIgcGFyZW50PSIzMjEiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjU2NCIgcGFyZW50PSIzMjIiIG5hbWU9InRhc2tfaWQiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoNTApfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU2NSIgcGFyZW50PSIzMjIiIG5hbWU9InRpdGxlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTY2IiBwYXJlbnQ9IjMyMiIgbmFtZT0iZGVzY3JpcHRpb24iPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NjciIHBhcmVudD0iMzIyIiBuYW1lPSJyZXdhcmRfZXhwZXJpZW5jZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU2OCIgcGFyZW50PSIzMjIiIG5hbWU9InJld2FyZF9wb2ludHMiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8aW5kZXggaWQ9IjU2OSIgcGFyZW50PSIzMjIiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnRhc2tfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjU3MCIgcGFyZW50PSIzMjIiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjU3MSIgcGFyZW50PSIzMjMiIG5hbWU9InRvcnJlbnRfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MzwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTcyIiBwYXJlbnQ9IjMyMyIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTczIiBwYXJlbnQ9IjMyMyIgbmFtZT0idGl0bGUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NzQiIHBhcmVudD0iMzIzIiBuYW1lPSJkZXNjcmlwdGlvbiI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dGV4dHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NzUiIHBhcmVudD0iMzIzIiBuYW1lPSJ0YWdzIj4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NzYiIHBhcmVudD0iMzIzIiBuYW1lPSJjYXRlZ29yeSI+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDUwKXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1NzciIHBhcmVudD0iMzIzIiBuYW1lPSJ1cGxvYWRfdGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI1NzgiIHBhcmVudD0iMzIzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8UmVmQ29sTmFtZXM+dXNlcl9pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnVzZXI8L1JlZlRhYmxlTmFtZT4KLSAgICA8L2ZvcmVpZ24ta2V5PgotICAgIDxpbmRleCBpZD0iNTc5IiBwYXJlbnQ9IjMyMyIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8Q29sTmFtZXM+dG9ycmVudF9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI1ODAiIHBhcmVudD0iMzIzIiBuYW1lPSJGS19SZWxhdGlvbnNoaXBfMSI+Ci0gICAgICA8Q29sTmFtZXM+dXNlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjU4MSIgcGFyZW50PSIzMjMiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjU4MiIgcGFyZW50PSIzMjQiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+NTwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTgzIiBwYXJlbnQ9IjMyNCIgbmFtZT0idXNlcm5hbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4yPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1ODQiIHBhcmVudD0iMzI0IiBuYW1lPSJhdmF0YXJfdXJsIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTg1IiBwYXJlbnQ9IjMyNCIgbmFtZT0iZW1haWwiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1ODYiIHBhcmVudD0iMzI0IiBuYW1lPSJwYXNzd29yZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU4NyIgcGFyZW50PSIzMjQiIG5hbWU9InJvbGUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1ODgiIHBhcmVudD0iMzI0IiBuYW1lPSJpbnZpdGVfY291bnQiPgotICAgICAgPFBvc2l0aW9uPjc8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU4OSIgcGFyZW50PSIzMjQiIG5hbWU9ImxldmVsIj4KLSAgICAgIDxQb3NpdGlvbj44PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1OTAiIHBhcmVudD0iMzI0IiBuYW1lPSJ1cGxvYWRfY291bnQiPgotICAgICAgPFBvc2l0aW9uPjk8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZmxvYXR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTkxIiBwYXJlbnQ9IjMyNCIgbmFtZT0iZG93bmxvYWRfY291bnQiPgotICAgICAgPFBvc2l0aW9uPjEwPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU5MiIgcGFyZW50PSIzMjQiIG5hbWU9InNoYXJlX3JhdGUiPgotICAgICAgPFBvc2l0aW9uPjExPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU5MyIgcGFyZW50PSIzMjQiIG5hbWU9InJlZ2lzdHJhdGlvbl9kYXRlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNTk0IiBwYXJlbnQ9IjMyNCIgbmFtZT0ibGFzdF9sb2dpbl90aW1lIj4KLSAgICAgIDxQb3NpdGlvbj4xMzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5kYXRldGltZXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1OTUiIHBhcmVudD0iMzI0IiBuYW1lPSJ1c2VyX3BvaW50cyI+Ci0gICAgICA8UG9zaXRpb24+MTQ8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU5NiIgcGFyZW50PSIzMjQiIG5hbWU9ImlzX3Byb21vIj4KLSAgICAgIDxQb3NpdGlvbj4xNTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjU5NyIgcGFyZW50PSIzMjQiIG5hbWU9ImN1cnJlbnRfZXhwZXJpZW5jZSI+Ci0gICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE2PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI1OTgiIHBhcmVudD0iMzI0IiBuYW1lPSJjdXJyZW50X3NlZWRpbmdfaG91cnMiPgotICAgICAgPERlZmF1bHRFeHByZXNzaW9uPjA8L0RlZmF1bHRFeHByZXNzaW9uPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xNzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5mbG9hdHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjU5OSIgcGFyZW50PSIzMjQiIG5hbWU9ImZrX3VzZXJfbGV2ZWwiPgotICAgICAgPENvbE5hbWVzPmxldmVsPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5zZXQtbnVsbDwvT25EZWxldGU+Ci0gICAgICA8T25VcGRhdGU+Y2FzY2FkZTwvT25VcGRhdGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+bGV2ZWxfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT5sZXZlbDwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI2MDAiIHBhcmVudD0iMzI0IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjYwMSIgcGFyZW50PSIzMjQiIG5hbWU9ImZrX3VzZXJfbGV2ZWwiPgotICAgICAgPENvbE5hbWVzPmxldmVsPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNjAyIiBwYXJlbnQ9IjMyNCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gICAgPGNvbHVtbiBpZD0iNjAzIiBwYXJlbnQ9IjMyNSIgbmFtZT0iZHluYW1pY19pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD41PC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MDQiIHBhcmVudD0iMzI1IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjA1IiBwYXJlbnQ9IjMyNSIgbmFtZT0idGl0bGUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4zPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MDYiIHBhcmVudD0iMzI1IiBuYW1lPSJjb250ZW50Ij4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnZhcmNoYXIoMjU1KXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MDciIHBhcmVudD0iMzI1IiBuYW1lPSJpbWFnZV91cmwiPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYwOCIgcGFyZW50PSIzMjUiIG5hbWU9InRpbWUiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj42PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmRhdGV0aW1lfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYwOSIgcGFyZW50PSIzMjUiIG5hbWU9Imxpa2VzX2NvdW50Ij4KLSAgICAgIDxEZWZhdWx0RXhwcmVzc2lvbj4wPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj43PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MTAiIHBhcmVudD0iMzI1IiBuYW1lPSJjb21tZW50c19jb3VudCI+Ci0gICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+Ci0gICAgICA8UG9zaXRpb24+ODwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI2MTEiIHBhcmVudD0iMzI1IiBuYW1lPSJ1c2VyX2R5bmFtaWNfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI2MTIiIHBhcmVudD0iMzI1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5keW5hbWljX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjYxMyIgcGFyZW50PSIzMjUiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI2MTQiIHBhcmVudD0iMzI1IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI2MTUiIHBhcmVudD0iMzI2IiBuYW1lPSJpbnZpdGVfaWQiPgotICAgICAgPEF1dG9JbmNyZW1lbnQ+MjwvQXV0b0luY3JlbWVudD4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MTwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5iaWdpbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjE2IiBwYXJlbnQ9IjMyNiIgbmFtZT0idXNlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYxNyIgcGFyZW50PSIzMjYiIG5hbWU9Imludml0ZV9jb2RlIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjE4IiBwYXJlbnQ9IjMyNiIgbmFtZT0iaXNfdXNlZCI+Ci0gICAgICA8RGVmYXVsdEV4cHJlc3Npb24+MDwvRGVmYXVsdEV4cHJlc3Npb24+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT50aW55aW50KDEpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYxOSIgcGFyZW50PSIzMjYiIG5hbWU9ImNyZWF0ZWRfYXQiPgotICAgICAgPERlZmF1bHRFeHByZXNzaW9uPkNVUlJFTlRfVElNRVNUQU1QPC9EZWZhdWx0RXhwcmVzc2lvbj4KLSAgICAgIDxQb3NpdGlvbj41PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPnRpbWVzdGFtcHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjYyMCIgcGFyZW50PSIzMjYiIG5hbWU9InVzZXJfaW52aXRlX2NvZGVfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGluZGV4IGlkPSI2MjEiIHBhcmVudD0iMzI2IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxDb2xOYW1lcz5pbnZpdGVfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNjIyIiBwYXJlbnQ9IjMyNiIgbmFtZT0iaW52aXRlX2NvZGUiPgotICAgICAgPENvbE5hbWVzPmludml0ZV9jb2RlPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgICAgPFVuaXF1ZT4xPC9VbmlxdWU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjYyMyIgcGFyZW50PSIzMjYiIG5hbWU9InVzZXJfaWQiPgotICAgICAgPENvbE5hbWVzPnVzZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8a2V5IGlkPSI2MjQiIHBhcmVudD0iMzI2IiBuYW1lPSJQUklNQVJZIj4KLSAgICAgIDxOYW1lU3Vycm9nYXRlPjE8L05hbWVTdXJyb2dhdGU+Ci0gICAgICA8UHJpbWFyeT4xPC9QcmltYXJ5PgotICAgICAgPFVuZGVybHlpbmdJbmRleE5hbWU+UFJJTUFSWTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8a2V5IGlkPSI2MjUiIHBhcmVudD0iMzI2IiBuYW1lPSJpbnZpdGVfY29kZSI+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5pbnZpdGVfY29kZTwvVW5kZXJseWluZ0luZGV4TmFtZT4KLSAgICA8L2tleT4KLSAgICA8Y29sdW1uIGlkPSI2MjYiIHBhcmVudD0iMzI3IiBuYW1lPSJtZXNzYWdlX2lkIj4KLSAgICAgIDxBdXRvSW5jcmVtZW50PjE8L0F1dG9JbmNyZW1lbnQ+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjE8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+YmlnaW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYyNyIgcGFyZW50PSIzMjciIG5hbWU9InNlbmRlcl9pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjI8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjYyOCIgcGFyZW50PSIzMjciIG5hbWU9InJlY2VpdmVyX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjI5IiBwYXJlbnQ9IjMyNyIgbmFtZT0iY29udGVudCI+Ci0gICAgICA8UG9zaXRpb24+NDwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjMwIiBwYXJlbnQ9IjMyNyIgbmFtZT0idGltZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+ZGF0ZXRpbWV8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI2MzEiIHBhcmVudD0iMzI3IiBuYW1lPSJ1c2VyX21lc3NhZ2VzX2liZmtfMSI+Ci0gICAgICA8Q29sTmFtZXM+c2VuZGVyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI2MzIiIHBhcmVudD0iMzI3IiBuYW1lPSJ1c2VyX21lc3NhZ2VzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+cmVjZWl2ZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFJlZkNvbE5hbWVzPnVzZXJfaWQ8L1JlZkNvbE5hbWVzPgotICAgICAgPFJlZlRhYmxlTmFtZT51c2VyPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjYzMyIgcGFyZW50PSIzMjciIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPm1lc3NhZ2VfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgICA8VW5pcXVlPjE8L1VuaXF1ZT4KLSAgICA8L2luZGV4PgotICAgIDxpbmRleCBpZD0iNjM0IiBwYXJlbnQ9IjMyNyIgbmFtZT0ic2VuZGVyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz5zZW5kZXJfaWQ8L0NvbE5hbWVzPgotICAgICAgPFR5cGU+YnRyZWU8L1R5cGU+Ci0gICAgPC9pbmRleD4KLSAgICA8aW5kZXggaWQ9IjYzNSIgcGFyZW50PSIzMjciIG5hbWU9InJlY2VpdmVyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz5yZWNlaXZlcl9pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICA8L2luZGV4PgotICAgIDxrZXkgaWQ9IjYzNiIgcGFyZW50PSIzMjciIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPE5hbWVTdXJyb2dhdGU+MTwvTmFtZVN1cnJvZ2F0ZT4KLSAgICAgIDxQcmltYXJ5PjE8L1ByaW1hcnk+Ci0gICAgICA8VW5kZXJseWluZ0luZGV4TmFtZT5QUklNQVJZPC9VbmRlcmx5aW5nSW5kZXhOYW1lPgotICAgIDwva2V5PgotICAgIDxjb2x1bW4gaWQ9IjYzNyIgcGFyZW50PSIzMjgiIG5hbWU9InN0YXR1c19pZCI+Ci0gICAgICA8QXV0b0luY3JlbWVudD4yPC9BdXRvSW5jcmVtZW50PgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj4xPC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmJpZ2ludHwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Y29sdW1uIGlkPSI2MzgiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+MjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjM5IiBwYXJlbnQ9IjMyOCIgbmFtZT0idGFza19pZCI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjM8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dmFyY2hhcigyNTUpfDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjY0MCIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfcHJvZ3Jlc3MiPgotICAgICAgPE5vdE51bGw+MTwvTm90TnVsbD4KLSAgICAgIDxQb3NpdGlvbj40PC9Qb3NpdGlvbj4KLSAgICAgIDxTdG9yZWRUeXBlPmZsb2F0fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjY0MSIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfZXhwZXJpZW5jZSI+Ci0gICAgICA8Tm90TnVsbD4xPC9Ob3ROdWxsPgotICAgICAgPFBvc2l0aW9uPjU8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+aW50fDBzPC9TdG9yZWRUeXBlPgotICAgIDwvY29sdW1uPgotICAgIDxjb2x1bW4gaWQ9IjY0MiIgcGFyZW50PSIzMjgiIG5hbWU9ImN1cnJlbnRfcG9pbnRzIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NjwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT5pbnR8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjQzIiBwYXJlbnQ9IjMyOCIgbmFtZT0ic3RhdHVzIj4KLSAgICAgIDxOb3ROdWxsPjE8L05vdE51bGw+Ci0gICAgICA8UG9zaXRpb24+NzwvUG9zaXRpb24+Ci0gICAgICA8U3RvcmVkVHlwZT52YXJjaGFyKDI1NSl8MHM8L1N0b3JlZFR5cGU+Ci0gICAgPC9jb2x1bW4+Ci0gICAgPGNvbHVtbiBpZD0iNjQ0IiBwYXJlbnQ9IjMyOCIgbmFtZT0iaXNfcmV3YXJkX2NsYWltZWQiPgotICAgICAgPERlZmF1bHRFeHByZXNzaW9uPjA8L0RlZmF1bHRFeHByZXNzaW9uPgotICAgICAgPFBvc2l0aW9uPjg8L1Bvc2l0aW9uPgotICAgICAgPFN0b3JlZFR5cGU+dGlueWludCgxKXwwczwvU3RvcmVkVHlwZT4KLSAgICA8L2NvbHVtbj4KLSAgICA8Zm9yZWlnbi1rZXkgaWQ9IjY0NSIgcGFyZW50PSIzMjgiIG5hbWU9InVzZXJfdGFza19zdGF0dXNfaWJma18xIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxPbkRlbGV0ZT5jYXNjYWRlPC9PbkRlbGV0ZT4KLSAgICAgIDxSZWZDb2xOYW1lcz51c2VyX2lkPC9SZWZDb2xOYW1lcz4KLSAgICAgIDxSZWZUYWJsZU5hbWU+dXNlcjwvUmVmVGFibGVOYW1lPgotICAgIDwvZm9yZWlnbi1rZXk+Ci0gICAgPGZvcmVpZ24ta2V5IGlkPSI2NDYiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX3Rhc2tfc3RhdHVzX2liZmtfMiI+Ci0gICAgICA8Q29sTmFtZXM+dGFza19pZDwvQ29sTmFtZXM+Ci0gICAgICA8T25EZWxldGU+Y2FzY2FkZTwvT25EZWxldGU+Ci0gICAgICA8UmVmQ29sTmFtZXM+dGFza19pZDwvUmVmQ29sTmFtZXM+Ci0gICAgICA8UmVmVGFibGVOYW1lPnRhc2tzPC9SZWZUYWJsZU5hbWU+Ci0gICAgPC9mb3JlaWduLWtleT4KLSAgICA8aW5kZXggaWQ9IjY0NyIgcGFyZW50PSIzMjgiIG5hbWU9IlBSSU1BUlkiPgotICAgICAgPENvbE5hbWVzPnN0YXR1c19pZDwvQ29sTmFtZXM+Ci0gICAgICA8VHlwZT5idHJlZTwvVHlwZT4KLSAgICAgIDxVbmlxdWU+MTwvVW5pcXVlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI2NDgiIHBhcmVudD0iMzI4IiBuYW1lPSJ1c2VyX2lkIj4KLSAgICAgIDxDb2xOYW1lcz51c2VyX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGluZGV4IGlkPSI2NDkiIHBhcmVudD0iMzI4IiBuYW1lPSJ0YXNrX2lkIj4KLSAgICAgIDxDb2xOYW1lcz50YXNrX2lkPC9Db2xOYW1lcz4KLSAgICAgIDxUeXBlPmJ0cmVlPC9UeXBlPgotICAgIDwvaW5kZXg+Ci0gICAgPGtleSBpZD0iNjUwIiBwYXJlbnQ9IjMyOCIgbmFtZT0iUFJJTUFSWSI+Ci0gICAgICA8TmFtZVN1cnJvZ2F0ZT4xPC9OYW1lU3Vycm9nYXRlPgotICAgICAgPFByaW1hcnk+MTwvUHJpbWFyeT4KLSAgICAgIDxVbmRlcmx5aW5nSW5kZXhOYW1lPlBSSU1BUlk8L1VuZGVybHlpbmdJbmRleE5hbWU+Ci0gICAgPC9rZXk+Ci0gIDwvZGF0YWJhc2UtbW9kZWw+Ci08L2RhdGFTb3VyY2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL2luZm9ybWF0aW9uX3NjaGVtYS5GTlJ3TFEubWV0YSBiLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9pbmZvcm1hdGlvbl9zY2hlbWEuRk5Sd0xRLm1ldGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZjNkYjIuLjAwMDAwMDAKLS0tIGEvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL2luZm9ybWF0aW9uX3NjaGVtYS5GTlJ3TFEubWV0YQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI246aW5mb3JtYXRpb25fc2NoZW1hCi0hPG1kPiBbbnVsbCwgMCwgbnVsbCwgbnVsbCwgLTIxNDc0ODM2NDgsIC0yMTQ3NDgzNjQ4XQpkaWZmIC0tZ2l0IGEvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL215c3FsLm9zQTRCZy5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL215c3FsLm9zQTRCZy5tZXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmE1M2YxLi4wMDAwMDAwCi0tLSBhLy5pZGVhL2RhdGFTb3VyY2VzLzY2ODlmMTVhLTVjZDAtNDBiMC05NzBjLTcxM2RiM2U3YmFjMi9zdG9yYWdlX3YyL19zcmNfL3NjaGVtYS9teXNxbC5vc0E0QmcubWV0YQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI246bXlzcWwKLSE8bWQ+IFtudWxsLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcGVyZm9ybWFuY2Vfc2NoZW1hLmtJdzBudy5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3BlcmZvcm1hbmNlX3NjaGVtYS5rSXcwbncubWV0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5NGRiMS4uMDAwMDAwMAotLS0gYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcGVyZm9ybWFuY2Vfc2NoZW1hLmtJdzBudy5tZXRhCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jbjpwZXJmb3JtYW5jZV9zY2hlbWEKLSE8bWQ+IFtudWxsLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcHRwcm9qZWN0LmxUQ0ozUS5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3B0cHJvamVjdC5sVENKM1EubWV0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1YzNmZS4uMDAwMDAwMAotLS0gYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvcHRwcm9qZWN0LmxUQ0ozUS5tZXRhCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jbjpwdHByb2plY3QKLSE8bWQ+IFswLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvc3lzLnpiNEJBQS5tZXRhIGIvLmlkZWEvZGF0YVNvdXJjZXMvNjY4OWYxNWEtNWNkMC00MGIwLTk3MGMtNzEzZGIzZTdiYWMyL3N0b3JhZ2VfdjIvX3NyY18vc2NoZW1hL3N5cy56YjRCQUEubWV0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0NDcwYi4uMDAwMDAwMAotLS0gYS8uaWRlYS9kYXRhU291cmNlcy82Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIvc3RvcmFnZV92Mi9fc3JjXy9zY2hlbWEvc3lzLnpiNEJBQS5tZXRhCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jbjpzeXMKLSE8bWQ+IFtudWxsLCAwLCBudWxsLCBudWxsLCAtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDhdCmRpZmYgLS1naXQgYS8uaWRlYS9taXNjLnhtbCBiLy5pZGVhL21pc2MueG1sCmluZGV4IGY1OGUxZTIuLjgyZGJlYzggMTAwNjQ0Ci0tLSBhLy5pZGVhL21pc2MueG1sCisrKyBiLy5pZGVhL21pc2MueG1sCkBAIC04LDEwICs4LDYgQEAKICAgICAgIDwvbGlzdD4KICAgICA8L29wdGlvbj4KICAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iUFdBIj4KLSAgICA8b3B0aW9uIG5hbWU9ImVuYWJsZWQiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0id2FzRW5hYmxlZEF0TGVhc3RPbmNlIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgPC9jb21wb25lbnQ+CiAgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdFJvb3RNYW5hZ2VyIiB2ZXJzaW9uPSIyIiBsYW5ndWFnZUxldmVsPSJKREtfMTciIGRlZmF1bHQ9InRydWUiIHByb2plY3QtamRrLW5hbWU9IjE3IiBwcm9qZWN0LWpkay10eXBlPSJKYXZhU0RLIj4KICAgICA8b3V0cHV0IHVybD0iZmlsZTovLyRQUk9KRUNUX0RJUiQvb3V0IiAvPgogICA8L2NvbXBvbmVudD4KZGlmZiAtLWdpdCBhLy5pZGVhL21vZHVsZXMueG1sIGIvLmlkZWEvbW9kdWxlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMjNiZjkuLjAwMDAwMDAKLS0tIGEvLmlkZWEvbW9kdWxlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB2ZXJzaW9uPSI0Ij4KLSAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TW9kdWxlTWFuYWdlciI+Ci0gICAgPG1vZHVsZXM+Ci0gICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkL2VjaG8tYmFja2VuZC5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkL2VjaG8tYmFja2VuZC5pbWwiIC8+Ci0gICAgPC9tb2R1bGVzPgotICA8L2NvbXBvbmVudD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uaWRlYS9zcWxEYXRhU291cmNlcy54bWwgYi8uaWRlYS9zcWxEYXRhU291cmNlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNjFmZjAuLjAwMDAwMDAKLS0tIGEvLmlkZWEvc3FsRGF0YVNvdXJjZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHZlcnNpb249IjQiPgotICA8Y29tcG9uZW50IG5hbWU9IkRkbE1hcHBpbmdzIj4KLSAgICA8bWFwcGluZyB1dWlkPSI1ZWQ1MTYzZi1lZGE4LTRmOGUtODI4MC02OGVhN2NjZjE5MzciIG5hbWU9InB0UHJvamVjdEBsb2NhbGhvc3QgTWFwcGluZyI+Ci0gICAgICA8ZGF0YS1zb3VyY2VzIGRiPSI2Njg5ZjE1YS01Y2QwLTQwYjAtOTcwYy03MTNkYjNlN2JhYzIiIGRkbD0iOWMyZjYzNGYtZGRiMC00ZGNiLWJjZWQtMjcxNTA2YzllNjQ5IiAvPgotICAgICAgPHNjb3BlPgotICAgICAgICA8bm9kZSBraW5kPSJkYXRhYmFzZSIgcW5hbWU9IkAiIC8+Ci0gICAgICA8L3Njb3BlPgotICAgIDwvbWFwcGluZz4KLSAgPC9jb21wb25lbnQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvdmNzLnhtbCBiLy5pZGVhL3Zjcy54bWwKaW5kZXggOWY2NmE1NC4uOTRhMjVmNyAxMDA2NDQKLS0tIGEvLmlkZWEvdmNzLnhtbAorKysgYi8uaWRlYS92Y3MueG1sCkBAIC0yLDYgKzIsNSBAQAogPHByb2plY3QgdmVyc2lvbj0iNCI+CiAgIDxjb21wb25lbnQgbmFtZT0iVmNzRGlyZWN0b3J5TWFwcGluZ3MiPgogICAgIDxtYXBwaW5nIGRpcmVjdG9yeT0iJFBST0pFQ1RfRElSJCIgdmNzPSJHaXQiIC8+Ci0gICAgPG1hcHBpbmcgZGlyZWN0b3J5PSIkUFJPSkVDVF9ESVIkL3R0b3JyZW50IiB2Y3M9IkdpdCIgLz4KICAgPC9jb21wb25lbnQ+CiA8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvd29ya3NwYWNlLnhtbCBiLy5pZGVhL3dvcmtzcGFjZS54bWwKaW5kZXggNWMyMTVjYi4uYWUzZWYzZiAxMDA2NDQKLS0tIGEvLmlkZWEvd29ya3NwYWNlLnhtbAorKysgYi8uaWRlYS93b3Jrc3BhY2UueG1sCkBAIC01LDQ0ICs1LDM4IEBACiAgIDwvY29tcG9uZW50PgogICA8Y29tcG9uZW50IG5hbWU9IkNoYW5nZUxpc3RNYW5hZ2VyIj4KICAgICA8bGlzdCBkZWZhdWx0PSJ0cnVlIiBpZD0iZjAwOGZlMzAtMDcxMS00MmUyLWJiMzMtMTdkY2ZkYmFkMzg3IiBuYW1lPSJDaGFuZ2VzIiBjb21tZW50PSIiPgotICAgICAgPGNoYW5nZSBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS9taXNjLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL21pc2MueG1sIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvLmlkZWEvdmNzLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL3Zjcy54bWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS9kYm5hdmlnYXRvci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS9kYm5hdmlnYXRvci54bWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KICAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC8uaWRlYS93b3Jrc3BhY2UueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvLmlkZWEvd29ya3NwYWNlLnhtbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL2NyZWF0ZS5zcWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvcG9tLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3BvbS54bWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbW1vbi9iYXNlL1Jlc3VsdC5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29tbW9uL2Jhc2UvUmVzdWx0LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb25maWcvTXlNZXRhT2JqZWN0SGFuZGxlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29uZmlnL015TWV0YU9iamVjdEhhbmRsZXIuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvSW52aXRlQ29udHJvbGxlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgogICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2Vycy5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJzLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vSW52aXRlUGFyYW0uamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9kdG8vcGFyYW0vVG9ycmVudFVwbG9hZFBhcmFtLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRW50aXR5QmFzZS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0VudGl0eUJhc2UuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9JbnZpdGF0aW9uRW50aXR5LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyLmphdmEiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvSW52aXRhdGlvbk1hcHBlci5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L21hcHBlci9Vc2VyTWFwcGVyLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9tYXBwZXIvVXNlck1hcHBlci5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9JbnZpdGF0aW9uU2VydmljZS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9JbnZpdGF0aW9uU2VydmljZS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIC8+CisgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9JbnZpdGF0aW9uU2VydmljZUltcGwuamF2YSIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1RvcnJlbnRTZXJ2aWNlSW1wbC5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Ub3JyZW50U2VydmljZUltcGwuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgogICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvbWFpbi9yZXNvdXJjZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1RvcnJlbnRDb250cm9sbGVyVGVzdC5qYXZhIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Ub3JyZW50Q29udHJvbGxlclRlc3QuamF2YSIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgogICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5qYXZhIiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgogICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJEVtYWlsUmVxdWVzdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRWZXJpZmljYXRpb25SZXF1ZXN0LmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJEVtYWlsUmVxdWVzdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJEVtYWlsUmVxdWVzdC5jbGFzcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgorICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRWZXJpZmljYXRpb25SZXF1ZXN0LmNsYXNzIiBhZnRlckRpcj0iZmFsc2UiIC8+CiAgICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcyIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiBhZnRlclBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuY2xhc3MiIGFmdGVyRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9maWxlcy9maWxlcy50b3JyZW50IiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL21hcHBlci9GYXZvcml0ZU1hcHBlci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1Byb21vdGlvbk1hcHBlci54bWwiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1RvcnJlbnRNYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL21hcHBlci9Vc2VyTWFwcGVyLnhtbCIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIueG1sIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9jbGFzc2VzL291dHB1dC92YWxpZC50b3JyZW50IiBiZWZvcmVEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphciIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphciIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9jcmVhdGVkRmlsZXMubHN0IiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvaW5wdXRGaWxlcy5sc3QiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9pbnB1dEZpbGVzLmxzdCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdCIgYmVmb3JlRGlyPSJmYWxzZSIgYWZ0ZXJQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdCIgYWZ0ZXJEaXI9ImZhbHNlIiAvPgotICAgICAgPGNoYW5nZSBiZWZvcmVQYXRoPSIkUFJPSkVDVF9ESVIkL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvaW5wdXRGaWxlcy5sc3QiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2lucHV0RmlsZXMubHN0IiBhZnRlckRpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jbGFzc3BhdGguaW5kZXgiIGJlZm9yZURpcj0iZmFsc2UiIC8+Ci0gICAgICA8Y2hhbmdlIGJlZm9yZVBhdGg9IiRQUk9KRUNUX0RJUiQvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QkMS5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KLSAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5jbGFzcyIgYmVmb3JlRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXIuY2xhc3MiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuY2xhc3MiIGJlZm9yZURpcj0iZmFsc2UiIGFmdGVyUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvbWFwcGVyL1VzZXJNYXBwZXIuY2xhc3MiIGFmdGVyRGlyPSJmYWxzZSIgLz4KKyAgICAgIDxjaGFuZ2UgYmVmb3JlUGF0aD0iJFBST0pFQ1RfRElSJC90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzIiBiZWZvcmVEaXI9ImZhbHNlIiAvPgogICAgIDwvbGlzdD4KICAgICA8b3B0aW9uIG5hbWU9IlNIT1dfRElBTE9HIiB2YWx1ZT0iZmFsc2UiIC8+CiAgICAgPG9wdGlvbiBuYW1lPSJISUdITElHSFRfQ09ORkxJQ1RTIiB2YWx1ZT0idHJ1ZSIgLz4KQEAgLTU4LDEzICs1MiwxOSBAQAogICA8L2NvbXBvbmVudD4KICAgPGNvbXBvbmVudCBuYW1lPSJHaXQuU2V0dGluZ3MiPgogICAgIDxvcHRpb24gbmFtZT0iUkVDRU5UX0dJVF9ST09UX1BBVEgiIHZhbHVlPSIkUFJPSkVDVF9ESVIkIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUk9PVF9TWU5DIiB2YWx1ZT0iU1lOQyIgLz4KICAgPC9jb21wb25lbnQ+CiAgIDxjb21wb25lbnQgbmFtZT0iTWFya2Rvd25TZXR0aW5nc01pZ3JhdGlvbiI+CiAgICAgPG9wdGlvbiBuYW1lPSJzdGF0ZVZlcnNpb24iIHZhbHVlPSIxIiAvPgogICA8L2NvbXBvbmVudD4KKyAgPGNvbXBvbmVudCBuYW1lPSJNYXZlbkltcG9ydFByZWZlcmVuY2VzIj4KKyAgICA8b3B0aW9uIG5hbWU9ImltcG9ydGluZ1NldHRpbmdzIj4KKyAgICAgIDxNYXZlbkltcG9ydGluZ1NldHRpbmdzPgorICAgICAgICA8b3B0aW9uIG5hbWU9IndvcmtzcGFjZUltcG9ydEVuYWJsZWQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgPC9NYXZlbkltcG9ydGluZ1NldHRpbmdzPgorICAgIDwvb3B0aW9uPgorICA8L2NvbXBvbmVudD4KICAgPGNvbXBvbmVudCBuYW1lPSJQcm9ibGVtc1ZpZXdTdGF0ZSI+Ci0gICAgPG9wdGlvbiBuYW1lPSJzZWxlY3RlZFRhYklkIiB2YWx1ZT0iUHJvamVjdEVycm9ycyIgLz4KKyAgICA8b3B0aW9uIG5hbWU9InNlbGVjdGVkVGFiSWQiIHZhbHVlPSJDdXJyZW50RmlsZSIgLz4KICAgPC9jb21wb25lbnQ+CiAgIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdElkIiBpZD0iMnZaTmZOVEVGeUhBcGR4bUhaN1kwcmxKaktCIiAvPgogICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RMZXZlbFZjc01hbmFnZXIiIHNldHRpbmdzRWRpdGVkTWFudWFsbHk9InRydWUiIC8+CkBAIC03MiwzMiArNzIsMTkgQEAKICAgICA8b3B0aW9uIG5hbWU9ImhpZGVFbXB0eU1pZGRsZVBhY2thZ2VzIiB2YWx1ZT0idHJ1ZSIgLz4KICAgICA8b3B0aW9uIG5hbWU9InNob3dMaWJyYXJ5Q29udGVudHMiIHZhbHVlPSJ0cnVlIiAvPgogICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJQcm9wZXJ0aWVzQ29tcG9uZW50Ij48IVtDREFUQVt7Ci0gICJrZXlUb1N0cmluZyI6IHsKLSAgICAiSlVuaXQuVXNlckNvbnRyb2xsZXJUZXN0LmV4ZWN1dG9yIjogIlJ1biIsCi0gICAgIlJlcXVlc3RNYXBwaW5nc1BhbmVsT3JkZXIwIjogIjAiLAotICAgICJSZXF1ZXN0TWFwcGluZ3NQYW5lbE9yZGVyMSI6ICIxIiwKLSAgICAiUmVxdWVzdE1hcHBpbmdzUGFuZWxXaWR0aDAiOiAiNzUiLAotICAgICJSZXF1ZXN0TWFwcGluZ3NQYW5lbFdpZHRoMSI6ICI3NSIsCi0gICAgIlJ1bk9uY2VBY3Rpdml0eS5PcGVuUHJvamVjdFZpZXdPblN0YXJ0IjogInRydWUiLAotICAgICJSdW5PbmNlQWN0aXZpdHkuU2hvd1JlYWRtZU9uU3RhcnQiOiAidHJ1ZSIsCi0gICAgIlNwcmluZyBCb290Lk15UHJvamVjdEFwcGxpY2F0aW9uLmV4ZWN1dG9yIjogIlJ1biIsCi0gICAgImdpdC13aWRnZXQtcGxhY2Vob2xkZXIiOiAibWFzdGVyIiwKLSAgICAibGFzdF9vcGVuZWRfZmlsZV9wYXRoIjogIkQ6L1BUL2VjaG8tYmFja2VuZC9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlIiwKLSAgICAibm9kZS5qcy5zZWxlY3RlZC5wYWNrYWdlLnRzbGludCI6ICIoYXV0b2RldGVjdCkiLAotICAgICLlupTnlKjnqIvluo8uTXlQcm9qZWN0QXBwbGljYXRpb24uZXhlY3V0b3IiOiAiUnVuIgorICA8Y29tcG9uZW50IG5hbWU9IlByb3BlcnRpZXNDb21wb25lbnQiPnsKKyAgJnF1b3Q7a2V5VG9TdHJpbmcmcXVvdDs6IHsKKyAgICAmcXVvdDtSdW5PbmNlQWN0aXZpdHkuT3BlblByb2plY3RWaWV3T25TdGFydCZxdW90OzogJnF1b3Q7dHJ1ZSZxdW90OywKKyAgICAmcXVvdDtSdW5PbmNlQWN0aXZpdHkuU2hvd1JlYWRtZU9uU3RhcnQmcXVvdDs6ICZxdW90O3RydWUmcXVvdDssCisgICAgJnF1b3Q7bGFzdF9vcGVuZWRfZmlsZV9wYXRoJnF1b3Q7OiAmcXVvdDtEOi9zdHVkeS/lrabkuaDotYTmupAv5aSn5LiJ5LiLL3p5MSZxdW90OwogICB9Ci19XV0+PC9jb21wb25lbnQ+Cit9PC9jb21wb25lbnQ+CiAgIDxjb21wb25lbnQgbmFtZT0iUmVjZW50c01hbmFnZXIiPgotICAgIDxrZXkgbmFtZT0iQ29weUZpbGUuUkVDRU5UX0tFWVMiPgotICAgICAgPHJlY2VudCBuYW1lPSJEOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZSIgLz4KLSAgICAgIDxyZWNlbnQgbmFtZT0iRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXIiIC8+Ci0gICAgPC9rZXk+CiAgICAgPGtleSBuYW1lPSJNb3ZlRmlsZS5SRUNFTlRfS0VZUyI+CiAgICAgICA8cmVjZW50IG5hbWU9IkQ6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcc2Nob29sXGVjaG8tYmFja2VuZFxzcmNcbWFpblxyZXNvdXJjZXNcbWFwcGVyIiAvPgogICAgIDwva2V5PgogICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJSdW5NYW5hZ2VyIiBzZWxlY3RlZD0iSlVuaXQuVXNlckNvbnRyb2xsZXJUZXN0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJSdW5NYW5hZ2VyIiBzZWxlY3RlZD0i5bqU55So56iL5bqPLk15UHJvamVjdEFwcGxpY2F0aW9uIj4KICAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSJCdENsaWVudCIgdHlwZT0iQXBwbGljYXRpb24iIGZhY3RvcnlOYW1lPSJBcHBsaWNhdGlvbiIgdGVtcG9yYXJ5PSJ0cnVlIiBuYW1lSXNHZW5lcmF0ZWQ9InRydWUiPgogICAgICAgPG9wdGlvbiBuYW1lPSJNQUlOX0NMQVNTX05BTUUiIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY2xpZW50LkJ0Q2xpZW50IiAvPgogICAgICAgPG1vZHVsZSBuYW1lPSJlY2hvLWJhY2tlbmQiIC8+CkBAIC0xNjUsMzEgKzE1Miw4IEBACiAgICAgICAgIDxvcHRpb24gbmFtZT0iTWFrZSIgZW5hYmxlZD0idHJ1ZSIgLz4KICAgICAgIDwvbWV0aG9kPgogICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICA8Y29uZmlndXJhdGlvbiBuYW1lPSJVc2VyQ29udHJvbGxlclRlc3QiIHR5cGU9IkpVbml0IiBmYWN0b3J5TmFtZT0iSlVuaXQiIHRlbXBvcmFyeT0idHJ1ZSIgbmFtZUlzR2VuZXJhdGVkPSJ0cnVlIj4KLSAgICAgIDxtb2R1bGUgbmFtZT0iZWNoby1iYWNrZW5kIiAvPgotICAgICAgPGV4dGVuc2lvbiBuYW1lPSJjb3ZlcmFnZSI+Ci0gICAgICAgIDxwYXR0ZXJuPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iUEFUVEVSTiIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLioiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJFTkFCTEVEIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICAgICAgPC9wYXR0ZXJuPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlBBQ0tBR0VfTkFNRSIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJNQUlOX0NMQVNTX05BTUUiIHZhbHVlPSJjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlci5Vc2VyQ29udHJvbGxlclRlc3QiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlRFU1RfT0JKRUNUIiB2YWx1ZT0iY2xhc3MiIC8+Ci0gICAgICA8bWV0aG9kIHY9IjIiPgotICAgICAgICA8b3B0aW9uIG5hbWU9Ik1ha2UiIGVuYWJsZWQ9InRydWUiIC8+Ci0gICAgICA8L21ldGhvZD4KLSAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgPGNvbmZpZ3VyYXRpb24gbmFtZT0iTXlQcm9qZWN0QXBwbGljYXRpb24iIHR5cGU9IlNwcmluZ0Jvb3RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25UeXBlIiBmYWN0b3J5TmFtZT0iU3ByaW5nIEJvb3QiIG5hbWVJc0dlbmVyYXRlZD0idHJ1ZSI+Ci0gICAgICA8bW9kdWxlIG5hbWU9ImVjaG8tYmFja2VuZCIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iU1BSSU5HX0JPT1RfTUFJTl9DTEFTUyIgdmFsdWU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5NeVByb2plY3RBcHBsaWNhdGlvbiIgLz4KLSAgICAgIDxtZXRob2Qgdj0iMiI+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iTWFrZSIgZW5hYmxlZD0idHJ1ZSIgLz4KLSAgICAgIDwvbWV0aG9kPgotICAgIDwvY29uZmlndXJhdGlvbj4KICAgICA8cmVjZW50X3RlbXBvcmFyeT4KICAgICAgIDxsaXN0PgotICAgICAgICA8aXRlbSBpdGVtdmFsdWU9IkpVbml0LlVzZXJDb250cm9sbGVyVGVzdCIgLz4KICAgICAgICAgPGl0ZW0gaXRlbXZhbHVlPSLlupTnlKjnqIvluo8uTXlQcm9qZWN0QXBwbGljYXRpb24iIC8+CiAgICAgICAgIDxpdGVtIGl0ZW12YWx1ZT0iSlVuaXQuVG9ycmVudENvbnRyb2xsZXJUZXN0IiAvPgogICAgICAgPC9saXN0PgpAQCAtMjA2LDE1ICsxNzAsNCBAQAogICAgIDwvdGFzaz4KICAgICA8c2VydmVycyAvPgogICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJWY3MuTG9nLlRhYnMuUHJvcGVydGllcyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJUQUJfU1RBVEVTIj4KLSAgICAgIDxtYXA+Ci0gICAgICAgIDxlbnRyeSBrZXk9Ik1BSU4iPgotICAgICAgICAgIDx2YWx1ZT4KLSAgICAgICAgICAgIDxTdGF0ZSAvPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZW50cnk+Ci0gICAgICA8L21hcD4KLSAgICA8L29wdGlvbj4KLSAgPC9jb21wb25lbnQ+CiA8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNoby1iYWNrZW5kLmltbCBiL2VjaG8tYmFja2VuZC5pbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Y2U3MjIuLjAwMDAwMDAKLS0tIGEvZWNoby1iYWNrZW5kLmltbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtb2R1bGUgdmVyc2lvbj0iNCI+Ci0gIDxjb21wb25lbnQgbmFtZT0iQWRkaXRpb25hbE1vZHVsZUVsZW1lbnRzIj4KLSAgICA8Y29udGVudCB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQiIGR1bWI9InRydWUiPgotICAgICAgPHNvdXJjZUZvbGRlciB1cmw9ImZpbGU6Ly8kTU9EVUxFX0RJUiQvc3JjL21haW4vcmVzb3VyY2VzIiB0eXBlPSJqYXZhLXJlc291cmNlIiAvPgotICAgIDwvY29udGVudD4KLSAgPC9jb21wb25lbnQ+Ci08L21vZHVsZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9sb2dzL215YXBwLmxvZyBiL2xvZ3MvbXlhcHAubG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2xvZ3MvbXlhcHAubG9nCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3BvbS54bWwgYi9wb20ueG1sCmluZGV4IDYwMmUxZGIuLjIwYjhlNzEgMTAwNjQ0Ci0tLSBhL3BvbS54bWwKKysrIGIvcG9tLnhtbApAQCAtMSw3ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CiAgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCiAgICAgPGdyb3VwSWQ+Z3JvdXBJZDwvZ3JvdXBJZD4KQEAgLTEwLDE0ICsxMCwxNCBAQAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuNi4wPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoLz4gPCEtLSBsb29rdXAgcGFyZW50IGZyb20gcmVwb3NpdG9yeSAtLT4KKyAgICAgICAgPHZlcnNpb24+Mi42LjA8L3ZlcnNpb24+IDwhLS0g5L2/55So5L2g5biM5pyb55qEU3ByaW5nIEJvb3TniYjmnKwgLS0+CisgICAgICAgIDxyZWxhdGl2ZVBhdGggLz4gPCEtLSBsb29rdXAgcGFyZW50IGZyb20gcmVwb3NpdG9yeSAtLT4KICAgICA8L3BhcmVudD4KLQogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8bWF2ZW4uY29tcGlsZXIuc291cmNlPjE3PC9tYXZlbi5jb21waWxlci5zb3VyY2U+CiAgICAgICAgIDxtYXZlbi5jb21waWxlci50YXJnZXQ+MTc8L21hdmVuLmNvbXBpbGVyLnRhcmdldD4KICAgICAgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+CisgICAgICAgIDxzYS10b2tlbi52ZXJzaW9uPjEuMzcuMDwvc2EtdG9rZW4udmVyc2lvbj4KICAgICA8L3Byb3BlcnRpZXM+CiAKICAgICA8ZGVwZW5kZW5jaWVzPgpAQCAtNzgsNiArNzgsMTYgQEAKICAgICAgICAgICAgIDxncm91cElkPmphdmF4LnhtbC5iaW5kPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4Yi1hcGk8L2FydGlmYWN0SWQ+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLnhpYW95bWluPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+a25pZmU0ai1vcGVuYXBpMy1qYWthcnRhLXNwcmluZy1ib290LXN0YXJ0ZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj40LjUuMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmphdmF4LnZhbGlkYXRpb248L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD52YWxpZGF0aW9uLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC4xLkZpbmFsPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDwhLS0gU3ByaW5nIFdlYiBNVkMgLS0+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KQEAgLTEwOCwxMSArMTE4LDE3IEBACiAgICAgICAgICAgICA8dmVyc2lvbj4xLjE4LjMwPC92ZXJzaW9uPiA8IS0tIOehruS/neS9v+eUqOeahOaYr+acgOaWsOeJiOacrCAtLT4KICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLnBhZ2VoZWxwZXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYWdlaGVscGVyLXNwcmluZy1ib290LXN0YXJ0ZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjQuNzwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCiAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2xmNGo8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zbGY0ai1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjcuMzA8L3ZlcnNpb24+IDwhLS0g54mI5pys5Y+v5Lul5qC55o2u6ZyA6KaB6LCD5pW0IC0tPgorICAgICAgICAgICAgPHZlcnNpb24+MS43LjMyPC92ZXJzaW9uPiA8IS0tIOeJiOacrOWPr+S7peagueaNrumcgOimgeiwg+aVtCAtLT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNoLnFvcy5sb2diYWNrPC9ncm91cElkPgpAQCAtMTIwLDcgKzEzNiw2IEBACiAgICAgICAgICAgICA8dmVyc2lvbj4xLjIuMzwvdmVyc2lvbj4gPCEtLSDniYjmnKzlj6/ku6XmoLnmja7pnIDopoHosIPmlbQgLS0+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+Ci0KICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtZmlsZXVwbG9hZDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtZmlsZXVwbG9hZDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNDwvdmVyc2lvbj4KQEAgLTEzMCwxMSArMTQ1LDcgQEAKICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItdmFsaWRhdGlvbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmNvbS5iYWlkdWJjZTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnFpYW5mYW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4wLjEuMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgorCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci13ZWJmbHV4PC9hcnRpZmFjdElkPgpAQCAtMTQ1LDUxICsxNTYsMTggQEAKICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMTI8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ja2l0bzwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm1vY2tpdG8tY29yZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgorCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci10ZXN0PC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnBlcnNpc3RlbmNlPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+amFrYXJ0YS5wZXJzaXN0ZW5jZS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjEuMDwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci1kYXRhLWpwYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+amFrYXJ0YS50cmFuc2FjdGlvbjwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmpha2FydGEudHJhbnNhY3Rpb24tYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLjA8L3ZlcnNpb24+IDwhLS0g5L2/55So5pyA5paw54mI5pysIC0tPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuaGliZXJuYXRlPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+aGliZXJuYXRlLWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj41LjYuNy5GaW5hbDwvdmVyc2lvbj4gPCEtLSDkuI4gSmFrYXJ0YSDlhbzlrrnnmoTniYjmnKwgLS0+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm15c3FsPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+bXlzcWwtY29ubmVjdG9yLWphdmE8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj44LjAuMjc8L3ZlcnNpb24+IDwhLS0g5L2/55So6YCC5ZCI5L2g55qE54mI5pysIC0tPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR0b3JyZW50LWNvbW1vbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisKICAgICAgICAgPCEtLSB0dG9ycmVudCAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20udHVybjwvZ3JvdXBJZD4KQEAgLTIyNiwyNiArMjA0LDMwIEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dG9ycmVudC10cmFja2VyPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLQogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIucGFnZWhlbHBlcjwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnBhZ2VoZWxwZXItc3ByaW5nLWJvb3Qtc3RhcnRlcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuNC43PC92ZXJzaW9uPgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi54aWFveW1pbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmtuaWZlNGotb3BlbmFwaTMtamFrYXJ0YS1zcHJpbmctYm9vdC1zdGFydGVyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC41LjA8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNuLmRldjMzPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2EtdG9rZW4tc3ByaW5nLWJvb3Qtc3RhcnRlcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMzguMDwvdmVyc2lvbj4gPCEtLSDor7fnoa7orqTkvb/nlKjmnIDmlrDniYjmnKzmiJbkuI7kvaDnmoRTcHJpbmcgQm9vdOeJiOacrOWMuemFjSAtLT4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2EtdG9rZW4udmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogCiAKKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmpha2FydGEucGVyc2lzdGVuY2U8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWthcnRhLnBlcnNpc3RlbmNlLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMS4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKICAgICA8L2RlcGVuZGVuY2llcz4KIAogCi0KLQogICAgIDxidWlsZD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgICA8cGx1Z2luPgpAQCAtMjkwLDcgKzI3Miw4IEBACiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuOTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPCEtLXN1cHByZXNzIFVucmVzb2x2ZWRNYXZlblByb3BlcnR5IC0tPgorICAgICAgICAgICAgICAgICAgICA8IS0tc3VwcHJlc3MKKyAgICAgICAgICAgICAgICAgICAgVW5yZXNvbHZlZE1hdmVuUHJvcGVydHkgLS0+CiAgICAgICAgICAgICAgICAgICAgIDxhcmdMaW5lPiR7c3VyZWZpcmVBcmdMaW5lfTwvYXJnTGluZT4KICAgICAgICAgICAgICAgICAgICAgPHNraXBUZXN0cz5mYWxzZTwvc2tpcFRlc3RzPgogICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CkBAIC0zMDksMTQgKzI5MiwyMiBAQAogICAgICAgICAgICAgPC9wbHVnaW4+CiAKICAgICAgICAgPC9wbHVnaW5zPgotICAgICAgICA8cmVzb3VyY2VzPgotICAgICAgICAgICAgPHJlc291cmNlPgotICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5PgotICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi54bWw8L2luY2x1ZGU+Ci0gICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4KLSAgICAgICAgICAgIDwvcmVzb3VyY2U+Ci0gICAgICAgIDwvcmVzb3VyY2VzPgorPCEtLSAgICAgICAgICAgICAgICA8cmVzb3VyY2VzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgPHJlc291cmNlPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5Pi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi54bWw8L2luY2x1ZGU+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgIDwvcmVzb3VyY2U+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICA8cmVzb3VyY2U+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5saWJzPC9kaXJlY3Rvcnk+LS0+Cis8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT4qLmphcjwvaW5jbHVkZT4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPi0tPgorPCEtLSAgICAgICAgICAgICAgICAgICAgPC9yZXNvdXJjZT4tLT4KKzwhLS0gICAgICAgICAgICAgICAgICAgIDwvcmVzb3VyY2VzPi0tPgorCisKICAgICA8L2J1aWxkPgogCiA8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmphdmEKaW5kZXggNDljZDVmMC4uZWI1ODA4MiAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5qYXZhCkBAIC01LDEwICs1LDE0IEBACiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LlNwcmluZ0FwcGxpY2F0aW9uOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC5hdXRvY29uZmlndXJlLlNwcmluZ0Jvb3RBcHBsaWNhdGlvbjsKIAorCisKIEBTcHJpbmdCb290QXBwbGljYXRpb24KIEBNYXBwZXJTY2FuKCJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyIikgIC8vIOaJq+aPjyBNYXBwZXIg5o6l5Y+jCisKIHB1YmxpYyBjbGFzcyBNeVByb2plY3RBcHBsaWNhdGlvbiB7CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTcHJpbmdBcHBsaWNhdGlvbi5ydW4oTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MsIGFyZ3MpOwogICAgIH0KIH0KKwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGViMTM1Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkNvbW1lbnRzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkNvbW1lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9mb3J1bS9wb3N0cyIpCi1wdWJsaWMgY2xhc3MgQ29tbWVudENvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgQ29tbWVudFNlcnZpY2UgY29tbWVudFNlcnZpY2U7Ci0KLSAgICAvLyDmt7vliqDor4TorroKLSAgICBAUG9zdE1hcHBpbmcoIi97cG9zdF9pZH0vY29tbWVudHMiKQotICAgIHB1YmxpYyBTdHJpbmcgYWRkQ29tbWVudChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBDb21tZW50cyBjb21tZW50KSB7Ci0gICAgICAgIC8vIOa3u+WKoOivhOiuugotICAgICAgICBjb21tZW50U2VydmljZS5hZGRDb21tZW50KHBvc3RJZCwgY29tbWVudCk7Ci0gICAgICAgIHJldHVybiAiQ29tbWVudCBhZGRlZCBzdWNjZXNzZnVsbHkhIjsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluaJgOacieivhOiuugotICAgIEBHZXRNYXBwaW5nKCIve3Bvc3RfaWR9L2dldEFsbENvbW1lbnRzIikKLSAgICBwdWJsaWMgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRDb21tZW50c0J5UG9zdElkKEBQYXRoVmFyaWFibGUoInBvc3RfaWQiKSBMb25nIHBvc3RJZCkgewotICAgICAgICAvLyDojrflj5bor4TorrrlubbloavlhYXnlKjmiLfkv6Hmga8KLSAgICAgICAgcmV0dXJuIGNvbW1lbnRTZXJ2aWNlLmdldENvbW1lbnRzQnlQb3N0SWQocG9zdElkKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxZDBhMi4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0R5bmFtaWNDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckR5bmFtaWM7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRHluYW1pY1NlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9keW5hbWljIikKLXB1YmxpYyBjbGFzcyBEeW5hbWljQ29udHJvbGxlciB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBEeW5hbWljU2VydmljZSBkeW5hbWljU2VydmljZTsKLQotICAgIC8vIOWIm+W7uuWlveWPi+WKqOaAgeaOpeWPowotICAgIEBQb3N0TWFwcGluZygiL3t1c2VyX2lkfS9jcmVhdGVEeW5hbWljIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjcmVhdGVEeW5hbWljKEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0odmFsdWUgPSAidGl0bGUiLCByZXF1aXJlZCA9IGZhbHNlKSBTdHJpbmcgdGl0bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gImNvbnRlbnQiKSBTdHJpbmcgY29udGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0odmFsdWUgPSAiaW1hZ2VfdXJsIiwgcmVxdWlyZWQgPSBmYWxzZSkgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKLSAgICAgICAgcmV0dXJuIGR5bmFtaWNTZXJ2aWNlLmNyZWF0ZUR5bmFtaWModXNlcklkLCB0aXRsZSwgY29udGVudCwgaW1hZ2VGaWxlcyk7Ci0gICAgfQotCi0gICAgLy/liKDpmaTlpb3lj4vliqjmgIEKLSAgICBARGVsZXRlTWFwcGluZygiL21lL2RlbGV0ZUR5bmFtaWMve2R5bmFtaWNfaWR9IikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8U3RyaW5nPiBkZWxldGVEeW5hbWljKEBQYXRoVmFyaWFibGUoImR5bmFtaWNfaWQiKSBMb25nIGR5bmFtaWNJZCkgewotICAgICAgICBkeW5hbWljU2VydmljZS5kZWxldGVEeW5hbWljKGR5bmFtaWNJZCk7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vaygi5Yqo5oCB5Yig6Zmk5oiQ5YqfIik7Ci0gICAgfQotCi0gICAgLy/lpb3lj4vliqjmgIHor4TorroKLSAgICBAUG9zdE1hcHBpbmcoIi97dXNlcl9pZH0vZmVlZHMve2R5bmFtaWNfaWR9L2NvbW1lbnRzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gYWRkQ29tbWVudCgKLSAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCwKLSAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoImR5bmFtaWNfaWQiKSBMb25nIGR5bmFtaWNJZCwKLSAgICAgICAgICAgIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBTdHJpbmc+IGNvbnRlbnQpIHsKLQotICAgICAgICBTdHJpbmcgY29tbWVudENvbnRlbnQgPSBjb250ZW50LmdldCgiY29udGVudCIpOyAgLy8g6I635Y+W6K+E6K665YaF5a65Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBkeW5hbWljU2VydmljZS5hZGRDb21tZW50KHVzZXJJZCwgZHluYW1pY0lkLCBjb21tZW50Q29udGVudCk7Ci0KLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluafkOS4quWlveWPi+eahOaJgOacieWKqOaAgQotICAgIEBHZXRNYXBwaW5nKCIve3VzZXJfaWR9L2dldEFkeW5hbWljIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0QWxsVXNlckR5bmFtaWNzKEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCkgewotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gZHluYW1pY1NlcnZpY2UuZ2V0QWxsVXNlckR5bmFtaWNzKHVzZXJJZCk7Ci0KLSAgICAgICAgaWYgKHJlc3BvbnNlID09IG51bGwgfHwgcmVzcG9uc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkubm9Db250ZW50KCkuYnVpbGQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOi/lOWbnuWTjeW6lAotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIEBHZXRNYXBwaW5nKCIve3VzZXJfaWR9L2dldEFsbER5bmFtaWNzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcyhAUGF0aFZhcmlhYmxlKCJ1c2VyX2lkIikgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g6I635Y+W5b2T5YmN55So5oi35omA5pyJ5aW95Y+L55qESUQKLSAgICAgICAgTGlzdDxMb25nPiBmcmllbmRJZHMgPSBkeW5hbWljU2VydmljZS5nZXRBbGxGcmllbmRJZHModXNlcklkKTsKLSAgICAgICAgZnJpZW5kSWRzLmFkZCh1c2VySWQpOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gZHluYW1pY1NlcnZpY2UuZ2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcyhmcmllbmRJZHMpOwotCi0gICAgICAgIGlmIChyZXNwb25zZSA9PSBudWxsIHx8IHJlc3BvbnNlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm5vQ29udGVudCgpLmJ1aWxkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIC8v54K56LWe5aW95Y+L5Yqo5oCBCi0gICAgQFBvc3RNYXBwaW5nKCIvbGlrZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PFN0cmluZz4gbGlrZUR5bmFtaWMoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0LmdldCgidXNlcklkIik7Ci0gICAgICAgIExvbmcgZHluYW1pY0lkID0gcmVxdWVzdC5nZXQoImR5bmFtaWNJZCIpOwotICAgICAgICAvLyDmiafooYzngrnotZ4KLSAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZHluYW1pY1NlcnZpY2UubGlrZUR5bmFtaWModXNlcklkLCBkeW5hbWljSWQpOwotCi0gICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2soIkxpa2Ugc3VjY2Vzc2Z1bCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LmJhZFJlcXVlc3QoKS5ib2R5KCJMaWtlIGZhaWxlZCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQERlbGV0ZU1hcHBpbmcoIi91bmxpa2UiKQotICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxTdHJpbmc+IHVubGlrZUR5bmFtaWMoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0LmdldCgidXNlcklkIik7Ci0gICAgICAgIExvbmcgZHluYW1pY0lkID0gcmVxdWVzdC5nZXQoImR5bmFtaWNJZCIpOwotCi0gICAgICAgIC8vIOaJp+ihjOWPlua2iOeCuei1ngotICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkeW5hbWljU2VydmljZS51bmxpa2VEeW5hbWljKHVzZXJJZCwgZHluYW1pY0lkKTsKLQotICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKCJVbmxpa2Ugc3VjY2Vzc2Z1bCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LmJhZFJlcXVlc3QoKS5ib2R5KCJVbmxpa2UgZmFpbGVkIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwODMwYjYuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cDsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwQ29tbWVudHM7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuR3JvdXBTZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1AUmVzdENvbnRyb2xsZXIKLUBSZXF1ZXN0TWFwcGluZygiL2VjaG8vZ3JvdXBzIikKLXB1YmxpYyBjbGFzcyBHcm91cENvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgR3JvdXBTZXJ2aWNlIGdyb3VwU2VydmljZTsKLQotICAgIEBQb3N0TWFwcGluZygiL2NyZWF0ZUdyb3VwIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gY3JlYXRlR3JvdXAoQFJlcXVlc3RCb2R5IEdyb3VwIGdyb3VwUmVxdWVzdCkgewotICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLmlrnms5XliJvlu7rlsI/nu4QKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBncm91cCBuYW1lOiAiICsgZ3JvdXBSZXF1ZXN0LmdldEdyb3VwTmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIGdyb3VwU2VydmljZS5jcmVhdGVHcm91cChncm91cFJlcXVlc3QpOwotICAgIH0KLQotCi0gICAgLy8g5Yqg5YWl5bCP57uE5o6l5Y+jCi0gICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9qb2luIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gam9pbkdyb3VwKEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7Ci0gICAgICAgIHJldHVybiBncm91cFNlcnZpY2Uuam9pbkdyb3VwKGdyb3VwSWQsIHVzZXJJZCk7Ci0gICAgfQotCi0gICAgLy8g6YCA5Ye65bCP57uE5o6l5Y+jCi0gICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9sZWF2ZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxlYXZlR3JvdXAoQFBhdGhWYXJpYWJsZSgiZ3JvdXBfaWQiKSBMb25nIGdyb3VwSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7Ci0gICAgICAgIHJldHVybiBncm91cFNlcnZpY2UubGVhdmVHcm91cChncm91cElkLCB1c2VySWQpOwotICAgIH0KLQotICAgIC8vIOiOt+WPluWwj+e7hOaIkOWRmOaOpeWPowotICAgIEBHZXRNYXBwaW5nKCIve2dyb3VwX2lkfS9tZW1iZXJzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0R3JvdXBNZW1iZXJzKEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkKSB7Ci0gICAgICAgIHJldHVybiBncm91cFNlcnZpY2UuZ2V0R3JvdXBNZW1iZXJzKGdyb3VwSWQpOwotICAgIH0KLQotICAgIC8v5Y+R5biD5biW5a2QCi0gICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX2lkfS9jcmVhdGVQb3N0IikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gY3JlYXRlUG9zdCgKLSAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoImdyb3VwX2lkIikgTG9uZyBncm91cElkLAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgidXNlcl9pZCIpIExvbmcgdXNlcklkLAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgiY29udGVudCIpIFN0cmluZyBjb250ZW50LAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSgidGl0bGUiKSBTdHJpbmcgdGl0bGUsCi0gICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gImltYWdlcyIsIHJlcXVpcmVkID0gZmFsc2UpIE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgY29udGVudCwgdGl0bGUsIGltYWdlRmlsZXMpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIC8v6I635Y+W5p+Q5Liq5bCP57uE5YaF55qE5omA5pyJ5biW5a2QCi0gICAgQEdldE1hcHBpbmcoIi97Z3JvdXBfaWR9L2dldEFsbFBvc3RzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0QWxsUG9zdHMoQFBhdGhWYXJpYWJsZSgiZ3JvdXBfaWQiKSBMb25nIGdyb3VwSWQpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5nZXRBbGxQb3N0cyhncm91cElkKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluaJgOacieWwj+e7hOWQjeensAotICAgIEBQb3N0TWFwcGluZygiL2dldEFsbEdyb3VwcyIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHNlYXJjaEdyb3VwcyhAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5zZWFyY2hHcm91cHMocGFyYW1zKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvLyDngrnotZ7luJblrZAKLSAgICBAUG9zdE1hcHBpbmcoIi97Z3JvdXBfcG9zdF9pZH0vbGlrZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxpa2VQb3N0KAotICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgiZ3JvdXBfcG9zdF9pZCIpIExvbmcgZ3JvdXBQb3N0SWQpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGdyb3VwU2VydmljZS5saWtlUG9zdChncm91cFBvc3RJZCk7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7Ci0gICAgfQotCi0gICAgLy8g5Y+W5raI54K56LWeCi0gICAgQFBvc3RNYXBwaW5nKCIve2dyb3VwX3Bvc3RfaWR9L3VubGlrZSIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHVubGlrZVBvc3QoCi0gICAgICAgICAgICBAUGF0aFZhcmlhYmxlKCJncm91cF9wb3N0X2lkIikgTG9uZyBncm91cFBvc3RJZCkgewotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gZ3JvdXBTZXJ2aWNlLnVubGlrZVBvc3QoZ3JvdXBQb3N0SWQpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotICAgIC8vIOa3u+WKoOivhOiuuuaOpeWPowotICAgIEBQb3N0TWFwcGluZygiL3tncm91cF9wb3N0X2lkfS9jb21tZW50IikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gYWRkQ29tbWVudCgKLQotICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgiZ3JvdXBfcG9zdF9pZCIpIExvbmcgcG9zdElkLAotICAgICAgICAgICAgQFJlcXVlc3RCb2R5IEdyb3VwQ29tbWVudHMgY29tbWVudCkgewotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBncm91cFNlcnZpY2UuYWRkQ29tbWVudChwb3N0SWQsIGNvbW1lbnQpOwotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ODEyNDYuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5MZXZlbFNlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9sZXZlbCIpCi1AUmVzdENvbnRyb2xsZXIKLXB1YmxpYyBjbGFzcyBMZXZlbENvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgTGV2ZWxTZXJ2aWNlIGxldmVsU2VydmljZTsKLQotICAgIEBHZXRNYXBwaW5nKCIvZ2V0RXhwZXJpZW5jZSIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0RXhwZXJpZW5jZShAUmVxdWVzdFBhcmFtIExvbmcgdXNlcl9pZCkgewotICAgICAgICByZXR1cm4gbGV2ZWxTZXJ2aWNlLmdldFVzZXJFeHBlcmllbmNlKHVzZXJfaWQpOwotICAgIH0KLQotICAgIEBQb3N0TWFwcGluZygiL3VwZGF0ZUV4cGVyaWVuY2UiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZUV4cGVyaWVuY2UoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1zKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy52YWx1ZU9mKHBhcmFtcy5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgSW50ZWdlciBleHBlcmllbmNlID0gSW50ZWdlci52YWx1ZU9mKHBhcmFtcy5nZXQoImV4cGVyaWVuY2UiKS50b1N0cmluZygpKTsKLSAgICAgICAgU3RyaW5nIHNvdXJjZSA9IHBhcmFtcy5nZXQoInNvdXJjZSIpLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgcmV0dXJuIGxldmVsU2VydmljZS51cGRhdGVFeHBlcmllbmNlKHVzZXJJZCwgZXhwZXJpZW5jZSwgc291cmNlKTsKLSAgICB9Ci0KLSAgICAvLyDmo4Dmn6XnlKjmiLfmmK/lkKbmu6HotrPljYfnuqfmnaHku7YKLSAgICBAR2V0TWFwcGluZygiL3VwZ3JhZGUtY2hlY2siKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNoZWNrVXBncmFkZShAUmVxdWVzdFBhcmFtIExvbmcgdXNlcl9pZCkgewotICAgICAgICByZXR1cm4gbGV2ZWxTZXJ2aWNlLmNoZWNrVXBncmFkZSh1c2VyX2lkKTsKLSAgICB9Ci0KLSAgICBAUG9zdE1hcHBpbmcoIi91cGdyYWRlcyIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdXBncmFkZVVzZXJMZXZlbChAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy52YWx1ZU9mKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIEJvb2xlYW4gY2FuVXBncmFkZSA9IChCb29sZWFuKSByZXF1ZXN0LmdldCgiY2FuX3VwZ3JhZGUiKTsKLSAgICAgICAgcmV0dXJuIGxldmVsU2VydmljZS51cGdyYWRlVXNlckxldmVsKHVzZXJJZCwgY2FuVXBncmFkZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2ZjYmU4Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlBvc3Q7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuUG9zdFNlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLm11bHRpcGFydC5NdWx0aXBhcnRGaWxlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci0KLUBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9mb3J1bS9wb3N0cyIpCi1wdWJsaWMgY2xhc3MgUG9zdENvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgUG9zdFNlcnZpY2UgcG9zdFNlcnZpY2U7Ci0KLSAgICAvL+WIm+W7uuaWsOW4luWtkO+8iOW3suWujOaIkO+8iQotICAgIEBQb3N0TWFwcGluZygiL3t1c2VyX2lkfS9jcmVhdGVQb3N0IikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjcmVhdGVQb3N0KAotICAgICAgICAgICAgQFBhdGhWYXJpYWJsZSgidXNlcl9pZCIpIExvbmcgdXNlcklkLAotICAgICAgICAgICAgQFJlcXVlc3RQYXJhbSh2YWx1ZSA9ICJwb3N0Q29udGVudCIpIFN0cmluZyBwb3N0Q29udGVudCwKLSAgICAgICAgICAgIEBSZXF1ZXN0UGFyYW0odmFsdWUgPSAidGl0bGUiLCByZXF1aXJlZCA9IGZhbHNlKSBTdHJpbmcgdGl0bGUsCi0gICAgICAgICAgICBAUmVxdWVzdFBhcmFtKHZhbHVlID0gImltYWdlVXJsIikgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKLSAgICAgICAgcmV0dXJuIHBvc3RTZXJ2aWNlLmNyZWF0ZVBvc3QodXNlcklkLCBwb3N0Q29udGVudCwgdGl0bGUsIGltYWdlRmlsZXMpOwotICAgIH0KLQotICAgIC8v57yW6L6R5biW5a2Q77yI5bey5a6M5oiQ77yJCi0gICAgQFB1dE1hcHBpbmcoIi97cG9zdF9pZH0vZWRpdFBvc3QiKQotICAgIHB1YmxpYyBTdHJpbmcgdXBkYXRlUG9zdChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBQb3N0IHBvc3QpIHsKLSAgICAgICAgcG9zdFNlcnZpY2UudXBkYXRlUG9zdChwb3N0SWQsIHBvc3QpOwotICAgICAgICByZXR1cm4gIlBvc3QgdXBkYXRlZCBzdWNjZXNzZnVsbHkhIjsKLSAgICB9Ci0KLSAgICAvL+WIoOmZpOW4luWtkO+8iOW3suWujOaIkO+8iQotICAgIEBEZWxldGVNYXBwaW5nKCIve3Bvc3RfaWR9L2RlbGV0ZVBvc3QiKQotICAgIHB1YmxpYyBTdHJpbmcgZGVsZXRlUG9zdChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQpIHsKLSAgICAgICAgcG9zdFNlcnZpY2UuZGVsZXRlUG9zdChwb3N0SWQpOwotICAgICAgICByZXR1cm4gIlBvc3QgZGVsZXRlZCBzdWNjZXNzZnVsbHkhIjsKLSAgICB9Ci0KLSAgICAvL+eCuei1nuW4luWtkO+8iOW3suWujOaIkO+8iQotICAgIEBQb3N0TWFwcGluZygiL3twb3N0X2lkfS9saWtlIikKLSAgICBwdWJsaWMgU3RyaW5nIGxpa2VQb3N0KEBQYXRoVmFyaWFibGUoInBvc3RfaWQiKSBMb25nIHBvc3RJZCwgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5KSB7Ci0KLSAgICAgICAgTG9uZyB1c2VySWQgPSByZXF1ZXN0Qm9keS5nZXQoInVzZXJfaWQiKTsKLSAgICAgICAgcG9zdFNlcnZpY2UubGlrZVBvc3QocG9zdElkLCB1c2VySWQpOwotCi0gICAgICAgIHJldHVybiAiUG9zdCBsaWtlZCBzdWNjZXNzZnVsbHkhIjsKLSAgICB9Ci0KLSAgICAvL+WPlua2iOeCuei1nu+8iOW3suWujOaIkO+8iQotICAgIEBQb3N0TWFwcGluZygiL3twb3N0X2lkfS91bmxpa2UiKQotICAgIHB1YmxpYyBTdHJpbmcgdW5saWtlUG9zdChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSkgewotICAgICAgICBMb25nIHVzZXJJZCA9IHJlcXVlc3RCb2R5LmdldCgidXNlcl9pZCIpOwotICAgICAgICBwb3N0U2VydmljZS51bmxpa2VQb3N0KHBvc3RJZCwgdXNlcklkKTsKLQotICAgICAgICByZXR1cm4gIlBvc3QgdW5saWtlZCBzdWNjZXNzZnVsbHkhIjsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluW4luWtkOWIl+ihqO+8iOW3suWujOaIkO+8iQotICAgIEBHZXRNYXBwaW5nKCIvZ2V0QWxsUG9zdHMiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEFsbFBvc3RzKCkgewotICAgICAgICByZXR1cm4gcG9zdFNlcnZpY2UuZ2V0QWxsUG9zdHMoKTsgIC8vIOiwg+eUqOacjeWKoeWxgueahCBnZXRBbGxQb3N0cyDmlrnms5UKLSAgICB9Ci0KLSAgICBAR2V0TWFwcGluZygiL3twb3N0SWR9L2dldFBvc3QiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFBvc3RCeUlkKEBQYXRoVmFyaWFibGUgTG9uZyBwb3N0SWQpIHsKLSAgICAgICAgcmV0dXJuIHBvc3RTZXJ2aWNlLmdldFBvc3RCeUlkKHBvc3RJZCk7Ci0gICAgfQotCi0KLSAgICAvL+aUtuiXj+W4luWtkO+8iOW3suWujOaIkO+8iQotICAgIEBQb3N0TWFwcGluZygiL3twb3N0X2lkfS9jb2xsZWN0IikKLSAgICBwdWJsaWMgU3RyaW5nIGNvbGxlY3RQb3N0KEBQYXRoVmFyaWFibGUoInBvc3RfaWQiKSBMb25nIHBvc3RJZCwgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gcmVxdWVzdEJvZHkuZ2V0KCJ1c2VyX2lkIik7Ci0gICAgICAgIHBvc3RTZXJ2aWNlLmNvbGxlY3RQb3N0KHBvc3RJZCwgdXNlcklkKTsKLQotICAgICAgICByZXR1cm4gIlBvc3QgY29sbGVjdGVkIHN1Y2Nlc3NmdWxseSEiOwotICAgIH0KLQotCi0gICAgLy/lj5bmtojmlLbol4/vvIjlt7LlrozmiJDvvIkKLSAgICBARGVsZXRlTWFwcGluZygiL3twb3N0X2lkfS91bmNvbGxlY3QiKQotICAgIHB1YmxpYyBTdHJpbmcgdW5jb2xsZWN0UG9zdChAUGF0aFZhcmlhYmxlKCJwb3N0X2lkIikgTG9uZyBwb3N0SWQsIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSkgewotICAgICAgICBMb25nIHVzZXJJZCA9IHJlcXVlc3RCb2R5LmdldCgidXNlcl9pZCIpOwotICAgICAgICBwb3N0U2VydmljZS51bmNvbGxlY3RQb3N0KHBvc3RJZCwgdXNlcklkKTsKLSAgICAgICAgcmV0dXJuICJQb3N0IHVuY29sbGVjdGVkIHN1Y2Nlc3NmdWxseSEiOwotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMDFiMGMuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlRhc2tTZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby90YXNrL3R1dG9yaWFsIikKLXB1YmxpYyBjbGFzcyBUYXNrQ29udHJvbGxlciB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBUYXNrU2VydmljZSB0YXNrU2VydmljZTsKLQotICAgIC8v6I635Y+W5b2T5YmN55So5oi355qE5paw5omL5Lu75Yqh5YiX6KGoCi0gICAgQEdldE1hcHBpbmcoIi9nZXRBbGxUYXNrcyIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsVGFza3MoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB0YXNrU2VydmljZS5nZXRBbGxUYXNrc0ZvclVzZXIodXNlcklkKTsKLSAgICB9Ci0KLSAgICBAUG9zdE1hcHBpbmcoIi91cGRhdGVTdGF0dXMiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZVRhc2tTdGF0dXMoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSByZXF1ZXN0LmdldCgidGFza19pZCIpLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0YXNrU2VydmljZS51cGRhdGVUYXNrU3RhdHVzKHVzZXJJZCwgdGFza0lkKTsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluW9k+WJjee7j+mqjOWSjOS7u+WKoeWlluWKsQotICAgIEBHZXRNYXBwaW5nKCIvZ2V0RXhwZXJpZW5jZSIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0RXhwZXJpZW5jZShAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHRhc2tTZXJ2aWNlLmdldFVzZXJFeHBlcmllbmNlKHVzZXJJZCk7Ci0gICAgfQotCi0gICAgLy/ojrflj5blvZPliY3nmoTmjIflvJXmraXpqqQKLSAgICBAR2V0TWFwcGluZygiL2dldE5ld1N0ZXAiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldE5ld1N0ZXAoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB0YXNrU2VydmljZS5nZXROZXdTdGVwKHVzZXJJZCk7Ci0gICAgfQotCi0gICAgLy/mm7TmlrDov5vluqYKLSAgICBAUG9zdE1hcHBpbmcoIi91cGRhdGVQcm9ncmVzcyIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdXBkYXRlUHJvZ3Jlc3MoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSByZXF1ZXN0LmdldCgidGFza19pZCIpLnRvU3RyaW5nKCk7Ci0gICAgICAgIEludGVnZXIgcHJvZ3Jlc3MgPSBJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0KCJwcm9ncmVzcyIpLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gdGFza1NlcnZpY2UudXBkYXRlVGFza1Byb2dyZXNzKHVzZXJJZCwgdGFza0lkLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0gICAgLy/pooblj5bku7vliqHlpZblirEKLSAgICBAUG9zdE1hcHBpbmcoIi9yZXdhcmRDbGFpbSIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gcmV3YXJkQ2xhaW0oQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSByZXF1ZXN0LmdldCgidGFza19pZCIpLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0YXNrU2VydmljZS5jbGFpbVJld2FyZCh1c2VySWQsIHRhc2tJZCk7Ci0gICAgfQotCi0gICAgLy/mo4Dmn6Xku7vliqHlpZblirHnirbmgIEKLSAgICBAUG9zdE1hcHBpbmcoIi9yZXdhcmRSZXZpZXciKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHJld2FyZFJldmlldyhAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gTG9uZy5wYXJzZUxvbmcocmVxdWVzdC5nZXQoInVzZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgU3RyaW5nIHRhc2tJZCA9IHJlcXVlc3QuZ2V0KCJ0YXNrX2lkIikudG9TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRhc2tTZXJ2aWNlLmNoZWNrUmV3YXJkU3RhdHVzKHVzZXJJZCwgdGFza0lkKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmphdmEKaW5kZXggMjI0YzEzOC4uYWNkYTQwMyAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5qYXZhCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIuamF2YQpAQCAtMSwxNTUgKzEsMTkwIEBACiBwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwogCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Vc2VyUmVwb3NpdG9yeTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5EeW5hbWljU2VydmljZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5UYXNrU2VydmljZTsKK2ltcG9ydCBjbi5kZXYzMy5zYXRva2VuLmFubm90YXRpb24uU2FDaGVja0xvZ2luOworaW1wb3J0IGNvbS5iYW9taWRvdS5teWJhdGlzcGx1cy5jb3JlLmNvbmRpdGlvbnMucXVlcnkuUXVlcnlXcmFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5QYWdlVXRpbDsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnBhcmFtLlRvcnJlbnRQYXJhbTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZHRvLnZvLlRvcnJlbnRWTzsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHk7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Vc2VyTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVmVyaWZpY2F0aW9uVG9rZW47CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRW1haWxTZXJ2aWNlOwogaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJTZXJ2aWNlOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5SZXN1bHQ7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGk7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlPcGVyYXRpb247CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlQYXJhbTsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5PcGVyYXRpb247CitpbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMubWVkaWEuQ29udGVudDsKK2ltcG9ydCBpby5zd2FnZ2VyLnYzLm9hcy5hbm5vdGF0aW9ucy5tZWRpYS5TY2hlbWE7CitpbXBvcnQgaW8uc3dhZ2dlci52My5vYXMuYW5ub3RhdGlvbnMucmVzcG9uc2VzLkFwaVJlc3BvbnNlOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5SYW5kb21TdHJpbmdVdGlsczsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuSHR0cFN0YXR1czsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5BdXRoZW50aWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5Vc2VybmFtZVBhc3N3b3JkQXV0aGVudGljYXRpb25Ub2tlbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUuQXV0aGVudGljYXRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLkF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5jb250ZXh0LlNlY3VyaXR5Q29udGV4dEhvbGRlcjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKIAotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotCitpbXBvcnQgamF2YXguYW5ub3RhdGlvbi5SZXNvdXJjZTsKK2ltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKK2ltcG9ydCBqYXZhLnRpbWUudGVtcG9yYWwuQ2hyb25vVW5pdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCiAKIEBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby91c2VyIikKK0BSZXF1ZXN0TWFwcGluZygiL3VzZXIiKQorQEFwaSh2YWx1ZSA9ICLnlKjmiLfnrqHnkIbmjqXlj6MiLCB0YWdzID0geyLnlKjmiLfnrqHnkIYifSkKIHB1YmxpYyBjbGFzcyBVc2VyQ29udHJvbGxlciB7CiAKLSAgICBAQXV0b3dpcmVkCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBVc2VyU2VydmljZSB1c2VyU2VydmljZTsKIAogICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OworICAgIHByaXZhdGUgQXV0aGVudGljYXRpb25NYW5hZ2VyIGF1dGhlbnRpY2F0aW9uTWFuYWdlcjsKIAogICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIER5bmFtaWNTZXJ2aWNlIGR5bmFtaWNTZXJ2aWNlOworICAgIHByaXZhdGUgVXNlck1hcHBlciB1c2VyTWFwcGVyOyAvLyDkvb/nlKggTXlCYXRpcy1QbHVzCiAKLSAgICAvLyDmjqXlj6PvvJrnlJ/miJDpgoDor7fnoIEKLSAgICBAUG9zdE1hcHBpbmcoIi9nZXRJbnZpdGVDb2RlIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZW5lcmF0ZUludml0ZUNvZGUoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB1c2VyU2VydmljZS5nZW5lcmF0ZUludml0ZUNvZGUodXNlcklkKTsKLSAgICB9CisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIgdmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7IC8vIOabv+aNoiBKUEEKIAotICAgIC8v5rOo5YaMCi0gICAgQFBvc3RNYXBwaW5nKCIvcmVnaXN0ZXIiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlZ2lzdGVyKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QpIHsKLSAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gKFN0cmluZykgcmVxdWVzdC5nZXQoInVzZXJuYW1lIik7Ci0gICAgICAgIFN0cmluZyBlbWFpbCA9IChTdHJpbmcpIHJlcXVlc3QuZ2V0KCJlbWFpbCIpOwotICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgicGFzc3dvcmQiKTsKLSAgICAgICAgU3RyaW5nIHJvbGUgPSAoU3RyaW5nKSByZXF1ZXN0LmdldCgicm9sZSIpOwotICAgICAgICBTdHJpbmcgaW52aXRlQ29kZSA9IChTdHJpbmcpIHJlcXVlc3QuZ2V0KCJpbnZpdGVDb2RlIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFVzZXJDb250cm9sbGVyLmNsYXNzKTsKIAotICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLnmoTms6jlhozmlrnms5UKLSAgICAgICAgU3RyaW5nIHJlc3VsdE1lc3NhZ2UgPSB1c2VyU2VydmljZS5yZWdpc3RlclVzZXIodXNlcm5hbWUsIGVtYWlsLCBwYXNzd29yZCwgcm9sZSwgaW52aXRlQ29kZSk7Ci0KLSAgICAgICAgLy8g6L+U5Zue5rOo5YaM57uT5p6cCi0gICAgICAgIHJldHVybiBNYXAub2YoIm1zZyIsIHJlc3VsdE1lc3NhZ2UpOwotICAgIH0KLQotICAgIC8v55m75b2VCiAgICAgQFBvc3RNYXBwaW5nKCIvbG9naW4iKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGxvZ2luKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QpIHsKLSAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gKFN0cmluZykgcmVxdWVzdC5nZXQoInVzZXJuYW1lIik7Ci0gICAgICAgIFN0cmluZyBwYXNzd29yZCA9IChTdHJpbmcpIHJlcXVlc3QuZ2V0KCJwYXNzd29yZCIpOworICAgIEBBcGlPcGVyYXRpb24odmFsdWUgPSAi55So5oi355m75b2VIiwgbm90ZXMgPSAi5L2/55So55So5oi35ZCN5ZKM5a+G56CB6L+b6KGM55m75b2VIikKKyAgICBwdWJsaWMgUmVzdWx0IGxvZ2luQ29udHJvbGxlcihAUmVxdWVzdFBhcmFtIEBBcGlQYXJhbSh2YWx1ZSA9ICLnlKjmiLflkI0iLCByZXF1aXJlZCA9IHRydWUpIFN0cmluZyB1c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdFBhcmFtIEBBcGlQYXJhbSh2YWx1ZSA9ICLlr4bnoIEiLCByZXF1aXJlZCA9IHRydWUpIFN0cmluZyBwYXNzd29yZCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQXV0aGVudGljYXRpb24gYXV0aGVudGljYXRpb24gPSBhdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKAorICAgICAgICAgICAgICAgICAgICBuZXcgVXNlcm5hbWVQYXNzd29yZEF1dGhlbnRpY2F0aW9uVG9rZW4odXNlcm5hbWUsIHBhc3N3b3JkKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIFNlY3VyaXR5Q29udGV4dEhvbGRlci5nZXRDb250ZXh0KCkuc2V0QXV0aGVudGljYXRpb24oYXV0aGVudGljYXRpb24pOwogCi0gICAgICAgIC8vIOiwg+eUqOacjeWKoeWxgueahOeZu+W9leaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0TWVzc2FnZSA9IHVzZXJTZXJ2aWNlLmxvZ2luVXNlcih1c2VybmFtZSwgcGFzc3dvcmQpOworICAgICAgICAgICAgLy8g5L2/55SoIE15QmF0aXMtUGx1cyDmn6Xor6IKKyAgICAgICAgICAgIFVzZXIgdXNlciA9IHVzZXJNYXBwZXIuc2VsZWN0T25lKG5ldyBRdWVyeVdyYXBwZXI8VXNlcj4oKS5lcSgidXNlcm5hbWUiLCB1c2VybmFtZSkpOwogCi0gICAgICAgIC8vIOagueaNrueZu+W9lee7k+aenOi/lOWbnuS4jeWQjOeahOWTjeW6lAotICAgICAgICBpZiAocmVzdWx0TWVzc2FnZS5lcXVhbHMoIueZu+W9leaIkOWKnyIpKSB7Ci0gICAgICAgICAgICAvLyDmn6Xor6LnlKjmiLfkv6Hmga8KLSAgICAgICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5VXNlcm5hbWUodXNlcm5hbWUpOwotICAgICAgICAgICAgaWYgKHVzZXIuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICAvLyDlsIbnlKjmiLfnmoTmiYDmnInkv6Hmga/kvZzkuLrov5Tlm57lgLwKLSAgICAgICAgICAgICAgICByZXR1cm4gTWFwLm9mKCJtc2ciLCByZXN1bHRNZXNzYWdlLCAidXNlciIsIHVzZXIuZ2V0KCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTWFwLm9mKCJtc2ciLCAi55So5oi35L+h5oGv5p+l6K+i5aSx6LSlIik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvZ2luIHN1Y2Nlc3NmdWwgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKHVzZXIpOworICAgICAgICB9IGNhdGNoIChBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCLnmbvlvZXlpLHotKUiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBQb3N0TWFwcGluZygiL3JlZ2lzdGVyIikKKyAgICBAQXBpT3BlcmF0aW9uKHZhbHVlID0gIueUqOaIt+azqOWGjCIsIG5vdGVzID0gIuS9v+eUqOeUqOaIt+S/oeaBr+i/m+ihjOazqOWGjCIpCisgICAgcHVibGljIFJlc3VsdCByZWdpc3RlckNvbnRyb2xsZXIoQFJlcXVlc3RCb2R5IEBBcGlQYXJhbSh2YWx1ZSA9ICLmlrDnlKjmiLfkv6Hmga8iLCByZXF1aXJlZCA9IHRydWUpIFVzZXIgbmV3VXNlcikgeworICAgICAgICBpZiAodXNlclNlcnZpY2UuY2hlY2tFbWFpbEV4aXN0cyhuZXdVc2VyLmdldEVtYWlsKCkpKSB7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0LmVycm9yKCAi6YKu566x5bey6KKr5L2/55So77yM6K+35L2/55So5YW25LuW6YKu566x5rOo5YaM5oiW5om+5Zue5a+G56CB77yBIik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gdXNlclNlcnZpY2UucHJlUmVnaXN0ZXJVc2VyKG5ld1VzZXIpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgVXNlciByZXNwb25zZVVzZXIgPSBuZXcgVXNlcigpOworICAgICAgICAgICAgcmVzcG9uc2VVc2VyLnNldEVtYWlsKG5ld1VzZXIuZ2V0RW1haWwoKSk7CisgICAgICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gTWFwLm9mKCJtc2ciLCByZXN1bHRNZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIui0puWPt+W3suWtmOWcqOaIluazqOWGjOWksei0pe+8gSIpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy/kv67mlLnlr4bnoIEKLSAgICBAUG9zdE1hcHBpbmcoIi9wYXNzd29yZCIpCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY2hhbmdlUGFzc3dvcmQoQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IExvbmcucGFyc2VMb25nKHJlcXVlc3QuZ2V0KCJ1c2VyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIFN0cmluZyBvbGRQYXNzd29yZCA9IChTdHJpbmcpIHJlcXVlc3QuZ2V0KCJvbGRfcGFzc3dvcmQiKTsKLSAgICAgICAgU3RyaW5nIG5ld1Bhc3N3b3JkID0gKFN0cmluZykgcmVxdWVzdC5nZXQoIm5ld19wYXNzd29yZCIpOwotICAgICAgICBTdHJpbmcgY29uZmlybVBhc3N3b3JkID0gKFN0cmluZykgcmVxdWVzdC5nZXQoImNvbmZpcm1fcGFzc3dvcmQiKTsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFZlcmlmaWNhdGlvblJlcXVlc3QgeworICAgICAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgY29kZTsKIAotICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLnmoTkv67mlLnlr4bnoIHmlrnms5UKLSAgICAgICAgU3RyaW5nIHJlc3VsdE1lc3NhZ2UgPSB1c2VyU2VydmljZS5jaGFuZ2VQYXNzd29yZCh1c2VySWQsIG9sZFBhc3N3b3JkLCBuZXdQYXNzd29yZCwgY29uZmlybVBhc3N3b3JkKTsKLQotICAgICAgICAvLyDov5Tlm57kv67mlLnnu5PmnpwKLSAgICAgICAgcmV0dXJuIE1hcC5vZigibWVzc2FnZSIsIHJlc3VsdE1lc3NhZ2UsICJzdGF0dXMiLCByZXN1bHRNZXNzYWdlLmVxdWFscygi5a+G56CB5L+u5pS55oiQ5YqfIikgPyAic3VjY2VzcyIgOiAiZXJyb3IiKTsKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsgcmV0dXJuIGVtYWlsOyB9CisgICAgICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkgeyB0aGlzLmVtYWlsID0gZW1haWw7IH0KKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRDb2RlKCkgeyByZXR1cm4gY29kZTsgfQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRDb2RlKFN0cmluZyBjb2RlKSB7IHRoaXMuY29kZSA9IGNvZGU7IH0KICAgICB9CiAKLSAgICAvLyDojrflj5bnlKjmiLfkuKrkurrotYTmlpkKLSAgICBAR2V0TWFwcGluZygiL3t1c2VySWR9L2dldFByb2ZpbGUiKQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFByb2ZpbGUoQFBhdGhWYXJpYWJsZSgidXNlcklkIikgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJTZXJ2aWNlLmdldFByb2ZpbGUodXNlcklkKTsKLSAgICB9Ci0KLSAgICAvLyDkv67mlLnnlKjmiLfkuKrkurrotYTmlpkKLSAgICBAUHV0TWFwcGluZygiL3t1c2VySWR9L2VkaXRQcm9maWxlIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBlZGl0UHJvZmlsZSgKLSAgICAgICAgICAgIEBQYXRoVmFyaWFibGUoInVzZXJJZCIpIExvbmcgdXNlcklkLAotICAgICAgICAgICAgQFJlcXVlc3RCb2R5IE1hcDxTdHJpbmcsIE9iamVjdD4gcHJvZmlsZURhdGEpIHsKLQotICAgICAgICAvLyDojrflj5bor7fmsYLkvZPkuK3nmoTkv67mlLnmlbDmja4KLSAgICAgICAgU3RyaW5nIGF2YXRhclVybCA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgiYXZhdGFyVXJsIik7Ci0gICAgICAgIFN0cmluZyBuaWNrbmFtZSA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgibmlja25hbWUiKTsKLSAgICAgICAgU3RyaW5nIGdlbmRlciA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgiZ2VuZGVyIik7Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IChTdHJpbmcpIHByb2ZpbGVEYXRhLmdldCgiZGVzY3JpcHRpb24iKTsKLSAgICAgICAgU3RyaW5nIGhvYmJpZXMgPSAoU3RyaW5nKSBwcm9maWxlRGF0YS5nZXQoImhvYmJpZXMiKTsKLQotICAgICAgICAvLyDosIPnlKjmnI3liqHlsYLmlrnms5Xov5vooYzkv67mlLkKLSAgICAgICAgYm9vbGVhbiB1cGRhdGVkID0gdXNlclNlcnZpY2UuZWRpdFByb2ZpbGUodXNlcklkLCBhdmF0YXJVcmwsIG5pY2tuYW1lLCBnZW5kZXIsIGRlc2NyaXB0aW9uLCBob2JiaWVzKTsKLQotICAgICAgICAvLyDov5Tlm57mk43kvZznu5Pmnpzmtojmga8KLSAgICAgICAgaWYgKHVwZGF0ZWQpIHsKLSAgICAgICAgICAgIHJldHVybiBNYXAub2YoIm1lc3NhZ2UiLCAi55So5oi36LWE5paZ5pu05paw5oiQ5YqfIik7CisgICAgQFBvc3RNYXBwaW5nKCIvdmVyaWZ5LWNvZGUiKQorICAgIEBBcGlPcGVyYXRpb24odmFsdWUgPSAi6aqM6K+B6YKu566x6aqM6K+B56CBIiwgbm90ZXMgPSAi6aqM6K+B55So5oi36YKu566x55qE6aqM6K+B56CBIikKKyAgICBwdWJsaWMgUmVzdWx0IHZlcmlmeUVtYWlsQ29kZShAUmVxdWVzdEJvZHkgQEFwaVBhcmFtKHZhbHVlID0gIumqjOivgeivt+axguS/oeaBryIsIHJlcXVpcmVkID0gdHJ1ZSkgVmVyaWZpY2F0aW9uUmVxdWVzdCB2ZXJpZmljYXRpb25SZXF1ZXN0KSB7CisgICAgICAgIFN0cmluZyBlbWFpbCA9IHZlcmlmaWNhdGlvblJlcXVlc3QuZ2V0RW1haWwoKTsKKyAgICAgICAgU3RyaW5nIGNvZGUgPSB2ZXJpZmljYXRpb25SZXF1ZXN0LmdldENvZGUoKTsKKyAgICAgICAgYm9vbGVhbiBpc1ZlcmlmaWVkID0gdXNlclNlcnZpY2UudmVyaWZ5RW1haWwoZW1haWwsIGNvZGUpOworICAgICAgICBpZiAoaXNWZXJpZmllZCkgeworICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5vaygpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIE1hcC5vZigibWVzc2FnZSIsICLnlKjmiLfkuI3lrZjlnKgiKTsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoICLpqozor4HnoIHplJnor6/miJblt7Lov4fmnJ/vvIEiKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIOiuoeeul+WIhuS6q+eOhwotICAgIEBHZXRNYXBwaW5nKCIve3VzZXJfaWR9L2NhbGN1bGF0ZS1zaGFyZS1yYXRlIikKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjYWxjdWxhdGVTaGFyZVJhdGUoQFBhdGhWYXJpYWJsZSgidXNlcl9pZCIpIExvbmcgdXNlcklkKSB7Ci0gICAgICAgIHJldHVybiB1c2VyU2VydmljZS5jYWxjdWxhdGVTaGFyZVJhdGUodXNlcklkKTsKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBFbWFpbFNlcnZpY2UgZW1haWxTZXJ2aWNlOworCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBFbWFpbFJlcXVlc3QgeworICAgICAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsgcmV0dXJuIGVtYWlsOyB9CisgICAgICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkgeyB0aGlzLmVtYWlsID0gZW1haWw7IH0KICAgICB9CiAKLSAgICAvLyDojrflj5bnlKjmiLfmiYDmnInlpb3lj4vnmoTln7rmnKzkv6Hmga8KLSAgICBAR2V0TWFwcGluZygiL3t1c2VySWR9L2ZyaWVuZHMiKQotICAgIHB1YmxpYyBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldFVzZXJGcmllbmRzKEBQYXRoVmFyaWFibGUoInVzZXJJZCIpIExvbmcgdXNlcklkKSB7Ci0gICAgICAgIExpc3Q8TG9uZz4gZnJpZW5kSWRzID0gZHluYW1pY1NlcnZpY2UuZ2V0QWxsRnJpZW5kSWRzKHVzZXJJZCk7ICAvLyDms6jmhI/ov5nph4znlKjnmoTmmK/lrp7kvovlr7nosaEKLSAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBmcmllbmRzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgICAgICAgZm9yIChMb25nIGZyaWVuZElkIDogZnJpZW5kSWRzKSB7Ci0gICAgICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdCA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGZyaWVuZElkKTsKLSAgICAgICAgICAgIGlmICh1c2VyT3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHQuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBmcmllbmRJbmZvID0gTWFwLm9mKAotICAgICAgICAgICAgICAgICAgICAgICAgImlkIiwgdXNlci5nZXRVc2VySWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhdmF0YXIiLCB1c2VyLmdldEF2YXRhclVybCgpICE9IG51bGwgPyB1c2VyLmdldEF2YXRhclVybCgpIDogImh0dHBzOi8vZXhhbXBsZS5jb20vZGVmYXVsdC1hdmF0YXIuanBnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJuaWNrbmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSAhPSBudWxsID8gdXNlci5nZXRVc2VybmFtZSgpIDogIuacquefpeeUqOaItyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZW1haWwiLCB1c2VyLmdldEVtYWlsKCkgIT0gbnVsbCA/IHVzZXIuZ2V0RW1haWwoKSA6ICLmnKrloavlhpkiCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBmcmllbmRzLmFkZChmcmllbmRJbmZvKTsKLSAgICAgICAgICAgIH0KKyAgICBAUG9zdE1hcHBpbmcoIi9nZXQtdmVyaWZpY2F0aW9uLWVtYWlsIikKKyAgICBAQXBpT3BlcmF0aW9uKHZhbHVlID0gIuWPkemAgemqjOivgemCruS7tiIsIG5vdGVzID0gIumAmui/h+eUteWtkOmCruS7tuWPkemAgemqjOivgemCruS7tiIpCisgICAgcHVibGljIFJlc3BvbnNlRW50aXR5PFJlc3VsdD4gc2VuZFZlcmlmaWNhdGlvbkVtYWlsKEBSZXF1ZXN0Qm9keSBAQXBpUGFyYW0odmFsdWUgPSAi5Y+R6YCB6aqM6K+B6K+35rGCIiwgcmVxdWlyZWQgPSB0cnVlKSBFbWFpbFJlcXVlc3QgZW1haWxWZXJpZmljYXRpb25SZXF1ZXN0KSB7CisgICAgICAgIFN0cmluZyBlbWFpbCA9IGVtYWlsVmVyaWZpY2F0aW9uUmVxdWVzdC5nZXRFbWFpbCgpOworICAgICAgICBVc2VyIHVzZXIgPSB1c2VyTWFwcGVyLnNlbGVjdE9uZShuZXcgUXVlcnlXcmFwcGVyPFVzZXI+KCkuZXEoImVtYWlsIiwgZW1haWwpKTsKKyAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCLmnKrmib7liLDkuI7or6Xpgq7nrrHlnLDlnYDnm7jlhbPogZTnmoTnlKjmiLc6IHt9IiwgZW1haWwpOworICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LnN0YXR1cyhIdHRwU3RhdHVzLkJBRF9SRVFVRVNUKQorICAgICAgICAgICAgICAgICAgICAuYm9keShSZXN1bHQuZXJyb3IoIuacquaJvuWIsOS4juivpemCrueuseWcsOWdgOebuOWFs+iBlOeahOeUqOaItyIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBmcmllbmRzOworICAgICAgICAvLyDnlJ/miJDpqozor4HnoIEKKyAgICAgICAgU3RyaW5nIHRva2VuID0gUmFuZG9tU3RyaW5nVXRpbHMucmFuZG9tTnVtZXJpYyg2KTsKKyAgICAgICAgSW5zdGFudCBleHBpcnlEYXRlID0gSW5zdGFudC5ub3coKS5wbHVzKDEsIENocm9ub1VuaXQuSE9VUlMpOworICAgICAgICBsb2dnZXIuaW5mbygi55Sf5oiQ55qE6aqM6K+B5Luk54mMOiB7fSwg6L+H5pyf5pe26Ze0OiB7fSIsIHRva2VuLCBleHBpcnlEYXRlKTsKKworICAgICAgICBWZXJpZmljYXRpb25Ub2tlbiB2ZXJpZmljYXRpb25Ub2tlbiA9IG5ldyBWZXJpZmljYXRpb25Ub2tlbih0b2tlbiwgdXNlci5nZXRVc2VybmFtZSgpLCBlbWFpbCwgdXNlci5nZXRQYXNzd29yZCgpLCBleHBpcnlEYXRlKTsKKworICAgICAgICAvLyDkv53lrZjliLAgTXlCYXRpcy1QbHVzIOaVsOaNruW6kworICAgICAgICB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlci5pbnNlcnQodmVyaWZpY2F0aW9uVG9rZW4pOworCisgICAgICAgIGxvZ2dlci5pbmZvKCLpqozor4Hku6TniYzlt7Lkv53lrZjvvIznlKjmiLc6IHt9IiwgdXNlci5nZXRVc2VybmFtZSgpKTsKKyAgICAgICAgZW1haWxTZXJ2aWNlLnNlbmRWZXJpZmljYXRpb25FbWFpbChlbWFpbCwgdG9rZW4pOworCisgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhSZXN1bHQub2soKSk7CiAgICAgfQorICAgIEBQb3N0TWFwcGluZygiL2NoZWNrUGFzc3dvcmQiKQorICAgIHB1YmxpYyBSZXN1bHQ8U3RyaW5nPiBjaGVja1Bhc3N3b3JkKEBSZXF1ZXN0UGFyYW0gTG9uZyB1c2VySWQsIEBSZXF1ZXN0UGFyYW0gU3RyaW5nIHBhc3N3b3JkKSB7CisgICAgICAgIGJvb2xlYW4gaXNQYXNzd29yZENvcnJlY3QgPSB1c2VyU2VydmljZS5jaGVja1Bhc3N3b3JkKHVzZXJJZCwgcGFzc3dvcmQpOworICAgICAgICBpZiAoaXNQYXNzd29yZENvcnJlY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQub2soKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBSZXN1bHQuZXJyb3IoIuWOn+Wni+Wvhueggei+k+WFpemUmeivryIpOworICAgICAgICB9CisgICAgfQorCisKKy8vICAgIEBTYUNoZWNrTG9naW4KKy8vICAgIEBPcGVyYXRpb24oc3VtbWFyeSA9ICLnlKjmiLfmlLbol4/liJfooagiLCBkZXNjcmlwdGlvbiA9ICLojrflj5bnlKjmiLfmlLbol4/nmoTnp43lrZDliJfooagt5YiG6aG1LeaOkuW6jyIpCisvLyAgICBAQXBpUmVzcG9uc2UocmVzcG9uc2VDb2RlID0gIjAiLCBkZXNjcmlwdGlvbiA9ICLmk43kvZzmiJDlip8iLAorLy8gICAgICAgICAgICBjb250ZW50ID0ge0BDb250ZW50KG1lZGlhVHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIiwKKy8vICAgICAgICAgICAgICAgICAgICBzY2hlbWEgPSBAU2NoZW1hKGltcGxlbWVudGF0aW9uID0gVG9ycmVudFZPLmNsYXNzKSkKKy8vICAgICAgICAgICAgfSkKKy8vICAgIEBQb3N0TWFwcGluZygiL2Zhdm9yaXRlL2xpc3QiKQorLy8gICAgcHVibGljIFJlc3VsdCBsaXN0RmF2b3JpdGVzKEBSZXF1ZXN0Qm9keSBGYXZvcml0ZVBhcmFtIHBhcmFtKSB7CisvLyAgICAgICAgaWYgKHBhcmFtLmdldFVzZXJJZCgpID09IG51bGwpIHsKKy8vICAgICAgICAgICAgcmV0dXJuIFJlc3VsdC5lcnJvcigi57y65bCRIHVzZXJJZCIpOworLy8gICAgICAgIH0KKy8vCisvLyAgICAgICAgLy8g5qCh6aqM5o6S5bqP5a2X5q615piv5ZCm5ZCI55CG77yI5Y+v6YCJ77yJCisvLyAgICAgICAgcGFyYW0udmFsaWRPcmRlcihwYXJhbS5nZXRPcmRlcktleShUb3JyZW50RW50aXR5LmNsYXNzKSk7CisvLworLy8gICAgICAgIFBhZ2VVdGlsLnN0YXJ0UGFnZShwYXJhbSk7CisvLworLy8gICAgICAgIExpc3Q8VG9ycmVudEVudGl0eT4gbGlzdCA9IGZhdm9yaXRlU2VydmljZS5nZXRVc2VyRmF2b3JpdGVzUGFnZWQocGFyYW0uZ2V0VXNlcklkKCkpOworLy8KKy8vICAgICAgICByZXR1cm4gUmVzdWx0Lm9rKGxpc3QsIFBhZ2VVdGlsLmdldFBhZ2UobGlzdCkpOworLy8gICAgfQorLy8KKwogCiAKIH0KLQotCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NTBiZWIuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJGb2xsb3dTZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1AUmVzdENvbnRyb2xsZXIKLUBSZXF1ZXN0TWFwcGluZygiL2VjaG8vdXNlcnMiKQotcHVibGljIGNsYXNzIFVzZXJGb2xsb3dDb250cm9sbGVyIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJGb2xsb3dTZXJ2aWNlIHVzZXJGb2xsb3dTZXJ2aWNlOwotCi0gICAgLy8g55So5oi35YWz5rOo5o6l5Y+jCi0gICAgQFBvc3RNYXBwaW5nKCIve2ZvbGxvd2VkX2lkfS9mb2xsb3ciKQotICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBmb2xsb3coQFBhdGhWYXJpYWJsZSgiZm9sbG93ZWRfaWQiKSBMb25nIGZvbGxvd2VkSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAUmVxdWVzdEJvZHkgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdCkgewotICAgICAgICBMb25nIGZvbGxvd2VySWQgPSByZXF1ZXN0LmdldCgiZm9sbG93ZXJfaWQiKTsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IHVzZXJGb2xsb3dTZXJ2aWNlLmZvbGxvdyhmb2xsb3dlcklkLCBmb2xsb3dlZElkKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICAvLyDlj5bmtojlhbPms6jmjqXlj6MKLSAgICBAUG9zdE1hcHBpbmcoIi97Zm9sbG93ZWRfaWR9L3VuZm9sbG93IikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gdW5mb2xsb3coQFBhdGhWYXJpYWJsZSgiZm9sbG93ZWRfaWQiKSBMb25nIGZvbGxvd2VkSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0KSB7Ci0gICAgICAgIExvbmcgZm9sbG93ZXJJZCA9IHJlcXVlc3QuZ2V0KCJmb2xsb3dlcl9pZCIpOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdXNlckZvbGxvd1NlcnZpY2UudW5mb2xsb3coZm9sbG93ZXJJZCwgZm9sbG93ZWRJZCk7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W5p+Q5Liq55So5oi355qE57KJ5Lid5YiX6KGoCi0gICAgQEdldE1hcHBpbmcoIi97dXNlcl9pZH0vZm9sbG93ZXJzIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0Rm9sbG93ZXJzKEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCkgewotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdXNlckZvbGxvd1NlcnZpY2UuZ2V0Rm9sbG93ZXJzKHVzZXJJZCk7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7Ci0gICAgfQotCi0gICAgQEdldE1hcHBpbmcoIi97dXNlcl9pZH0vZm9sbG93aW5nIikKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0Rm9sbG93aW5nKEBQYXRoVmFyaWFibGUoInVzZXJfaWQiKSBMb25nIHVzZXJJZCkgewotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdXNlckZvbGxvd1NlcnZpY2UuZ2V0Rm9sbG93aW5nKHVzZXJJZCk7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXIuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDE0YTcuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyTWVzc2FnZVNlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uKjsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBSZXN0Q29udHJvbGxlcgotQFJlcXVlc3RNYXBwaW5nKCIvZWNoby9tZXNzYWdlIikKLXB1YmxpYyBjbGFzcyBVc2VyTWVzc2FnZUNvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlck1lc3NhZ2VTZXJ2aWNlIHVzZXJNZXNzYWdlU2VydmljZTsKLQotICAgIEBQb3N0TWFwcGluZygiL3NlbmRNZXNzYWdlcyIpCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHNlbmRNZXNzYWdlKEBSZXF1ZXN0Qm9keSBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcykgewotICAgICAgICAvLyDlsIblj4LmlbDovazmjaLkuLogTG9uZyDnsbvlnosKLSAgICAgICAgTG9uZyBzZW5kZXJJZCA9IExvbmcudmFsdWVPZihwYXJhbXMuZ2V0KCJzZW5kZXJfaWQiKS50b1N0cmluZygpKTsKLSAgICAgICAgTG9uZyByZWNlaXZlcklkID0gTG9uZy52YWx1ZU9mKHBhcmFtcy5nZXQoInJlY2VpdmVyX2lkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIFN0cmluZyBjb250ZW50ID0gKFN0cmluZykgcGFyYW1zLmdldCgiY29udGVudCIpOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdXNlck1lc3NhZ2VTZXJ2aWNlLnNlbmRNZXNzYWdlKHNlbmRlcklkLCByZWNlaXZlcklkLCBjb250ZW50KTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICBAR2V0TWFwcGluZygiL3t1c2VyX2lkfS9nZXRVc2VyTWVzc2FnZXMiKQotICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRVc2VyTWVzc2FnZXMoQFBhdGhWYXJpYWJsZSgidXNlcl9pZCIpIExvbmcgdXNlcklkKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB1c2VyTWVzc2FnZVNlcnZpY2UuZ2V0VXNlck1lc3NhZ2VzKHVzZXJJZCk7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZSk7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W5Y2V5p2h5raI5oGv55qE6K+m5oOFCi0gICAgQEdldE1hcHBpbmcoIi97bWVzc2FnZV9pZH0vZ2V0QU1lc3NhZ2UiKQotICAgIHB1YmxpYyBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRNZXNzYWdlKEBQYXRoVmFyaWFibGUoIm1lc3NhZ2VfaWQiKSBMb25nIG1lc3NhZ2VJZCkgewotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdXNlck1lc3NhZ2VTZXJ2aWNlLmdldE1lc3NhZ2UobWVzc2FnZUlkKTsKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5Lm9rKHJlc3BvbnNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db2xsZWN0aW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2E4NzExLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db2xsZWN0aW9ucy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAiY29sbGVjdGlvbnMiKQotcHVibGljIGNsYXNzIENvbGxlY3Rpb25zIHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJjb2xsZWN0aW9uSWQiKQotICAgIHByaXZhdGUgTG9uZyBjb2xsZWN0aW9uSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJwb3N0Tm8iKQotICAgIHByaXZhdGUgTG9uZyBwb3N0Tm87Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0Q29sbGVjdGlvbklkKCkgewotICAgICAgICByZXR1cm4gY29sbGVjdGlvbklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbGxlY3Rpb25JZChMb25nIGNvbGxlY3Rpb25JZCkgewotICAgICAgICB0aGlzLmNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb25JZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7Ci0gICAgICAgIHJldHVybiB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFBvc3RObygpIHsKLSAgICAgICAgcmV0dXJuIHBvc3RObzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3N0Tm8oTG9uZyBwb3N0Tm8pIHsKLSAgICAgICAgdGhpcy5wb3N0Tm8gPSBwb3N0Tm87Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0NvbW1lbnRzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRmODlmYS4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uQmFja1JlZmVyZW5jZTsKLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJjb21tZW50cyIpCi1wdWJsaWMgY2xhc3MgQ29tbWVudHMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfaWQiKQotICAgIHByaXZhdGUgTG9uZyBjb21tZW50SWQ7Ci0KLSAgICBATWFueVRvT25lCi0gICAgQEpvaW5Db2x1bW4obmFtZSA9ICJwb3N0X2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBASnNvbkJhY2tSZWZlcmVuY2UKLSAgICBwcml2YXRlIFBvc3QgcG9zdDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjb250ZW50IiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIFN0cmluZyBjb250ZW50OwotCi0gICAgQENvbHVtbihuYW1lID0gImlzX2Fub255bW91cyIpCi0gICAgcHJpdmF0ZSBCb29sZWFuIGlzQW5vbnltb3VzOyAgLy8g5piv5ZCm5Yy/5ZCNCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAibGlrZXNfY291bnQiKQotICAgIHByaXZhdGUgSW50ZWdlciBsaWtlc0NvdW50ID0gMDsgIC8vIOeCuei1nuaVsAotCi0gICAgQENvbHVtbihuYW1lID0gInJlcGx5X2NvdW50IikKLSAgICBwcml2YXRlIEludGVnZXIgcmVwbHlDb3VudCA9IDA7ICAvLyDlm57lpI3mlbAKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjb21tZW50X3RpbWUiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgRGF0ZSBjb21tZW50VGltZTsgIC8vIOivhOiuuuaXtumXtAotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7ICAvLyDor4TorrrogIXnmoQgdXNlcl9pZAotCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tX2NvbW1lbnRfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgTG9uZyBjb21fY29tbWVudF9pZDsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLQotICAgIHB1YmxpYyBMb25nIGdldENvbW1lbnRJZCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbW1lbnRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb21tZW50SWQoTG9uZyBjb21tZW50SWQpIHsKLSAgICAgICAgdGhpcy5jb21tZW50SWQgPSBjb21tZW50SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFBvc3QgZ2V0UG9zdCgpIHsKLSAgICAgICAgcmV0dXJuIHBvc3Q7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zdChQb3N0IHBvc3QpIHsKLSAgICAgICAgdGhpcy5wb3N0ID0gcG9zdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0gICAgICAgIHJldHVybiBjb250ZW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnQoU3RyaW5nIGNvbnRlbnQpIHsKLSAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQm9vbGVhbiBnZXRJc0Fub255bW91cygpIHsKLSAgICAgICAgcmV0dXJuIGlzQW5vbnltb3VzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElzQW5vbnltb3VzKEJvb2xlYW4gaXNBbm9ueW1vdXMpIHsKLSAgICAgICAgdGhpcy5pc0Fub255bW91cyA9IGlzQW5vbnltb3VzOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnRlZ2VyIGdldExpa2VzQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBsaWtlc0NvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExpa2VzQ291bnQoSW50ZWdlciBsaWtlc0NvdW50KSB7Ci0gICAgICAgIHRoaXMubGlrZXNDb3VudCA9IGxpa2VzQ291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0UmVwbHlDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIHJlcGx5Q291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVwbHlDb3VudChJbnRlZ2VyIHJlcGx5Q291bnQpIHsKLSAgICAgICAgdGhpcy5yZXBseUNvdW50ID0gcmVwbHlDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRDb21tZW50VGltZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbW1lbnRUaW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRUaW1lKERhdGUgY29tbWVudFRpbWUpIHsKLSAgICAgICAgdGhpcy5jb21tZW50VGltZSA9IGNvbW1lbnRUaW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0UGFyZW50Q29tbWVudCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbV9jb21tZW50X2lkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBhcmVudENvbW1lbnQoTG9uZyBjb21fY29tbWVudF9pZCkgewotICAgICAgICB0aGlzLmNvbV9jb21tZW50X2lkID0gY29tX2NvbW1lbnRfaWQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNDb21tZW50LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0NvbW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVjODRkMy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0NvbW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gImR5bmFtaWNfY29tbWVudCIpCi1wdWJsaWMgY2xhc3MgRHluYW1pY0NvbW1lbnQgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfaWQiKQotICAgIHByaXZhdGUgTG9uZyBjb21tZW50SWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZHluYW1pY19pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGR5bmFtaWNJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIikKLSAgICBwcml2YXRlIExvbmcgdXNlcklkOwotCi0gICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRfY29udGVudCIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29tbWVudENvbnRlbnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF90aW1lIikKLSAgICBwcml2YXRlIERhdGUgY29tbWVudFRpbWU7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiaXNfYW5vbnltb3VzIikKLSAgICBwcml2YXRlIEJvb2xlYW4gaXNBbm9ueW1vdXMgPSBmYWxzZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJwYXJlbnRfY29tbWVudF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHBhcmVudENvbW1lbnRJZDsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRDb21tZW50SWQoKSB7Ci0gICAgICAgIHJldHVybiBjb21tZW50SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29tbWVudElkKExvbmcgY29tbWVudElkKSB7Ci0gICAgICAgIHRoaXMuY29tbWVudElkID0gY29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldER5bmFtaWNJZCgpIHsKLSAgICAgICAgcmV0dXJuIGR5bmFtaWNJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREeW5hbWljSWQoTG9uZyBkeW5hbWljSWQpIHsKLSAgICAgICAgdGhpcy5keW5hbWljSWQgPSBkeW5hbWljSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbW1lbnRDb250ZW50KCkgewotICAgICAgICByZXR1cm4gY29tbWVudENvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29tbWVudENvbnRlbnQoU3RyaW5nIGNvbW1lbnRDb250ZW50KSB7Ci0gICAgICAgIHRoaXMuY29tbWVudENvbnRlbnQgPSBjb21tZW50Q29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRDb21tZW50VGltZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvbW1lbnRUaW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRUaW1lKERhdGUgY29tbWVudFRpbWUpIHsKLSAgICAgICAgdGhpcy5jb21tZW50VGltZSA9IGNvbW1lbnRUaW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBCb29sZWFuIGdldElzQW5vbnltb3VzKCkgewotICAgICAgICByZXR1cm4gaXNBbm9ueW1vdXM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0SXNBbm9ueW1vdXMoQm9vbGVhbiBpc0Fub255bW91cykgewotICAgICAgICB0aGlzLmlzQW5vbnltb3VzID0gaXNBbm9ueW1vdXM7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0UGFyZW50Q29tbWVudElkKCkgewotICAgICAgICByZXR1cm4gcGFyZW50Q29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBhcmVudENvbW1lbnRJZChMb25nIHBhcmVudENvbW1lbnRJZCkgewotICAgICAgICB0aGlzLnBhcmVudENvbW1lbnRJZCA9IHBhcmVudENvbW1lbnRJZDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0xpa2VzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRHluYW1pY0xpa2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NmY5MDMuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNMaWtlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAiZHluYW1pY19saWtlcyIpCi1wdWJsaWMgY2xhc3MgRHluYW1pY0xpa2VzIHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJsaWtlX2lkIikKLSAgICBwcml2YXRlIExvbmcgbGlrZUlkOwotCi0gICAgQENvbHVtbihuYW1lID0gImR5bmFtaWNfaWQiKQotICAgIHByaXZhdGUgTG9uZyBkeW5hbWljSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJsaWtlX3RpbWUiKQotICAgIHByaXZhdGUgRGF0ZSBsaWtlVGltZTsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRMaWtlSWQoKSB7Ci0gICAgICAgIHJldHVybiBsaWtlSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGlrZUlkKExvbmcgbGlrZUlkKSB7Ci0gICAgICAgIHRoaXMubGlrZUlkID0gbGlrZUlkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldER5bmFtaWNJZCgpIHsKLSAgICAgICAgcmV0dXJuIGR5bmFtaWNJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREeW5hbWljSWQoTG9uZyBkeW5hbWljSWQpIHsKLSAgICAgICAgdGhpcy5keW5hbWljSWQgPSBkeW5hbWljSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRMaWtlVGltZSgpIHsKLSAgICAgICAgcmV0dXJuIGxpa2VUaW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExpa2VUaW1lKERhdGUgbGlrZVRpbWUpIHsKLSAgICAgICAgdGhpcy5saWtlVGltZSA9IGxpa2VUaW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9FeHBlcmllbmNlSGlzdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0V4cGVyaWVuY2VIaXN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNTJmNmIuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0V4cGVyaWVuY2VIaXN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJleHBlcmllbmNlX2hpc3RvcnkiKQotcHVibGljIGNsYXNzIEV4cGVyaWVuY2VIaXN0b3J5IHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJoaXN0b3J5X2lkIikKLSAgICBwcml2YXRlIExvbmcgaGlzdG9yeUlkOwotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZXhwZXJpZW5jZV9jaGFuZ2UiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgSW50ZWdlciBleHBlcmllbmNlQ2hhbmdlOyAgLy8g57uP6aqM5YC85Y+Y5YyW6YePCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAic291cmNlIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIFN0cmluZyBzb3VyY2U7ICAvLyDmm7TmlrDmnaXmupAKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1cGRhdGVfdGltZSIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBEYXRlIHVwZGF0ZVRpbWU7ICAvLyDmm7TmlrDmk43kvZznmoTml7bpl7QKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRIaXN0b3J5SWQoKSB7Ci0gICAgICAgIHJldHVybiBoaXN0b3J5SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0SGlzdG9yeUlkKExvbmcgaGlzdG9yeUlkKSB7Ci0gICAgICAgIHRoaXMuaGlzdG9yeUlkID0gaGlzdG9yeUlkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0RXhwZXJpZW5jZUNoYW5nZSgpIHsKLSAgICAgICAgcmV0dXJuIGV4cGVyaWVuY2VDaGFuZ2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RXhwZXJpZW5jZUNoYW5nZShJbnRlZ2VyIGV4cGVyaWVuY2VDaGFuZ2UpIHsKLSAgICAgICAgdGhpcy5leHBlcmllbmNlQ2hhbmdlID0gZXhwZXJpZW5jZUNoYW5nZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZSgpIHsKLSAgICAgICAgcmV0dXJuIHNvdXJjZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTb3VyY2UoU3RyaW5nIHNvdXJjZSkgewotICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRVcGRhdGVUaW1lKCkgewotICAgICAgICByZXR1cm4gdXBkYXRlVGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVcGRhdGVUaW1lKERhdGUgdXBkYXRlVGltZSkgewotICAgICAgICB0aGlzLnVwZGF0ZVRpbWUgPSB1cGRhdGVUaW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GcmllbmRSZWxhdGlvbi5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0ZyaWVuZFJlbGF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwODYwMDEuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0ZyaWVuZFJlbGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJmcmllbmRfcmVsYXRpb24iKQotcHVibGljIGNsYXNzIEZyaWVuZFJlbGF0aW9uIHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJyZWxhdGlvbl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHJlbGF0aW9uSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJmcmllbmRfaWQiKQotICAgIHByaXZhdGUgTG9uZyBmcmllbmRJZDsgIC8vIOWlveWPi0lECi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY3JlYXRlX3RpbWUiKQotICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVUaW1lOyAgLy8g5aW95Y+L5YWz57O75Yib5bu65pe26Ze0Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0UmVsYXRpb25JZCgpIHsKLSAgICAgICAgcmV0dXJuIHJlbGF0aW9uSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVsYXRpb25JZChMb25nIHJlbGF0aW9uSWQpIHsKLSAgICAgICAgdGhpcy5yZWxhdGlvbklkID0gcmVsYXRpb25JZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7Ci0gICAgICAgIHJldHVybiB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldEZyaWVuZElkKCkgewotICAgICAgICByZXR1cm4gZnJpZW5kSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RnJpZW5kSWQoTG9uZyBmcmllbmRJZCkgewotICAgICAgICB0aGlzLmZyaWVuZElkID0gZnJpZW5kSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0Q3JlYXRlVGltZSgpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlVGltZShEYXRlIGNyZWF0ZVRpbWUpIHsKLSAgICAgICAgdGhpcy5jcmVhdGVUaW1lID0gY3JlYXRlVGltZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTRmMmM3Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAiZ3JvdXBfaW50ZXJlc3RzIikKLXB1YmxpYyBjbGFzcyBHcm91cCB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiZ3JvdXBfaWQiKQotICAgIHByaXZhdGUgTG9uZyBncm91cElkOwotCi0gICAgQENvbHVtbihuYW1lID0gImdyb3VwX25hbWUiKQotICAgIHByaXZhdGUgU3RyaW5nIGdyb3VwTmFtZTsKLQotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOyAgLy8g5bCP57uE566A5LuLCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY3JlYXRlX3RpbWUiKQotICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVUaW1lOyAgLy8g5Yib5bu65pe26Ze0Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsgIC8vIOWIm+W7uuivpeWwj+e7hOeahOeUqOaIt0lECi0KLSAgICBAQ29sdW1uKG5hbWUgPSAibWVtYmVyX2NvdW50IikKLSAgICBwcml2YXRlIEludGVnZXIgbWVtYmVyQ291bnQ7ICAvLyDlsI/nu4TmiJDlkZjkurrmlbAKLQotICAgIHByaXZhdGUgU3RyaW5nIGNhdGVnb3J5OyAgLy8g5bCP57uE57G75YirCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY292ZXJfaW1hZ2UiKQotICAgIHByaXZhdGUgU3RyaW5nIGNvdmVySW1hZ2U7ICAvLyDlsI/nu4TlsIHpnaLlm77niYcKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRHcm91cElkKCkgewotICAgICAgICByZXR1cm4gZ3JvdXBJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRHcm91cElkKExvbmcgZ3JvdXBJZCkgewotICAgICAgICB0aGlzLmdyb3VwSWQgPSBncm91cElkOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JvdXBOYW1lKCkgewotICAgICAgICByZXR1cm4gZ3JvdXBOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwTmFtZShTdHJpbmcgZ3JvdXBOYW1lKSB7Ci0gICAgICAgIHRoaXMuZ3JvdXBOYW1lID0gZ3JvdXBOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBEYXRlIGdldENyZWF0ZVRpbWUoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUaW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENyZWF0ZVRpbWUoRGF0ZSBjcmVhdGVUaW1lKSB7Ci0gICAgICAgIHRoaXMuY3JlYXRlVGltZSA9IGNyZWF0ZVRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRNZW1iZXJDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1lbWJlckNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE1lbWJlckNvdW50KEludGVnZXIgbWVtYmVyQ291bnQpIHsKLSAgICAgICAgdGhpcy5tZW1iZXJDb3VudCA9IG1lbWJlckNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0ZWdvcnkoKSB7Ci0gICAgICAgIHJldHVybiBjYXRlZ29yeTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDYXRlZ29yeShTdHJpbmcgY2F0ZWdvcnkpIHsKLSAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q292ZXJJbWFnZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvdmVySW1hZ2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q292ZXJJbWFnZShTdHJpbmcgY292ZXJJbWFnZSkgewotICAgICAgICB0aGlzLmNvdmVySW1hZ2UgPSBjb3ZlckltYWdlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBDb21tZW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2Y0MjA1Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cENvbW1lbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJncm91cF9jb21tZW50cyIpCi1wdWJsaWMgY2xhc3MgR3JvdXBDb21tZW50cyB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGNvbW1lbnRJZDsgIC8vIOivhOiuuklECi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZ3JvdXBfcG9zdF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGdyb3VwUG9zdElkOwotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7Ci0KLSAgICBwcml2YXRlIFN0cmluZyBjb250ZW50OwotCi0gICAgQENvbHVtbihuYW1lID0gInBhcmVudF9jb21tZW50X2lkIikKLSAgICBwcml2YXRlIExvbmcgcGFyZW50Q29tbWVudElkOwotCi0gICAgQENvbHVtbihuYW1lID0gInRpbWUiKQotICAgIHByaXZhdGUgRGF0ZSB0aW1lOyAgLy8g6K+E6K665pe26Ze0Ci0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0Q29tbWVudElkKCkgewotICAgICAgICByZXR1cm4gY29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRJZChMb25nIGNvbW1lbnRJZCkgewotICAgICAgICB0aGlzLmNvbW1lbnRJZCA9IGNvbW1lbnRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRHcm91cFBvc3RJZCgpIHsKLSAgICAgICAgcmV0dXJuIGdyb3VwUG9zdElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwUG9zdElkKExvbmcgZ3JvdXBQb3N0SWQpIHsKLSAgICAgICAgdGhpcy5ncm91cFBvc3RJZCA9IGdyb3VwUG9zdElkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgewotICAgICAgICByZXR1cm4gY29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7Ci0gICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0UGFyZW50Q29tbWVudElkKCkgewotICAgICAgICByZXR1cm4gcGFyZW50Q29tbWVudElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBhcmVudENvbW1lbnRJZChMb25nIHBhcmVudENvbW1lbnRJZCkgewotICAgICAgICB0aGlzLnBhcmVudENvbW1lbnRJZCA9IHBhcmVudENvbW1lbnRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRUaW1lKCkgewotICAgICAgICByZXR1cm4gdGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaW1lKERhdGUgdGltZSkgewotICAgICAgICB0aGlzLnRpbWUgPSB0aW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cE1lbWJlcnMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cE1lbWJlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2ZTE4Yy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBNZW1iZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJncm91cF9tZW1iZXJzIikKLXB1YmxpYyBjbGFzcyBHcm91cE1lbWJlcnMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gInJlbGF0aW9uX2lkIikKLSAgICBwcml2YXRlIExvbmcgcmVsYXRpb25JZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJncm91cF9pZCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBMb25nIGdyb3VwSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRSZWxhdGlvbklkKCkgewotICAgICAgICByZXR1cm4gcmVsYXRpb25JZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGlvbklkKExvbmcgcmVsYXRpb25JZCkgewotICAgICAgICB0aGlzLnJlbGF0aW9uSWQgPSByZWxhdGlvbklkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldEdyb3VwSWQoKSB7Ci0gICAgICAgIHJldHVybiBncm91cElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwSWQoTG9uZyBncm91cElkKSB7Ci0gICAgICAgIHRoaXMuZ3JvdXBJZCA9IGdyb3VwSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBQb3N0LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBQb3N0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ODY3ZjcuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwUG9zdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gImdyb3VwX3Bvc3QiKQotcHVibGljIGNsYXNzIEdyb3VwUG9zdCB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiZ3JvdXBfcG9zdF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGdyb3VwUG9zdElkOwotCi0gICAgQENvbHVtbihuYW1lID0gImdyb3VwX2lkIikKLSAgICBwcml2YXRlIExvbmcgZ3JvdXBJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIikKLSAgICBwcml2YXRlIExvbmcgdXNlcklkOwotCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsKLQotICAgIHByaXZhdGUgU3RyaW5nIGltYWdlOwotCi0gICAgQENvbHVtbihuYW1lID0gImxpa2VfY291bnQiKQotICAgIHByaXZhdGUgSW50ZWdlciBsaWtlQ291bnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29tbWVudF9jb3VudCIpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIGNvbW1lbnRDb3VudDsgIC8vIOW4luWtkOivhOiuuuaVsAotCi0gICAgQENvbHVtbihuYW1lID0gInRpbWUiKQotICAgIHByaXZhdGUgRGF0ZSB0aW1lOyAgLy8g5biW5a2Q5Yib5bu65pe26Ze0Ci0KLSAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKLQotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldEdyb3VwUG9zdElkKCkgewotICAgICAgICByZXR1cm4gZ3JvdXBQb3N0SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0R3JvdXBQb3N0SWQoTG9uZyBncm91cFBvc3RJZCkgewotICAgICAgICB0aGlzLmdyb3VwUG9zdElkID0gZ3JvdXBQb3N0SWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0R3JvdXBJZCgpIHsKLSAgICAgICAgcmV0dXJuIGdyb3VwSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0R3JvdXBJZChMb25nIGdyb3VwSWQpIHsKLSAgICAgICAgdGhpcy5ncm91cElkID0gZ3JvdXBJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRVc2VySWQoKSB7Ci0gICAgICAgIHJldHVybiB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcklkKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udGVudChTdHJpbmcgY29udGVudCkgewotICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBpbWFnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbWFnZShTdHJpbmcgaW1hZ2UpIHsKLSAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnRlZ2VyIGdldExpa2VDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIGxpa2VDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMaWtlQ291bnQoSW50ZWdlciBsaWtlQ291bnQpIHsKLSAgICAgICAgdGhpcy5saWtlQ291bnQgPSBsaWtlQ291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0Q29tbWVudENvdW50KCkgewotICAgICAgICByZXR1cm4gY29tbWVudENvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRDb3VudChJbnRlZ2VyIGNvbW1lbnRDb3VudCkgewotICAgICAgICB0aGlzLmNvbW1lbnRDb3VudCA9IGNvbW1lbnRDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRUaW1lKCkgewotICAgICAgICByZXR1cm4gdGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaW1lKERhdGUgdGltZSkgewotICAgICAgICB0aGlzLnRpbWUgPSB0aW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSB7Ci0gICAgICAgIHJldHVybiB0aXRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIHsKLSAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MZXZlbC5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MzdlZjkuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLQotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAibGV2ZWwiKQotcHVibGljIGNsYXNzIExldmVsIHsKLQotICAgIEBJZAotICAgIEBDb2x1bW4obmFtZSA9ICJsZXZlbF9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGxldmVsSWQ7ICAvLyDnrYnnuqfllK/kuIDmoIfor4YKLQotICAgIEBDb2x1bW4obmFtZSA9ICJsZXZlbF9uYW1lIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIFN0cmluZyBsZXZlbE5hbWU7ICAvLyDnrYnnuqflkI3np7AKLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZXF1aXJlZF9leHBlcmllbmNlIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIExvbmcgcmVxdWlyZWRFeHBlcmllbmNlOyAgLy8g5omA6ZyA57uP6aqM5YC8Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmVxdWlyZWRfc2hhcmVfcmF0aW8iKQotICAgIHByaXZhdGUgRmxvYXQgcmVxdWlyZWRTaGFyZVJhdGlvOyAgLy8g5omA6ZyA5YiG5Lqr546HCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmVxdWlyZWRfdXBsb2FkX2diIikKLSAgICBwcml2YXRlIEZsb2F0IHJlcXVpcmVkVXBsb2FkR2I7ICAvLyDmiYDpnIDkuIrkvKDmlbDmja7ph48KLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZXF1aXJlZF9zZWVkaW5nX2hvdXJzIikKLSAgICBwcml2YXRlIEZsb2F0IHJlcXVpcmVkU2VlZGluZ0hvdXJzOyAgLy8g5omA6ZyA5YGa56eN5pe26ZW/Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicGVybWlzc2lvbnMiKQotICAgIHByaXZhdGUgU3RyaW5nIHBlcm1pc3Npb25zOyAgLy8g5oul5pyJ55qE5p2D6ZmQCi0KLSAgICAvLyBHZXR0ZXJzIGFuZCBTZXR0ZXJzCi0gICAgcHVibGljIExvbmcgZ2V0TGV2ZWxJZCgpIHsKLSAgICAgICAgcmV0dXJuIGxldmVsSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGV2ZWxJZChMb25nIGxldmVsSWQpIHsKLSAgICAgICAgdGhpcy5sZXZlbElkID0gbGV2ZWxJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldExldmVsTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIGxldmVsTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMZXZlbE5hbWUoU3RyaW5nIGxldmVsTmFtZSkgewotICAgICAgICB0aGlzLmxldmVsTmFtZSA9IGxldmVsTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRSZXF1aXJlZEV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIHJldHVybiByZXF1aXJlZEV4cGVyaWVuY2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRFeHBlcmllbmNlKExvbmcgcmVxdWlyZWRFeHBlcmllbmNlKSB7Ci0gICAgICAgIHRoaXMucmVxdWlyZWRFeHBlcmllbmNlID0gcmVxdWlyZWRFeHBlcmllbmNlOwotICAgIH0KLQotICAgIHB1YmxpYyBGbG9hdCBnZXRSZXF1aXJlZFNoYXJlUmF0aW8oKSB7Ci0gICAgICAgIHJldHVybiByZXF1aXJlZFNoYXJlUmF0aW87Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRTaGFyZVJhdGlvKEZsb2F0IHJlcXVpcmVkU2hhcmVSYXRpbykgewotICAgICAgICB0aGlzLnJlcXVpcmVkU2hhcmVSYXRpbyA9IHJlcXVpcmVkU2hhcmVSYXRpbzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQgZ2V0UmVxdWlyZWRVcGxvYWRHYigpIHsKLSAgICAgICAgcmV0dXJuIHJlcXVpcmVkVXBsb2FkR2I7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRVcGxvYWRHYihGbG9hdCByZXF1aXJlZFVwbG9hZEdiKSB7Ci0gICAgICAgIHRoaXMucmVxdWlyZWRVcGxvYWRHYiA9IHJlcXVpcmVkVXBsb2FkR2I7Ci0gICAgfQotCi0gICAgcHVibGljIEZsb2F0IGdldFJlcXVpcmVkU2VlZGluZ0hvdXJzKCkgewotICAgICAgICByZXR1cm4gcmVxdWlyZWRTZWVkaW5nSG91cnM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWlyZWRTZWVkaW5nSG91cnMoRmxvYXQgcmVxdWlyZWRTZWVkaW5nSG91cnMpIHsKLSAgICAgICAgdGhpcy5yZXF1aXJlZFNlZWRpbmdIb3VycyA9IHJlcXVpcmVkU2VlZGluZ0hvdXJzOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGVybWlzc2lvbnMoKSB7Ci0gICAgICAgIHJldHVybiBwZXJtaXNzaW9uczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQZXJtaXNzaW9ucyhTdHJpbmcgcGVybWlzc2lvbnMpIHsKLSAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MaWtlcy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xpa2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhM2RjZGEuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xpa2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJsaWtlcyIpCi1wdWJsaWMgY2xhc3MgTGlrZXMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpICAvLyDkvb/nlKjoh6rlop7kuLvplK4KLSAgICBAQ29sdW1uKG5hbWUgPSAibGlrZUlkIikKLSAgICBwcml2YXRlIExvbmcgbGlrZUlkOwotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJfaWQiKQotICAgIHByaXZhdGUgTG9uZyB1c2VySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdE5vIikKLSAgICBwcml2YXRlIExvbmcgcG9zdE5vOwotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldExpa2VJZCgpIHsKLSAgICAgICAgcmV0dXJuIGxpa2VJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMaWtlSWQoTG9uZyBsaWtlSWQpIHsKLSAgICAgICAgdGhpcy5saWtlSWQgPSBsaWtlSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRQb3N0Tm8oKSB7Ci0gICAgICAgIHJldHVybiBwb3N0Tm87Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zdE5vKExvbmcgcG9zdE5vKSB7Ci0gICAgICAgIHRoaXMucG9zdE5vID0gcG9zdE5vOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUG9zdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjk0YWFjLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbk1hbmFnZWRSZWZlcmVuY2U7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gInBvc3QiKQotcHVibGljIGNsYXNzIFBvc3QgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gInBvc3RObyIpCi0gICAgcHJpdmF0ZSBMb25nIHBvc3RObzsKLQotCi0gICAgQENvbHVtbihuYW1lID0gInVzZXJJZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJfaWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdENvbnRlbnQiKQotICAgIHByaXZhdGUgU3RyaW5nIHBvc3RDb250ZW50OwotCi0gICAgQENvbHVtbihuYW1lID0gImltYWdlVXJsIikKLSAgICBwcml2YXRlIFN0cmluZyBpbWFnZVVybDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJwb3N0VGltZSIpCi0gICAgcHJpdmF0ZSBEYXRlIHBvc3RUaW1lOwotCi0gICAgQENvbHVtbihuYW1lID0gInBvc3RMaWtlTnVtIikKLSAgICBwcml2YXRlIEludGVnZXIgcG9zdExpa2VOdW07Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdENvbGxlY3ROdW0iKQotICAgIHByaXZhdGUgSW50ZWdlciBwb3N0Q29sbGVjdE51bTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ0aXRsZSIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgdGl0bGU7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicG9zdFR5cGUiKQotICAgIHByaXZhdGUgU3RyaW5nIHBvc3RUeXBlOwotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldFBvc3RObygpIHsKLSAgICAgICAgcmV0dXJuIHBvc3RObzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3N0Tm8oTG9uZyBwb3N0Tm8pIHsKLSAgICAgICAgdGhpcy5wb3N0Tm8gPSBwb3N0Tm87Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcl9pZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJfaWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VXNlcl9pZChMb25nIHVzZXIpIHsKLSAgICAgICAgdGhpcy51c2VyX2lkID0gdXNlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBvc3RDb250ZW50KCkgewotICAgICAgICByZXR1cm4gcG9zdENvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zdENvbnRlbnQoU3RyaW5nIHBvc3RDb250ZW50KSB7Ci0gICAgICAgIHRoaXMucG9zdENvbnRlbnQgPSBwb3N0Q29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEltYWdlVXJsKCkgewotICAgICAgICByZXR1cm4gaW1hZ2VVcmw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0SW1hZ2VVcmwoU3RyaW5nIGltZ1VybCkgewotICAgICAgICB0aGlzLmltYWdlVXJsID0gaW1nVXJsOwotICAgIH0KLQotICAgIHB1YmxpYyBEYXRlIGdldFBvc3RUaW1lKCkgewotICAgICAgICByZXR1cm4gcG9zdFRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zdFRpbWUoRGF0ZSBwb3N0VGltZSkgewotICAgICAgICB0aGlzLnBvc3RUaW1lID0gcG9zdFRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0UG9zdExpa2VOdW0oKSB7Ci0gICAgICAgIHJldHVybiBwb3N0TGlrZU51bTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3N0TGlrZU51bShJbnRlZ2VyIHBvc3RMaWtlTnVtKSB7Ci0gICAgICAgIHRoaXMucG9zdExpa2VOdW0gPSBwb3N0TGlrZU51bTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRQb3N0Q29sbGVjdE51bSgpIHsKLSAgICAgICAgcmV0dXJuIHBvc3RDb2xsZWN0TnVtOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBvc3RDb2xsZWN0TnVtKEludGVnZXIgcG9zdENvbGxlY3ROdW0pIHsKLSAgICAgICAgdGhpcy5wb3N0Q29sbGVjdE51bSA9IHBvc3RDb2xsZWN0TnVtOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGl0bGUoKSB7Ci0gICAgICAgIHJldHVybiB0aXRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgdGl0bGUpIHsKLSAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9zdFR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBwb3N0VHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3N0VHlwZShTdHJpbmcgcG9zdFR5cGUpIHsKLSAgICAgICAgdGhpcy5wb3N0VHlwZSA9IHBvc3RUeXBlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9UYXNrLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTc5NmExLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9UYXNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJ0YXNrcyIpCi1wdWJsaWMgY2xhc3MgVGFzayB7Ci0KLSAgICBASWQKLSAgICBAQ29sdW1uKG5hbWUgPSAidGFza19pZCIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgdGFza0lkOwotCi0gICAgQENvbHVtbihuYW1lID0gInRpdGxlIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJkZXNjcmlwdGlvbiIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmV3YXJkX2V4cGVyaWVuY2UiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgaW50IHJld2FyZEV4cGVyaWVuY2U7ICAvLyDku7vliqHlpZblirHnmoTnu4/pqowKLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZXdhcmRfcG9pbnRzIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIGludCByZXdhcmRQb2ludHM7ICAvLyDku7vliqHlpZblirHnmoTnp6/liIYKLQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXNrSWQoKSB7Ci0gICAgICAgIHJldHVybiB0YXNrSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGFza0lkKFN0cmluZyB0YXNrSWQpIHsKLSAgICAgICAgdGhpcy50YXNrSWQgPSB0YXNrSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKLSAgICAgICAgcmV0dXJuIHRpdGxlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkgewotICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgaW50IGdldFJld2FyZEV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIHJldHVybiByZXdhcmRFeHBlcmllbmNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJld2FyZEV4cGVyaWVuY2UoaW50IHJld2FyZEV4cGVyaWVuY2UpIHsKLSAgICAgICAgdGhpcy5yZXdhcmRFeHBlcmllbmNlID0gcmV3YXJkRXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFJld2FyZFBvaW50cygpIHsKLSAgICAgICAgcmV0dXJuIHJld2FyZFBvaW50czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXdhcmRQb2ludHMoaW50IHJld2FyZFBvaW50cykgewotICAgICAgICB0aGlzLnJld2FyZFBvaW50cyA9IHJld2FyZFBvaW50czsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckR5bmFtaWMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRHluYW1pYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDRkM2FjLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRHluYW1pYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gInVzZXJfZHluYW1pYyIpCi1wdWJsaWMgY2xhc3MgVXNlckR5bmFtaWMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gImR5bmFtaWNfaWQiKQotICAgIHByaXZhdGUgTG9uZyBkeW5hbWljSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsgIC8vIOWPkeW4g+WKqOaAgeeahOeUqOaIt0lECi0KLSAgICBAQ29sdW1uKG5hbWUgPSAidGl0bGUiKQotICAgIHByaXZhdGUgU3RyaW5nIHRpdGxlOyAgLy8g5Yqo5oCB5qCH6aKYCi0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY29udGVudCIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29udGVudDsgIC8vIOWKqOaAgeWGheWuuQotCi0gICAgQENvbHVtbihuYW1lID0gImltYWdlX3VybCIpCi0gICAgcHJpdmF0ZSBTdHJpbmcgaW1hZ2VVcmw7ICAvLyDlm77niYdVUkwKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ0aW1lIikKLSAgICBwcml2YXRlIERhdGUgdGltZTsgIC8vIOWPkeW4g+WKqOaAgeeahOaXtumXtAotCi0gICAgQENvbHVtbihuYW1lID0gImxpa2VzX2NvdW50IikKLSAgICBwcml2YXRlIGludCBsaWtlc0NvdW50ID0gMDsgIC8vIOeCuei1nuaVsAotCi0gICAgQENvbHVtbihuYW1lID0gImNvbW1lbnRzX2NvdW50IikKLSAgICBwcml2YXRlIGludCBjb21tZW50c0NvdW50ID0gMDsgIC8vIOivhOiuuuaVsAotCi0KLSAgICBwdWJsaWMgTG9uZyBnZXREeW5hbWljSWQoKSB7Ci0gICAgICAgIHJldHVybiBkeW5hbWljSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RHluYW1pY0lkKExvbmcgZHluYW1pY0lkKSB7Ci0gICAgICAgIHRoaXMuZHluYW1pY0lkID0gZHluYW1pY0lkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKLSAgICAgICAgcmV0dXJuIHRpdGxlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkgewotICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50KCkgewotICAgICAgICByZXR1cm4gY29udGVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50KFN0cmluZyBjb250ZW50KSB7Ci0gICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbWFnZVVybCgpIHsKLSAgICAgICAgcmV0dXJuIGltYWdlVXJsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEltYWdlVXJsKFN0cmluZyBpbWFnZVVybCkgewotICAgICAgICB0aGlzLmltYWdlVXJsID0gaW1hZ2VVcmw7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0VGltZSgpIHsKLSAgICAgICAgcmV0dXJuIHRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGltZShEYXRlIHRpbWUpIHsKLSAgICAgICAgdGhpcy50aW1lID0gdGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldExpa2VzQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBsaWtlc0NvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExpa2VzQ291bnQoaW50IGxpa2VzQ291bnQpIHsKLSAgICAgICAgdGhpcy5saWtlc0NvdW50ID0gbGlrZXNDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldENvbW1lbnRzQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBjb21tZW50c0NvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnRzQ291bnQoaW50IGNvbW1lbnRzQ291bnQpIHsKLSAgICAgICAgdGhpcy5jb21tZW50c0NvdW50ID0gY29tbWVudHNDb3VudDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckZvbGxvdy5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJGb2xsb3cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjMTRmNy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckZvbGxvdy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5OwotCi1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotQEVudGl0eQotQFRhYmxlKG5hbWUgPSAiZm9sbG93IikKLXB1YmxpYyBjbGFzcyBVc2VyRm9sbG93IHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJyZWNvcmRfaWQiKQotICAgIHByaXZhdGUgTG9uZyByZWNvcmRJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJmb2xsb3dlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIGZvbGxvd2VySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZm9sbG93ZWRfaWQiKQotICAgIHByaXZhdGUgTG9uZyBmb2xsb3dlZElkOwotCi0gICAgQENvbHVtbihuYW1lID0gImZvbGxvd190aW1lIikKLSAgICBwcml2YXRlIERhdGUgZm9sbG93VGltZTsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRJZCgpIHsKLSAgICAgICAgcmV0dXJuIHJlY29yZElkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElkKExvbmcgcmVjb3JkSWQpIHsKLSAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHJlY29yZElkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldEZvbGxvd2VySWQoKSB7Ci0gICAgICAgIHJldHVybiBmb2xsb3dlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZvbGxvd2VySWQoTG9uZyBmb2xsb3dlcklkKSB7Ci0gICAgICAgIHRoaXMuZm9sbG93ZXJJZCA9IGZvbGxvd2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0Rm9sbG93ZWRJZCgpIHsKLSAgICAgICAgcmV0dXJuIGZvbGxvd2VkSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Rm9sbG93ZWRJZChMb25nIGZvbGxvd2VkSWQpIHsKLSAgICAgICAgdGhpcy5mb2xsb3dlZElkID0gZm9sbG93ZWRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXRGb2xsb3dUaW1lKCkgewotICAgICAgICByZXR1cm4gZm9sbG93VGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGb2xsb3dUaW1lKERhdGUgZm9sbG93VGltZSkgewotICAgICAgICB0aGlzLmZvbGxvd1RpbWUgPSBmb2xsb3dUaW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VySW52aXRlQ29kZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNDNjN2UuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJ1c2VyX2ludml0ZV9jb2RlIikKLXB1YmxpYyBjbGFzcyBVc2VySW52aXRlQ29kZSB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAiaW52aXRlX2lkIikKLSAgICBwcml2YXRlIExvbmcgaW52aXRlSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJpbnZpdGVfY29kZSIsIG51bGxhYmxlID0gZmFsc2UsIHVuaXF1ZSA9IHRydWUpCi0gICAgcHJpdmF0ZSBTdHJpbmcgaW52aXRlQ29kZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJpc191c2VkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIEJvb2xlYW4gaXNVc2VkID0gZmFsc2U7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY3JlYXRlZF9hdCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBMb2NhbERhdGVUaW1lIGNyZWF0ZWRBdDsKLQotICAgIC8vIEdldHRlcnMgYW5kIFNldHRlcnMKLSAgICBwdWJsaWMgTG9uZyBnZXRJbnZpdGVJZCgpIHsKLSAgICAgICAgcmV0dXJuIGludml0ZUlkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEludml0ZUlkKExvbmcgaW52aXRlSWQpIHsKLSAgICAgICAgdGhpcy5pbnZpdGVJZCA9IGludml0ZUlkOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbnZpdGVDb2RlKCkgewotICAgICAgICByZXR1cm4gaW52aXRlQ29kZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbnZpdGVDb2RlKFN0cmluZyBpbnZpdGVDb2RlKSB7Ci0gICAgICAgIHRoaXMuaW52aXRlQ29kZSA9IGludml0ZUNvZGU7Ci0gICAgfQotCi0gICAgcHVibGljIEJvb2xlYW4gZ2V0SXNVc2VkKCkgewotICAgICAgICByZXR1cm4gaXNVc2VkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElzVXNlZChCb29sZWFuIGlzVXNlZCkgewotICAgICAgICB0aGlzLmlzVXNlZCA9IGlzVXNlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9jYWxEYXRlVGltZSBnZXRDcmVhdGVkQXQoKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVkQXQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q3JlYXRlZEF0KExvY2FsRGF0ZVRpbWUgY3JlYXRlZEF0KSB7Ci0gICAgICAgIHRoaXMuY3JlYXRlZEF0ID0gY3JlYXRlZEF0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyTWVzc2FnZXMuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU3ZTQzZS4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlck1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJ1c2VyX21lc3NhZ2VzIikKLXB1YmxpYyBjbGFzcyBVc2VyTWVzc2FnZXMgewotCi0gICAgQElkCi0gICAgQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5ID0gR2VuZXJhdGlvblR5cGUuSURFTlRJVFkpCi0gICAgQENvbHVtbihuYW1lID0gIm1lc3NhZ2VfaWQiKQotICAgIHByaXZhdGUgTG9uZyBtZXNzYWdlSWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAic2VuZGVyX2lkIikKLSAgICBwcml2YXRlIExvbmcgc2VuZGVySWQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicmVjZWl2ZXJfaWQiKQotICAgIHByaXZhdGUgTG9uZyByZWNlaXZlcklkOwotCi0gICAgQENvbHVtbihuYW1lID0gImNvbnRlbnQiKQotICAgIHByaXZhdGUgU3RyaW5nIGNvbnRlbnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAidGltZSIpCi0gICAgcHJpdmF0ZSBEYXRlIHRpbWU7Ci0KLQotICAgIHB1YmxpYyBMb25nIGdldE1lc3NhZ2VJZCgpIHsKLSAgICAgICAgcmV0dXJuIG1lc3NhZ2VJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlSWQoTG9uZyBtZXNzYWdlSWQpIHsKLSAgICAgICAgdGhpcy5tZXNzYWdlSWQgPSBtZXNzYWdlSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0U2VuZGVySWQoKSB7Ci0gICAgICAgIHJldHVybiBzZW5kZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTZW5kZXJJZChMb25nIHNlbmRlcklkKSB7Ci0gICAgICAgIHRoaXMuc2VuZGVySWQgPSBzZW5kZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRSZWNlaXZlcklkKCkgewotICAgICAgICByZXR1cm4gcmVjZWl2ZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZWNlaXZlcklkKExvbmcgcmVjZWl2ZXJJZCkgewotICAgICAgICB0aGlzLnJlY2VpdmVySWQgPSByZWNlaXZlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udGVudChTdHJpbmcgY29udGVudCkgewotICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBEYXRlIGdldFRpbWUoKSB7Ci0gICAgICAgIHJldHVybiB0aW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRpbWUoRGF0ZSB0aW1lKSB7Ci0gICAgICAgIHRoaXMudGltZSA9IHRpbWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJUYXNrU3RhdHVzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY2ODM5ZC4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eTsKLQotaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLio7Ci0KLUBFbnRpdHkKLUBUYWJsZShuYW1lID0gInVzZXJfdGFza19zdGF0dXMiKQotcHVibGljIGNsYXNzIFVzZXJUYXNrU3RhdHVzIHsKLQotICAgIEBJZAotICAgIEBHZW5lcmF0ZWRWYWx1ZShzdHJhdGVneSA9IEdlbmVyYXRpb25UeXBlLklERU5USVRZKQotICAgIEBDb2x1bW4obmFtZSA9ICJzdGF0dXNfaWQiKQotICAgIHByaXZhdGUgTG9uZyBzdGF0dXNJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX2lkIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIExvbmcgdXNlcklkOwotCi0gICAgQENvbHVtbihuYW1lID0gInRhc2tfaWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgU3RyaW5nIHRhc2tJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjdXJyZW50X3Byb2dyZXNzIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIEZsb2F0IGN1cnJlbnRQcm9ncmVzczsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjdXJyZW50X2V4cGVyaWVuY2UiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgSW50ZWdlciBjdXJyZW50RXhwZXJpZW5jZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJjdXJyZW50X3BvaW50cyIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIGN1cnJlbnRQb2ludHM7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAic3RhdHVzIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIFN0cmluZyBzdGF0dXM7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiaXNfcmV3YXJkX2NsYWltZWQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgQm9vbGVhbiBpc1Jld2FyZENsYWltZWQgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBMb25nIGdldFN0YXR1c0lkKCkgewotICAgICAgICByZXR1cm4gc3RhdHVzSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U3RhdHVzSWQoTG9uZyBzdGF0dXNJZCkgewotICAgICAgICB0aGlzLnN0YXR1c0lkID0gc3RhdHVzSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIExvbmcgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gdXNlcklkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJJZChMb25nIHVzZXJJZCkgewotICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRhc2tJZCgpIHsKLSAgICAgICAgcmV0dXJuIHRhc2tJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUYXNrSWQoU3RyaW5nIHRhc2tJZCkgewotICAgICAgICB0aGlzLnRhc2tJZCA9IHRhc2tJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQgZ2V0Q3VycmVudFByb2dyZXNzKCkgewotICAgICAgICByZXR1cm4gY3VycmVudFByb2dyZXNzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRQcm9ncmVzcyhGbG9hdCBjdXJyZW50UHJvZ3Jlc3MpIHsKLSAgICAgICAgdGhpcy5jdXJyZW50UHJvZ3Jlc3MgPSBjdXJyZW50UHJvZ3Jlc3M7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50RXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RXhwZXJpZW5jZShJbnRlZ2VyIGN1cnJlbnRFeHBlcmllbmNlKSB7Ci0gICAgICAgIHRoaXMuY3VycmVudEV4cGVyaWVuY2UgPSBjdXJyZW50RXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50UG9pbnRzKCkgewotICAgICAgICByZXR1cm4gY3VycmVudFBvaW50czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50UG9pbnRzKEludGVnZXIgY3VycmVudFBvaW50cykgewotICAgICAgICB0aGlzLmN1cnJlbnRQb2ludHMgPSBjdXJyZW50UG9pbnRzOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCkgewotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFN0YXR1cyhTdHJpbmcgc3RhdHVzKSB7Ci0gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwotICAgIH0KLQotICAgIHB1YmxpYyBCb29sZWFuIGdldElzUmV3YXJkQ2xhaW1lZCgpIHsKLSAgICAgICAgcmV0dXJuIGlzUmV3YXJkQ2xhaW1lZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJc1Jld2FyZENsYWltZWQoQm9vbGVhbiBpc1Jld2FyZENsYWltZWQpIHsKLSAgICAgICAgdGhpcy5pc1Jld2FyZENsYWltZWQgPSBpc1Jld2FyZENsYWltZWQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJzLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJlNzkzZi4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHk7Ci0KLWltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS4qOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1ARW50aXR5Ci1AVGFibGUobmFtZSA9ICJ1c2VyIikKLXB1YmxpYyBjbGFzcyBVc2VycyB7Ci0KLSAgICBASWQKLSAgICBAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3kgPSBHZW5lcmF0aW9uVHlwZS5JREVOVElUWSkKLSAgICBAQ29sdW1uKG5hbWUgPSAidXNlcl9pZCIpCi0gICAgcHJpdmF0ZSBMb25nIHVzZXJJZDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VybmFtZSIsIG51bGxhYmxlID0gZmFsc2UsdW5pcXVlID0gdHJ1ZSkKLSAgICBwcml2YXRlIFN0cmluZyB1c2VybmFtZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJhdmF0YXJfdXJsIiwgbnVsbGFibGUgPSB0cnVlKQotICAgIHByaXZhdGUgU3RyaW5nIGF2YXRhclVybDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJlbWFpbCIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBTdHJpbmcgZW1haWw7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAicGFzc3dvcmQiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwotCi0gICAgQENvbHVtbihuYW1lID0gInJvbGUiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgU3RyaW5nIHJvbGU7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiaW52aXRlX2NvdW50IikKLSAgICBwcml2YXRlIEludGVnZXIgaW52aXRlQ291bnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAibGV2ZWwiLCBudWxsYWJsZSA9IGZhbHNlKQotICAgIHByaXZhdGUgTG9uZyBsZXZlbDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1cGxvYWRfY291bnQiKQotICAgIHByaXZhdGUgRmxvYXQgdXBsb2FkQ291bnQ7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiZG93bmxvYWRfY291bnQiKQotICAgIHByaXZhdGUgRmxvYXQgZG93bmxvYWRDb3VudDsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJzaGFyZV9yYXRlIikKLSAgICBwcml2YXRlIEZsb2F0IHNoYXJlUmF0ZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZWdpc3RyYXRpb25fZGF0ZSIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBEYXRlIHJlZ2lzdHJhdGlvbkRhdGU7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAibGFzdF9sb2dpbl90aW1lIikKLSAgICBwcml2YXRlIERhdGUgbGFzdExvZ2luVGltZTsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJ1c2VyX3BvaW50cyIpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIHVzZXJQb2ludHM7Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiaXNfcHJvbW8iKQotICAgIHByaXZhdGUgQm9vbGVhbiBpc1Byb21vOwotCi0gICAgQENvbHVtbihuYW1lID0gImN1cnJlbnRfZXhwZXJpZW5jZSIsIG51bGxhYmxlID0gZmFsc2UpCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIGN1cnJlbnRFeHBlcmllbmNlOyAgLy8g5b2T5YmN57uP6aqM5YC8Ci0KLSAgICBAQ29sdW1uKG5hbWUgPSAiY3VycmVudF9zZWVkaW5nX2hvdXJzIiwgbnVsbGFibGUgPSBmYWxzZSkKLSAgICBwcml2YXRlIEZsb2F0IGN1cnJlbnRTZWVkaW5nSG91cnM7ICAvLyDlvZPliY3lgZrnp43ml7bplb8KLQotCi0gICAgQENvbHVtbihuYW1lID0gImdlbmRlciIsIG51bGxhYmxlID0gdHJ1ZSkKLSAgICBwcml2YXRlIFN0cmluZyBnZW5kZXI7ICAvLyDmgKfliKsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJkZXNjcmlwdGlvbiIsIG51bGxhYmxlID0gdHJ1ZSkKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsgIC8vIOS4quS6uuaPj+i/sAotCi0gICAgQENvbHVtbihuYW1lID0gImhvYmJpZXMiLCBudWxsYWJsZSA9IHRydWUpCi0gICAgcHJpdmF0ZSBTdHJpbmcgaG9iYmllczsKLQotICAgIEBDb2x1bW4obmFtZSA9ICJyZWdpc3RyYXRpb25fdGltZSIsIG51bGxhYmxlID0gZmFsc2UsIHVwZGF0YWJsZSA9IGZhbHNlKQotICAgIEBUZW1wb3JhbChUZW1wb3JhbFR5cGUuVElNRVNUQU1QKQotICAgIHByaXZhdGUgRGF0ZSByZWdpc3RyYXRpb25UaW1lOwotCi0gICAgLy8gR2V0dGVycyBhbmQgU2V0dGVycwotICAgIHB1YmxpYyBMb25nIGdldFVzZXJJZCgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VySWQoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVc2VybmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIHVzZXJuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSkgewotICAgICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBdmF0YXJVcmwoKSB7Ci0gICAgICAgIHJldHVybiBhdmF0YXJVcmw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QXZhdGFyVXJsKFN0cmluZyBhdmF0YXJVcmwpIHsKLSAgICAgICAgdGhpcy5hdmF0YXJVcmwgPSBhdmF0YXJVcmw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsKLSAgICAgICAgcmV0dXJuIGVtYWlsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkgewotICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKLSAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd29yZCkgewotICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRSb2xlKCkgewotICAgICAgICByZXR1cm4gcm9sZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSb2xlKFN0cmluZyByb2xlKSB7Ci0gICAgICAgIHRoaXMucm9sZSA9IHJvbGU7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0SW52aXRlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBpbnZpdGVDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbnZpdGVDb3VudChJbnRlZ2VyIGludml0ZUNvdW50KSB7Ci0gICAgICAgIHRoaXMuaW52aXRlQ291bnQgPSBpbnZpdGVDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTG9uZyBnZXRMZXZlbCgpIHsKLSAgICAgICAgcmV0dXJuIGxldmVsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExldmVsKExvbmcgbGV2ZWwpIHsKLSAgICAgICAgdGhpcy5sZXZlbCA9IGxldmVsOwotICAgIH0KLQotICAgIHB1YmxpYyBGbG9hdCBnZXRVcGxvYWRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIHVwbG9hZENvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVwbG9hZENvdW50KEZsb2F0IHVwbG9hZENvdW50KSB7Ci0gICAgICAgIHRoaXMudXBsb2FkQ291bnQgPSB1cGxvYWRDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQgZ2V0RG93bmxvYWRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkQ291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RG93bmxvYWRDb3VudChGbG9hdCBkb3dubG9hZENvdW50KSB7Ci0gICAgICAgIHRoaXMuZG93bmxvYWRDb3VudCA9IGRvd25sb2FkQ291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIEZsb2F0IGdldFNoYXJlUmF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIHNoYXJlUmF0ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTaGFyZVJhdGUoRmxvYXQgc2hhcmVSYXRlKSB7Ci0gICAgICAgIHRoaXMuc2hhcmVSYXRlID0gc2hhcmVSYXRlOwotICAgIH0KLQotICAgIHB1YmxpYyBEYXRlIGdldFJlZ2lzdHJhdGlvbkRhdGUoKSB7Ci0gICAgICAgIHJldHVybiByZWdpc3RyYXRpb25EYXRlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlZ2lzdHJhdGlvbkRhdGUoRGF0ZSByZWdpc3RyYXRpb25EYXRlKSB7Ci0gICAgICAgIHRoaXMucmVnaXN0cmF0aW9uRGF0ZSA9IHJlZ2lzdHJhdGlvbkRhdGU7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0TGFzdExvZ2luVGltZSgpIHsKLSAgICAgICAgcmV0dXJuIGxhc3RMb2dpblRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdExvZ2luVGltZShEYXRlIGxhc3RMb2dpblRpbWUpIHsKLSAgICAgICAgdGhpcy5sYXN0TG9naW5UaW1lID0gbGFzdExvZ2luVGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRVc2VyUG9pbnRzKCkgewotICAgICAgICByZXR1cm4gdXNlclBvaW50czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VyUG9pbnRzKEludGVnZXIgdXNlclBvaW50cykgewotICAgICAgICB0aGlzLnVzZXJQb2ludHMgPSB1c2VyUG9pbnRzOwotICAgIH0KLQotICAgIHB1YmxpYyBCb29sZWFuIGdldElzUHJvbW8oKSB7Ci0gICAgICAgIHJldHVybiBpc1Byb21vOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElzUHJvbW8oQm9vbGVhbiBpc1Byb21vKSB7Ci0gICAgICAgIHRoaXMuaXNQcm9tbyA9IGlzUHJvbW87Ci0gICAgfQotCi0gICAgcHVibGljIEludGVnZXIgZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50RXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50RXhwZXJpZW5jZShJbnRlZ2VyIGN1cnJlbnRFeHBlcmllbmNlKSB7Ci0gICAgICAgIHRoaXMuY3VycmVudEV4cGVyaWVuY2UgPSBjdXJyZW50RXhwZXJpZW5jZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQgZ2V0Q3VycmVudFNlZWRpbmdIb3VycygpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWVkaW5nSG91cnM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q3VycmVudFNlZWRpbmdIb3VycyhGbG9hdCBjdXJyZW50U2VlZGluZ0hvdXJzKSB7Ci0gICAgICAgIHRoaXMuY3VycmVudFNlZWRpbmdIb3VycyA9IGN1cnJlbnRTZWVkaW5nSG91cnM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRHZW5kZXIoKSB7Ci0gICAgICAgIHJldHVybiBnZW5kZXI7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0R2VuZGVyKFN0cmluZyBnZW5kZXIpIHsKLSAgICAgICAgdGhpcy5nZW5kZXIgPSBnZW5kZXI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRIb2JiaWVzKCkgewotICAgICAgICByZXR1cm4gaG9iYmllczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRIb2JiaWVzKFN0cmluZyBob2JiaWVzKSB7Ci0gICAgICAgIHRoaXMuaG9iYmllcyA9IGhvYmJpZXM7Ci0gICAgfQotCi0gICAgcHVibGljIERhdGUgZ2V0UmVnaXN0cmF0aW9uVGltZSgpIHsKLSAgICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvblRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UmVnaXN0cmF0aW9uVGltZShEYXRlIHJlZ2lzdHJhdGlvblRpbWUpIHsKLSAgICAgICAgdGhpcy5yZWdpc3RyYXRpb25UaW1lID0gcmVnaXN0cmF0aW9uVGltZTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0NvbGxlY3Rpb25zUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjE5MmJkLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Db2xsZWN0aW9uczsKLWltcG9ydCBqYWthcnRhLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uYWw7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5Lk1vZGlmeWluZzsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuUXVlcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIENvbGxlY3Rpb25zUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8Q29sbGVjdGlvbnMsIExvbmc+IHsKLSAgICBATW9kaWZ5aW5nCi0gICAgQFRyYW5zYWN0aW9uYWwKLSAgICBAUXVlcnkoIkRFTEVURSBGUk9NIENvbGxlY3Rpb25zIGwgV0hFUkUgbC51c2VySWQgPSA6dXNlcklkIEFORCBsLnBvc3RObyA9IDpwb3N0Tm8iKQotICAgIHZvaWQgZGVsZXRlTGlrZUJ5VXNlcklkQW5kUG9zdE5vKExvbmcgdXNlcklkLCBMb25nIHBvc3RObyk7Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0NvbW1lbnRSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0NvbW1lbnRSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNjYzMDkuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db21tZW50UmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Db21tZW50czsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1lbnRSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxDb21tZW50cywgTG9uZz4gewotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU4NmIxZC4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuRHluYW1pY0NvbW1lbnQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGludGVyZmFjZSBEeW5hbWljQ29tbWVudFJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PER5bmFtaWNDb21tZW50LCBMb25nPiB7Ci0KLSAgICBMaXN0PER5bmFtaWNDb21tZW50PiBmaW5kQnlEeW5hbWljSWQoTG9uZyBkeW5hbWljSWQpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNMaWtlc1JlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNlYzAwMy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNMaWtlc1JlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkR5bmFtaWNMaWtlczsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIER5bmFtaWNMaWtlc1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PER5bmFtaWNMaWtlcywgTG9uZz4gewotCi0gICAgTGlzdDxEeW5hbWljTGlrZXM+IGZpbmRCeUR5bmFtaWNJZChMb25nIGR5bmFtaWNJZCk7Ci0gICAgRHluYW1pY0xpa2VzIGZpbmRCeVVzZXJJZEFuZER5bmFtaWNJZChMb25nIHVzZXJJZCwgTG9uZyBkeW5hbWljSWQpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9FeHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OTI4ZTUuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9FeHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuRXhwZXJpZW5jZUhpc3Rvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxFeHBlcmllbmNlSGlzdG9yeSwgTG9uZz4gewotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0ZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9GcmllbmRSZWxhdGlvblJlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZjZjk0ZS4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0ZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuRnJpZW5kUmVsYXRpb247Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGludGVyZmFjZSBGcmllbmRSZWxhdGlvblJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PEZyaWVuZFJlbGF0aW9uLCBMb25nPiB7Ci0gICAgLy8g5p+l5om+5b2T5YmN55So5oi355qE5omA5pyJ5aW95Y+LSUQKLSAgICBMaXN0PEZyaWVuZFJlbGF0aW9uPiBmaW5kQnlVc2VySWQoTG9uZyB1c2VySWQpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cENvbW1lbnRzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cENvbW1lbnRzUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2RmMTk4Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBDb21tZW50c1JlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwQ29tbWVudHM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIEdyb3VwQ29tbWVudHNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxHcm91cENvbW1lbnRzLCBMb25nPiB7Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cE1lbWJlcnNSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMzE0NjIuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cE1lbWJlcnNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cE1lbWJlcnM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotQFJlcG9zaXRvcnkKLXB1YmxpYyBpbnRlcmZhY2UgR3JvdXBNZW1iZXJzUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8R3JvdXBNZW1iZXJzLCBMb25nPiB7Ci0KLSAgICAvLyDmo4Dmn6XnlKjmiLfmmK/lkKblt7Lnu4/mmK/or6XlsI/nu4TnmoTmiJDlkZgKLSAgICBib29sZWFuIGV4aXN0c0J5R3JvdXBJZEFuZFVzZXJJZChMb25nIGdyb3VwSWQsIExvbmcgdXNlcklkKTsKLQotICAgIC8vIOWIoOmZpOeUqOaIt+WSjOWwj+e7hOeahOWFs+iBlOiusOW9lQotICAgIHZvaWQgZGVsZXRlQnlHcm91cElkQW5kVXNlcklkKExvbmcgZ3JvdXBJZCwgTG9uZyB1c2VySWQpOwotCi0gICAgLy8g6YCa6L+HIGdyb3VwSWQg6I635Y+W5omA5pyJ5oiQ5ZGY55qEIHVzZXJJZAotICAgIExpc3Q8R3JvdXBNZW1iZXJzPiBmaW5kQnlHcm91cElkKExvbmcgZ3JvdXBJZCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBQb3N0UmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjVhMzQ4Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBQb3N0UmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuR3JvdXBQb3N0OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5SZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIEdyb3VwUG9zdFJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PEdyb3VwUG9zdCwgTG9uZz4gewotCi0gICAgTGlzdDxHcm91cFBvc3Q+IGZpbmRCeUdyb3VwSWQoTG9uZyBncm91cElkKTsKLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyODBlNTAuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFJlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkdyb3VwOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5kb21haW4uUGFnZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuZG9tYWluLlBhZ2VhYmxlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5RdWVyeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEucmVwb3NpdG9yeS5xdWVyeS5QYXJhbTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKLQotQFJlcG9zaXRvcnkKLXB1YmxpYyBpbnRlcmZhY2UgR3JvdXBSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxHcm91cCwgTG9uZz4gewotCi0gICAgLy8g5qih57OK5pCc57Si5bCP57uE5ZCN56ew5bm25oyJ57G75Yir562b6YCJCi0gICAgQFF1ZXJ5KCJTRUxFQ1QgZyBGUk9NIEdyb3VwIGcgV0hFUkUgZy5ncm91cE5hbWUgTElLRSAlOm5hbWUlIEFORCAoOmNhdGVnb3J5IElTIE5VTEwgT1IgZy5jYXRlZ29yeSA9IDpjYXRlZ29yeSkiKQotICAgIFBhZ2U8R3JvdXA+IHNlYXJjaEdyb3VwcyhAUGFyYW0oIm5hbWUiKSBTdHJpbmcgbmFtZSwgQFBhcmFtKCJjYXRlZ29yeSIpIFN0cmluZyBjYXRlZ29yeSwgUGFnZWFibGUgcGFnZWFibGUpOwotCi0gICAgLy8g5qC55o2u57G75Yir562b6YCJ5bCP57uECi0gICAgQFF1ZXJ5KCJTRUxFQ1QgZyBGUk9NIEdyb3VwIGcgV0hFUkUgKDpjYXRlZ29yeSBJUyBOVUxMIE9SIGcuY2F0ZWdvcnkgPSA6Y2F0ZWdvcnkpIikKLSAgICBQYWdlPEdyb3VwPiBzZWFyY2hXaXRoRmlsdGVycyhAUGFyYW0oImNhdGVnb3J5IikgU3RyaW5nIGNhdGVnb3J5LCBQYWdlYWJsZSBwYWdlYWJsZSk7Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xldmVsUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MZXZlbFJlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJlODI2OS4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xldmVsUmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuTGV2ZWw7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7Ci0KLUBSZXBvc2l0b3J5Ci1wdWJsaWMgaW50ZXJmYWNlIExldmVsUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8TGV2ZWwsIExvbmc+IHsKLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MaWtlc1JlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGlrZXNSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MTQ2YzUuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MaWtlc1JlcG9zaXRvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnk7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5Lkxpa2VzOwotaW1wb3J0IGpha2FydGEudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25hbDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuTW9kaWZ5aW5nOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5RdWVyeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKLQotQFJlcG9zaXRvcnkKLXB1YmxpYyBpbnRlcmZhY2UgTGlrZXNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxMaWtlcywgTG9uZz4gewotICAgIEBNb2RpZnlpbmcKLSAgICBAVHJhbnNhY3Rpb25hbAotICAgIEBRdWVyeSgiREVMRVRFIEZST00gTGlrZXMgbCBXSEVSRSBsLnVzZXJJZCA9IDp1c2VySWQgQU5EIGwucG9zdE5vID0gOnBvc3RObyIpCi0gICAgdm9pZCBkZWxldGVMaWtlQnlVc2VySWRBbmRQb3N0Tm8oTG9uZyB1c2VySWQsIExvbmcgcG9zdE5vKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvUG9zdFJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvUG9zdFJlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmMmNiNy4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Qb3N0OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotCi1wdWJsaWMgaW50ZXJmYWNlIFBvc3RSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxQb3N0LCBMb25nPiB7Ci0gICAgLy8g5qC55o2uIHBvc3RObyDmn6Xmib7luJblrZAKLSAgICBPcHRpb25hbDxQb3N0PiBmaW5kQnlQb3N0Tm8oTG9uZyBwb3N0Tm8pOwotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Rhc2tSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Rhc2tSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZTFiNjYuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9UYXNrUmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5UYXNrOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5qcGEucmVwb3NpdG9yeS5KcGFSZXBvc2l0b3J5OwotCi1wdWJsaWMgaW50ZXJmYWNlIFRhc2tSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxUYXNrLCBTdHJpbmc+IHsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJEeW5hbWljUmVwb3NpdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzVhZTFmLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckR5bmFtaWNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyRHluYW1pYzsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1AUmVwb3NpdG9yeQotcHVibGljIGludGVyZmFjZSBVc2VyRHluYW1pY1JlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFVzZXJEeW5hbWljLCBMb25nPiB7Ci0KLSAgICBMaXN0PFVzZXJEeW5hbWljPiBmaW5kQnlVc2VySWQoTG9uZyB1c2VySWQpOwotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJGb2xsb3dSZXBvc2l0b3J5LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJGb2xsb3dSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MmQwN2YuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRm9sbG93UmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckZvbGxvdzsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuUmVwb3NpdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1AUmVwb3NpdG9yeQotcHVibGljIGludGVyZmFjZSBVc2VyRm9sbG93UmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8VXNlckZvbGxvdywgTG9uZz4gewotCi0gICAgLy8g5p+l6K+i5piv5ZCm5a2Y5Zyo5p+Q5Liq55So5oi355qE5YWz5rOo6K6w5b2VCi0gICAgVXNlckZvbGxvdyBmaW5kQnlGb2xsb3dlcklkQW5kRm9sbG93ZWRJZChMb25nIGZvbGxvd2VySWQsIExvbmcgZm9sbG93ZWRJZCk7Ci0gICAgTGlzdDxVc2VyRm9sbG93PiBmaW5kQnlGb2xsb3dlZElkKExvbmcgZm9sbG93ZWRJZCk7Ci0gICAgTGlzdDxVc2VyRm9sbG93PiBmaW5kQnlGb2xsb3dlcklkKExvbmcgZm9sbG93ZXJJZCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VySW52aXRlQ29kZVJlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJmYTM5MC4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckludml0ZUNvZGU7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVXNlckludml0ZUNvZGVSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxVc2VySW52aXRlQ29kZSwgTG9uZz4gewotCi0gICAgLy8g5p+l5om+5p+Q5Liq55So5oi355qE5omA5pyJ6YKA6K+356CBCi0gICAgTGlzdDxVc2VySW52aXRlQ29kZT4gZmluZEJ5VXNlcklkKExvbmcgdXNlcklkKTsKLQotICAgIC8vIOafpeaJvuafkOS4qumCgOivt+eggeaYr+WQpuW3sue7j+iiq+S9v+eUqAotICAgIE9wdGlvbmFsPFVzZXJJbnZpdGVDb2RlPiBmaW5kQnlJbnZpdGVDb2RlKFN0cmluZyBpbnZpdGVDb2RlKTsKLQotICAgIC8vIOafpeaJvuafkOS4queUqOaIt+acquS9v+eUqOeahOmCgOivt+eggQotICAgIExpc3Q8VXNlckludml0ZUNvZGU+IGZpbmRCeVVzZXJJZEFuZElzVXNlZEZhbHNlKExvbmcgdXNlcklkKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlck1lc3NhZ2VzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyTWVzc2FnZXNSZXBvc2l0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZDM3MTUuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyTWVzc2FnZXNSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotQFJlcG9zaXRvcnkKLXB1YmxpYyBpbnRlcmZhY2UgVXNlck1lc3NhZ2VzUmVwb3NpdG9yeSBleHRlbmRzIEpwYVJlcG9zaXRvcnk8VXNlck1lc3NhZ2VzLCBMb25nPiB7Ci0KLSAgICAvLyDmn6Xor6LlvZPliY3nlKjmiLfnmoTmiYDmnInmtojmga8KLSAgICBMaXN0PFVzZXJNZXNzYWdlcz4gZmluZEJ5U2VuZGVySWRPclJlY2VpdmVySWQoTG9uZyBzZW5kZXJJZCwgTG9uZyByZWNlaXZlcklkKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclJlcG9zaXRvcnkuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclJlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkyN2M1Zi4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5OwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuanBhLnJlcG9zaXRvcnkuSnBhUmVwb3NpdG9yeTsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVXNlclJlcG9zaXRvcnkgZXh0ZW5kcyBKcGFSZXBvc2l0b3J5PFVzZXJzLCBMb25nPiB7Ci0gICAgT3B0aW9uYWw8VXNlcnM+IGZpbmRCeUVtYWlsKFN0cmluZyBlbWFpbCk7Ci0gICAgT3B0aW9uYWw8VXNlcnM+IGZpbmRCeVVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSk7Ci19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE1Mzk0Ni4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlclRhc2tTdGF0dXM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmpwYS5yZXBvc2l0b3J5LkpwYVJlcG9zaXRvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5IGV4dGVuZHMgSnBhUmVwb3NpdG9yeTxVc2VyVGFza1N0YXR1cywgTG9uZz4gewotICAgIE9wdGlvbmFsPFVzZXJUYXNrU3RhdHVzPiBmaW5kQnlVc2VySWRBbmRUYXNrSWQoTG9uZyB1c2VySWQsIFN0cmluZyB0YXNrSWQpOwotICAgIExpc3Q8VXNlclRhc2tTdGF0dXM+IGZpbmRCeVVzZXJJZEFuZFN0YXR1cyhMb25nIHVzZXJJZCwgU3RyaW5nIHN0YXR1cyk7Ci0gICAgT3B0aW9uYWw8VXNlclRhc2tTdGF0dXM+IGZpbmRGaXJzdEJ5VXNlcklkQW5kU3RhdHVzKExvbmcgdXNlcklkLCBTdHJpbmcgc3RhdHVzKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEwMmNhMi4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0NvbW1lbnRTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuQ29tbWVudHM7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Qb3N0OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcnM7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuQ29tbWVudFJlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuUG9zdFJlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKLQotQFNlcnZpY2UKLXB1YmxpYyBjbGFzcyBDb21tZW50U2VydmljZSB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBDb21tZW50UmVwb3NpdG9yeSBjb21tZW50UmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFBvc3RSZXBvc2l0b3J5IHBvc3RSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlclJlcG9zaXRvcnkgdXNlclJlcG9zaXRvcnk7Ci0KLSAgICAvLyDmt7vliqDor4TorroKLSAgICBwdWJsaWMgdm9pZCBhZGRDb21tZW50KExvbmcgcG9zdElkLCBDb21tZW50cyBjb21tZW50KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyDmn6Xmib7luJblrZAKLSAgICAgICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQb3N0IHdpdGggSUQgIiArIHBvc3RJZCArICIgbm90IGZvdW5kIik7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgLy8g5p+l5om+55So5oi3Ci0gICAgICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQoY29tbWVudC5nZXRVc2VySWQoKSkub3JFbHNlVGhyb3coKCkgLT4gewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVc2VyIHdpdGggSUQgIiArIGNvbW1lbnQuZ2V0VXNlcklkKCkgKyAiIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIC8vIOiuvue9ruivhOiuuueahOebuOWFs+WxnuaApwotICAgICAgICAgICAgY29tbWVudC5zZXRQb3N0KHBvc3QpOwotICAgICAgICAgICAgY29tbWVudC5zZXRVc2VySWQodXNlci5nZXRVc2VySWQoKSk7Ci0gICAgICAgICAgICBjb21tZW50LnNldENvbW1lbnRUaW1lKG5ldyBqYXZhLnV0aWwuRGF0ZSgpKTsKLQotICAgICAgICAgICAgaWYgKGNvbW1lbnQuZ2V0UGFyZW50Q29tbWVudCgpICE9IG51bGwgJiYgY29tbWVudC5nZXRQYXJlbnRDb21tZW50KCkgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIOafpeaJvueItuivhOiuugotICAgICAgICAgICAgICAgIENvbW1lbnRzIHBhcmVudENvbW1lbnQgPSBjb21tZW50UmVwb3NpdG9yeS5maW5kQnlJZChjb21tZW50LmdldFBhcmVudENvbW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiUGFyZW50IGNvbW1lbnQgd2l0aCBJRCAiICsgY29tbWVudC5nZXRQYXJlbnRDb21tZW50KCkgKyAiIG5vdCBmb3VuZCIpKTsKLSAgICAgICAgICAgICAgICBjb21tZW50LnNldFBhcmVudENvbW1lbnQocGFyZW50Q29tbWVudC5nZXRDb21tZW50SWQoKSk7ICAvLyDorr7nva7niLbor4TorrogSUQKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29tbWVudC5zZXRQYXJlbnRDb21tZW50KDBMKTsgIC8vIOiuvue9ruS4uiAw77yM6KGo56S65rKh5pyJ54i26K+E6K66Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIOS/neWtmOivhOiuugotICAgICAgICAgICAgY29tbWVudFJlcG9zaXRvcnkuc2F2ZShjb21tZW50KTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIOaNleiOt+S7u+S9leW8guW4uOW5tuaJk+WNsOWghuagiOS/oeaBrwotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhZGRpbmcgdGhlIGNvbW1lbnQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyDojrflj5bmjIflrprluJblrZDnmoTmiYDmnInor4TorroKLSAgICBwdWJsaWMgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRDb21tZW50c0J5UG9zdElkKExvbmcgcG9zdElkKSB7Ci0gICAgICAgIExpc3Q8Q29tbWVudHM+IGNvbW1lbnRzID0gY29tbWVudFJlcG9zaXRvcnkuZmluZEFsbCgpCi0gICAgICAgICAgICAgICAgLnN0cmVhbSgpCi0gICAgICAgICAgICAgICAgLmZpbHRlcihjb21tZW50IC0+IGNvbW1lbnQuZ2V0UG9zdCgpLmdldFBvc3RObygpLmVxdWFscyhwb3N0SWQpKSAgLy8g6YCa6L+HIHBvc3Qg55qEIHBvc3RObyDov4fmu6Tor4TorroKLSAgICAgICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKLQotICAgICAgICBpZiAoY29tbWVudHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmb3IgKENvbW1lbnRzIGNvbW1lbnQgOiBjb21tZW50cykgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBjb21tZW50RGF0YSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgiY29tbWVudElkIiwgY29tbWVudC5nZXRDb21tZW50SWQoKSk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInBvc3RfaWQiLCBjb21tZW50LmdldFBvc3QoKS5nZXRQb3N0Tm8oKSk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInVzZXJJZCIsIGNvbW1lbnQuZ2V0VXNlcklkKCkpOwotCi0gICAgICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQoY29tbWVudC5nZXRVc2VySWQoKSkub3JFbHNlKG51bGwpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJuaWNrbmFtZSIsIHVzZXIgIT0gbnVsbCA/IHVzZXIuZ2V0VXNlcm5hbWUoKSA6IG51bGwpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJhdmF0YXJfdXJsIiwgdXNlciAhPSBudWxsID8gdXNlci5nZXRBdmF0YXJVcmwoKSA6IG51bGwpOwotCi0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbnRlbnQiLCBjb21tZW50LmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImlzQW5vbnltb3VzIiwgY29tbWVudC5nZXRJc0Fub255bW91cygpKTsKLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgibGlrZXNDb3VudCIsIGNvbW1lbnQuZ2V0TGlrZXNDb3VudCgpKTsKLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgicmVwbHlDb3VudCIsIGNvbW1lbnQuZ2V0UmVwbHlDb3VudCgpKTsKLSAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgiY29tbWVudFRpbWUiLCBjb21tZW50LmdldENvbW1lbnRUaW1lKCkpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJwYXJlbnRDb21tZW50IiwgY29tbWVudC5nZXRQYXJlbnRDb21tZW50KCkpOwotCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmVudENvbW1lbnREYXRhID0gZ2V0UGFyZW50Q29tbWVudERhdGEoY29tbWVudC5nZXRQYXJlbnRDb21tZW50KCkpOwotICAgICAgICAgICAgY29tbWVudERhdGEucHV0KCJwYXJlbnRDb21tZW50RGF0YSIsIHBhcmVudENvbW1lbnREYXRhKTsKLQotICAgICAgICAgICAgcmVzdWx0LmFkZChjb21tZW50RGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIOmAkuW9kuafpeaJvueItuivhOiuuueahOWGheWuuQotICAgIHByaXZhdGUgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQYXJlbnRDb21tZW50RGF0YShMb25nIHBhcmVudENvbW1lbnRJZCkgewotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmVudENvbW1lbnREYXRhID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICBpZiAocGFyZW50Q29tbWVudElkICE9IG51bGwgJiYgcGFyZW50Q29tbWVudElkICE9IDApIHsKLSAgICAgICAgICAgIC8vIOafpeaJvueItuivhOiuugotICAgICAgICAgICAgQ29tbWVudHMgcGFyZW50Q29tbWVudCA9IGNvbW1lbnRSZXBvc2l0b3J5LmZpbmRCeUlkKHBhcmVudENvbW1lbnRJZCkub3JFbHNlKG51bGwpOwotICAgICAgICAgICAgaWYgKHBhcmVudENvbW1lbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHBhcmVudENvbW1lbnREYXRhLnB1dCgiY29tbWVudElkIiwgcGFyZW50Q29tbWVudC5nZXRDb21tZW50SWQoKSk7Ci0gICAgICAgICAgICAgICAgcGFyZW50Q29tbWVudERhdGEucHV0KCJjb250ZW50IiwgcGFyZW50Q29tbWVudC5nZXRDb250ZW50KCkpOwotICAgICAgICAgICAgICAgIHBhcmVudENvbW1lbnREYXRhLnB1dCgidXNlcklkIiwgcGFyZW50Q29tbWVudC5nZXRVc2VySWQoKSk7Ci0KLSAgICAgICAgICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQocGFyZW50Q29tbWVudC5nZXRVc2VySWQoKSkub3JFbHNlKG51bGwpOwotICAgICAgICAgICAgICAgIHBhcmVudENvbW1lbnREYXRhLnB1dCgibmlja25hbWUiLCB1c2VyICE9IG51bGwgPyB1c2VyLmdldFVzZXJuYW1lKCkgOiBudWxsKTsKLSAgICAgICAgICAgICAgICBwYXJlbnRDb21tZW50RGF0YS5wdXQoImF2YXRhcl91cmwiLCB1c2VyICE9IG51bGwgPyB1c2VyLmdldEF2YXRhclVybCgpIDogbnVsbCk7Ci0KLSAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGdyYW5kUGFyZW50RGF0YSA9IGdldFBhcmVudENvbW1lbnREYXRhKHBhcmVudENvbW1lbnQuZ2V0UGFyZW50Q29tbWVudCgpKTsKLSAgICAgICAgICAgICAgICBwYXJlbnRDb21tZW50RGF0YS5wdXQoInBhcmVudENvbW1lbnREYXRhIiwgZ3JhbmRQYXJlbnREYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyZW50Q29tbWVudERhdGE7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9EeW5hbWljU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9EeW5hbWljU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTM2MDRkLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvRHluYW1pY1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS4qOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5Lio7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLm11bHRpcGFydC5NdWx0aXBhcnRGaWxlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOwotaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi1AU2VydmljZQotcHVibGljIGNsYXNzIER5bmFtaWNTZXJ2aWNlIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJEeW5hbWljUmVwb3NpdG9yeSB1c2VyRHluYW1pY1JlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIER5bmFtaWNDb21tZW50UmVwb3NpdG9yeSBkeW5hbWljQ29tbWVudFJlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBEeW5hbWljTGlrZXNSZXBvc2l0b3J5IGR5bmFtaWNMaWtlc1JlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBGcmllbmRSZWxhdGlvblJlcG9zaXRvcnkgZnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX0RJUiA9ICJ1cGxvYWRzL3Bvc3QvIjsKLQotICAgIC8vIOWIm+W7uuWlveWPi+WKqOaAgQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNyZWF0ZUR5bmFtaWMoTG9uZyB1c2VySWQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGNvbnRlbnQsIE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7Ci0gICAgICAgIC8vIOafpeaJvueUqOaIt+S/oeaBrwotICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKQotICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiVXNlciBub3QgZm91bmQiKSk7Ci0KLSAgICAgICAgLy8g5Yib5bu65paw55qE5Yqo5oCBCi0gICAgICAgIFVzZXJEeW5hbWljIHVzZXJEeW5hbWljID0gbmV3IFVzZXJEeW5hbWljKCk7Ci0gICAgICAgIHVzZXJEeW5hbWljLnNldFVzZXJJZCh1c2VySWQpOwotICAgICAgICB1c2VyRHluYW1pYy5zZXRUaXRsZSh0aXRsZSAhPSBudWxsID8gdGl0bGUgOiAi6buY6K6k5qCH6aKYIik7Ci0gICAgICAgIHVzZXJEeW5hbWljLnNldENvbnRlbnQoY29udGVudCk7Ci0gICAgICAgIHVzZXJEeW5hbWljLnNldFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIHVzZXJEeW5hbWljLnNldExpa2VzQ291bnQoMCk7Ci0gICAgICAgIHVzZXJEeW5hbWljLnNldENvbW1lbnRzQ291bnQoMCk7Ci0KLSAgICAgICAgLy8g5aSE55CG5Zu+54mH5LiK5LygCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgaW1hZ2VVcmxzQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgIGlmIChpbWFnZUZpbGVzICE9IG51bGwgJiYgaW1hZ2VGaWxlcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGltYWdlRmlsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VVcmxzQnVpbGRlci5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGltYWdlVXJsID0gc2F2ZUltYWdlKGltYWdlRmlsZXNbaV0pOwotICAgICAgICAgICAgICAgICAgICBpbWFnZVVybHNCdWlsZGVyLmFwcGVuZChpbWFnZVVybCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW1hZ2UgdXBsb2FkIGZhaWxlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDlsIblpJrkuKrlm77niYcgVVJMIOaLvOaOpQotICAgICAgICB1c2VyRHluYW1pYy5zZXRJbWFnZVVybChpbWFnZVVybHNCdWlsZGVyLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIC8vIOS/neWtmOaVsOaNruW6kwotICAgICAgICBVc2VyRHluYW1pYyBzYXZlZFVzZXJEeW5hbWljID0gdXNlckR5bmFtaWNSZXBvc2l0b3J5LnNhdmUodXNlckR5bmFtaWMpOwotCi0gICAgICAgIC8vIOi/lOWbnue7k+aenAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoImR5bmFtaWNJZCIsIHNhdmVkVXNlckR5bmFtaWMuZ2V0RHluYW1pY0lkKCkpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Yqo5oCB5Yib5bu65oiQ5YqfIik7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICAvLyDkv53lrZjlm77niYflubbov5Tlm57lm77niYfnmoQgVVJMCi0gICAgcHVibGljIFN0cmluZyBzYXZlSW1hZ2UoTXVsdGlwYXJ0RmlsZSBpbWFnZUZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGltYWdlRmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCk7Ci0gICAgICAgIFBhdGggcGF0aCA9IFBhdGhzLmdldChJTUFHRV9ESVIgKyBmaWxlTmFtZSk7Ci0gICAgICAgIEZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKHBhdGguZ2V0UGFyZW50KCkpOwotICAgICAgICBGaWxlcy53cml0ZShwYXRoLCBpbWFnZUZpbGUuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIHJldHVybiAiL2ltYWdlcy8iICsgZmlsZU5hbWU7Ci0gICAgfQotCi0gICAgLy8g5Yig6Zmk5Yqo5oCBCi0gICAgcHVibGljIHZvaWQgZGVsZXRlRHluYW1pYyhMb25nIGR5bmFtaWNJZCkgewotICAgICAgICBpZiAodXNlckR5bmFtaWNSZXBvc2l0b3J5LmV4aXN0c0J5SWQoZHluYW1pY0lkKSkgewotICAgICAgICAgICAgdXNlckR5bmFtaWNSZXBvc2l0b3J5LmRlbGV0ZUJ5SWQoZHluYW1pY0lkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJEeW5hbWljIHdpdGggaWQgIiArIGR5bmFtaWNJZCArICIgbm90IGZvdW5kIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL+WlveWPi+WKqOaAgeivhOiuugotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGFkZENvbW1lbnQoTG9uZyB1c2VySWQsIExvbmcgZHluYW1pY0lkLCBTdHJpbmcgY29tbWVudENvbnRlbnQpIHsKLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkKLSAgICAgICAgICAgICAgICAub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgbm90IGZvdW5kIikpOwotCi0gICAgICAgIFVzZXJEeW5hbWljIGR5bmFtaWMgPSB1c2VyRHluYW1pY1JlcG9zaXRvcnkuZmluZEJ5SWQoZHluYW1pY0lkKQotICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiRHluYW1pYyBub3QgZm91bmQiKSk7Ci0KLSAgICAgICAgRHluYW1pY0NvbW1lbnQgY29tbWVudCA9IG5ldyBEeW5hbWljQ29tbWVudCgpOwotICAgICAgICBjb21tZW50LnNldER5bmFtaWNJZChkeW5hbWljSWQpOwotICAgICAgICBjb21tZW50LnNldFVzZXJJZCh1c2VySWQpOwotICAgICAgICBjb21tZW50LnNldENvbW1lbnRDb250ZW50KGNvbW1lbnRDb250ZW50KTsKLSAgICAgICAgY29tbWVudC5zZXRDb21tZW50VGltZShuZXcgRGF0ZSgpKTsKLQotICAgICAgICAvLyDkv53lrZjor4TorroKLSAgICAgICAgRHluYW1pY0NvbW1lbnQgc2F2ZWRDb21tZW50ID0gZHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LnNhdmUoY29tbWVudCk7Ci0KLSAgICAgICAgLy8g6L+U5Zue5oiQ5Yqf5raI5oGvCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgiY29tbWVudF9pZCIsIHNhdmVkQ29tbWVudC5nZXRDb21tZW50SWQoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLor4TorrrmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIC8v6L+U5Zue5p+Q5Liq5aW95Y+L55qE5omA5pyJ5Yqo5oCBCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsVXNlckR5bmFtaWNzKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOafpeaJvueUqOaIt+eahOaJgOacieWKqOaAgQotICAgICAgICBMaXN0PFVzZXJEeW5hbWljPiB1c2VyRHluYW1pY3MgPSB1c2VyRHluYW1pY1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcG9zdERhdGEgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gZHluYW1pY0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICAvLyDpgY3ljobliqjmgIHvvIzojrflj5bngrnotZ7lkozor4TorroKLSAgICAgICAgZm9yIChVc2VyRHluYW1pYyBkeW5hbWljIDogdXNlckR5bmFtaWNzKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGR5bmFtaWNEYXRhID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJkeW5hbWljX2lkIiwgZHluYW1pYy5nZXREeW5hbWljSWQoKSk7Ci0gICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoInVzZXJfaWQiLCBkeW5hbWljLmdldFVzZXJJZCgpKTsKLQotICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGR5bmFtaWMuZ2V0VXNlcklkKCkpLm9yRWxzZShudWxsKTsKLSAgICAgICAgICAgIGlmICh1c2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoInVzZXJuYW1lIiwgdXNlci5nZXRVc2VybmFtZSgpKTsKLSAgICAgICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImF2YXRhcl91cmwiLCB1c2VyLmdldEF2YXRhclVybCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJ1c2VybmFtZSIsICJVbmtub3duIik7Ci0gICAgICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJhdmF0YXJfdXJsIiwgImh0dHA6Ly9leGFtcGxlLmNvbS9kZWZhdWx0LWF2YXRhci5qcGciKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZHluYW1pY0RhdGEucHV0KCJ0aXRsZSIsIGR5bmFtaWMuZ2V0VGl0bGUoKSk7Ci0gICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImNvbnRlbnQiLCBkeW5hbWljLmdldENvbnRlbnQoKSk7Ci0gICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImltYWdlcyIsIGR5bmFtaWMuZ2V0SW1hZ2VVcmwoKSk7Ci0gICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoInRpbWUiLCBkeW5hbWljLmdldFRpbWUoKSk7Ci0KLSAgICAgICAgICAgIC8vIOiOt+WPlueCuei1ngotICAgICAgICAgICAgTGlzdDxEeW5hbWljTGlrZXM+IGxpa2VzID0gZHluYW1pY0xpa2VzUmVwb3NpdG9yeS5maW5kQnlEeW5hbWljSWQoZHluYW1pYy5nZXREeW5hbWljSWQoKSk7Ci0gICAgICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxpa2VMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgICAgICBmb3IgKER5bmFtaWNMaWtlcyBsaWtlIDogbGlrZXMpIHsKLSAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGxpa2VEYXRhID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgIGxpa2VEYXRhLnB1dCgidXNlcl9pZCIsIGxpa2UuZ2V0VXNlcklkKCkpOwotCi0gICAgICAgICAgICAgICAgLy8g6I635Y+W54K56LWe55So5oi355qE55So5oi35ZCNCi0gICAgICAgICAgICAgICAgVXNlcnMgbGlrZVVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChsaWtlLmdldFVzZXJJZCgpKS5vckVsc2UobnVsbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxpa2VVc2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbGlrZURhdGEucHV0KCJ1c2VybmFtZSIsIGxpa2VVc2VyLmdldFVzZXJuYW1lKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpa2VEYXRhLnB1dCgidXNlcm5hbWUiLCAiVW5rbm93biIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGxpa2VMaXN0LmFkZChsaWtlRGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkeW5hbWljRGF0YS5wdXQoImxpa2VzIiwgbGlrZUxpc3QpOwotCi0gICAgICAgICAgICAvLyDojrflj5bor4TorroKLSAgICAgICAgICAgIExpc3Q8RHluYW1pY0NvbW1lbnQ+IGNvbW1lbnRzID0gZHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LmZpbmRCeUR5bmFtaWNJZChkeW5hbWljLmdldER5bmFtaWNJZCgpKTsKLSAgICAgICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gY29tbWVudExpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgICAgIGZvciAoRHluYW1pY0NvbW1lbnQgY29tbWVudCA6IGNvbW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBjb21tZW50RGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbW1lbnRfaWQiLCBjb21tZW50LmdldENvbW1lbnRJZCgpKTsKLSAgICAgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInVzZXJfaWQiLCBjb21tZW50LmdldFVzZXJJZCgpKTsKLQotICAgICAgICAgICAgICAgIC8vIOiOt+WPluivhOiuuueUqOaIt+eahOeUqOaIt+WQjQotICAgICAgICAgICAgICAgIFVzZXJzIGNvbW1lbnRVc2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQoY29tbWVudC5nZXRVc2VySWQoKSkub3JFbHNlKG51bGwpOwotICAgICAgICAgICAgICAgIGlmIChjb21tZW50VXNlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidXNlcm5hbWUiLCBjb21tZW50VXNlci5nZXRVc2VybmFtZSgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoInVzZXJuYW1lIiwgIlVua25vd24iKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjb21tZW50RGF0YS5wdXQoImNvbnRlbnQiLCBjb21tZW50LmdldENvbW1lbnRDb250ZW50KCkpOwotICAgICAgICAgICAgICAgIGNvbW1lbnREYXRhLnB1dCgidGltZSIsIGNvbW1lbnQuZ2V0Q29tbWVudFRpbWUoKSk7Ci0gICAgICAgICAgICAgICAgY29tbWVudExpc3QuYWRkKGNvbW1lbnREYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGR5bmFtaWNEYXRhLnB1dCgiY29tbWVudHMiLCBjb21tZW50TGlzdCk7Ci0KLSAgICAgICAgICAgIGR5bmFtaWNMaXN0LmFkZChkeW5hbWljRGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoImR5bmFtaWMiLCBkeW5hbWljTGlzdCk7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICAvL+iOt+WPluW9k+WJjeaJgOacieWlveWPi+eahGlkCi0gICAgcHVibGljIExpc3Q8TG9uZz4gZ2V0QWxsRnJpZW5kSWRzKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIExpc3Q8RnJpZW5kUmVsYXRpb24+IGZyaWVuZFJlbGF0aW9ucyA9IGZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5maW5kQnlVc2VySWQodXNlcklkKTsKLSAgICAgICAgTGlzdDxMb25nPiBmcmllbmRJZHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICBmb3IgKEZyaWVuZFJlbGF0aW9uIHJlbGF0aW9uIDogZnJpZW5kUmVsYXRpb25zKSB7Ci0gICAgICAgICAgICAvLyDmt7vliqDlpb3lj4tJRAotICAgICAgICAgICAgaWYgKCFmcmllbmRJZHMuY29udGFpbnMocmVsYXRpb24uZ2V0RnJpZW5kSWQoKSkpIHsKLSAgICAgICAgICAgICAgICBmcmllbmRJZHMuYWRkKHJlbGF0aW9uLmdldEZyaWVuZElkKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZyaWVuZElkczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBbGxVc2VyQW5kRnJpZW5kc0R5bmFtaWNzKExpc3Q8TG9uZz4gdXNlcklkcykgewotICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGFsbER5bmFtaWNzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgICAgICAgLy8g6YGN5Y6G5omA5pyJ55So5oi36I635Y+W5LuW5Lus55qE5Yqo5oCBCi0gICAgICAgIGZvciAoTG9uZyB1c2VySWQgOiB1c2VySWRzKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHVzZXJEeW5hbWljcyA9IGdldEFsbFVzZXJEeW5hbWljcyh1c2VySWQpOwotICAgICAgICAgICAgaWYgKHVzZXJEeW5hbWljcyAhPSBudWxsICYmICF1c2VyRHluYW1pY3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYWxsRHluYW1pY3MuYWRkQWxsKChMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+KSB1c2VyRHluYW1pY3MuZ2V0KCJkeW5hbWljIikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g6L+U5Zue5omA5pyJ5Yqo5oCB55qE5ZCI6ZuGCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgiZHluYW1pYyIsIGFsbER5bmFtaWNzKTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIC8v54K56LWe5Yqo5oCBCi0gICAgcHVibGljIGJvb2xlYW4gbGlrZUR5bmFtaWMoTG9uZyB1c2VySWQsIExvbmcgZHluYW1pY0lkKSB7Ci0gICAgICAgIC8vIOajgOafpeivpeeUqOaIt+aYr+WQpuW3sue7j+eCuei1nui/h+ivpeWKqOaAgQotICAgICAgICBEeW5hbWljTGlrZXMgZXhpc3RpbmdMaWtlID0gZHluYW1pY0xpa2VzUmVwb3NpdG9yeS5maW5kQnlVc2VySWRBbmREeW5hbWljSWQodXNlcklkLCBkeW5hbWljSWQpOwotICAgICAgICBpZiAoZXhpc3RpbmdMaWtlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOaWsOWinueCuei1nuiusOW9lQotICAgICAgICBEeW5hbWljTGlrZXMgbmV3TGlrZSA9IG5ldyBEeW5hbWljTGlrZXMoKTsKLSAgICAgICAgbmV3TGlrZS5zZXRVc2VySWQodXNlcklkKTsKLSAgICAgICAgbmV3TGlrZS5zZXREeW5hbWljSWQoZHluYW1pY0lkKTsKLSAgICAgICAgbmV3TGlrZS5zZXRMaWtlVGltZShuZXcgamF2YS51dGlsLkRhdGUoKSk7Ci0gICAgICAgIGR5bmFtaWNMaWtlc1JlcG9zaXRvcnkuc2F2ZShuZXdMaWtlKTsKLQotICAgICAgICAvLyDmm7TmlrDliqjmgIHooajnmoTngrnotZ7mlbAKLSAgICAgICAgVXNlckR5bmFtaWMgZHluYW1pYyA9IHVzZXJEeW5hbWljUmVwb3NpdG9yeS5maW5kQnlJZChkeW5hbWljSWQpLm9yRWxzZShudWxsKTsKLSAgICAgICAgaWYgKGR5bmFtaWMgIT0gbnVsbCkgewotICAgICAgICAgICAgZHluYW1pYy5zZXRMaWtlc0NvdW50KGR5bmFtaWMuZ2V0TGlrZXNDb3VudCgpICsgMSk7Ci0gICAgICAgICAgICB1c2VyRHluYW1pY1JlcG9zaXRvcnkuc2F2ZShkeW5hbWljKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v5Y+W5raI54K56LWeCi0gICAgcHVibGljIGJvb2xlYW4gdW5saWtlRHluYW1pYyhMb25nIHVzZXJJZCwgTG9uZyBkeW5hbWljSWQpIHsKLSAgICAgICAgLy8g5p+l5om+6K+l55So5oi355qE54K56LWe6K6w5b2VCi0gICAgICAgIER5bmFtaWNMaWtlcyBleGlzdGluZ0xpa2UgPSBkeW5hbWljTGlrZXNSZXBvc2l0b3J5LmZpbmRCeVVzZXJJZEFuZER5bmFtaWNJZCh1c2VySWQsIGR5bmFtaWNJZCk7Ci0gICAgICAgIGlmIChleGlzdGluZ0xpa2UgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5Yig6Zmk54K56LWe6K6w5b2VCi0gICAgICAgIGR5bmFtaWNMaWtlc1JlcG9zaXRvcnkuZGVsZXRlKGV4aXN0aW5nTGlrZSk7Ci0KLSAgICAgICAgLy8g5pu05paw5Yqo5oCB6KGo55qE54K56LWe5pWwCi0gICAgICAgIFVzZXJEeW5hbWljIGR5bmFtaWMgPSB1c2VyRHluYW1pY1JlcG9zaXRvcnkuZmluZEJ5SWQoZHluYW1pY0lkKS5vckVsc2UobnVsbCk7Ci0gICAgICAgIGlmIChkeW5hbWljICE9IG51bGwpIHsKLSAgICAgICAgICAgIGR5bmFtaWMuc2V0TGlrZXNDb3VudChkeW5hbWljLmdldExpa2VzQ291bnQoKSAtIDEpOwotICAgICAgICAgICAgdXNlckR5bmFtaWNSZXBvc2l0b3J5LnNhdmUoZHluYW1pYyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0dyb3VwU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTZkN2UwLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODIgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuKjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5Lio7Ci1pbXBvcnQgamFrYXJ0YS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbmFsOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuZG9tYWluLlBhZ2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5kYXRhLmRvbWFpbi5QYWdlUmVxdWVzdDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmRhdGEuZG9tYWluLlBhZ2VhYmxlOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuZGF0YS5kb21haW4uU29ydDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIubXVsdGlwYXJ0Lk11bHRpcGFydEZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1AU2VydmljZQotcHVibGljIGNsYXNzIEdyb3VwU2VydmljZSB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBHcm91cFJlcG9zaXRvcnkgZ3JvdXBSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgR3JvdXBNZW1iZXJzUmVwb3NpdG9yeSBncm91cE1lbWJlcnNSZXBvc2l0b3J5OwotCi0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyUmVwb3NpdG9yeSB1c2VyUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIEdyb3VwUG9zdFJlcG9zaXRvcnkgZ3JvdXBQb3N0UmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIEdyb3VwQ29tbWVudHNSZXBvc2l0b3J5IGdyb3VwQ29tbWVudHNSZXBvc2l0b3J5OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX0RJUiA9ICJ1cGxvYWRzL2dyb3VwUG9zdC8iOwotCi0gICAgQFRyYW5zYWN0aW9uYWwKLSAgICAvLyDliJvlu7rlsI/nu4TnmoTmlrnms5UKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gY3JlYXRlR3JvdXAoR3JvdXAgZ3JvdXBSZXF1ZXN0KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyDliJvlu7rmlrDnmoTlsI/nu4Tlr7nosaEKLSAgICAgICAgICAgIEdyb3VwIG5ld0dyb3VwID0gbmV3IEdyb3VwKCk7Ci0gICAgICAgICAgICBuZXdHcm91cC5zZXRHcm91cE5hbWUoZ3JvdXBSZXF1ZXN0LmdldEdyb3VwTmFtZSgpKTsKLSAgICAgICAgICAgIG5ld0dyb3VwLnNldERlc2NyaXB0aW9uKGdyb3VwUmVxdWVzdC5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIG5ld0dyb3VwLnNldENyZWF0ZVRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgICAgICBuZXdHcm91cC5zZXRVc2VySWQoZ3JvdXBSZXF1ZXN0LmdldFVzZXJJZCgpKTsKLSAgICAgICAgICAgIG5ld0dyb3VwLnNldE1lbWJlckNvdW50KDEpOwotICAgICAgICAgICAgbmV3R3JvdXAuc2V0Q2F0ZWdvcnkoZ3JvdXBSZXF1ZXN0LmdldENhdGVnb3J5KCkpOwotICAgICAgICAgICAgbmV3R3JvdXAuc2V0Q292ZXJJbWFnZShncm91cFJlcXVlc3QuZ2V0Q292ZXJJbWFnZSgpKTsKLSAgICAgICAgICAgIEdyb3VwIGNyZWF0ZWRHcm91cCA9IGdyb3VwUmVwb3NpdG9yeS5zYXZlKG5ld0dyb3VwKTsKLQotICAgICAgICAgICAgLy8g6L+U5Zue5oiQ5Yqf5ZON5bqUCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnyIpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJncm91cF9pZCIsIGNyZWF0ZWRHcm91cC5nZXRHcm91cElkKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2socmVzcG9uc2UpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8g6L+U5Zue5aSx6LSl5ZON5bqUCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlsI/nu4TliJvlu7rlpLHotKUiKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJncm91cF9pZCIsIG51bGwpOwotCi0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKDQwMCkuYm9keShlcnJvclJlc3BvbnNlKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLy8g5Yqg5YWl5bCP57uECi0gICAgQFRyYW5zYWN0aW9uYWwKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gam9pbkdyb3VwKExvbmcgZ3JvdXBJZCwgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g5p+l5om+5bCP57uECi0gICAgICAgIE9wdGlvbmFsPEdyb3VwPiBncm91cE9wdGlvbmFsID0gZ3JvdXBSZXBvc2l0b3J5LmZpbmRCeUlkKGdyb3VwSWQpOwotICAgICAgICBpZiAoIWdyb3VwT3B0aW9uYWwuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5zdGF0dXMoNDAwKS5ib2R5KAotICAgICAgICAgICAgICAgICAgICBNYXAub2YoInN0YXR1cyIsICJmYWlsdXJlIiwgIm1lc3NhZ2UiLCAi5bCP57uE5LiN5a2Y5ZyoIikKLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLQotICAgICAgICBHcm91cCBncm91cCA9IGdyb3VwT3B0aW9uYWwuZ2V0KCk7Ci0KLSAgICAgICAgLy8g5qOA5p+l55So5oi35piv5ZCm5bey57uP5piv6K+l5bCP57uE5oiQ5ZGYCi0gICAgICAgIGlmIChncm91cE1lbWJlcnNSZXBvc2l0b3J5LmV4aXN0c0J5R3JvdXBJZEFuZFVzZXJJZChncm91cElkLCB1c2VySWQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKDQwMCkuYm9keSgKLSAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAiZmFpbHVyZSIsICJtZXNzYWdlIiwgIueUqOaIt+W3sue7j+aYr+ivpeWwj+e7hOeahOaIkOWRmCIpCi0gICAgICAgICAgICApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5o+S5YWl55So5oi35ZKM5bCP57uE55qE5YWz6IGU6K6w5b2VCi0gICAgICAgIEdyb3VwTWVtYmVycyBncm91cE1lbWJlcnMgPSBuZXcgR3JvdXBNZW1iZXJzKCk7Ci0gICAgICAgIGdyb3VwTWVtYmVycy5zZXRHcm91cElkKGdyb3VwSWQpOwotICAgICAgICBncm91cE1lbWJlcnMuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuc2F2ZShncm91cE1lbWJlcnMpOwotCi0gICAgICAgIC8vIOabtOaWsOWwj+e7hOeahOaIkOWRmOaVsAotICAgICAgICBncm91cC5zZXRNZW1iZXJDb3VudChncm91cC5nZXRNZW1iZXJDb3VudCgpICsgMSk7Ci0gICAgICAgIGdyb3VwUmVwb3NpdG9yeS5zYXZlKGdyb3VwKTsKLQotICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkub2soKS5ib2R5KAotICAgICAgICAgICAgICAgIE1hcC5vZigic3RhdHVzIiwgInN1Y2Nlc3MiLCAibWVzc2FnZSIsICLmiJDlip/liqDlhaXlsI/nu4QiKQotICAgICAgICApOwotICAgIH0KLQotICAgIC8vIOmAgOWHuuWwj+e7hAotICAgIEBUcmFuc2FjdGlvbmFsCi0gICAgcHVibGljIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxlYXZlR3JvdXAoTG9uZyBncm91cElkLCBMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDmn6Xmib7lsI/nu4QKLSAgICAgICAgT3B0aW9uYWw8R3JvdXA+IGdyb3VwT3B0aW9uYWwgPSBncm91cFJlcG9zaXRvcnkuZmluZEJ5SWQoZ3JvdXBJZCk7Ci0gICAgICAgIGlmICghZ3JvdXBPcHRpb25hbC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LnN0YXR1cyg0MDApLmJvZHkoCi0gICAgICAgICAgICAgICAgICAgIE1hcC5vZigic3RhdHVzIiwgImZhaWx1cmUiLCAibWVzc2FnZSIsICLlsI/nu4TkuI3lrZjlnKgiKQotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdyb3VwIGdyb3VwID0gZ3JvdXBPcHRpb25hbC5nZXQoKTsKLQotICAgICAgICAvLyDmo4Dmn6XnlKjmiLfmmK/lkKbmmK/or6XlsI/nu4TmiJDlkZgKLSAgICAgICAgaWYgKCFncm91cE1lbWJlcnNSZXBvc2l0b3J5LmV4aXN0c0J5R3JvdXBJZEFuZFVzZXJJZChncm91cElkLCB1c2VySWQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VFbnRpdHkuc3RhdHVzKDQwMCkuYm9keSgKLSAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAiZmFpbHVyZSIsICJtZXNzYWdlIiwgIueUqOaIt+S4jeaYr+ivpeWwj+e7hOeahOaIkOWRmCIpCi0gICAgICAgICAgICApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5Yig6Zmk55So5oi35ZKM5bCP57uE55qE5YWz6IGU6K6w5b2VCi0gICAgICAgIGdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuZGVsZXRlQnlHcm91cElkQW5kVXNlcklkKGdyb3VwSWQsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5pu05paw5bCP57uE55qE5oiQ5ZGY5pWwCi0gICAgICAgIGdyb3VwLnNldE1lbWJlckNvdW50KGdyb3VwLmdldE1lbWJlckNvdW50KCkgLSAxKTsKLSAgICAgICAgZ3JvdXBSZXBvc2l0b3J5LnNhdmUoZ3JvdXApOwotCi0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vaygpLmJvZHkoCi0gICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAic3VjY2VzcyIsICJtZXNzYWdlIiwgIuaIkOWKn+mAgOWHuuWwj+e7hCIpCi0gICAgICAgICk7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W5omA5pyJ5oiQ5ZGYCi0gICAgQFRyYW5zYWN0aW9uYWwKLSAgICBwdWJsaWMgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0R3JvdXBNZW1iZXJzKExvbmcgZ3JvdXBJZCkgewotICAgICAgICAvLyDmn6Xmib7lsI/nu4QKLSAgICAgICAgT3B0aW9uYWw8R3JvdXA+IGdyb3VwT3B0aW9uYWwgPSBncm91cFJlcG9zaXRvcnkuZmluZEJ5SWQoZ3JvdXBJZCk7Ci0gICAgICAgIGlmICghZ3JvdXBPcHRpb25hbC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlRW50aXR5LnN0YXR1cyg0MDApLmJvZHkoCi0gICAgICAgICAgICAgICAgICAgIE1hcC5vZigic3RhdHVzIiwgImZhaWx1cmUiLCAibWVzc2FnZSIsICLlsI/nu4TkuI3lrZjlnKgiKQotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdyb3VwIGdyb3VwID0gZ3JvdXBPcHRpb25hbC5nZXQoKTsKLQotICAgICAgICAvLyDojrflj5bmiYDmnInlsI/nu4TmiJDlkZgKLSAgICAgICAgTGlzdDxHcm91cE1lbWJlcnM+IGdyb3VwTWVtYmVyc0xpc3QgPSBncm91cE1lbWJlcnNSZXBvc2l0b3J5LmZpbmRCeUdyb3VwSWQoZ3JvdXBJZCk7Ci0KLSAgICAgICAgLy8g5Yib5bu65oiQ5ZGY6L+U5Zue5YiX6KGoCi0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gbWVtYmVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmb3IgKEdyb3VwTWVtYmVycyBncm91cE1lbWJlciA6IGdyb3VwTWVtYmVyc0xpc3QpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyT3B0aW9uYWwgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChncm91cE1lbWJlci5nZXRVc2VySWQoKSk7Ci0gICAgICAgICAgICBpZiAodXNlck9wdGlvbmFsLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHRpb25hbC5nZXQoKTsKLSAgICAgICAgICAgICAgICBtZW1iZXJzLmFkZChNYXAub2YoCi0gICAgICAgICAgICAgICAgICAgICAgICAidXNlcl9pZCIsIHVzZXIuZ2V0VXNlcklkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAidXNlcm5hbWUiLCB1c2VyLmdldFVzZXJuYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAiYXZhdGFyX3VybCIsIHVzZXIuZ2V0QXZhdGFyVXJsKCkKLSAgICAgICAgICAgICAgICApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBSZXNwb25zZUVudGl0eS5vaygpLmJvZHkoCi0gICAgICAgICAgICAgICAgTWFwLm9mKCJzdGF0dXMiLCAic3VjY2VzcyIsICJtZW1iZXJzIiwgbWVtYmVycykKLSAgICAgICAgKTsKLSAgICB9Ci0KLQotICAgIC8v5Y+R5biD5biW5a2QCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY3JlYXRlUG9zdChMb25nIGdyb3VwSWQsIExvbmcgdXNlcklkLCBTdHJpbmcgcG9zdENvbnRlbnQsIFN0cmluZyB0aXRsZSwgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKLSAgICAgICAgLy8g5Yib5bu65LiA5Liq5paw55qE5biW5a2Q5a+56LGhCi0gICAgICAgIEdyb3VwUG9zdCBwb3N0ID0gbmV3IEdyb3VwUG9zdCgpOwotICAgICAgICBwb3N0LnNldEdyb3VwSWQoZ3JvdXBJZCk7Ci0gICAgICAgIHBvc3Quc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIHBvc3Quc2V0Q29udGVudChwb3N0Q29udGVudCk7Ci0gICAgICAgIHBvc3Quc2V0VGl0bGUodGl0bGUpOwotICAgICAgICBwb3N0LnNldFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIHBvc3Quc2V0TGlrZUNvdW50KDApOwotICAgICAgICBwb3N0LnNldENvbW1lbnRDb3VudCgwKTsKLQotICAgICAgICAvLyDlpITnkIblm77niYfkuIrkvKDvvIzlpoLmnpzmsqHmnInlm77niYfvvIzov5Tlm57nqbrlrZfnrKbkuLIKLSAgICAgICAgU3RyaW5nIGltYWdlVXJscyA9IGhhbmRsZUltYWdlcyhpbWFnZUZpbGVzKTsKLSAgICAgICAgcG9zdC5zZXRJbWFnZShpbWFnZVVybHMpOwotCi0gICAgICAgIC8vIOS/neWtmOW4luWtkOWIsOaVsOaNruW6kwotICAgICAgICBHcm91cFBvc3Qgc2F2ZWRQb3N0ID0gZ3JvdXBQb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOwotCi0gICAgICAgIC8vIOi/lOWbnue7k+aenAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoInBvc3RfaWQiLCBzYXZlZFBvc3QuZ2V0R3JvdXBQb3N0SWQoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLluJblrZDliJvlu7rmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIC8vIOWkhOeQhuWbvueJh+S4iuS8oOeahOaWueazle+8jOi/lOWbnuWbvueJh+eahCBVUkwg5a2X56ym5LiyCi0gICAgcHJpdmF0ZSBTdHJpbmcgaGFuZGxlSW1hZ2VzKE11bHRpcGFydEZpbGVbXSBpbWFnZUZpbGVzKSB7Ci0gICAgICAgIGlmIChpbWFnZUZpbGVzID09IG51bGwgfHwgaW1hZ2VGaWxlcy5sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nQnVpbGRlciBpbWFnZVVybHNCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGltYWdlRmlsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgICAgIGltYWdlVXJsc0J1aWxkZXIuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFN0cmluZyBpbWFnZVVybCA9IHNhdmVJbWFnZShpbWFnZUZpbGVzW2ldKTsKLSAgICAgICAgICAgICAgICBpbWFnZVVybHNCdWlsZGVyLmFwcGVuZChpbWFnZVVybCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIuWbvueJh+S4iuS8oOWksei0pTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaW1hZ2VVcmxzQnVpbGRlci50b1N0cmluZygpOwotICAgIH0KLQotICAgIC8vIOS/neWtmOWbvueJh+W5tui/lOWbnuWbvueJh+eahCBVUkwKLSAgICBwcml2YXRlIFN0cmluZyBzYXZlSW1hZ2UoTXVsdGlwYXJ0RmlsZSBpbWFnZUZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChpbWFnZUZpbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCLlm77niYfmlofku7bkuLrnqboiKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGltYWdlRmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCk7Ci0gICAgICAgIFBhdGggcGF0aCA9IFBhdGgub2YoSU1BR0VfRElSICsgZmlsZU5hbWUpOwotICAgICAgICBGaWxlcy5jcmVhdGVEaXJlY3RvcmllcyhwYXRoLmdldFBhcmVudCgpKTsKLSAgICAgICAgRmlsZXMud3JpdGUocGF0aCwgaW1hZ2VGaWxlLmdldEJ5dGVzKCkpOwotICAgICAgICByZXR1cm4gIi9pbWFnZXMvIiArIGZpbGVOYW1lOwotICAgIH0KLQotICAgIC8vIOiOt+WPluWwj+e7hOWGheeahOaJgOacieW4luWtkAotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEFsbFBvc3RzKExvbmcgZ3JvdXBJZCkgewotICAgICAgICBMaXN0PEdyb3VwUG9zdD4gcG9zdHMgPSBncm91cFBvc3RSZXBvc2l0b3J5LmZpbmRCeUdyb3VwSWQoZ3JvdXBJZCk7Ci0KLSAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBwb3N0TGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIGZvciAoR3JvdXBQb3N0IHBvc3QgOiBwb3N0cykgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwb3N0RGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChwb3N0LmdldFVzZXJJZCgpKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiVXNlciBub3QgZm91bmQiKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoImdyb3VwX3Bvc3RfaWQiLCBwb3N0LmdldEdyb3VwUG9zdElkKCkpOwotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJ1c2VyX2lkIiwgcG9zdC5nZXRVc2VySWQoKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoInVzZXJuYW1lIiwgdXNlci5nZXRVc2VybmFtZSgpKTsKLSAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidGl0bGUiLCBwb3N0LmdldFRpdGxlKCkpOwotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJjb250ZW50IiwgcG9zdC5nZXRDb250ZW50KCkpOwotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJ0aW1lIiwgcG9zdC5nZXRUaW1lKCkpOwotCi0gICAgICAgICAgICBwb3N0TGlzdC5hZGQocG9zdERhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g6L+U5Zue5ZON5bqU5pWw5o2uCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJwb3N0cyIsIHBvc3RMaXN0KTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotCi0gICAgLy8g6I635Y+W5bCP57uE5YiX6KGo5o6l5Y+jCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gc2VhcmNoR3JvdXBzKE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1zKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgcGFyYW1zLmdldCgibmFtZSIpOwotICAgICAgICBTdHJpbmcgY2F0ZWdvcnkgPSAoU3RyaW5nKSBwYXJhbXMuZ2V0KCJjYXRlZ29yeSIpOwotICAgICAgICBJbnRlZ2VyIHBhZ2UgPSAoSW50ZWdlcikgcGFyYW1zLmdldE9yRGVmYXVsdCgicGFnZSIsIDEpOwotICAgICAgICBJbnRlZ2VyIHNpemUgPSAoSW50ZWdlcikgcGFyYW1zLmdldE9yRGVmYXVsdCgic2l6ZSIsIDEwKTsKLSAgICAgICAgU3RyaW5nIHNvcnRCeSA9IChTdHJpbmcpIHBhcmFtcy5nZXRPckRlZmF1bHQoInNvcnRfYnkiLCAibWVtYmVyQ291bnQiKTsKLQotICAgICAgICAvLyDmnoTlu7rliIbpobXlr7nosaEKLSAgICAgICAgUGFnZWFibGUgcGFnZWFibGU7Ci0KLSAgICAgICAgLy8g5qC55o2uIGBzb3J0QnlgIOWIpOaWreaOkuW6j+aWueW8jwotICAgICAgICBpZiAoImNyZWF0ZVRpbWUiLmVxdWFscyhzb3J0QnkpKSB7Ci0gICAgICAgICAgICBwYWdlYWJsZSA9IFBhZ2VSZXF1ZXN0Lm9mKHBhZ2UgLSAxLCBzaXplLCBTb3J0LmJ5KFNvcnQuT3JkZXIuYXNjKCJjcmVhdGVUaW1lIikpKTsKLSAgICAgICAgfSBlbHNlIGlmICgiZ3JvdXBOYW1lIi5lcXVhbHMoc29ydEJ5KSkgewotICAgICAgICAgICAgcGFnZWFibGUgPSBQYWdlUmVxdWVzdC5vZihwYWdlIC0gMSwgc2l6ZSwgU29ydC5ieShTb3J0Lk9yZGVyLmFzYygiZ3JvdXBOYW1lIikpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhZ2VhYmxlID0gUGFnZVJlcXVlc3Qub2YocGFnZSAtIDEsIHNpemUsIFNvcnQuYnkoU29ydC5PcmRlci5kZXNjKCJtZW1iZXJDb3VudCIpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBQYWdlPEdyb3VwPiBncm91cHM7Ci0gICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyDlsI/nu4TlkI3np7DmqKHns4rmn6Xor6IKLSAgICAgICAgICAgIGdyb3VwcyA9IGdyb3VwUmVwb3NpdG9yeS5zZWFyY2hHcm91cHMobmFtZSwgY2F0ZWdvcnksIHBhZ2VhYmxlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdyb3VwcyA9IGdyb3VwUmVwb3NpdG9yeS5zZWFyY2hXaXRoRmlsdGVycyhjYXRlZ29yeSwgcGFnZWFibGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1aWxkUmVzcG9uc2UoZ3JvdXBzKTsKLSAgICB9Ci0KLSAgICAvLyDmnoTlu7rov5Tlm57nmoTlk43lupTmlbDmja4KLSAgICBwcml2YXRlIE1hcDxTdHJpbmcsIE9iamVjdD4gYnVpbGRSZXNwb25zZShQYWdlPEdyb3VwPiBncm91cHMpIHsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZS5wdXQoInRvdGFsIiwgZ3JvdXBzLmdldFRvdGFsRWxlbWVudHMoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWxfcGFnZXMiLCBncm91cHMuZ2V0VG90YWxQYWdlcygpKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJjdXJyZW50X3BhZ2UiLCBncm91cHMuZ2V0TnVtYmVyKCkgKyAxKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJpdGVtcyIsIGdyb3Vwcy5nZXRDb250ZW50KCkpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICAvLyDngrnotZ7luJblrZAKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBsaWtlUG9zdChMb25nIEdyb3VwUG9zdElkKSB7Ci0gICAgICAgIC8vIOafpeaJvuW4luWtkAotICAgICAgICBPcHRpb25hbDxHcm91cFBvc3Q+IHBvc3RPcHQgPSBncm91cFBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKEdyb3VwUG9zdElkKTsKLSAgICAgICAgaWYgKCFwb3N0T3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdyb3VwUG9zdCBwb3N0ID0gcG9zdE9wdC5nZXQoKTsKLQotICAgICAgICAvLyDmm7TmlrDngrnotZ7mlbAKLSAgICAgICAgcG9zdC5zZXRMaWtlQ291bnQocG9zdC5nZXRMaWtlQ291bnQoKSArIDEpOwotICAgICAgICBncm91cFBvc3RSZXBvc2l0b3J5LnNhdmUocG9zdCk7Ci0KLSAgICAgICAgLy8g6L+U5Zue5oiQ5Yqf5L+h5oGvCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueCuei1nuaIkOWKnyIpOwotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgLy8g5Y+W5raI54K56LWeCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gdW5saWtlUG9zdChMb25nIEdyb3VwUG9zdElkKSB7Ci0gICAgICAgIC8vIOafpeaJvuW4luWtkAotICAgICAgICBPcHRpb25hbDxHcm91cFBvc3Q+IHBvc3RPcHQgPSBncm91cFBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKEdyb3VwUG9zdElkKTsKLSAgICAgICAgaWYgKCFwb3N0T3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdyb3VwUG9zdCBwb3N0ID0gcG9zdE9wdC5nZXQoKTsKLQotICAgICAgICAvLyDmm7TmlrDngrnotZ7mlbAKLSAgICAgICAgaWYgKHBvc3QuZ2V0TGlrZUNvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICBwb3N0LnNldExpa2VDb3VudChwb3N0LmdldExpa2VDb3VudCgpIC0gMSk7Ci0gICAgICAgICAgICBncm91cFBvc3RSZXBvc2l0b3J5LnNhdmUocG9zdCk7Ci0KLSAgICAgICAgICAgIC8vIOi/lOWbnuaIkOWKn+S/oeaBrwotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlj5bmtojngrnotZ7miJDlip8iKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIOWmguaenOeCuei1nuaVsOW3sue7j+aYrzDvvIzliJnov5Tlm57nm7jlupTmtojmga8KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5peg5rOV5Y+W5raI54K56LWe77yM54K56LWe5pWw5bey57uP5Li6MCIpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g5re75Yqg6K+E6K665bm25pu05paw5biW5a2Q55qE6K+E6K665pWwCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gYWRkQ29tbWVudChMb25nIHBvc3RJZCwgR3JvdXBDb21tZW50cyBjb21tZW50KSB7Ci0gICAgICAgIC8vIOafpeaJvuW4luWtkAotICAgICAgICBPcHRpb25hbDxHcm91cFBvc3Q+IHBvc3RPcHQgPSBncm91cFBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCk7Ci0gICAgICAgIGlmICghcG9zdE9wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIik7Ci0gICAgICAgIH0KLQotICAgICAgICBHcm91cFBvc3QgcG9zdCA9IHBvc3RPcHQuZ2V0KCk7Ci0KLSAgICAgICAgY29tbWVudC5zZXRHcm91cFBvc3RJZChwb3N0SWQpOwotICAgICAgICBjb21tZW50LnNldFRpbWUobmV3IGphdmEudXRpbC5EYXRlKCkpOwotICAgICAgICBncm91cENvbW1lbnRzUmVwb3NpdG9yeS5zYXZlKGNvbW1lbnQpOwotICAgICAgICBwb3N0LnNldENvbW1lbnRDb3VudChwb3N0LmdldENvbW1lbnRDb3VudCgpICsgMSk7Ci0gICAgICAgIGdyb3VwUG9zdFJlcG9zaXRvcnkuc2F2ZShwb3N0KTsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi6K+E6K665oiQ5YqfIik7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9MZXZlbFNlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvTGV2ZWxTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZjUwZWQuLjAwMDAwMDAKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9MZXZlbFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5FeHBlcmllbmNlSGlzdG9yeTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuTGV2ZWw7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LkxldmVsUmVwb3NpdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLUBTZXJ2aWNlCi1wdWJsaWMgY2xhc3MgTGV2ZWxTZXJ2aWNlIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgTGV2ZWxSZXBvc2l0b3J5IGxldmVsUmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIEV4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeSBleHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnk7Ci0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFVzZXJFeHBlcmllbmNlKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+S/oeaBrwotICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiVXNlciBub3QgZm91bmQiKSk7Ci0KLSAgICAgICAgLy8g6I635Y+W5b2T5YmN562J57qnCi0gICAgICAgIExldmVsIGN1cnJlbnRMZXZlbCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VyLmdldExldmVsKCkpLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJMZXZlbCBub3QgZm91bmQiKSk7Ci0KLSAgICAgICAgLy8g6I635Y+W5LiL5LiA5Liq562J57qn55qE57uP6aqM6ZyA5rGCCi0gICAgICAgIExldmVsIG5leHRMZXZlbCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZChjdXJyZW50TGV2ZWwuZ2V0TGV2ZWxJZCgpICsgMSkub3JFbHNlKG51bGwpOwotCi0gICAgICAgIC8vIOaehOW7uuWTjeW6lOaVsOaNrgotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIHVzZXIuZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibGV2ZWwiLCBjdXJyZW50TGV2ZWwuZ2V0TGV2ZWxOYW1lKCkpOwotICAgICAgICByZXNwb25zZS5wdXQoIm5leHRfbGV2ZWxfZXhwZXJpZW5jZSIsIG5leHRMZXZlbCAhPSBudWxsID8gbmV4dExldmVsLmdldFJlcXVpcmVkRXhwZXJpZW5jZSgpIDogMCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZUV4cGVyaWVuY2UoTG9uZyB1c2VySWQsIEludGVnZXIgZXhwZXJpZW5jZSwgU3RyaW5nIHNvdXJjZSkgewotICAgICAgICAvLyDojrflj5bnlKjmiLfkv6Hmga8KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIueUqOaIt+S4jeWtmOWcqCIpKTsKLQotICAgICAgICAvLyDmm7TmlrDnlKjmiLfnmoTnu4/pqozlgLwKLSAgICAgICAgdXNlci5zZXRDdXJyZW50RXhwZXJpZW5jZSh1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkgKyBleHBlcmllbmNlKTsKLQotICAgICAgICAvLyDkv53lrZjmm7TmlrDlkI7nmoTnlKjmiLfkv6Hmga8KLSAgICAgICAgdXNlclJlcG9zaXRvcnkuc2F2ZSh1c2VyKTsKLQotICAgICAgICAvLyDliJvlu7rnu4/pqozmm7TmlrDljoblj7LorrDlvZUKLSAgICAgICAgRXhwZXJpZW5jZUhpc3RvcnkgZXhwZXJpZW5jZUhpc3RvcnkgPSBuZXcgRXhwZXJpZW5jZUhpc3RvcnkoKTsKLSAgICAgICAgZXhwZXJpZW5jZUhpc3Rvcnkuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGV4cGVyaWVuY2VIaXN0b3J5LnNldEV4cGVyaWVuY2VDaGFuZ2UoZXhwZXJpZW5jZSk7Ci0gICAgICAgIGV4cGVyaWVuY2VIaXN0b3J5LnNldFNvdXJjZShzb3VyY2UpOwotICAgICAgICBleHBlcmllbmNlSGlzdG9yeS5zZXRVcGRhdGVUaW1lKG5ldyBEYXRlKCkpOwotCi0gICAgICAgIC8vIOS/neWtmOabtOaWsOWOhuWPsgotICAgICAgICBleHBlcmllbmNlSGlzdG9yeVJlcG9zaXRvcnkuc2F2ZShleHBlcmllbmNlSGlzdG9yeSk7Ci0KLSAgICAgICAgLy8g6L+U5Zue5pu05paw5ZCO55qE57uP6aqM5YC85ZKM5raI5oGvCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIue7j+mqjOabtOaWsOaIkOWKnyIpOwotICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIHVzZXIuZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSk7ICAvLyDov5Tlm57mm7TmlrDlkI7nmoTnu4/pqozlgLwKLQotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY2hlY2tVcGdyYWRlKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+S/oeaBrwotICAgICAgICBVc2VycyB1c2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigi55So5oi35LiN5a2Y5ZyoIikpOwotCi0gICAgICAgIC8vIOiOt+WPluW9k+WJjeetiee6pwotICAgICAgICBMZXZlbCBjdXJyZW50TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQodXNlci5nZXRMZXZlbCgpKQotICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigi55So5oi3562J57qn5L+h5oGv5LiN5a2Y5ZyoIikpOwotCi0gICAgICAgIC8vIOiOt+WPluS4i+S4gOS4quetiee6p+eahOe7j+mqjOmcgOaxggotICAgICAgICBMZXZlbCBuZXh0TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQoY3VycmVudExldmVsLmdldExldmVsSWQoKSArIDEpLm9yRWxzZShudWxsKTsKLQotICAgICAgICAvLyDmnoTlu7rlk43lupTmlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLQotICAgICAgICAvLyDliKTmlq3nlKjmiLfmmK/lkKblj6/ku6XljYfnuqcKLSAgICAgICAgYm9vbGVhbiBjYW5VcGdyYWRlID0gdXNlci5nZXRDdXJyZW50RXhwZXJpZW5jZSgpID49IChuZXh0TGV2ZWwgIT0gbnVsbCA/IG5leHRMZXZlbC5nZXRSZXF1aXJlZEV4cGVyaWVuY2UoKSA6IDApOwotICAgICAgICByZXNwb25zZS5wdXQoImNhbl91cGdyYWRlIiwgY2FuVXBncmFkZSk7Ci0gICAgICAgIC8vIOaehOW7uuWTjeW6lOaVsOaNrgotCi0gICAgICAgIHJlc3BvbnNlLnB1dCgibmV4dF9sZXZlbF9leHBlcmllbmNlIiwgbmV4dExldmVsICE9IG51bGwgPyBuZXh0TGV2ZWwuZ2V0UmVxdWlyZWRFeHBlcmllbmNlKCkgOiAwKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCB1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkpOwotCi0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZ3JhZGVVc2VyTGV2ZWwoTG9uZyB1c2VySWQsIEJvb2xlYW4gY2FuVXBncmFkZSkgewotICAgICAgICAvLyDojrflj5bnlKjmiLfkv6Hmga8KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgbm90IGZvdW5kIikpOwotCi0gICAgICAgIC8vIOWIm+W7uuWTjeW6lOWvueixoQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotCi0gICAgICAgIGlmIChjYW5VcGdyYWRlKSB7Ci0gICAgICAgICAgICAvLyDojrflj5blvZPliY3nrYnnuqcKLSAgICAgICAgICAgIExldmVsIGN1cnJlbnRMZXZlbCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VyLmdldExldmVsKCkpCi0gICAgICAgICAgICAgICAgICAgIC5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiTGV2ZWwgbm90IGZvdW5kIikpOwotCi0gICAgICAgICAgICAvLyDojrflj5bkuIvkuIDkuKrnrYnnuqfnmoTnu4/pqozpnIDmsYIKLSAgICAgICAgICAgIExldmVsIG5leHRMZXZlbCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZChjdXJyZW50TGV2ZWwuZ2V0TGV2ZWxJZCgpICsgMSkub3JFbHNlKG51bGwpOwotCi0gICAgICAgICAgICBpZiAobmV4dExldmVsICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB1c2VyLnNldExldmVsKHVzZXIuZ2V0TGV2ZWwoKSArIDEpOwotICAgICAgICAgICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUodXNlcik7Ci0gICAgICAgICAgICAgICAgTGV2ZWwgbmV3TGV2ZWwgPSBsZXZlbFJlcG9zaXRvcnkuZmluZEJ5SWQodXNlci5nZXRMZXZlbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgLm9yRWxzZVRocm93KCgpIC0+IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJMZXZlbCBub3QgZm91bmQiKSk7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWNh+e6p+aIkOWKnyIpOwotICAgICAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgICAgICAgICByZXNwb25zZS5wdXQoIm5ld19sZXZlbCIsIG5ld0xldmVsLmdldExldmVsTmFtZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueUqOaIt+W3sui+vuWIsOacgOmrmOetiee6pyIpOwotICAgICAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImVycm9yIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi55So5oi35LiN5ruh6Laz5Y2H57qn5p2h5Lu2Iik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJlcnJvciIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qb3N0U2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qb3N0U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWI3NDA0Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvUG9zdFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5MaWtlczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlBvc3Q7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5Db2xsZWN0aW9uc1JlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuTGlrZXNSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlBvc3RSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotQFNlcnZpY2UKLXB1YmxpYyBjbGFzcyBQb3N0U2VydmljZSB7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBQb3N0UmVwb3NpdG9yeSBwb3N0UmVwb3NpdG9yeTsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIExpa2VzUmVwb3NpdG9yeSBsaWtlc1JlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBDb2xsZWN0aW9uc1JlcG9zaXRvcnkgY29sbGVjdGlvbnNSZXBvc2l0b3J5OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNQUdFX0RJUiA9ICJ1cGxvYWRzL3Bvc3QvIjsKLQotCi0gICAgLy/liJvlu7rluJblrZAKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjcmVhdGVQb3N0KExvbmcgdXNlcklkLCBTdHJpbmcgcG9zdENvbnRlbnQsIFN0cmluZyB0aXRsZSwgTXVsdGlwYXJ0RmlsZVtdIGltYWdlRmlsZXMpIHsKLSAgICAgICAgLy8g5p+l5om+55So5oi35L+h5oGvCi0gICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChMb25nLnZhbHVlT2YodXNlcklkKSkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVzZXIgbm90IGZvdW5kIikpOwotICAgICAgICBQb3N0IHBvc3QgPSBuZXcgUG9zdCgpOwotICAgICAgICBwb3N0LnNldFVzZXJfaWQodXNlci5nZXRVc2VySWQoKSk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdExpa2VOdW0oMCk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdENvbGxlY3ROdW0oMCk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdENvbnRlbnQocG9zdENvbnRlbnQpOwotICAgICAgICBwb3N0LnNldFRpdGxlKHRpdGxlKTsKLQotICAgICAgICAvLyDlpITnkIblpJrlvKDlm77niYfnmoTkuIrkvKAKLSAgICAgICAgU3RyaW5nQnVpbGRlciBpbWFnZVVybHNCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgaWYgKGltYWdlRmlsZXMgIT0gbnVsbCAmJiBpbWFnZUZpbGVzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1hZ2VGaWxlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpbWFnZVVybHNCdWlsZGVyLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW1hZ2VVcmwgPSBzYXZlSW1hZ2UoaW1hZ2VGaWxlc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlVXJsc0J1aWxkZXIuYXBwZW5kKGltYWdlVXJsKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbWFnZSB1cGxvYWQgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwb3N0LnNldEltYWdlVXJsKGltYWdlVXJsc0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIFBvc3Qgc2F2ZWRQb3N0ID0gcG9zdFJlcG9zaXRvcnkuc2F2ZShwb3N0KTsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJwb3N0Tm8iLCBzYXZlZFBvc3QuZ2V0UG9zdE5vKCkpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5biW5a2Q5Yib5bu65oiQ5YqfIik7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICAvLyDkv53lrZjlm77niYflubbov5Tlm57lm77niYfnmoQgVVJMCi0gICAgcHVibGljIFN0cmluZyBzYXZlSW1hZ2UoTXVsdGlwYXJ0RmlsZSBpbWFnZUZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGltYWdlRmlsZS5nZXRPcmlnaW5hbEZpbGVuYW1lKCk7Ci0gICAgICAgIFBhdGggcGF0aCA9IFBhdGhzLmdldChJTUFHRV9ESVIgKyBmaWxlTmFtZSk7Ci0gICAgICAgIEZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKHBhdGguZ2V0UGFyZW50KCkpOwotICAgICAgICBGaWxlcy53cml0ZShwYXRoLCBpbWFnZUZpbGUuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIHJldHVybiAiL2ltYWdlcy8iICsgZmlsZU5hbWU7Ci0gICAgfQotCi0KLSAgICAvL+e8lui+keW4luWtkAotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVBvc3QoTG9uZyBwb3N0SWQsIFBvc3QgcG9zdCkgewotICAgICAgICBQb3N0IGV4aXN0aW5nUG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOwotICAgICAgICBpZiAocG9zdC5nZXRUaXRsZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGV4aXN0aW5nUG9zdC5zZXRUaXRsZShwb3N0LmdldFRpdGxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3N0LmdldFBvc3RDb250ZW50KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgZXhpc3RpbmdQb3N0LnNldFBvc3RDb250ZW50KHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBvc3QuZ2V0SW1hZ2VVcmwoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBleGlzdGluZ1Bvc3Quc2V0SW1hZ2VVcmwocG9zdC5nZXRJbWFnZVVybCgpKTsKLSAgICAgICAgfQotICAgICAgICBleGlzdGluZ1Bvc3Quc2V0UG9zdFRpbWUocG9zdC5nZXRQb3N0VGltZSgpKTsKLSAgICAgICAgLy8g5L+d5a2Y5pu05paw5ZCO55qE5biW5a2QCi0gICAgICAgIHBvc3RSZXBvc2l0b3J5LnNhdmUoZXhpc3RpbmdQb3N0KTsKLSAgICB9Ci0KLSAgICAvL+WIoOmZpOW4luWtkAotICAgIHB1YmxpYyB2b2lkIGRlbGV0ZVBvc3QoTG9uZyBwb3N0SWQpIHsKLSAgICAgICAgLy8g5p+l5om+5oyH5a6aIElEIOeahOW4luWtkO+8jOWmguaenOS4jeWtmOWcqOWImeaKm+WHuuW8guW4uAotICAgICAgICBpZiAoIXBvc3RSZXBvc2l0b3J5LmV4aXN0c0J5SWQocG9zdElkKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIik7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g5Yig6Zmk6K+l5biW5a2QCi0gICAgICAgIHBvc3RSZXBvc2l0b3J5LmRlbGV0ZUJ5SWQocG9zdElkKTsKLSAgICB9Ci0KLSAgICAvL+eCuei1nuW4luWtkO+8iOW3suWujOaIkO+8iQotICAgIHB1YmxpYyB2b2lkIGxpa2VQb3N0KExvbmcgcG9zdElkLCBMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDmn6Xmib7mjIflrpogSUQg55qE5biW5a2QCi0gICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOwotICAgICAgICBwb3N0LnNldFBvc3RMaWtlTnVtKHBvc3QuZ2V0UG9zdExpa2VOdW0oKSArIDEpOwotCi0gICAgICAgIC8vIOS/neWtmOW4luWtkAotICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOwotICAgICAgICBMaWtlcyBsaWtlID0gbmV3IExpa2VzKCk7Ci0gICAgICAgIGxpa2Uuc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGxpa2Uuc2V0UG9zdE5vKHBvc3RJZCk7Ci0gICAgICAgIC8vIOS/neWtmOeCuei1nuiusOW9lQotICAgICAgICBsaWtlc1JlcG9zaXRvcnkuc2F2ZShsaWtlKTsKLSAgICB9Ci0KLSAgICAvLyDlj5bmtojngrnotZ7luJblrZDvvIjlt7LlrozmiJDvvIkKLSAgICBwdWJsaWMgdm9pZCB1bmxpa2VQb3N0KExvbmcgcG9zdElkLCBMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDmn6Xmib7mjIflrpogSUQg55qE5biW5a2QCi0gICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOwotCi0gICAgICAgIC8vIOWmguaenOeCuei1nuaVsOWkp+S6jiAw77yM5YiZ5YeP5bCR54K56LWe5pWwCi0gICAgICAgIGlmIChwb3N0LmdldFBvc3RMaWtlTnVtKCkgPiAwKSB7Ci0gICAgICAgICAgICBwb3N0LnNldFBvc3RMaWtlTnVtKHBvc3QuZ2V0UG9zdExpa2VOdW0oKSAtIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5Yig6Zmk54K56LWe6KGo5Lit5a+55bqU55qE6K6w5b2VCi0gICAgICAgIGxpa2VzUmVwb3NpdG9yeS5kZWxldGVMaWtlQnlVc2VySWRBbmRQb3N0Tm8odXNlcklkLCBwb3N0SWQpOwotCi0gICAgICAgIC8vIOS/neWtmOabtOaWsOWQjueahOW4luWtkAotICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOwotICAgIH0KLQotCi0gICAgLy8g6I635Y+W5biW5a2Q5YiX6KGo77yI5bey5a6M5oiQ77yJCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsUG9zdHMoKSB7Ci0gICAgICAgIExpc3Q8UG9zdD4gcG9zdHMgPSBwb3N0UmVwb3NpdG9yeS5maW5kQWxsKCk7Ci0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcG9zdExpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgICAgICBmb3IgKFBvc3QgcG9zdCA6IHBvc3RzKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBvc3RNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgicG9zdE5vIiwgcG9zdC5nZXRQb3N0Tm8oKSk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgidXNlcl9pZCIsIHBvc3QuZ2V0VXNlcl9pZCgpKTsKLSAgICAgICAgICAgIHBvc3RNYXAucHV0KCJwb3N0Q29udGVudCIsIHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgiaW1nVXJsIiwgcG9zdC5nZXRJbWFnZVVybCgpKTsKLSAgICAgICAgICAgIHBvc3RNYXAucHV0KCJ0aXRsZSIsIHBvc3QuZ2V0VGl0bGUoKSk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgiY3JlYXRlZEF0IiwgcG9zdC5nZXRQb3N0VGltZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgcG9zdE1hcC5wdXQoImxpa2VDb3VudCIsIHBvc3QuZ2V0UG9zdExpa2VOdW0oKSk7Ci0gICAgICAgICAgICBwb3N0TWFwLnB1dCgiY29sbGVjdENvdW50IiwgcG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpKTsKLQotICAgICAgICAgICAgcG9zdExpc3QuYWRkKHBvc3RNYXApOwotICAgICAgICB9Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgLy8g57uf6K6h5biW5a2Q5pWw6YePCi0gICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWwiLCBwb3N0TGlzdC5zaXplKCkpOwotICAgICAgICByZXNwb25zZS5wdXQoInBvc3RzIiwgcG9zdExpc3QpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQb3N0QnlJZChMb25nIHBvc3RJZCkgewotICAgICAgICAvLyDojrflj5bluJblrZAKLSAgICAgICAgT3B0aW9uYWw8UG9zdD4gcG9zdE9wdGlvbmFsID0gcG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdElkKTsKLQotICAgICAgICAvLyDlpoLmnpzluJblrZDlrZjlnKgKLSAgICAgICAgaWYgKHBvc3RPcHRpb25hbC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgUG9zdCBwb3N0ID0gcG9zdE9wdGlvbmFsLmdldCgpOwotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwb3N0RGF0YSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHBvc3REYXRhLnB1dCgicG9zdE5vIiwgcG9zdC5nZXRQb3N0Tm8oKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoInVzZXJfaWQiLCBwb3N0LmdldFVzZXJfaWQoKSk7Ci0gICAgICAgICAgICBMb25nIHVzZXJJZCA9IHBvc3QuZ2V0VXNlcl9pZCgpOwotICAgICAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlKG51bGwpOwotCi0gICAgICAgICAgICBpZiAodXNlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcG9zdERhdGEucHV0KCJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcG9zdERhdGEucHV0KCJhdmF0YXJfdXJsIiwgdXNlci5nZXRBdmF0YXJVcmwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidXNlcm5hbWUiLCBudWxsKTsKLSAgICAgICAgICAgICAgICBwb3N0RGF0YS5wdXQoImF2YXRhcl91cmwiLCBudWxsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJwb3N0Q29udGVudCIsIHBvc3QuZ2V0UG9zdENvbnRlbnQoKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoImltYWdlVXJsIiwgcG9zdC5nZXRJbWFnZVVybCgpKTsKLSAgICAgICAgICAgIHBvc3REYXRhLnB1dCgicG9zdFRpbWUiLCBwb3N0LmdldFBvc3RUaW1lKCkpOwotICAgICAgICAgICAgcG9zdERhdGEucHV0KCJwb3N0TGlrZU51bSIsIHBvc3QuZ2V0UG9zdExpa2VOdW0oKSk7Ci0gICAgICAgICAgICBwb3N0RGF0YS5wdXQoInBvc3RDb2xsZWN0TnVtIiwgcG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpKTsKLSAgICAgICAgICAgIHBvc3REYXRhLnB1dCgidGl0bGUiLCBwb3N0LmdldFRpdGxlKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gcG9zdERhdGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQgd2l0aCBpZDogIiArIHBvc3RJZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8v5pS26JePCi0gICAgcHVibGljIHZvaWQgY29sbGVjdFBvc3QoTG9uZyBwb3N0SWQsIExvbmcgdXNlcklkKSB7Ci0gICAgICAgIFBvc3QgcG9zdCA9IHBvc3RSZXBvc2l0b3J5LmZpbmRCeUlkKHBvc3RJZCkub3JFbHNlVGhyb3coKCkgLT4gbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlBvc3Qgbm90IGZvdW5kIikpOwotICAgICAgICBwb3N0LnNldFBvc3RDb2xsZWN0TnVtKHBvc3QuZ2V0UG9zdENvbGxlY3ROdW0oKSArIDEpOwotICAgICAgICBwb3N0UmVwb3NpdG9yeS5zYXZlKHBvc3QpOwotCi0gICAgICAgIC8vIOa3u+WKoOWIsOaUtuiXj+ihqAotICAgICAgICBDb2xsZWN0aW9ucyBjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb25zKCk7Ci0gICAgICAgIGNvbGxlY3Rpb24uc2V0VXNlcklkKHVzZXJJZCk7Ci0gICAgICAgIGNvbGxlY3Rpb24uc2V0UG9zdE5vKHBvc3RJZCk7Ci0gICAgICAgIGNvbGxlY3Rpb25zUmVwb3NpdG9yeS5zYXZlKGNvbGxlY3Rpb24pOwotICAgIH0KLQotICAgIC8v5Y+W5raI5pS26JePCi0gICAgcHVibGljIHZvaWQgdW5jb2xsZWN0UG9zdChMb25nIHBvc3RJZCwgTG9uZyB1c2VySWQpIHsKLSAgICAgICAgUG9zdCBwb3N0ID0gcG9zdFJlcG9zaXRvcnkuZmluZEJ5SWQocG9zdElkKS5vckVsc2VUaHJvdygoKSAtPiBuZXcgUnVudGltZUV4Y2VwdGlvbigiUG9zdCBub3QgZm91bmQiKSk7Ci0gICAgICAgIC8vIOWHj+WwkeW4luWtkOaUtuiXj+aVsAotICAgICAgICBpZiAocG9zdC5nZXRQb3N0Q29sbGVjdE51bSgpID4gMCkgewotICAgICAgICAgICAgcG9zdC5zZXRQb3N0Q29sbGVjdE51bShwb3N0LmdldFBvc3RDb2xsZWN0TnVtKCkgLSAxKTsKLSAgICAgICAgICAgIHBvc3RSZXBvc2l0b3J5LnNhdmUocG9zdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDku47mlLbol4/ooajkuK3liKDpmaTlr7nlupTorrDlvZUKLSAgICAgICAgY29sbGVjdGlvbnNSZXBvc2l0b3J5LmRlbGV0ZUxpa2VCeVVzZXJJZEFuZFBvc3RObyh1c2VySWQsIHBvc3RJZCk7Ci0gICAgfQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5qYXZhIGIvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDA0NjYxLi4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVGFza1NlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5MZXZlbDsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRhc2s7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyVGFza1N0YXR1czsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QucmVwb3NpdG9yeS5MZXZlbFJlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVGFza1JlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLUBTZXJ2aWNlCi1wdWJsaWMgY2xhc3MgVGFza1NlcnZpY2UgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVGFza1JlcG9zaXRvcnkgdGFza1JlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBVc2VyVGFza1N0YXR1c1JlcG9zaXRvcnkgdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlclJlcG9zaXRvcnkgdXNlclJlcG9zaXRvcnk7Ci0KLSAgICBAQXV0b3dpcmVkCi0gICAgcHJpdmF0ZSBMZXZlbFJlcG9zaXRvcnkgbGV2ZWxSZXBvc2l0b3J5OwotCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QWxsVGFza3NGb3JVc2VyKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPluaJgOacieS7u+WKoQotICAgICAgICBMaXN0PFRhc2s+IHRhc2tzID0gdGFza1JlcG9zaXRvcnkuZmluZEFsbCgpOwotICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHRhc2tMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgICAgICAgZm9yIChUYXNrIHRhc2sgOiB0YXNrcykgewotICAgICAgICAgICAgT3B0aW9uYWw8VXNlclRhc2tTdGF0dXM+IHVzZXJUYXNrU3RhdHVzID0gdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5Ci0gICAgICAgICAgICAgICAgICAgIC5maW5kQnlVc2VySWRBbmRUYXNrSWQodXNlcklkLCB0YXNrLmdldFRhc2tJZCgpKTsKLQotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiB0YXNrRGF0YSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHRhc2tEYXRhLnB1dCgidGFza19pZCIsIHRhc2suZ2V0VGFza0lkKCkpOwotICAgICAgICAgICAgdGFza0RhdGEucHV0KCJ0aXRsZSIsIHRhc2suZ2V0VGl0bGUoKSk7Ci0gICAgICAgICAgICB0YXNrRGF0YS5wdXQoImRlc2NyaXB0aW9uIiwgdGFzay5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIHRhc2tEYXRhLnB1dCgic3RhdHVzIiwgdXNlclRhc2tTdGF0dXMuaXNQcmVzZW50KCkgPyB1c2VyVGFza1N0YXR1cy5nZXQoKS5nZXRTdGF0dXMoKSA6ICJwZW5kaW5nIik7Ci0gICAgICAgICAgICB0YXNrRGF0YS5wdXQoInByb2dyZXNzIiwgdXNlclRhc2tTdGF0dXMuaXNQcmVzZW50KCkgPyB1c2VyVGFza1N0YXR1cy5nZXQoKS5nZXRDdXJyZW50UHJvZ3Jlc3MoKSA6IDApOwotCi0gICAgICAgICAgICAvLyDlpZblirEKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IHJld2FyZCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJld2FyZC5wdXQoImV4cGVyaWVuY2UiLCB0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7Ci0gICAgICAgICAgICByZXdhcmQucHV0KCJwb2ludHMiLCB0YXNrLmdldFJld2FyZFBvaW50cygpKTsKLSAgICAgICAgICAgIHRhc2tEYXRhLnB1dCgicmV3YXJkIiwgcmV3YXJkKTsKLQotICAgICAgICAgICAgdGFza0xpc3QuYWRkKHRhc2tEYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgidGFza3MiLCB0YXNrTGlzdCk7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiB1cGRhdGVUYXNrU3RhdHVzKExvbmcgdXNlcklkLCBTdHJpbmcgdGFza0lkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+S7u+WKoeeKtuaAgQotICAgICAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gdXNlclRhc2tTdGF0dXNPcHQgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkQW5kVGFza0lkKHVzZXJJZCwgdGFza0lkKTsKLSAgICAgICAgVXNlclRhc2tTdGF0dXMgdXNlclRhc2tTdGF0dXMgPSB1c2VyVGFza1N0YXR1c09wdC5nZXQoKTsKLQotICAgICAgICAvLyDmo4Dmn6Xku7vliqHov5vluqYKLSAgICAgICAgaWYgKHVzZXJUYXNrU3RhdHVzLmdldEN1cnJlbnRQcm9ncmVzcygpID09IDEwMGYpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFRhc2s+IHRhc2tPcHQgPSB0YXNrUmVwb3NpdG9yeS5maW5kQnlJZCh0YXNrSWQpOwotICAgICAgICAgICAgVGFzayB0YXNrID0gdGFza09wdC5nZXQoKTsKLQotICAgICAgICAgICAgLy8g5pu05paw5Lu75Yqh54q25oCB5Li65bey5a6M5oiQCi0gICAgICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRTdGF0dXMoImNvbXBsZXRlZCIpOwotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0Q3VycmVudEV4cGVyaWVuY2UodGFzay5nZXRSZXdhcmRFeHBlcmllbmNlKCkpOwotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0Q3VycmVudFBvaW50cyh0YXNrLmdldFJld2FyZFBvaW50cygpKTsKLQotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LnNhdmUodXNlclRhc2tTdGF0dXMpOwotCi0gICAgICAgICAgICAvLyDmnoTlu7rov5Tlm57mlbDmja4KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh54q25oCB5bey5pu05pawIik7Ci0KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IGN1cnJlbnRSZXdhcmQgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBjdXJyZW50UmV3YXJkLnB1dCgiY3VycmVudF9leHBlcmllbmNlIiwgdGFzay5nZXRSZXdhcmRFeHBlcmllbmNlKCkpOwotICAgICAgICAgICAgY3VycmVudFJld2FyZC5wdXQoImN1cnJlbnRfcG9pbnRzIiwgdGFzay5nZXRSZXdhcmRQb2ludHMoKSk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfcmV3YXJkIiwgY3VycmVudFJld2FyZCk7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh5pyq5a6M5oiQ77yM5peg5rOV5pu05paw54q25oCBIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldFVzZXJFeHBlcmllbmNlKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+S/oeaBrwotICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdCA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCk7Ci0gICAgICAgIGlmICghdXNlck9wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLnlKjmiLfkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHQuZ2V0KCk7Ci0gICAgICAgIEludGVnZXIgY3VycmVudEV4cGVyaWVuY2UgPSB1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCk7Ci0gICAgICAgIE9wdGlvbmFsPExldmVsPiBsZXZlbE9wdCA9IGxldmVsUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VyLmdldExldmVsKCkpOwotICAgICAgICBTdHJpbmcgbGV2ZWxOYW1lID0gbGV2ZWxPcHQuaXNQcmVzZW50KCkgPyBsZXZlbE9wdC5nZXQoKS5nZXRMZXZlbE5hbWUoKSA6ICLmnKrnn6XnrYnnuqciOwotCi0gICAgICAgIExpc3Q8VXNlclRhc2tTdGF0dXM+IGNvbXBsZXRlZFRhc2tzID0gdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmZpbmRCeVVzZXJJZEFuZFN0YXR1cyh1c2VySWQsICJjb21wbGV0ZWQiKTsKLQotICAgICAgICBpbnQgdG90YWxFeHBlcmllbmNlID0gMDsKLSAgICAgICAgaW50IHRvdGFsUG9pbnRzID0gMDsKLSAgICAgICAgZm9yIChVc2VyVGFza1N0YXR1cyB0YXNrU3RhdHVzIDogY29tcGxldGVkVGFza3MpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFRhc2s+IHRhc2tPcHQgPSB0YXNrUmVwb3NpdG9yeS5maW5kQnlJZCh0YXNrU3RhdHVzLmdldFRhc2tJZCgpKTsKLSAgICAgICAgICAgIGlmICh0YXNrT3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgVGFzayB0YXNrID0gdGFza09wdC5nZXQoKTsKLSAgICAgICAgICAgICAgICB0b3RhbEV4cGVyaWVuY2UgKz0gdGFzay5nZXRSZXdhcmRFeHBlcmllbmNlKCk7Ci0gICAgICAgICAgICAgICAgdG90YWxQb2ludHMgKz0gdGFzay5nZXRSZXdhcmRQb2ludHMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIOaehOW7uui/lOWbnuaVsOaNrgotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotICAgICAgICByZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIGN1cnJlbnRFeHBlcmllbmNlKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJsZXZlbCIsIGxldmVsTmFtZSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgidGFza3NfY29tcGxldGVkIiwgY29tcGxldGVkVGFza3Muc2l6ZSgpKTsKLQotICAgICAgICBNYXA8U3RyaW5nLCBJbnRlZ2VyPiByZXdhcmQgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJld2FyZC5wdXQoImV4cGVyaWVuY2UiLCB0b3RhbEV4cGVyaWVuY2UpOwotICAgICAgICByZXdhcmQucHV0KCJwb2ludHMiLCB0b3RhbFBvaW50cyk7Ci0KLSAgICAgICAgcmVzcG9uc2UucHV0KCJyZXdhcmQiLCByZXdhcmQpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXROZXdTdGVwKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIC8vIOiOt+WPlueUqOaIt+eahOesrOS4gOS4quacquWujOaIkOS7u+WKoQotICAgICAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gdXNlclRhc2tTdGF0dXNPcHQgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuZmluZEZpcnN0QnlVc2VySWRBbmRTdGF0dXModXNlcklkLCAicGVuZGluZyIpOwotCi0gICAgICAgIGlmICghdXNlclRhc2tTdGF0dXNPcHQuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi55So5oi35b2T5YmN5rKh5pyJ5pyq5a6M5oiQ55qE5Lu75YqhIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgfQotCi0gICAgICAgIFVzZXJUYXNrU3RhdHVzIHVzZXJUYXNrU3RhdHVzID0gdXNlclRhc2tTdGF0dXNPcHQuZ2V0KCk7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSB1c2VyVGFza1N0YXR1cy5nZXRUYXNrSWQoKTsKLQotICAgICAgICAvLyDojrflj5bor6Xku7vliqHnmoTmj4/ov7AKLSAgICAgICAgT3B0aW9uYWw8VGFzaz4gdGFza09wdCA9IHRhc2tSZXBvc2l0b3J5LmZpbmRCeUlkKHRhc2tJZCk7Ci0gICAgICAgIGlmICghdGFza09wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0KLSAgICAgICAgVGFzayB0YXNrID0gdGFza09wdC5nZXQoKTsKLQotICAgICAgICAvLyDojrflj5bmgLvku7vliqHmlbAKLSAgICAgICAgbG9uZyB0b3RhbFRhc2tzID0gdGFza1JlcG9zaXRvcnkuY291bnQoKTsKLQotICAgICAgICAvLyDmnoTlu7rov5Tlm57mlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJjdXJyZW50X3N0ZXAiLCB0YXNrSWQpOwotICAgICAgICByZXNwb25zZS5wdXQoInRvdGFsX3N0ZXBzIiwgdG90YWxUYXNrcyk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RlcF9kZXNjcmlwdGlvbiIsIHRhc2suZ2V0RGVzY3JpcHRpb24oKSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVwZGF0ZVRhc2tQcm9ncmVzcyhMb25nIHVzZXJJZCwgU3RyaW5nIHRhc2tJZCwgSW50ZWdlciBwcm9ncmVzcykgewotICAgICAgICBPcHRpb25hbDxVc2VyVGFza1N0YXR1cz4gdXNlclRhc2tTdGF0dXNPcHQgPSB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuZmluZEJ5VXNlcklkQW5kVGFza0lkKHVzZXJJZCwgdGFza0lkKTsKLQotICAgICAgICBpZiAoIXVzZXJUYXNrU3RhdHVzT3B0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuS7u+WKoeS4jeWtmOWcqOaIluivpeS7u+WKoeS4jeWxnuS6jueUqOaItyIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBVc2VyVGFza1N0YXR1cyB1c2VyVGFza1N0YXR1cyA9IHVzZXJUYXNrU3RhdHVzT3B0LmdldCgpOwotICAgICAgICB1c2VyVGFza1N0YXR1cy5zZXRDdXJyZW50UHJvZ3Jlc3MoRmxvYXQudmFsdWVPZihwcm9ncmVzcykpOwotICAgICAgICB1c2VyVGFza1N0YXR1c1JlcG9zaXRvcnkuc2F2ZSh1c2VyVGFza1N0YXR1cyk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIui/m+W6puW3suabtOaWsCIpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBjbGFpbVJld2FyZChMb25nIHVzZXJJZCwgU3RyaW5nIHRhc2tJZCkgewotICAgICAgICAvLyDojrflj5bnlKjmiLfku7vliqHnirbmgIEKLSAgICAgICAgT3B0aW9uYWw8VXNlclRhc2tTdGF0dXM+IHVzZXJUYXNrU3RhdHVzT3B0ID0gdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmZpbmRCeVVzZXJJZEFuZFRhc2tJZCh1c2VySWQsIHRhc2tJZCk7Ci0KLSAgICAgICAgaWYgKCF1c2VyVGFza1N0YXR1c09wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHnirbmgIHkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0KLSAgICAgICAgVXNlclRhc2tTdGF0dXMgdXNlclRhc2tTdGF0dXMgPSB1c2VyVGFza1N0YXR1c09wdC5nZXQoKTsKLQotICAgICAgICBpZiAodXNlclRhc2tTdGF0dXMuZ2V0Q3VycmVudFByb2dyZXNzKCkgPT0gMTAwZikgewotICAgICAgICAgICAgaWYgKHVzZXJUYXNrU3RhdHVzLmdldElzUmV3YXJkQ2xhaW1lZCgpKSB7Ci0gICAgICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOwotICAgICAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWlluWKseW3sue7j+mihuWPlui/h+S6hiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBPcHRpb25hbDxUYXNrPiB0YXNrT3B0ID0gdGFza1JlcG9zaXRvcnkuZmluZEJ5SWQodGFza0lkKTsKLSAgICAgICAgICAgIGlmICghdGFza09wdC5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKLSAgICAgICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHkuI3lrZjlnKgiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVGFzayB0YXNrID0gdGFza09wdC5nZXQoKTsKLQotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0SXNSZXdhcmRDbGFpbWVkKHRydWUpOwotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0Q3VycmVudEV4cGVyaWVuY2UodGFzay5nZXRSZXdhcmRFeHBlcmllbmNlKCkpOwotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXMuc2V0Q3VycmVudFBvaW50cyh0YXNrLmdldFJld2FyZFBvaW50cygpKTsKLQotICAgICAgICAgICAgdXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LnNhdmUodXNlclRhc2tTdGF0dXMpOwotCi0gICAgICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdCA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAoIXVzZXJPcHQuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi55So5oi35LiN5a2Y5ZyoIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyT3B0LmdldCgpOwotCi0gICAgICAgICAgICAvLyDlsIbku7vliqHlpZblirHliqDliLDnlKjmiLfnmoTnp6/liIblkoznu4/pqowKLSAgICAgICAgICAgIHVzZXIuc2V0VXNlclBvaW50cyh1c2VyLmdldFVzZXJQb2ludHMoKSArIHRhc2suZ2V0UmV3YXJkUG9pbnRzKCkpOwotICAgICAgICAgICAgdXNlci5zZXRDdXJyZW50RXhwZXJpZW5jZSh1c2VyLmdldEN1cnJlbnRFeHBlcmllbmNlKCkgKyB0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7Ci0KLSAgICAgICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUodXNlcik7Ci0KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5aWW5Yqx5bey6aKG5Y+WIik7Ci0KLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IHJld2FyZCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJld2FyZC5wdXQoImV4cGVyaWVuY2UiLCB0YXNrLmdldFJld2FyZEV4cGVyaWVuY2UoKSk7Ci0gICAgICAgICAgICByZXdhcmQucHV0KCJwb2ludHMiLCB0YXNrLmdldFJld2FyZFBvaW50cygpKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgicmV3YXJkIiwgcmV3YXJkKTsKLQotICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBlcnJvclJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoInN0YXR1cyIsICJmYWlsdXJlIik7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHmnKrlrozmiJDvvIzml6Dms5Xpooblj5blpZblirEiKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY2hlY2tSZXdhcmRTdGF0dXMoTG9uZyB1c2VySWQsIFN0cmluZyB0YXNrSWQpIHsKLSAgICAgICAgLy8g6I635Y+W55So5oi35Lu75Yqh54q25oCBCi0gICAgICAgIE9wdGlvbmFsPFVzZXJUYXNrU3RhdHVzPiB1c2VyVGFza1N0YXR1c09wdCA9IHVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5maW5kQnlVc2VySWRBbmRUYXNrSWQodXNlcklkLCB0YXNrSWQpOwotCi0gICAgICAgIGlmICghdXNlclRhc2tTdGF0dXNPcHQuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZmFpbHVyZSIpOwotICAgICAgICAgICAgZXJyb3JSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh54q25oCB5LiN5a2Y5ZyoIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgfQotCi0gICAgICAgIFVzZXJUYXNrU3RhdHVzIHVzZXJUYXNrU3RhdHVzID0gdXNlclRhc2tTdGF0dXNPcHQuZ2V0KCk7Ci0KLSAgICAgICAgLy8g5qOA5p+l5aWW5Yqx5piv5ZCm5bey6aKG5Y+WCi0gICAgICAgIGlmICh1c2VyVGFza1N0YXR1cy5nZXRJc1Jld2FyZENsYWltZWQoKSkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInJld2FyZF9pc3N1ZWQiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHlpZblirHlt7Looqvpooblj5YiKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfQotCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInJld2FyZF9ub3RfaXNzdWVkIik7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHlpZblirHmnKrooqvpooblj5YiKTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckZvbGxvd1NlcnZpY2UuamF2YSBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckZvbGxvd1NlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyMmI0OC4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJGb2xsb3dTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcnM7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyRm9sbG93OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJGb2xsb3dSZXBvc2l0b3J5OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1AU2VydmljZQotcHVibGljIGNsYXNzIFVzZXJGb2xsb3dTZXJ2aWNlIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJGb2xsb3dSZXBvc2l0b3J5IHVzZXJGb2xsb3dSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlclJlcG9zaXRvcnkgdXNlclJlcG9zaXRvcnk7Ci0KLSAgICAvLyDnlKjmiLflhbPms6jmk43kvZwKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBmb2xsb3coTG9uZyBmb2xsb3dlcklkLCBMb25nIGZvbGxvd2VkSWQpIHsKLSAgICAgICAgaWYgKGZvbGxvd2VySWQuZXF1YWxzKGZvbGxvd2VkSWQpKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZXJyb3IiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLkuI3og73lhbPms6joh6rlt7EiKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOajgOafpeaYr+WQpuW3suWFs+azqOivpeeUqOaItwotICAgICAgICBVc2VyRm9sbG93IGV4aXN0aW5nRm9sbG93ID0gdXNlckZvbGxvd1JlcG9zaXRvcnkuZmluZEJ5Rm9sbG93ZXJJZEFuZEZvbGxvd2VkSWQoZm9sbG93ZXJJZCwgZm9sbG93ZWRJZCk7Ci0gICAgICAgIGlmIChleGlzdGluZ0ZvbGxvdyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyDliJvlu7rmlrDnmoTlhbPms6jorrDlvZUKLSAgICAgICAgICAgIFVzZXJGb2xsb3cgdXNlckZvbGxvdyA9IG5ldyBVc2VyRm9sbG93KCk7Ci0gICAgICAgICAgICB1c2VyRm9sbG93LnNldEZvbGxvd2VySWQoZm9sbG93ZXJJZCk7Ci0gICAgICAgICAgICB1c2VyRm9sbG93LnNldEZvbGxvd2VkSWQoZm9sbG93ZWRJZCk7Ci0gICAgICAgICAgICB1c2VyRm9sbG93LnNldEZvbGxvd1RpbWUobmV3IGphdmEudXRpbC5EYXRlKCkpOwotCi0gICAgICAgICAgICB1c2VyRm9sbG93UmVwb3NpdG9yeS5zYXZlKHVzZXJGb2xsb3cpOwotCi0gICAgICAgICAgICAvLyDov5Tlm57lhbPms6jmiJDlip/lk43lupQKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5YWz5rOo5oiQ5YqfIik7Ci0gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZXJyb3IiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlt7Lnu4/lhbPms6jor6XnlKjmiLciKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIOWPlua2iOWFs+azqOaTjeS9nAotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IHVuZm9sbG93KExvbmcgZm9sbG93ZXJJZCwgTG9uZyBmb2xsb3dlZElkKSB7Ci0gICAgICAgIFVzZXJGb2xsb3cgdXNlckZvbGxvdyA9IHVzZXJGb2xsb3dSZXBvc2l0b3J5LmZpbmRCeUZvbGxvd2VySWRBbmRGb2xsb3dlZElkKGZvbGxvd2VySWQsIGZvbGxvd2VkSWQpOwotCi0gICAgICAgIGlmICh1c2VyRm9sbG93ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHVzZXJGb2xsb3dSZXBvc2l0b3J5LmRlbGV0ZSh1c2VyRm9sbG93KTsKLQotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlj5bmtojlhbPms6jmiJDlip8iKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJlcnJvciIpOwotICAgICAgICAgICAgcmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuacquaJvuWIsOWFs+azqOWFs+ezuyIpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g6I635Y+W5p+Q5Liq55So5oi355qE5omA5pyJ57KJ5LidCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0Rm9sbG93ZXJzKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIExpc3Q8VXNlckZvbGxvdz4gZm9sbG93ZXJzID0gdXNlckZvbGxvd1JlcG9zaXRvcnkuZmluZEJ5Rm9sbG93ZWRJZCh1c2VySWQpOwotCi0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gZm9sbG93ZXJzTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmb3IgKFVzZXJGb2xsb3cgZm9sbG93IDogZm9sbG93ZXJzKSB7Ci0gICAgICAgICAgICAvLyDojrflj5bnsonkuJ3nmoTnlKjmiLfkv6Hmga8KLSAgICAgICAgICAgIFVzZXJzIGZvbGxvd2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQoZm9sbG93LmdldEZvbGxvd2VySWQoKSkub3JFbHNlKG51bGwpOwotICAgICAgICAgICAgaWYgKGZvbGxvd2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGZvbGxvd2VySW5mbyA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgICAgICBmb2xsb3dlckluZm8ucHV0KCJ1c2VyX2lkIiwgZm9sbG93ZXIuZ2V0VXNlcklkKCkpOwotICAgICAgICAgICAgICAgIGZvbGxvd2VySW5mby5wdXQoInVzZXJuYW1lIiwgZm9sbG93ZXIuZ2V0VXNlcm5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgZm9sbG93ZXJJbmZvLnB1dCgiYXZhdGFyX3VybCIsIGZvbGxvd2VyLmdldEF2YXRhclVybCgpKTsKLSAgICAgICAgICAgICAgICBmb2xsb3dlcnNMaXN0LmFkZChmb2xsb3dlckluZm8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g6L+U5Zue5ZON5bqU5pWw5o2uCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJ0b3RhbCIsIGZvbGxvd2Vyc0xpc3Quc2l6ZSgpKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJmb2xsb3dlcnMiLCBmb2xsb3dlcnNMaXN0KTsKLQotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W5p+Q5Liq55So5oi355qE5omA5pyJ5YWz5rOo55So5oi3Ci0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0Rm9sbG93aW5nKExvbmcgdXNlcklkKSB7Ci0gICAgICAgIExpc3Q8VXNlckZvbGxvdz4gZm9sbG93aW5nID0gdXNlckZvbGxvd1JlcG9zaXRvcnkuZmluZEJ5Rm9sbG93ZXJJZCh1c2VySWQpOwotCi0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gZm9sbG93aW5nTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmb3IgKFVzZXJGb2xsb3cgZm9sbG93IDogZm9sbG93aW5nKSB7Ci0gICAgICAgICAgICAvLyDojrflj5booqvlhbPms6jnmoTnlKjmiLfkv6Hmga8KLSAgICAgICAgICAgIFVzZXJzIGZvbGxvd2VkVXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKGZvbGxvdy5nZXRGb2xsb3dlZElkKCkpLm9yRWxzZShudWxsKTsKLSAgICAgICAgICAgIGlmIChmb2xsb3dlZFVzZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZm9sbG93aW5nSW5mbyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgICAgICBmb2xsb3dpbmdJbmZvLnB1dCgidXNlcl9pZCIsIGZvbGxvd2VkVXNlci5nZXRVc2VySWQoKSk7Ci0gICAgICAgICAgICAgICAgZm9sbG93aW5nSW5mby5wdXQoInVzZXJuYW1lIiwgZm9sbG93ZWRVc2VyLmdldFVzZXJuYW1lKCkpOwotICAgICAgICAgICAgICAgIGZvbGxvd2luZ0luZm8ucHV0KCJhdmF0YXJfdXJsIiwgZm9sbG93ZWRVc2VyLmdldEF2YXRhclVybCgpKTsKLSAgICAgICAgICAgICAgICBmb2xsb3dpbmdMaXN0LmFkZChmb2xsb3dpbmdJbmZvKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgidG90YWwiLCBmb2xsb3dpbmdMaXN0LnNpemUoKSk7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgiZm9sbG93aW5nIiwgZm9sbG93aW5nTGlzdCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlck1lc3NhZ2VTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJNZXNzYWdlU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWY2MmU3Li4wMDAwMDAwCi0tLSBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlck1lc3NhZ2VTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZTsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlck1lc3NhZ2VzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJNZXNzYWdlc1JlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclJlcG9zaXRvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKLQotQFNlcnZpY2UKLXB1YmxpYyBjbGFzcyBVc2VyTWVzc2FnZVNlcnZpY2UgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlck1lc3NhZ2VzUmVwb3NpdG9yeSB1c2VyTWVzc2FnZXNSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlclJlcG9zaXRvcnkgdXNlclJlcG9zaXRvcnk7Ci0KLSAgICAvLyDlj5HpgIHnp4Hkv6EKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBzZW5kTWVzc2FnZShMb25nIHNlbmRlcklkLCBMb25nIHJlY2VpdmVySWQsIFN0cmluZyBjb250ZW50KSB7Ci0gICAgICAgIFVzZXJNZXNzYWdlcyBtZXNzYWdlID0gbmV3IFVzZXJNZXNzYWdlcygpOwotICAgICAgICBtZXNzYWdlLnNldFNlbmRlcklkKHNlbmRlcklkKTsKLSAgICAgICAgbWVzc2FnZS5zZXRSZWNlaXZlcklkKHJlY2VpdmVySWQpOwotICAgICAgICBtZXNzYWdlLnNldENvbnRlbnQoY29udGVudCk7Ci0gICAgICAgIG1lc3NhZ2Uuc2V0VGltZShuZXcgRGF0ZSgpKTsKLSAgICAgICAgVXNlck1lc3NhZ2VzIHNhdmVkTWVzc2FnZSA9IHVzZXJNZXNzYWdlc1JlcG9zaXRvcnkuc2F2ZShtZXNzYWdlKTsKLQotICAgICAgICAvLyDov5Tlm57lk43lupQKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi56eB5L+h5Y+R6YCB5oiQ5YqfIik7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZV9pZCIsIHNhdmVkTWVzc2FnZS5nZXRNZXNzYWdlSWQoKSk7Ci0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICAvLyDojrflj5blvZPliY3nlKjmiLfnmoTmiYDmnInmtojmga8KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRVc2VyTWVzc2FnZXMoTG9uZyB1c2VySWQpIHsKLSAgICAgICAgLy8g5p+l6K+i5b2T5YmN55So5oi35Y+R6YCB5ZKM5o6l5pS255qE5omA5pyJ5raI5oGvCi0gICAgICAgIExpc3Q8VXNlck1lc3NhZ2VzPiBtZXNzYWdlcyA9IHVzZXJNZXNzYWdlc1JlcG9zaXRvcnkuZmluZEJ5U2VuZGVySWRPclJlY2VpdmVySWQodXNlcklkLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOiOt+WPluWPkemAgeiAheWSjOaOpeaUtuiAheeahOeUqOaIt+WQjQotICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IG1lc3NhZ2VEZXRhaWxzID0gbWVzc2FnZXMuc3RyZWFtKCkKLSAgICAgICAgICAgICAgICAubWFwKG1lc3NhZ2UgLT4gewotICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1lc3NhZ2VNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJtZXNzYWdlX2lkIiwgbWVzc2FnZS5nZXRNZXNzYWdlSWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJzZW5kZXJfaWQiLCBtZXNzYWdlLmdldFNlbmRlcklkKCkpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgicmVjZWl2ZXJfaWQiLCBtZXNzYWdlLmdldFJlY2VpdmVySWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJjb250ZW50IiwgbWVzc2FnZS5nZXRDb250ZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTWFwLnB1dCgidGltZXN0YW1wIiwgbWVzc2FnZS5nZXRUaW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2VuZGVyVXNlcm5hbWUgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChtZXNzYWdlLmdldFNlbmRlcklkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh1c2VyIC0+IHVzZXIuZ2V0VXNlcm5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAub3JFbHNlKCJVbmtub3duIik7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJzZW5kZXJfdXNlcm5hbWUiLCBzZW5kZXJVc2VybmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWNlaXZlclVzZXJuYW1lID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQobWVzc2FnZS5nZXRSZWNlaXZlcklkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh1c2VyIC0+IHVzZXIuZ2V0VXNlcm5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAub3JFbHNlKCJVbmtub3duIik7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNYXAucHV0KCJyZWNlaXZlcl91c2VybmFtZSIsIHJlY2VpdmVyVXNlcm5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlTWFwOwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZS5wdXQoIm1lc3NhZ2VzIiwgbWVzc2FnZURldGFpbHMpOwotICAgICAgICByZXR1cm4gcmVzcG9uc2U7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W5Y2V5p2h5raI5oGv55qE6K+m5oOFCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0TWVzc2FnZShMb25nIG1lc3NhZ2VJZCkgewotICAgICAgICBPcHRpb25hbDxVc2VyTWVzc2FnZXM+IG9wdGlvbmFsTWVzc2FnZSA9IHVzZXJNZXNzYWdlc1JlcG9zaXRvcnkuZmluZEJ5SWQobWVzc2FnZUlkKTsKLQotICAgICAgICBpZiAob3B0aW9uYWxNZXNzYWdlLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICBVc2VyTWVzc2FnZXMgbWVzc2FnZSA9IG9wdGlvbmFsTWVzc2FnZS5nZXQoKTsKLQotICAgICAgICAgICAgLy8g6I635Y+W5Y+R6YCB6ICF5ZKM5o6l5pS26ICF55qE55So5oi35ZCNCi0gICAgICAgICAgICBTdHJpbmcgc2VuZGVyVXNlcm5hbWUgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZChtZXNzYWdlLmdldFNlbmRlcklkKCkpCi0gICAgICAgICAgICAgICAgICAgIC5tYXAodXNlciAtPiB1c2VyLmdldFVzZXJuYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIC5vckVsc2UoIlVua25vd24iKTsKLSAgICAgICAgICAgIFN0cmluZyByZWNlaXZlclVzZXJuYW1lID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQobWVzc2FnZS5nZXRSZWNlaXZlcklkKCkpCi0gICAgICAgICAgICAgICAgICAgIC5tYXAodXNlciAtPiB1c2VyLmdldFVzZXJuYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIC5vckVsc2UoIlVua25vd24iKTsKLQotICAgICAgICAgICAgLy8g5p6E5bu65ZON5bqU5pWw5o2uCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtZXNzYWdlRGV0YWlscyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIG1lc3NhZ2VEZXRhaWxzLnB1dCgibWVzc2FnZV9pZCIsIG1lc3NhZ2UuZ2V0TWVzc2FnZUlkKCkpOwotICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJzZW5kZXJfaWQiLCBtZXNzYWdlLmdldFNlbmRlcklkKCkpOwotICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJzZW5kZXJfdXNlcm5hbWUiLCBzZW5kZXJVc2VybmFtZSk7Ci0gICAgICAgICAgICBtZXNzYWdlRGV0YWlscy5wdXQoInJlY2VpdmVyX2lkIiwgbWVzc2FnZS5nZXRSZWNlaXZlcklkKCkpOwotICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJyZWNlaXZlcl91c2VybmFtZSIsIHJlY2VpdmVyVXNlcm5hbWUpOwotICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJjb250ZW50IiwgbWVzc2FnZS5nZXRDb250ZW50KCkpOwotICAgICAgICAgICAgbWVzc2FnZURldGFpbHMucHV0KCJ0aW1lc3RhbXAiLCBtZXNzYWdlLmdldFRpbWUoKSk7Ci0KLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsIG1lc3NhZ2VEZXRhaWxzKTsKLSAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZXJyb3JSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAiZXJyb3IiKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIk1lc3NhZ2Ugbm90IGZvdW5kIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTsKLSAgICAgICAgfQotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJTZXJ2aWNlLmphdmEKaW5kZXggMGQzNzg1NC4uNzE0MzVjNyAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5qYXZhCisrKyBiL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuamF2YQpAQCAtMSwyNjkgKzEsMjUgQEAKIHBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2U7CiAKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlckludml0ZUNvZGU7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlclJlcG9zaXRvcnk7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnJlcG9zaXRvcnkuVXNlckludml0ZUNvZGVSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1AU2VydmljZQotcHVibGljIGNsYXNzIFVzZXJTZXJ2aWNlIHsKLQotICAgIEBBdXRvd2lyZWQKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgVXNlckludml0ZUNvZGVSZXBvc2l0b3J5IHVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeTsKLQotICAgIC8vIOeUn+aIkOmCgOivt+eggQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdlbmVyYXRlSW52aXRlQ29kZShMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDojrflj5bnlKjmiLfkv6Hmga8KLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlKG51bGwpOwotCi0gICAgICAgIC8vIOWmguaenOeUqOaIt+S4jeWtmOWcqO+8jOi/lOWbnumUmeivrwotICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueUqOaIt+S4jeWtmOWcqCIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDmo4Dmn6XnlKjmiLfnmoTpgoDor7fmlbDph48KLSAgICAgICAgaWYgKHVzZXIuZ2V0SW52aXRlQ291bnQoKSA8PSAwKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGVycm9yUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBlcnJvclJlc3BvbnNlLnB1dCgic3RhdHVzIiwgImZhaWx1cmUiKTsKLSAgICAgICAgICAgIGVycm9yUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuayoeacieWJqeS9meeahOmCgOivt+eggSIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDnlJ/miJDllK/kuIDnmoTpgoDor7fnoIEKLSAgICAgICAgU3RyaW5nIGludml0ZUNvZGUgPSBnZW5lcmF0ZVVuaXF1ZUludml0ZUNvZGUoKTsKLQotICAgICAgICAvLyDlsIbpgoDor7fnoIHkv53lrZjliLAgYHVzZXJfaW52aXRlX2NvZGVgIOihqAotICAgICAgICBVc2VySW52aXRlQ29kZSB1c2VySW52aXRlQ29kZSA9IG5ldyBVc2VySW52aXRlQ29kZSgpOwotICAgICAgICB1c2VySW52aXRlQ29kZS5zZXRVc2VySWQodXNlcklkKTsKLSAgICAgICAgdXNlckludml0ZUNvZGUuc2V0SW52aXRlQ29kZShpbnZpdGVDb2RlKTsKLSAgICAgICAgdXNlckludml0ZUNvZGUuc2V0Q3JlYXRlZEF0KGphdmEudGltZS5Mb2NhbERhdGVUaW1lLm5vdygpKTsKLQotICAgICAgICB1c2VySW52aXRlQ29kZVJlcG9zaXRvcnkuc2F2ZSh1c2VySW52aXRlQ29kZSk7Ci0KLSAgICAgICAgLy8g5pu05paw55So5oi355qEIGBpbnZpdGVfY291bnRg77yM5YeP5bCRMQotICAgICAgICB1c2VyLnNldEludml0ZUNvdW50KHVzZXIuZ2V0SW52aXRlQ291bnQoKSAtIDEpOwotICAgICAgICB1c2VyUmVwb3NpdG9yeS5zYXZlKHVzZXIpOwotCi0gICAgICAgIC8vIOi/lOWbnuaIkOWKn+S/oeaBrwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIHJlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLpgoDor7fnoIHnlJ/miJDmiJDlip8iKTsKLSAgICAgICAgcmVzcG9uc2UucHV0KCJpbnZpdGVfY29kZSIsIGludml0ZUNvZGUpOwotCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKLSAgICB9Ci0KLSAgICAvLyDnlJ/miJDllK/kuIDnmoTpgoDor7fnoIHvvIzkvb/nlKgyNuS4quWtl+avje+8iOWkp+Wwj+WGme+8iQotICAgIHByaXZhdGUgU3RyaW5nIGdlbmVyYXRlVW5pcXVlSW52aXRlQ29kZSgpIHsKLSAgICAgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgaW52aXRlQ29kZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0KLSAgICAgICAgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgICAgICAgICBpbnZpdGVDb2RlLmFwcGVuZChjaGFyYWN0ZXJzLmNoYXJBdChyYW5kb20ubmV4dEludChjaGFyYWN0ZXJzLmxlbmd0aCgpKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGludml0ZUNvZGUudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHJlZ2lzdGVyVXNlcihTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBlbWFpbCwgU3RyaW5nIHBhc3N3b3JkLCBTdHJpbmcgcm9sZSwgU3RyaW5nIGludml0ZUNvZGUpIHsKLSAgICAgICAgLy8g5qOA5p+l6YKu566x5piv5ZCm5bey57uP5rOo5YaMCi0gICAgICAgIE9wdGlvbmFsPFVzZXJzPiBleGlzdGluZ0VtYWlsVXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUVtYWlsKGVtYWlsKTsKLSAgICAgICAgaWYgKGV4aXN0aW5nRW1haWxVc2VyLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIuivpemCrueuseW3suiiq+azqOWGjCI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDmo4Dmn6XnlKjmiLflkI3mmK/lkKblt7Lnu4/lrZjlnKgKLSAgICAgICAgT3B0aW9uYWw8VXNlcnM+IGV4aXN0aW5nVXNlcm5hbWVVc2VyID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5VXNlcm5hbWUodXNlcm5hbWUpOyAvLyDpnIDopoHmoLnmja7nlKjmiLflkI3mn6Xor6IKLSAgICAgICAgaWYgKGV4aXN0aW5nVXNlcm5hbWVVc2VyLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIuivpeeUqOaIt+WQjeW3suiiq+azqOWGjCI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDmo4Dmn6XpgoDor7fnoIHmmK/lkKbmnInmlYgKLSAgICAgICAgaWYgKGludml0ZUNvZGUgPT0gbnVsbCB8fCBpbnZpdGVDb2RlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmV0dXJuICLpgoDor7fnoIHkuI3og73kuLrnqboiOwotICAgICAgICB9Ci0KLSAgICAgICAgT3B0aW9uYWw8VXNlckludml0ZUNvZGU+IGludml0ZSA9IHVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5maW5kQnlJbnZpdGVDb2RlKGludml0ZUNvZGUpOwotICAgICAgICBpZiAoaW52aXRlLmlzRW1wdHkoKSB8fCBpbnZpdGUuZ2V0KCkuZ2V0SXNVc2VkKCkpIHsKLSAgICAgICAgICAgIHJldHVybiAi6YKA6K+356CB5peg5pWI5oiW5bey6KKr5L2/55SoIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOiuvue9rum7mOiupOetiee6p+S4ujLvvIjnlLHkuo7pgoDor7fnoIHmnInmlYjvvIkKLSAgICAgICAgTG9uZyBsZXZlbCA9IDJMOwotCi0gICAgICAgIC8vIOiuvue9rum7mOiupOWktOWDjyBVUkwKLSAgICAgICAgU3RyaW5nIGF2YXRhclVybCA9ICJodHRwczovL2V4YW1wbGUuY29tL2RlZmF1bHQtYXZhdGFyLmpwZyI7ICAvLyDpu5jorqTlpLTlg48KLQotICAgICAgICAvLyDojrflj5bpgoDor7fnoIHlr7nlupTnmoTnlKjmiLdJRAotICAgICAgICBVc2VySW52aXRlQ29kZSBpbnZpdGVFbnRpdHkgPSBpbnZpdGUuZ2V0KCk7Ci0gICAgICAgIExvbmcgaW52aXRlVXNlcklkID0gaW52aXRlRW50aXR5LmdldFVzZXJJZCgpOwotCi0gICAgICAgIC8vIOWIm+W7uuaWsOeUqOaItwotICAgICAgICBVc2VycyBuZXdVc2VyID0gbmV3IFVzZXJzKCk7Ci0gICAgICAgIG5ld1VzZXIuc2V0VXNlcm5hbWUodXNlcm5hbWUpOwotICAgICAgICBuZXdVc2VyLnNldEVtYWlsKGVtYWlsKTsKLSAgICAgICAgbmV3VXNlci5zZXRQYXNzd29yZChwYXNzd29yZCk7Ci0gICAgICAgIG5ld1VzZXIuc2V0Um9sZShyb2xlKTsKLSAgICAgICAgbmV3VXNlci5zZXRJbnZpdGVDb3VudCgwKTsgIC8vIOWIneWni+mCgOivt+eggeaVsOmHj+S4uiAwCi0gICAgICAgIG5ld1VzZXIuc2V0TGV2ZWwobGV2ZWwpOwotICAgICAgICBuZXdVc2VyLnNldEF2YXRhclVybChhdmF0YXJVcmwpOyAgLy8g6K6+572u6buY6K6k5aS05YOPCi0gICAgICAgIG5ld1VzZXIuc2V0UmVnaXN0cmF0aW9uRGF0ZShuZXcgamF2YS51dGlsLkRhdGUoKSk7ICAvLyDorr7nva7ms6jlhozml6XmnJ8KLSAgICAgICAgbmV3VXNlci5zZXRDdXJyZW50RXhwZXJpZW5jZSgwKTsgIC8vIOm7mOiupOe7j+mqjOS4uiAwCi0gICAgICAgIG5ld1VzZXIuc2V0Q3VycmVudFNlZWRpbmdIb3VycygwZik7ICAvLyDpu5jorqTlgZrnp43ml7bplb/kuLogMAotICAgICAgICBuZXdVc2VyLnNldFJlZ2lzdHJhdGlvblRpbWUobmV3IGphdmEudXRpbC5EYXRlKCkpOyAgLy8g6K6+572u5rOo5YaM5pe26Ze05Li65b2T5YmN5pe26Ze0Ci0KLSAgICAgICAgLy8g5L+d5a2Y55So5oi35L+h5oGvCi0gICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUobmV3VXNlcik7Ci0KLSAgICAgICAgLy8g5pu05paw6YKA6K+356CB55qE5L2/55So54q25oCBCi0gICAgICAgIGludml0ZUVudGl0eS5zZXRJc1VzZWQodHJ1ZSk7Ci0gICAgICAgIHVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5zYXZlKGludml0ZUVudGl0eSk7Ci0KLSAgICAgICAgcmV0dXJuICLnlKjmiLfms6jlhozmiJDlip8iOwotICAgIH0KIAogCi0gICAgcHVibGljIFN0cmluZyBsb2dpblVzZXIoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgLy8g5qOA5p+l55So5oi35piv5ZCm5a2Y5ZyoCi0gICAgICAgIE9wdGlvbmFsPFVzZXJzPiB1c2VyT3B0aW9uYWwgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlVc2VybmFtZSh1c2VybmFtZSk7Ci0gICAgICAgIGlmICh1c2VyT3B0aW9uYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIueUqOaIt+WQjeS4jeWtmOWcqCI7Ci0gICAgICAgIH0KK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuZXh0ZW5zaW9uLnNlcnZpY2UuSVNlcnZpY2U7CiAKLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJPcHRpb25hbC5nZXQoKTsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXI7CiAKLSAgICAgICAgLy8g5qOA5p+l5a+G56CB5piv5ZCm5q2j56GuCi0gICAgICAgIGlmICghdXNlci5nZXRQYXNzd29yZCgpLmVxdWFscyhwYXNzd29yZCkpIHsKLSAgICAgICAgICAgIHJldHVybiAi5a+G56CB6ZSZ6K+vIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOeZu+W9leaIkOWKnwotICAgICAgICByZXR1cm4gIueZu+W9leaIkOWKnyI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBjaGFuZ2VQYXNzd29yZChMb25nIHVzZXJJZCwgU3RyaW5nIG9sZFBhc3N3b3JkLCBTdHJpbmcgbmV3UGFzc3dvcmQsIFN0cmluZyBjb25maXJtUGFzc3dvcmQpIHsKLSAgICAgICAgLy8g5p+l5om+55So5oi3Ci0gICAgICAgIFVzZXJzIHVzZXIgPSB1c2VyUmVwb3NpdG9yeS5maW5kQnlJZCh1c2VySWQpLm9yRWxzZShudWxsKTsKLQotICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gIueUqOaIt+S4jeWtmOWcqCI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyDmo4Dmn6Xml6flr4bnoIHmmK/lkKbmraPnoa4KLSAgICAgICAgaWYgKCF1c2VyLmdldFBhc3N3b3JkKCkuZXF1YWxzKG9sZFBhc3N3b3JkKSkgewotICAgICAgICAgICAgcmV0dXJuICLml6flr4bnoIHplJnor68iOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5qOA5p+l5paw5a+G56CB5ZKM56Gu6K6k5a+G56CB5piv5ZCm5LiA6Ie0Ci0gICAgICAgIGlmICghbmV3UGFzc3dvcmQuZXF1YWxzKGNvbmZpcm1QYXNzd29yZCkpIHsKLSAgICAgICAgICAgIHJldHVybiAi5paw5a+G56CB5LiO56Gu6K6k5a+G56CB5LiN5LiA6Ie0IjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOabtOaWsOWvhueggQotICAgICAgICB1c2VyLnNldFBhc3N3b3JkKG5ld1Bhc3N3b3JkKTsKLSAgICAgICAgdXNlclJlcG9zaXRvcnkuc2F2ZSh1c2VyKTsKLQotICAgICAgICByZXR1cm4gIuWvhueggeS/ruaUueaIkOWKnyI7Ci0gICAgfQotCi0gICAgLy8g6I635Y+W55So5oi35Liq5Lq66LWE5paZCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0UHJvZmlsZShMb25nIHVzZXJJZCkgewotICAgICAgICBPcHRpb25hbDxVc2Vycz4gdXNlck9wdGlvbmFsID0gdXNlclJlcG9zaXRvcnkuZmluZEJ5SWQodXNlcklkKTsKLQotICAgICAgICAvLyDlpoLmnpznlKjmiLfkuI3lrZjlnKjvvIzov5Tlm55udWxs5oiW6ICF5Y+v5Lul5oqb5Ye65byC5bi4Ci0gICAgICAgIGlmICh1c2VyT3B0aW9uYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8g5Y+v5Lul6L+U5ZueIG51bGwg5oiW6ICF5qC55o2u6ZyA6KaB6L+U5Zue6ZSZ6K+v5L+h5oGvCi0gICAgICAgIH0KLQotICAgICAgICBVc2VycyB1c2VyID0gdXNlck9wdGlvbmFsLmdldCgpOwotCi0gICAgICAgIC8vIOWwhumcgOimgeeahOWtl+auteaUvuWFpSBNYXAg5LitCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcHJvZmlsZSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLSAgICAgICAgcHJvZmlsZS5wdXQoImF2YXRhclVybCIsIHVzZXIuZ2V0QXZhdGFyVXJsKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgidXNlcm5hbWUiLCB1c2VyLmdldFVzZXJuYW1lKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgiZW1haWwiLCB1c2VyLmdldEVtYWlsKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgiZ2VuZGVyIiwgdXNlci5nZXRHZW5kZXIoKSk7Ci0gICAgICAgIHByb2ZpbGUucHV0KCJkZXNjcmlwdGlvbiIsIHVzZXIuZ2V0RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIHByb2ZpbGUucHV0KCJob2JiaWVzIiwgdXNlci5nZXRIb2JiaWVzKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgibGV2ZWwiLCB1c2VyLmdldExldmVsKCkpOwotICAgICAgICBwcm9maWxlLnB1dCgiRXhwZXJpZW5jZSIsIHVzZXIuZ2V0Q3VycmVudEV4cGVyaWVuY2UoKSk7Ci0gICAgICAgIHByb2ZpbGUucHV0KCJ1cGxvYWRDb3VudCIsIHVzZXIuZ2V0VXBsb2FkQ291bnQoKSk7Ci0gICAgICAgIHByb2ZpbGUucHV0KCJkb3dubG9hZENvdW50IiwgdXNlci5nZXREb3dubG9hZENvdW50KCkpOwotICAgICAgICBwcm9maWxlLnB1dCgic2hhcmVSYXRlIiwgdXNlci5nZXRTaGFyZVJhdGUoKSk7Ci0gICAgICAgIHByb2ZpbGUucHV0KCJyZWdpc3RyYXRpb25UaW1lIiwgdXNlci5nZXRSZWdpc3RyYXRpb25UaW1lKCkpOwotCi0gICAgICAgIHJldHVybiBwcm9maWxlOwotICAgIH0KLQotICAgIC8vIOS/ruaUueeUqOaIt+S4quS6uui1hOaWmQotICAgIHB1YmxpYyBib29sZWFuIGVkaXRQcm9maWxlKExvbmcgdXNlcklkLCBTdHJpbmcgYXZhdGFyVXJsLCBTdHJpbmcgbmlja25hbWUsIFN0cmluZyBnZW5kZXIsIFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIGhvYmJpZXMpIHsKLSAgICAgICAgT3B0aW9uYWw8VXNlcnM+IHVzZXJPcHRpb25hbCA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5aaC5p6c55So5oi35LiN5a2Y5Zyo77yM6L+U5ZueZmFsc2UKLSAgICAgICAgaWYgKHVzZXJPcHRpb25hbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g55So5oi35LiN5a2Y5ZyoCi0gICAgICAgIH0KLQotICAgICAgICBVc2VycyB1c2VyID0gdXNlck9wdGlvbmFsLmdldCgpOwotCi0gICAgICAgIC8vIOabtOaWsOeUqOaIt+i1hOaWme+8jOWPquacieS8oOWFpeWAvOaJjeS8muabtOaWsOWvueW6lOWtl+autQotICAgICAgICBpZiAoYXZhdGFyVXJsICE9IG51bGwpIHsKLSAgICAgICAgICAgIHVzZXIuc2V0QXZhdGFyVXJsKGF2YXRhclVybCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5pY2tuYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgIHVzZXIuc2V0VXNlcm5hbWUobmlja25hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChnZW5kZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdXNlci5zZXRHZW5kZXIoZ2VuZGVyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgdXNlci5zZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhvYmJpZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgdXNlci5zZXRIb2JiaWVzKGhvYmJpZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g5L+d5a2Y5pu05paw5ZCO55qE55So5oi35L+h5oGvCi0gICAgICAgIHVzZXJSZXBvc2l0b3J5LnNhdmUodXNlcik7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIOabtOaWsOaIkOWKnwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGNhbGN1bGF0ZVNoYXJlUmF0ZShMb25nIHVzZXJJZCkgewotICAgICAgICAvLyDmn6Xmib7nlKjmiLcKLSAgICAgICAgVXNlcnMgdXNlciA9IHVzZXJSZXBvc2l0b3J5LmZpbmRCeUlkKHVzZXJJZCkub3JFbHNlKG51bGwpOwotICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gTWFwLm9mKCJzdGF0dXMiLCAiZXJyb3IiLCAibWVzc2FnZSIsICLnlKjmiLfkuI3lrZjlnKgiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIOiOt+WPluS4iuS8oOmHj+WSjOS4i+i9vemHjwotICAgICAgICBGbG9hdCB1cGxvYWRDb3VudCA9IHVzZXIuZ2V0VXBsb2FkQ291bnQoKTsKLSAgICAgICAgRmxvYXQgZG93bmxvYWRDb3VudCA9IHVzZXIuZ2V0RG93bmxvYWRDb3VudCgpOwotCi0gICAgICAgIC8vIOiuoeeul+WIhuS6q+eOhwotICAgICAgICBGbG9hdCBzaGFyZVJhdGUgPSAwZjsgIC8vIOm7mOiupOWIhuS6q+eOh+S4ujAKLSAgICAgICAgaWYgKGRvd25sb2FkQ291bnQgIT0gMCkgewotICAgICAgICAgICAgc2hhcmVSYXRlID0gdXBsb2FkQ291bnQgLyBkb3dubG9hZENvdW50OyAgLy8g5YiG5Lqr546HID0g5LiK5Lyg6YePIC8g5LiL6L296YePCi0gICAgICAgIH0KLQotICAgICAgICAvLyDmm7TmlrDnlKjmiLfnmoTliIbkuqvnjocKLSAgICAgICAgdXNlci5zZXRTaGFyZVJhdGUoc2hhcmVSYXRlKTsKLSAgICAgICAgdXNlclJlcG9zaXRvcnkuc2F2ZSh1c2VyKTsKLQotICAgICAgICAvLyDov5Tlm57nu5PmnpwKLSAgICAgICAgcmV0dXJuIE1hcC5vZigic3RhdHVzIiwgInN1Y2Nlc3MiLCAibWVzc2FnZSIsICLliIbkuqvnjoforqHnrpfmiJDlip8iLCAic2hhcmVSYXRlIiwgc2hhcmVSYXRlKTsKLSAgICB9CitwdWJsaWMgaW50ZXJmYWNlIFVzZXJTZXJ2aWNlIGV4dGVuZHMgSVNlcnZpY2U8VXNlcj4geworICAgIFVzZXIgbG9naW5TZXJ2aWNlKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKTsKIAogCi19CisgICAgYm9vbGVhbiBwcmVSZWdpc3RlclVzZXIoVXNlciB1c2VyKTsKKworCisgICAgYm9vbGVhbiB2ZXJpZnlFbWFpbChTdHJpbmcgZW1haWwsIFN0cmluZyB0b2tlbik7CisKKworICAgIGJvb2xlYW4gY2hlY2tFbWFpbEV4aXN0cyhTdHJpbmcgZW1haWwpOworCisgICAgYm9vbGVhbiBjaGVja1Bhc3N3b3JkKExvbmcgdXNlcklkLCBTdHJpbmcgcmF3UGFzc3dvcmQpOworCisKKy8vICAgIEludGVnZXIgZ2V0VXNlcklkKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YQppbmRleCBkOGRlNGI3Li40YmJkNWMzIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJEZXRhaWxzU2VydmljZUltcGwuamF2YQpAQCAtMSw0NyArMSw0NyBAQAotLy9wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLnNlcnZpY2VJbXBsOwotLy8KLS8vaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKLS8vaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlcjsKLS8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKLS8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5HcmFudGVkQXV0aG9yaXR5OwotLy9pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLmF1dGhvcml0eS5BdXRob3JpdHlVdGlsczsKLS8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5hdXRob3JpdHkuU2ltcGxlR3JhbnRlZEF1dGhvcml0eTsKLS8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS51c2VyZGV0YWlscy5Vc2VyRGV0YWlsczsKLS8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS51c2VyZGV0YWlscy5Vc2VyRGV0YWlsc1NlcnZpY2U7Ci0vL2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUudXNlcmRldGFpbHMuVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKLS8vaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5TZXJ2aWNlOwotLy8KLS8vaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0vL2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLS8vCi0vL0BTZXJ2aWNlCi0vL3B1YmxpYyBjbGFzcyBVc2VyRGV0YWlsc1NlcnZpY2VJbXBsIGltcGxlbWVudHMgVXNlckRldGFpbHNTZXJ2aWNlIHsKLS8vCi0vLyAgICBAQXV0b3dpcmVkCi0vLyAgICBwcml2YXRlIFVzZXJNYXBwZXIgdXNlck1hcHBlcjsKLS8vCi0vLyAgICBAT3ZlcnJpZGUKLS8vICAgIHB1YmxpYyBVc2VyRGV0YWlscyBsb2FkVXNlckJ5VXNlcm5hbWUoU3RyaW5nIHVzZXJuYW1lKSB0aHJvd3MgVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0vLyAgICAgICAgLy91c2VybmFtZeWPguaVsCzmmK/lnKjnmbvpmYbml7Ys55So5oi35Lyg6YCS55qE6KGo5Y2V5pWw5o2udXNlcm5hbWUKLS8vICAgICAgICAvL+S4u+imgeivu+WPluaVsOaNruW6kzPkuKrlgLwgdXNlcm5hbWUgcGFzc3dvcmQgYXV0aG9yaXRpZXMKLS8vICAgICAgICBVc2VyIHVzZXI9IHVzZXJNYXBwZXIuc2VsZWN0QnlVc2VybmFtZSh1c2VybmFtZSk7Ci0vLyAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgewotLy8gICAgICAgICAgICB0aHJvdyBuZXcgVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbigi55So5oi35ZCN5pyq5om+5YiwIik7Ci0vLyAgICAgICAgfQotLy8KLS8vICAgICAgICBTdHJpbmcgYXV0aG9yaXR5TmFtZSA9IHVzZXIuZ2V0Um9sZSgpOwotLy8gICAgICAgIC8v5Li65LqG6L+U5Zue5LiA5LiqVXNlckRldGFpbHMg5L2/55SoVXNlcgotLy8gICAgICAgIExpc3Q8R3JhbnRlZEF1dGhvcml0eT4gYXV0aG9yaXRpZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLS8vICAgICAgICBHcmFudGVkQXV0aG9yaXR5IGF1dGhvcml0eSA9IG5ldyBTaW1wbGVHcmFudGVkQXV0aG9yaXR5KGF1dGhvcml0eU5hbWUpOwotLy8gICAgICAgIGF1dGhvcml0aWVzLmFkZChhdXRob3JpdHkpOwotLy8gICAgICAgIHJldHVybiBuZXcgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLnVzZXJkZXRhaWxzLlVzZXIoCi0vLyAgICAgICAgICAgICAgICB1c2VyLmdldFVzZXJuYW1lKCksCi0vLyAgICAgICAgICAgICAgICB1c2VyLmdldFBhc3N3b3JkKCksCi0vLyAgICAgICAgICAgICAgICB0cnVlLCAvLyBhY2NvdW50RW5hYmxlZAotLy8gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gYWNjb3VudE5vbkV4cGlyZWQKLS8vICAgICAgICAgICAgICAgIHRydWUsIC8vIGNyZWRlbnRpYWxzTm9uRXhwaXJlZAotLy8gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gYWNjb3VudE5vbkxvY2tlZAotLy8gICAgICAgICAgICAgICAgQXV0aG9yaXR5VXRpbHMuY3JlYXRlQXV0aG9yaXR5TGlzdCgiUk9MRV9VU0VSIikgLy8g6K6+572u55So5oi355qE6KeS6Imy5oiW5p2D6ZmQCi0vLyAgICAgICAgKTsKLS8vICAgIH0KLS8vfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2Uuc2VydmljZUltcGw7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlVzZXJNYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUuR3JhbnRlZEF1dGhvcml0eTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUuYXV0aG9yaXR5LkF1dGhvcml0eVV0aWxzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5hdXRob3JpdHkuU2ltcGxlR3JhbnRlZEF1dGhvcml0eTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUudXNlcmRldGFpbHMuVXNlckRldGFpbHM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLnVzZXJkZXRhaWxzLlVzZXJEZXRhaWxzU2VydmljZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUudXNlcmRldGFpbHMuVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuU2VydmljZTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BTZXJ2aWNlCitwdWJsaWMgY2xhc3MgVXNlckRldGFpbHNTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFVzZXJEZXRhaWxzU2VydmljZSB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyTWFwcGVyIHVzZXJNYXBwZXI7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgVXNlckRldGFpbHMgbG9hZFVzZXJCeVVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSkgdGhyb3dzIFVzZXJuYW1lTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICAvL3VzZXJuYW1l5Y+C5pWwLOaYr+WcqOeZu+mZhuaXtiznlKjmiLfkvKDpgJLnmoTooajljZXmlbDmja51c2VybmFtZQorICAgICAgICAvL+S4u+imgeivu+WPluaVsOaNruW6kzPkuKrlgLwgdXNlcm5hbWUgcGFzc3dvcmQgYXV0aG9yaXRpZXMKKyAgICAgICAgVXNlciB1c2VyPSB1c2VyTWFwcGVyLnNlbGVjdEJ5VXNlcm5hbWUodXNlcm5hbWUpOworICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVXNlcm5hbWVOb3RGb3VuZEV4Y2VwdGlvbigi55So5oi35ZCN5pyq5om+5YiwIik7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgYXV0aG9yaXR5TmFtZSA9IHVzZXIuZ2V0Um9sZSgpOworICAgICAgICAvL+S4uuS6hui/lOWbnuS4gOS4qlVzZXJEZXRhaWxzIOS9v+eUqFVzZXIKKyAgICAgICAgTGlzdDxHcmFudGVkQXV0aG9yaXR5PiBhdXRob3JpdGllcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBHcmFudGVkQXV0aG9yaXR5IGF1dGhvcml0eSA9IG5ldyBTaW1wbGVHcmFudGVkQXV0aG9yaXR5KGF1dGhvcml0eU5hbWUpOworICAgICAgICBhdXRob3JpdGllcy5hZGQoYXV0aG9yaXR5KTsKKyAgICAgICAgcmV0dXJuIG5ldyBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvcmUudXNlcmRldGFpbHMuVXNlcigKKyAgICAgICAgICAgICAgICB1c2VyLmdldFVzZXJuYW1lKCksCisgICAgICAgICAgICAgICAgdXNlci5nZXRQYXNzd29yZCgpLAorICAgICAgICAgICAgICAgIHRydWUsIC8vIGFjY291bnRFbmFibGVkCisgICAgICAgICAgICAgICAgdHJ1ZSwgLy8gYWNjb3VudE5vbkV4cGlyZWQKKyAgICAgICAgICAgICAgICB0cnVlLCAvLyBjcmVkZW50aWFsc05vbkV4cGlyZWQKKyAgICAgICAgICAgICAgICB0cnVlLCAvLyBhY2NvdW50Tm9uTG9ja2VkCisgICAgICAgICAgICAgICAgQXV0aG9yaXR5VXRpbHMuY3JlYXRlQXV0aG9yaXR5TGlzdCgiUk9MRV9VU0VSIikgLy8g6K6+572u55So5oi355qE6KeS6Imy5oiW5p2D6ZmQCisgICAgICAgICk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9tYWluL2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzE4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACisKK3BhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2Uuc2VydmljZUltcGw7CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmNvcmUuY29uZGl0aW9ucy5xdWVyeS5RdWVyeVdyYXBwZXI7CitpbXBvcnQgY29tLmJhb21pZG91Lm15YmF0aXNwbHVzLmV4dGVuc2lvbi5zZXJ2aWNlLmltcGwuU2VydmljZUltcGw7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Vc2VyTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVmVyaWZpY2F0aW9uVG9rZW47CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRW1haWxTZXJ2aWNlOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJTZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5SYW5kb21TdHJpbmdVdGlsczsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNyeXB0by5wYXNzd29yZC5QYXNzd29yZEVuY29kZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CitpbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7CitpbXBvcnQgamF2YS50aW1lLnRlbXBvcmFsLkNocm9ub1VuaXQ7CisvL+eZu+W9leazqOWGjAorQFNlcnZpY2UKK3B1YmxpYyBjbGFzcyBVc2VyU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbDxVc2VyTWFwcGVyLCBVc2VyPiBpbXBsZW1lbnRzIFVzZXJTZXJ2aWNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoVXNlclNlcnZpY2VJbXBsLmNsYXNzKTsKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBVc2VyTWFwcGVyIHVzZXJNYXBwZXI7IC8vIFVzaW5nIE15QmF0aXMtUGx1cyBtYXBwZXIKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBFbWFpbFNlcnZpY2VJbXBsIGVtYWlsU2VydmljZTsKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBWZXJpZmljYXRpb25Ub2tlbk1hcHBlciB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlcjsgLy8gVXNpbmcgTXlCYXRpcy1QbHVzIG1hcHBlcgorICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFBhc3N3b3JkRW5jb2RlciBwYXNzd29yZEVuY29kZXI7IC8vIEluamVjdGluZyBwYXNzd29yZCBlbmNvZGVyCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFVzZXIgbG9naW5TZXJ2aWNlKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSB7CisgICAgICAgIGxvZy5kZWJ1ZygiQXR0ZW1wdGluZyBsb2dpbiB3aXRoIHVzZXJuYW1lOiB7fSwgcGFzc3dvcmQ6IHt9IiwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKKyAgICAgICAgVXNlciB1c2VyID0gdXNlck1hcHBlci5zZWxlY3RPbmUobmV3IFF1ZXJ5V3JhcHBlcjxVc2VyPigpLmVxKCJ1c2VybmFtZSIsIHVzZXJuYW1lKS5lcSgicGFzc3dvcmQiLCBwYXNzd29yZCkpOworICAgICAgICBpZiAodXNlciAhPSBudWxsKSB7CisgICAgICAgICAgICB1c2VyLnNldFBhc3N3b3JkKCIiKTsgIC8vIENsZWFyIHRoZSBwYXNzd29yZCBiZWZvcmUgcmV0dXJuaW5nCisgICAgICAgICAgICBsb2cuZGVidWcoIkxvZ2luIHN1Y2Nlc3NmdWwsIFVzZXIgSUQ6IHt9IiwgdXNlci5nZXRJZCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiTG9naW4gZmFpbGVkLCBpbmNvcnJlY3QgdXNlcm5hbWUgb3IgcGFzc3dvcmQuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVzZXI7CisgICAgfQorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHByZVJlZ2lzdGVyVXNlcihVc2VyIHVzZXIpIHsKKyAgICAgICAgbG9nLmRlYnVnKCJQcmUtcmVnaXN0ZXJpbmcgdXNlciwgdXNlcm5hbWU6IHt9LCBlbWFpbDoge30iLCB1c2VyLmdldFVzZXJuYW1lKCksIHVzZXIuZ2V0RW1haWwoKSk7CisgICAgICAgIC8vIOajgOafpeeUqOaIt+WQjeaIlumCrueuseaYr+WQpuW3suWtmOWcqAorICAgICAgICBib29sZWFuIHVzZXJFeGlzdHMgPSB1c2VyTWFwcGVyLnNlbGVjdE9uZShuZXcgUXVlcnlXcmFwcGVyPFVzZXI+KCkuZXEoInVzZXJuYW1lIiwgdXNlci5nZXRVc2VybmFtZSgpKSkgIT0gbnVsbCB8fAorICAgICAgICAgICAgICAgIHVzZXJNYXBwZXIuc2VsZWN0T25lKG5ldyBRdWVyeVdyYXBwZXI8VXNlcj4oKS5lcSgiZW1haWwiLCB1c2VyLmdldEVtYWlsKCkpKSAhPSBudWxsOworICAgICAgICBpZiAodXNlckV4aXN0cykgeworICAgICAgICAgICAgbG9nLmRlYnVnKCJQcmUtcmVnaXN0cmF0aW9uIGZhaWxlZCwgdXNlcm5hbWUgb3IgZW1haWwgYWxyZWFkeSBleGlzdHMuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyDnlKjmiLflkI3miJbpgq7nrrHlt7Lnu4/lrZjlnKgKKyAgICAgICAgfQorICAgICAgICAvLyDliqDlr4blr4bnoIEKKyAgICAgICAgU3RyaW5nIGVuY3J5cHRlZFBhc3N3b3JkID0gcGFzc3dvcmRFbmNvZGVyLmVuY29kZSh1c2VyLmdldFBhc3N3b3JkKCkpOworICAgICAgICAvLyDnlJ/miJDpqozor4HnoIEKKyAgICAgICAgU3RyaW5nIHRva2VuID0gUmFuZG9tU3RyaW5nVXRpbHMucmFuZG9tTnVtZXJpYyg2KTsKKyAgICAgICAgLy8g6K6+572u6L+H5pyf5pe26Ze05Li65b2T5YmN5pe26Ze05Yqg5LiA5bCP5pe2CisgICAgICAgIEluc3RhbnQgZXhwaXJ5RGF0ZSA9IEluc3RhbnQubm93KCkucGx1cygxLCBDaHJvbm9Vbml0LkhPVVJTKTsKKyAgICAgICAgLy8g5Yib5bu66aqM6K+B5Luk54mM5a+56LGhCisgICAgICAgIFZlcmlmaWNhdGlvblRva2VuIHZlcmlmaWNhdGlvblRva2VuID0gbmV3IFZlcmlmaWNhdGlvblRva2VuKAorICAgICAgICAgICAgICAgIHRva2VuLAorICAgICAgICAgICAgICAgIHVzZXIuZ2V0VXNlcm5hbWUoKSwKKyAgICAgICAgICAgICAgICB1c2VyLmdldEVtYWlsKCksCisgICAgICAgICAgICAgICAgZW5jcnlwdGVkUGFzc3dvcmQsCisgICAgICAgICAgICAgICAgZXhwaXJ5RGF0ZQorICAgICAgICApOworICAgICAgICAvLyDmj5LlhaXpqozor4Hku6TniYwKKyAgICAgICAgaW50IHJvd3NJbnNlcnRlZCA9IHZlcmlmaWNhdGlvblRva2VuTWFwcGVyLmluc2VydCh2ZXJpZmljYXRpb25Ub2tlbik7CisgICAgICAgIGlmIChyb3dzSW5zZXJ0ZWQgPiAwKSB7CisgICAgICAgICAgICAvLyDlj5HpgIHpqozor4Hpgq7ku7YKKyAgICAgICAgICAgIGVtYWlsU2VydmljZS5zZW5kVmVyaWZpY2F0aW9uRW1haWwodXNlci5nZXRFbWFpbCgpLCB0b2tlbik7CisgICAgICAgICAgICBsb2cuZGVidWcoIlByZS1yZWdpc3RyYXRpb24gc3VjY2Vzc2Z1bCwgdmVyaWZpY2F0aW9uIGNvZGU6IHt9LCBleHBpcnkgZGF0ZToge30iLCB0b2tlbiwgZXhwaXJ5RGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgIC8vIOazqOWGjOWJjemqjOivgeaIkOWKnworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nLmVycm9yKCJGYWlsZWQgdG8gaW5zZXJ0IHZlcmlmaWNhdGlvbiB0b2tlbiBpbnRvIGRhdGFiYXNlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8g5aaC5p6c5o+S5YWl6aqM6K+B5Luk54mM5aSx6LSl77yM6L+U5Zue5aSx6LSlCisgICAgICAgIH0KKyAgICB9CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gdmVyaWZ5RW1haWwoU3RyaW5nIGVtYWlsLCBTdHJpbmcgdG9rZW4pIHsKKyAgICAgICAgbG9nLmRlYnVnKCJWZXJpZnlpbmcgZW1haWwsIGVtYWlsOiB7fSwgdG9rZW46IHt9IiwgZW1haWwsIHRva2VuKTsKKyAgICAgICAgVmVyaWZpY2F0aW9uVG9rZW4gdmVyaWZpY2F0aW9uVG9rZW4gPSB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlci5zZWxlY3RPbmUoCisgICAgICAgICAgICAgICAgbmV3IFF1ZXJ5V3JhcHBlcjxWZXJpZmljYXRpb25Ub2tlbj4oKS5lcSgidG9rZW4iLCB0b2tlbikuZXEoImVtYWlsIiwgZW1haWwpCisgICAgICAgICk7CisgICAgICAgIGlmICh2ZXJpZmljYXRpb25Ub2tlbiAhPSBudWxsICYmICF2ZXJpZmljYXRpb25Ub2tlbi5pc0V4cGlyZWQoKSkgeworICAgICAgICAgICAgbG9nLmRlYnVnKCJWZXJpZmljYXRpb24gY29kZSBpcyB2YWxpZCwgdXNlcm5hbWU6IHt9IiwgdmVyaWZpY2F0aW9uVG9rZW4uZ2V0VXNlcm5hbWUoKSk7CisgICAgICAgICAgICBVc2VyIHVzZXIgPSB1c2VyTWFwcGVyLnNlbGVjdE9uZShuZXcgUXVlcnlXcmFwcGVyPFVzZXI+KCkuZXEoImVtYWlsIiwgZW1haWwpKTsKKyAgICAgICAgICAgIGlmICh1c2VyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB1c2VyID0gbmV3IFVzZXIoKTsKKyAgICAgICAgICAgICAgICB1c2VyLnNldEVtYWlsKGVtYWlsKTsKKyAgICAgICAgICAgICAgICB1c2VyLnNldFVzZXJuYW1lKHZlcmlmaWNhdGlvblRva2VuLmdldFVzZXJuYW1lKCkpOworICAgICAgICAgICAgICAgIHVzZXIuc2V0UGFzc3dvcmQodmVyaWZpY2F0aW9uVG9rZW4uZ2V0UGFzc3dvcmQoKSk7CisgICAgICAgICAgICAgICAgdXNlci5zZXRFbWFpbFZlcmlmaWVkKHRydWUpOworICAgICAgICAgICAgICAgIHVzZXJNYXBwZXIuaW5zZXJ0KHVzZXIpOyAgLy8gU2F2ZSBuZXcgdXNlcgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiTmV3IHVzZXIgY3JlYXRlZCwgVXNlciBJRDoge30iLCB1c2VyLmdldElkKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1c2VyLnNldEVtYWlsVmVyaWZpZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgdXNlck1hcHBlci51cGRhdGVCeUlkKHVzZXIpOyAgLy8gVXBkYXRlIGV4aXN0aW5nIHVzZXIKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIlVzZXIgZW1haWwgdmVyaWZpZWQsIFVzZXIgSUQ6IHt9IiwgdXNlci5nZXRJZCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZlcmlmaWNhdGlvblRva2VuTWFwcGVyLmRlbGV0ZShuZXcgUXVlcnlXcmFwcGVyPFZlcmlmaWNhdGlvblRva2VuPigpLmVxKCJ0b2tlbiIsIHRva2VuKSk7IC8vIENsZWFuIHVwIHRoZSB0b2tlbgorICAgICAgICAgICAgbG9nLmRlYnVnKCJWZXJpZmljYXRpb24gY29kZSBkZWxldGVkLiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbG9nLmRlYnVnKCJWZXJpZmljYXRpb24gY29kZSBpcyBpbnZhbGlkIG9yIGV4cGlyZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbWFpbEV4aXN0cyhTdHJpbmcgZW1haWwpIHsKKyAgICAgICAgbG9nLmRlYnVnKCLmo4Dmn6Xpgq7nrrHmmK/lkKblrZjlnKjvvIzpgq7nrrHvvJp7fSIsIGVtYWlsKTsKKyAgICAgICAgYm9vbGVhbiBleGlzdHMgPSB1c2VyTWFwcGVyLnNlbGVjdENvdW50KG5ldyBRdWVyeVdyYXBwZXI8VXNlcj4oKS5lcSgiZW1haWwiLCBlbWFpbCkpID4gMDsKKyAgICAgICAgbG9nLmRlYnVnKCLpgq7nrrHlrZjlnKjnirbmgIHvvJp7fSIsIGV4aXN0cyk7CisgICAgICAgIHJldHVybiBleGlzdHM7CisgICAgfQorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrUGFzc3dvcmQoTG9uZyB1c2VySWQsIFN0cmluZyBwYXNzd29yZCkgeworICAgICAgICBVc2VyIHVzZXIgPSB1c2VyTWFwcGVyLnNlbGVjdEJ5SWQodXNlcklkKTsKKyAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIueUqOaIt+S4jeWtmOWcqCIpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBlbmNyeXB0ZWRQYXNzd29yZCA9IHVzZXIuZ2V0UGFzc3dvcmQoKTsKKyAgICAgICAgcmV0dXJuIHBhc3N3b3JkRW5jb2Rlci5tYXRjaGVzKHBhc3N3b3JkLCBlbmNyeXB0ZWRQYXNzd29yZCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmphdmEgYi9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC91dGlscy9SZXN1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ2ZjgyOC4uMDAwMDAwMAotLS0gYS9zcmMvbWFpbi9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC91dGlscy9SZXN1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC51dGlsczsKLQotCi1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OwotCi1wdWJsaWMgY2xhc3MgUmVzdWx0PFQ+IHsKLSAgICBwcml2YXRlIFN0cmluZyBjb2RlOwotICAgIHByaXZhdGUgU3RyaW5nIG1zZzsKLSAgICBwcml2YXRlIFQgZGF0YTsKLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29kZSgpIHsKLSAgICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29kZShTdHJpbmcgY29kZSkgewotICAgICAgICB0aGlzLmNvZGUgPSBjb2RlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TXNnKCkgewotICAgICAgICByZXR1cm4gbXNnOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE1zZyhTdHJpbmcgbXNnKSB7Ci0gICAgICAgIHRoaXMubXNnID0gbXNnOwotICAgIH0KLQotICAgIHB1YmxpYyBUIGdldERhdGEoKSB7Ci0gICAgICAgIHJldHVybiBkYXRhOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERhdGEoVCBkYXRhKSB7Ci0gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7Ci0gICAgfQotCi0gICAgcHVibGljIFJlc3VsdCgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVzdWx0KFQgZGF0YSkgewotICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHN1Y2Nlc3MoUmVzcG9uc2VFbnRpdHk8Pz4gcmVzdWx0TWFwLCBTdHJpbmcg5YW06Laj5bCP57uE5Yib5bu65oiQ5YqfKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0PD4oKTsKLSAgICAgICAgcmVzdWx0LnNldENvZGUoIjIwMCIpOwotICAgICAgICByZXN1bHQuc2V0TXNnKCLmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIDxUPiBSZXN1bHQ8VD4gc3VjY2VzcyhUIGRhdGEpIHsKLSAgICAgICAgUmVzdWx0PFQ+IHJlc3VsdCA9IG5ldyBSZXN1bHQ8PihkYXRhKTsKLSAgICAgICAgcmVzdWx0LnNldENvZGUoIjIwMCIpOwotICAgICAgICByZXN1bHQuc2V0TXNnKCLmiJDlip8iKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcHVibGljIHN0YXRpYyA8VD4gUmVzdWx0PFQ+IHN1Y2Nlc3MoU3RyaW5nIG1zZykgewotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgpOwotICAgICAgICByZXN1bHQuc2V0Q29kZSgiMjAwIik7Ci0gICAgICAgIHJlc3VsdC5zZXRNc2coIuaIkOWKnyIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IFJlc3VsdDxUPiBzdWNjZXNzKFQgZGF0YSxTdHJpbmcgbXNnKSB7Ci0gICAgICAgIFJlc3VsdDxUPiByZXN1bHQgPSBuZXcgUmVzdWx0PD4oZGF0YSk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCIyMDAiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZyhtc2cpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGVycm9yKFN0cmluZyBjb2RlLCBTdHJpbmcgbXNnKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKGNvZGUpOwotICAgICAgICByZXN1bHQuc2V0TXNnKG1zZyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIC8qKgotICAgICAqIOWIm+W7uuS4gOS4quihqOekuuaWh+S7tuWkp+Wwj+i2heWHuumZkOWItueahOe7k+aenOWvueixoeOAggotICAgICAqCi0gICAgICogQHJldHVybiDmnoTpgKDnmoTmlofku7bov4flpKfplJnor6/nu5Pmnpzlr7nosaEKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBmaWxlVG9vTGFyZ2UoKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MTMiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5paH5Lu25aSn5bCP6LaF5Ye66ZmQ5Yi244CCIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog5Yib5bu65LiA5Liq6KGo56S65paH5Lu25qC85byP5LiN5pSv5oyB55qE57uT5p6c5a+56LGh44CCCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuagvOW8j+mUmeivr+e7k+aenOWvueixoQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHVuc3VwcG9ydGVkRmlsZVR5cGUoKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MTUiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5LiN5pSv5oyB55qE5paH5Lu25qC85byP44CCIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog5Yib5bu65LiA5Liq6KGo56S65paH5Lu25pyq5om+5Yiw55qE57uT5p6c5a+56LGh44CCCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuacquaJvuWIsOmUmeivr+e7k+aenOWvueixoQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGZpbGVOb3RGb3VuZCgpIHsKLSAgICAgICAgUmVzdWx0IHJlc3VsdCA9IG5ldyBSZXN1bHQoKTsKLSAgICAgICAgcmVzdWx0LnNldENvZGUoIjQwNCIpOwotICAgICAgICByZXN1bHQuc2V0TXNnKCLmlofku7bmnKrmib7liLDjgIIiKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiDliJvlu7rkuIDkuKrooajnpLrmlofku7blrZjlgqjplJnor6/nmoTnu5Pmnpzlr7nosaHjgIIKLSAgICAgKgotICAgICAqIEBwYXJhbSBlcnJvck1zZyDor6bnu4bplJnor6/kv6Hmga8KLSAgICAgKiBAcmV0dXJuIOaehOmAoOeahOaWh+S7tuWtmOWCqOmUmeivr+e7k+aenOWvueixoQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IGZpbGVTdG9yYWdlRXJyb3IoU3RyaW5nIGVycm9yTXNnKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI1MDAiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5paH5Lu25a2Y5YKo6ZSZ6K+vOiAiICsgZXJyb3JNc2cpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVzdWx0IHBlcm1pc3Npb25EZW5pZWQoKSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7Ci0gICAgICAgIHJlc3VsdC5zZXRDb2RlKCI0MDEiKTsKLSAgICAgICAgcmVzdWx0LnNldE1zZygi5p2D6ZmQ5LiN6Laz77yM5peg5rOV5omn6KGM6K+l5pON5L2c44CCIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ucHJvcGVydGllcyBiL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCmluZGV4IDU0ZTkyZTYuLjA1OTAzMzMgMTAwNjQ0Ci0tLSBhL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCisrKyBiL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCkBAIC0xLDExICsxLDExIEBACiBzZXJ2ZXIucG9ydD04MDgwCi1zcHJpbmcuZGF0YXNvdXJjZS51cmw9amRiYzpteXNxbDovL2xvY2FsaG9zdDozMzA2L3B0UHJvamVjdAorc3ByaW5nLmRhdGFzb3VyY2UudXJsPWpkYmM6bXlzcWw6Ly9sb2NhbGhvc3Q6MzMwNi9wdAogc3ByaW5nLmRhdGFzb3VyY2UudXNlcm5hbWU9cm9vdAotc3ByaW5nLmRhdGFzb3VyY2UucGFzc3dvcmQ9MTIzNDU2CitzcHJpbmcuZGF0YXNvdXJjZS5wYXNzd29yZD1yb290CiBzcHJpbmcuZGF0YXNvdXJjZS5kcml2ZXItY2xhc3MtbmFtZT1jb20ubXlzcWwuY2ouamRiYy5Ecml2ZXIKLXNwcmluZy5qcGEuaGliZXJuYXRlLm5hbWluZy5waHlzaWNhbC1zdHJhdGVneT1vcmcuaGliZXJuYXRlLmJvb3QubW9kZWwubmFtaW5nLlBoeXNpY2FsTmFtaW5nU3RyYXRlZ3lTdGFuZGFyZEltcGwKIAotI215YmF0aXMtcGx1cy5jb25maWd1cmF0aW9uLmxvZy1pbXBsPW9yZy5hcGFjaGUuaWJhdGlzLmxvZ2dpbmcuc3Rkb3V0LlN0ZE91dEltcGwKK215YmF0aXMtcGx1cy5jb25maWd1cmF0aW9uLmxvZy1pbXBsPW9yZy5hcGFjaGUuaWJhdGlzLmxvZ2dpbmcuc3Rkb3V0LlN0ZE91dEltcGwKKwogCiAjIE1haWwgY29uZmlndXJhdGlvbgogc3ByaW5nLm1haWwucGFzc3dvcmQ9dGxqbmVib25oemhxZWNkYQpAQCAtMTcsOCArMTcsMTUgQEAKIAogCiBzcHJpbmcuanBhLmVuYWJsZWQ9ZmFsc2UKLXNwcmluZy5qcGEuaGliZXJuYXRlLmRkbC1hdXRvPXVwZGF0ZQorc3ByaW5nLmpwYS5oaWJlcm5hdGUuZGRsLWF1dG89bm9uZQogc3ByaW5nLmpwYS5vcGVuLWluLXZpZXc9ZmFsc2UKIAorIyB0cmFja2VyPz8KK3B0LnRyYWNrZXIucG9ydD02OTY5CiAKLSNteWJhdGlzLXBsdXMubWFwcGVyLWxvY2F0aW9ucz1jbGFzc3BhdGg6L21hcHBlci8qKi8qLnhtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3B0LnRyYWNrZXIudG9ycmVudC1kaXI9JHt1c2VyLmRpcn0vZGF0YS90b3JyZW50cworCitwdC50cmFja2VyLmFsbG93LWZvcmVpZ249ZmFsc2UKK3B0LnRyYWNrZXIuYW5ub3VuY2UtdXJsPS9jdXN0b20tYW5ub3VuY2UKKworbXliYXRpcy1wbHVzLm1hcHBlci1sb2NhdGlvbnM9Y2xhc3NwYXRoOi9tYXBwZXIvKiovKi54bWwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGVkZDI5Li4wMDAwMDAwCi0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Db21tZW50czsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXJzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkNvbW1lbnRTZXJ2aWNlOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC51dGlscy5SZXN1bHQ7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uKjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8uKjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKLQotY2xhc3MgQ29tbWVudENvbnRyb2xsZXJUZXN0IHsKLQotICAgIEBJbmplY3RNb2NrcwotICAgIHByaXZhdGUgQ29tbWVudENvbnRyb2xsZXIgY29tbWVudENvbnRyb2xsZXI7Ci0gICAgQE1vY2sKLSAgICBwcml2YXRlIENvbW1lbnRTZXJ2aWNlIGNvbW1lbnRTZXJ2aWNlOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIFVzZXJzIG1vY2tVc2VyOwotCi0gICAgQEJlZm9yZUVhY2gKLSAgICB2b2lkIHNldHVwKCkgewotICAgICAgICBNb2NraXRvQW5ub3RhdGlvbnMub3Blbk1vY2tzKHRoaXMpOwotICAgIH0KLQotICAgIC8vIOa1i+ivlea3u+WKoOivhOiuugotICAgIEBUZXN0Ci0gICAgdm9pZCBhZGRDb21tZW50VGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLSAgICAgICAgQ29tbWVudHMgY29tbWVudCA9IG5ldyBDb21tZW50cygpOwotICAgICAgICBjb21tZW50LnNldFVzZXJJZCgxTCk7Ci0gICAgICAgIGNvbW1lbnQuc2V0Q29udGVudCgiVGhpcyBpcyBhIGNvbW1lbnQiKTsKLSAgICAgICAgY29tbWVudC5zZXRQYXJlbnRDb21tZW50KDBMKTsKLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6Ci0gICAgICAgIGRvTm90aGluZygpLndoZW4oY29tbWVudFNlcnZpY2UpLmFkZENvbW1lbnQoZXEocG9zdElkKSwgZXEoY29tbWVudCkpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29tbWVudENvbnRyb2xsZXIuYWRkQ29tbWVudChwb3N0SWQsIGNvbW1lbnQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIkNvbW1lbnQgYWRkZWQgc3VjY2Vzc2Z1bGx5ISIsIHJlc3VsdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5pa55rOV5piv5ZCm6KKr6LCD55SoCi0gICAgICAgIHZlcmlmeShjb21tZW50U2VydmljZSwgdGltZXMoMSkpLmFkZENvbW1lbnQoZXEocG9zdElkKSwgZXEoY29tbWVudCkpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluivhOiuugotICAgIEBUZXN0Ci0gICAgdm9pZCBnZXRDb21tZW50c0J5UG9zdElkVGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLQotICAgICAgICAvLyDmqKHmi5/or4TorrrmlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBjb21tZW50RGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgY29tbWVudERhdGEucHV0KCJjb21tZW50SWQiLCAxTCk7Ci0gICAgICAgIGNvbW1lbnREYXRhLnB1dCgiY29udGVudCIsICJUaGlzIGlzIGEgY29tbWVudCIpOwotICAgICAgICBjb21tZW50RGF0YS5wdXQoInVzZXJJZCIsIDFMKTsKLSAgICAgICAgY29tbWVudERhdGEucHV0KCJuaWNrbmFtZSIsICJ1c2VyMSIpOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugotICAgICAgICB3aGVuKGNvbW1lbnRTZXJ2aWNlLmdldENvbW1lbnRzQnlQb3N0SWQocG9zdElkKSkudGhlblJldHVybihMaXN0Lm9mKGNvbW1lbnREYXRhKSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gY29tbWVudHMgPSBjb21tZW50Q29udHJvbGxlci5nZXRDb21tZW50c0J5UG9zdElkKHBvc3RJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE6K+E6K665pWw5o2uCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb21tZW50cy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIlRoaXMgaXMgYSBjb21tZW50IiwgY29tbWVudHMuZ2V0KDApLmdldCgiY29udGVudCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ1c2VyMSIsIGNvbW1lbnRzLmdldCgwKS5nZXQoIm5pY2tuYW1lIikpOwotCi0gICAgICAgIC8vIOmqjOivgeacjeWKoeaWueazleaYr+WQpuiiq+iwg+eUqAotICAgICAgICB2ZXJpZnkoY29tbWVudFNlcnZpY2UsIHRpbWVzKDEpKS5nZXRDb21tZW50c0J5UG9zdElkKHBvc3RJZCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOTIxNjIuLjAwMDAwMDAKLS0tIGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuRHluYW1pY0NvbnRyb2xsZXI7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRHluYW1pY1NlcnZpY2U7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uSW5qZWN0TW9ja3M7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLio7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7Ci0KLWNsYXNzIER5bmFtaWNDb250cm9sbGVyVGVzdCB7Ci0KLSAgICBASW5qZWN0TW9ja3MKLSAgICBwcml2YXRlIER5bmFtaWNDb250cm9sbGVyIGR5bmFtaWNDb250cm9sbGVyOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIER5bmFtaWNTZXJ2aWNlIGR5bmFtaWNTZXJ2aWNlOwotCi0gICAgQEJlZm9yZUVhY2gKLSAgICB2b2lkIHNldHVwKCkgewotICAgICAgICBNb2NraXRvQW5ub3RhdGlvbnMub3Blbk1vY2tzKHRoaXMpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWIm+W7uuWKqOaAgeaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0Q3JlYXRlRHluYW1pYygpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSAiVGhpcyBpcyBhIHRlc3QgZHluYW1pYyI7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJkeW5hbWljSWQiLCAxMjNMKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLliqjmgIHliJvlu7rmiJDlip8iKTsKLQotICAgICAgICAvLyDmqKHmi58gZHluYW1pY1NlcnZpY2UuY3JlYXRlRHluYW1pYyDov5Tlm54KLSAgICAgICAgd2hlbihkeW5hbWljU2VydmljZS5jcmVhdGVEeW5hbWljKHVzZXJJZCwgbnVsbCwgY29udGVudCwgbnVsbCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1hcCA9IGR5bmFtaWNDb250cm9sbGVyLmNyZWF0ZUR5bmFtaWModXNlcklkLCBudWxsLCBjb250ZW50LCBudWxsKTsKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2VFbnRpdHkgPSBSZXNwb25zZUVudGl0eS5vayhyZXNwb25zZU1hcCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlRW50aXR5LmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLliqjmgIHliJvlu7rmiJDlip8iLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzTCwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgiZHluYW1pY0lkIikpOwotICAgIH0KLQotCi0gICAgLy8g5rWL6K+V5Yig6Zmk5Yqo5oCB5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3REZWxldGVEeW5hbWljKCkgewotICAgICAgICBMb25nIGR5bmFtaWNJZCA9IDFMOwotICAgICAgICAvLyDmqKHmi58gZHluYW1pY1NlcnZpY2UuZGVsZXRlRHluYW1pYyDmlrnms5XooYzkuLoKLSAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihkeW5hbWljU2VydmljZSkuZGVsZXRlRHluYW1pYyhkeW5hbWljSWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBSZXNwb25zZUVudGl0eTxTdHJpbmc+IHJlc3BvbnNlID0gZHluYW1pY0NvbnRyb2xsZXIuZGVsZXRlRHluYW1pYyhkeW5hbWljSWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5Yqo5oCB5Yig6Zmk5oiQ5YqfIiwgcmVzcG9uc2UuZ2V0Qm9keSgpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xmt7vliqDor4TorrrmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEFkZENvbW1lbnQoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIExvbmcgZHluYW1pY0lkID0gMUw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gY29tbWVudENvbnRlbnQgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGNvbW1lbnRDb250ZW50LnB1dCgiY29udGVudCIsICJUaGlzIGlzIGEgdGVzdCBjb21tZW50Iik7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImNvbW1lbnRfaWQiLCAxMDFMKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLor4TorrrmiJDlip8iKTsKLQotICAgICAgICAvLyDmqKHmi58gZHluYW1pY1NlcnZpY2UuYWRkQ29tbWVudCDov5Tlm54KLSAgICAgICAgd2hlbihkeW5hbWljU2VydmljZS5hZGRDb21tZW50KHVzZXJJZCwgZHluYW1pY0lkLCAiVGhpcyBpcyBhIHRlc3QgY29tbWVudCIpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gZHluYW1pY0NvbnRyb2xsZXIuYWRkQ29tbWVudCh1c2VySWQsIGR5bmFtaWNJZCwgY29tbWVudENvbnRlbnQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi6K+E6K665oiQ5YqfIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMUwsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoImNvbW1lbnRfaWQiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V6I635Y+W55So5oi35Yqo5oCB5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RHZXRBbGxVc2VyRHluYW1pY3MoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJkeW5hbWljIiwgIm1vY2tfZHluYW1pY19kYXRhIik7Ci0KLSAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmdldEFsbFVzZXJEeW5hbWljcyDov5Tlm54KLSAgICAgICAgd2hlbihkeW5hbWljU2VydmljZS5nZXRBbGxVc2VyRHluYW1pY3ModXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXNwb25zZSA9IGR5bmFtaWNDb250cm9sbGVyLmdldEFsbFVzZXJEeW5hbWljcyh1c2VySWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJkeW5hbWljIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluaJgOacieWlveWPi+WKqOaAgeaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcygpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImR5bmFtaWMiLCAibW9ja19mcmllbmRfZHluYW1pY19kYXRhIik7Ci0KLSAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmdldEFsbFVzZXJBbmRGcmllbmRzRHluYW1pY3Mg6L+U5ZueCi0gICAgICAgIHdoZW4oZHluYW1pY1NlcnZpY2UuZ2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcyhhbnlMaXN0KCkpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gZHluYW1pY0NvbnRyb2xsZXIuZ2V0QWxsVXNlckFuZEZyaWVuZHNEeW5hbWljcyh1c2VySWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJkeW5hbWljIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleeCuei1nuWKqOaAgeaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0TGlrZUR5bmFtaWMoKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VySWQiLCAxTCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJkeW5hbWljSWQiLCAxTCk7Ci0KLSAgICAgICAgLy8g5qih5oufIGR5bmFtaWNTZXJ2aWNlLmxpa2VEeW5hbWljIOi/lOWbngotICAgICAgICB3aGVuKGR5bmFtaWNTZXJ2aWNlLmxpa2VEeW5hbWljKDFMLCAxTCkpLnRoZW5SZXR1cm4odHJ1ZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PFN0cmluZz4gcmVzcG9uc2UgPSBkeW5hbWljQ29udHJvbGxlci5saWtlRHluYW1pYyhyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkxpa2Ugc3VjY2Vzc2Z1bCIsIHJlc3BvbnNlLmdldEJvZHkoKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5Y+W5raI54K56LWe5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RVbmxpa2VEeW5hbWljKCkgewotICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcklkIiwgMUwpOwotICAgICAgICByZXF1ZXN0LnB1dCgiZHluYW1pY0lkIiwgMUwpOwotCi0gICAgICAgIC8vIOaooeaLnyBkeW5hbWljU2VydmljZS51bmxpa2VEeW5hbWljIOi/lOWbngotICAgICAgICB3aGVuKGR5bmFtaWNTZXJ2aWNlLnVubGlrZUR5bmFtaWMoMUwsIDFMKSkudGhlblJldHVybih0cnVlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8U3RyaW5nPiByZXNwb25zZSA9IGR5bmFtaWNDb250cm9sbGVyLnVubGlrZUR5bmFtaWMocmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJVbmxpa2Ugc3VjY2Vzc2Z1bCIsIHJlc3BvbnNlLmdldEJvZHkoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhjOGMyYy4uMDAwMDAwMAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXIuR3JvdXBDb250cm9sbGVyOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuR3JvdXA7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Hcm91cENvbW1lbnRzOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLkdyb3VwU2VydmljZTsKLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QudXRpbHMuUmVzdWx0OwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwotCi0KLWNsYXNzIEdyb3VwQ29udHJvbGxlclRlc3QgewotCi0gICAgQEluamVjdE1vY2tzCi0gICAgcHJpdmF0ZSBHcm91cENvbnRyb2xsZXIgZ3JvdXBDb250cm9sbGVyOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIEdyb3VwU2VydmljZSBncm91cFNlcnZpY2U7Ci0KLSAgICBAQmVmb3JlRWFjaAotICAgIHZvaWQgc2V0dXAoKSB7Ci0gICAgICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5vcGVuTW9ja3ModGhpcyk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5Yib5bu65bCP57uECi0KLSAgICBAVGVzdAotICAgIHZvaWQgY3JlYXRlR3JvdXBUZXN0KCkgewotICAgICAgICBHcm91cCBncm91cFJlcXVlc3QgPSBuZXcgR3JvdXAoKTsKLSAgICAgICAgZ3JvdXBSZXF1ZXN0LnNldEdyb3VwTmFtZSgiVGVzdCBHcm91cCIpOwotICAgICAgICBncm91cFJlcXVlc3Quc2V0RGVzY3JpcHRpb24oIlRoaXMgaXMgYSB0ZXN0IGdyb3VwIik7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJncm91cF9pZCIsIDFMKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLlhbTotqPlsI/nu4TliJvlu7rmiJDlip8iKTsKLQotICAgICAgICBSZXNwb25zZUVudGl0eTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBtb2NrUmVzcG9uc2VFbnRpdHkgPSBSZXNwb25zZUVudGl0eS5vayhtb2NrUmVzcG9uc2UpOwotICAgICAgICB3aGVuKGdyb3VwU2VydmljZS5jcmVhdGVHcm91cChncm91cFJlcXVlc3QpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZUVudGl0eSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PD8+IHJlc3BvbnNlRW50aXR5ID0gZ3JvdXBDb250cm9sbGVyLmNyZWF0ZUdyb3VwKGdyb3VwUmVxdWVzdCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKTsKLSAgICAgICAgUmVzdWx0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3VsdCA9IFJlc3VsdC5zdWNjZXNzKHJlc3VsdE1hcCwgIuWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnyIpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIHJlc3VsdC5nZXRDb2RlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIuWFtOi2o+Wwj+e7hOWIm+W7uuaIkOWKnyIsIHJlc3VsdC5nZXRNc2coKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxTCwgcmVzdWx0LmdldERhdGEoKS5nZXQoImdyb3VwX2lkIikpOwotICAgIH0KLQotCi0gICAgLy8g5rWL6K+V5Yqg5YWl5bCP57uE5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RKb2luR3JvdXAoKSB7Ci0gICAgICAgIExvbmcgZ3JvdXBJZCA9IDFMOwotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmiJDlip/liqDlhaXlsI/nu4QiKTsKLSAgICAgICAgd2hlbihncm91cFNlcnZpY2Uuam9pbkdyb3VwKGdyb3VwSWQsIHVzZXJJZCkpLnRoZW5SZXR1cm4oUmVzcG9uc2VFbnRpdHkub2sobW9ja1Jlc3BvbnNlKSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5ID0gTWFwLm9mKCJ1c2VyX2lkIiwgdXNlcklkKTsKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSBncm91cENvbnRyb2xsZXIuam9pbkdyb3VwKGdyb3VwSWQsIHJlcXVlc3RCb2R5KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5oiQ5Yqf5Yqg5YWl5bCP57uEIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5XpgIDlh7rlsI/nu4TmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdExlYXZlR3JvdXAoKSB7Ci0gICAgICAgIExvbmcgZ3JvdXBJZCA9IDFMOwotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLmiJDlip/pgIDlh7rlsI/nu4QiKTsKLSAgICAgICAgd2hlbihncm91cFNlcnZpY2UubGVhdmVHcm91cChncm91cElkLCB1c2VySWQpKS50aGVuUmV0dXJuKFJlc3BvbnNlRW50aXR5Lm9rKG1vY2tSZXNwb25zZSkpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSA9IE1hcC5vZigidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gZ3JvdXBDb250cm9sbGVyLmxlYXZlR3JvdXAoZ3JvdXBJZCwgcmVxdWVzdEJvZHkpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLmiJDlip/pgIDlh7rlsI/nu4QiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluWwj+e7hOaIkOWRmOaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0R3JvdXBNZW1iZXJzKCkgewotICAgICAgICBMb25nIGdyb3VwSWQgPSAxTDsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lbWJlcnMiLCAibW9ja19tZW1iZXJzIik7Ci0gICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLmdldEdyb3VwTWVtYmVycyhncm91cElkKSkudGhlblJldHVybihSZXNwb25zZUVudGl0eS5vayhtb2NrUmVzcG9uc2UpKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSBncm91cENvbnRyb2xsZXIuZ2V0R3JvdXBNZW1iZXJzKGdyb3VwSWQpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChyZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJtZW1iZXJzIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWPkeW4g+W4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCBjcmVhdGVQb3N0VGVzdCgpIHsKLSAgICAgICAgTG9uZyBncm91cElkID0gMUw7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMkw7Ci0gICAgICAgIFN0cmluZyBwb3N0Q29udGVudCA9ICJUZXN0IHBvc3QgY29udGVudCI7Ci0gICAgICAgIFN0cmluZyB0aXRsZSA9ICJUZXN0IHBvc3QgdGl0bGUiOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbnuWAvAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgicG9zdF9pZCIsIDFMKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLluJblrZDliJvlu7rmiJDlip8iKTsKLQotICAgICAgICB3aGVuKGdyb3VwU2VydmljZS5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBudWxsKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdCA9IGdyb3VwQ29udHJvbGxlci5jcmVhdGVQb3N0KGdyb3VwSWQsIHVzZXJJZCwgcG9zdENvbnRlbnQsIHRpdGxlLCBudWxsKS5nZXRCb2R5KCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi5biW5a2Q5Yib5bu65oiQ5YqfIiwgcmVzdWx0LmdldCgibWVzc2FnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCByZXN1bHQuZ2V0KCJwb3N0X2lkIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleeCuei1nuW4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCBsaWtlUG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIueCuei1nuaIkOWKnyIpOwotCi0gICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLmxpa2VQb3N0KHBvc3RJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSBncm91cENvbnRyb2xsZXIubGlrZVBvc3QocG9zdElkKS5nZXRCb2R5KCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi54K56LWe5oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xlj5bmtojngrnotZ4KLSAgICBAVGVzdAotICAgIHZvaWQgdW5saWtlUG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6L+U5Zue5YC8Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIuWPlua2iOeCuei1nuaIkOWKnyIpOwotCi0gICAgICAgIHdoZW4oZ3JvdXBTZXJ2aWNlLnVubGlrZVBvc3QocG9zdElkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IGdyb3VwQ29udHJvbGxlci51bmxpa2VQb3N0KHBvc3RJZCkuZ2V0Qm9keSgpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIuWPlua2iOeCuei1nuaIkOWKnyIsIHJlc3VsdE1hcC5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5re75Yqg6K+E6K66Ci0gICAgQFRlc3QKLSAgICB2b2lkIGFkZENvbW1lbnRUZXN0KCkgewotICAgICAgICBMb25nIHBvc3RJZCA9IDFMOwotICAgICAgICBHcm91cENvbW1lbnRzIGNvbW1lbnQgPSBuZXcgR3JvdXBDb21tZW50cygpOwotICAgICAgICBjb21tZW50LnNldFVzZXJJZCgyTCk7Ci0gICAgICAgIGNvbW1lbnQuc2V0Q29udGVudCgiVGhpcyBpcyBhIGNvbW1lbnQiKTsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi6K+E6K665oiQ5YqfIik7Ci0KLSAgICAgICAgd2hlbihncm91cFNlcnZpY2UuYWRkQ29tbWVudChwb3N0SWQsIGNvbW1lbnQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gZ3JvdXBDb250cm9sbGVyLmFkZENvbW1lbnQocG9zdElkLCBjb21tZW50KS5nZXRCb2R5KCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi6K+E6K665oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0xldmVsQ29udHJvbGxlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Q3N2I5Li4wMDAwMDAwCi0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlci5MZXZlbENvbnRyb2xsZXI7Ci1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuTGV2ZWxTZXJ2aWNlOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwotCi1jbGFzcyBMZXZlbENvbnRyb2xsZXJUZXN0IHsKLQotICAgIEBJbmplY3RNb2NrcwotICAgIHByaXZhdGUgTGV2ZWxDb250cm9sbGVyIGxldmVsQ29udHJvbGxlcjsKLQotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBMZXZlbFNlcnZpY2UgbGV2ZWxTZXJ2aWNlOwotCi0gICAgQEJlZm9yZUVhY2gKLSAgICB2b2lkIHNldHVwKCkgewotICAgICAgICBNb2NraXRvQW5ub3RhdGlvbnMub3Blbk1vY2tzKHRoaXMpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPlueUqOaIt+e7j+mqjOaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0RXhwZXJpZW5jZSgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIDE1MDApOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJsZXZlbCIsICJJbnRlcm1lZGlhdGUiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibmV4dF9sZXZlbF9leHBlcmllbmNlIiwgMjAwMCk7Ci0KLSAgICAgICAgLy8g5qih5oufIGxldmVsU2VydmljZS5nZXRVc2VyRXhwZXJpZW5jZSDov5Tlm54KLSAgICAgICAgd2hlbihsZXZlbFNlcnZpY2UuZ2V0VXNlckV4cGVyaWVuY2UodXNlcklkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gbGV2ZWxDb250cm9sbGVyLmdldEV4cGVyaWVuY2UodXNlcklkKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDE1MDAsIHJlc3BvbnNlLmdldCgiY3VycmVudF9leHBlcmllbmNlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkludGVybWVkaWF0ZSIsIHJlc3BvbnNlLmdldCgibGV2ZWwiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyMDAwLCByZXNwb25zZS5nZXQoIm5leHRfbGV2ZWxfZXhwZXJpZW5jZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xmm7TmlrDnlKjmiLfnu4/pqozmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdFVwZGF0ZUV4cGVyaWVuY2UoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIEludGVnZXIgZXhwZXJpZW5jZSA9IDUwMDsKLSAgICAgICAgU3RyaW5nIHNvdXJjZSA9ICJRdWVzdCI7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIue7j+mqjOabtOaWsOaIkOWKnyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCAyMDAwKTsKLQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcGFyYW1zLnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIHBhcmFtcy5wdXQoImV4cGVyaWVuY2UiLCBleHBlcmllbmNlKTsKLSAgICAgICAgcGFyYW1zLnB1dCgic291cmNlIiwgc291cmNlKTsKLQotICAgICAgICAvLyDmqKHmi58gbGV2ZWxTZXJ2aWNlLnVwZGF0ZUV4cGVyaWVuY2Ug6L+U5ZueCi0gICAgICAgIHdoZW4obGV2ZWxTZXJ2aWNlLnVwZGF0ZUV4cGVyaWVuY2UodXNlcklkLCBleHBlcmllbmNlLCBzb3VyY2UpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBsZXZlbENvbnRyb2xsZXIudXBkYXRlRXhwZXJpZW5jZShwYXJhbXMpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLnu4/pqozmm7TmlrDmiJDlip8iLCByZXNwb25zZS5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyMDAwLCByZXNwb25zZS5nZXQoImN1cnJlbnRfZXhwZXJpZW5jZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xmo4Dmn6XnlKjmiLfljYfnuqfmnaHku7bmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdENoZWNrVXBncmFkZSgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImNhbl91cGdyYWRlIiwgdHJ1ZSk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm5leHRfbGV2ZWxfZXhwZXJpZW5jZSIsIDIwMDApOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJjdXJyZW50X2V4cGVyaWVuY2UiLCAxNTAwKTsKLQotICAgICAgICAvLyDmqKHmi58gbGV2ZWxTZXJ2aWNlLmNoZWNrVXBncmFkZSDov5Tlm54KLSAgICAgICAgd2hlbihsZXZlbFNlcnZpY2UuY2hlY2tVcGdyYWRlKHVzZXJJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZSA9IGxldmVsQ29udHJvbGxlci5jaGVja1VwZ3JhZGUodXNlcklkKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0VHJ1ZSgoQm9vbGVhbikgcmVzcG9uc2UuZ2V0KCJjYW5fdXBncmFkZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDAsIHJlc3BvbnNlLmdldCgibmV4dF9sZXZlbF9leHBlcmllbmNlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTUwMCwgcmVzcG9uc2UuZ2V0KCJjdXJyZW50X2V4cGVyaWVuY2UiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5Y2H57qn55So5oi3562J57qn5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RVcGdyYWRlVXNlckxldmVsKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBCb29sZWFuIGNhblVwZ3JhZGUgPSB0cnVlOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLljYfnuqfmiJDlip8iKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibmV3X2xldmVsIiwgIkFkdmFuY2VkIik7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJjYW5fdXBncmFkZSIsIGNhblVwZ3JhZGUpOwotCi0gICAgICAgIC8vIOaooeaLnyBsZXZlbFNlcnZpY2UudXBncmFkZVVzZXJMZXZlbCDov5Tlm54KLSAgICAgICAgd2hlbihsZXZlbFNlcnZpY2UudXBncmFkZVVzZXJMZXZlbCh1c2VySWQsIGNhblVwZ3JhZGUpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSBsZXZlbENvbnRyb2xsZXIudXBncmFkZVVzZXJMZXZlbChyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5Y2H57qn5oiQ5YqfIiwgcmVzcG9uc2UuZ2V0KCJtZXNzYWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkFkdmFuY2VkIiwgcmVzcG9uc2UuZ2V0KCJuZXdfbGV2ZWwiKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlclRlc3QuamF2YSBiL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZWVkZGQuLjAwMDAwMDAKLS0tIGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi1wYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwotCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Qb3N0OwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlBvc3RTZXJ2aWNlOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC51dGlscy5SZXN1bHQ7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uKjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5tdWx0aXBhcnQuTXVsdGlwYXJ0RmlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLio7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7Ci0KLWNsYXNzIFBvc3RDb250cm9sbGVyVGVzdCB7Ci0KLSAgICBASW5qZWN0TW9ja3MKLSAgICBwcml2YXRlIFBvc3RDb250cm9sbGVyIHBvc3RDb250cm9sbGVyOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIFBvc3RTZXJ2aWNlIHBvc3RTZXJ2aWNlOwotCi0gICAgQEJlZm9yZUVhY2gKLSAgICB2b2lkIHNldHVwKCkgewotICAgICAgICBNb2NraXRvQW5ub3RhdGlvbnMub3Blbk1vY2tzKHRoaXMpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWIm+W7uuW4luWtkAotICAgIHZvaWQgY3JlYXRlUG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIFN0cmluZyBwb3N0Q29udGVudCA9ICJUZXN0IFBvc3QgQ29udGVudCI7Ci0gICAgICAgIFN0cmluZyB0aXRsZSA9ICJUZXN0IFBvc3QgVGl0bGUiOwotICAgICAgICBNdWx0aXBhcnRGaWxlW10gaW1hZ2VGaWxlcyA9IG5ldyBNdWx0aXBhcnRGaWxlWzBdOyAgLy8gRW1wdHkgYXJyYXkgZm9yIHNpbXBsaWNpdHkKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm57lgLwKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJwb3N0Tm8iLCAxMjNMKTsKLSAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJtZXNzYWdlIiwgIuW4luWtkOWIm+W7uuaIkOWKnyIpOwotCi0gICAgICAgIHdoZW4ocG9zdFNlcnZpY2UuY3JlYXRlUG9zdCh1c2VySWQsIHBvc3RDb250ZW50LCB0aXRsZSwgaW1hZ2VGaWxlcykpLnRoZW5SZXR1cm4ocmVzcG9uc2VNYXApOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IHBvc3RDb250cm9sbGVyLmNyZWF0ZVBvc3QodXNlcklkLCBwb3N0Q29udGVudCwgdGl0bGUsIGltYWdlRmlsZXMpOwotCi0gICAgICAgIC8vIOaJi+WKqOWwhiBNYXA8U3RyaW5nLCBPYmplY3Q+IOWMheijheWIsCBSZXN1bHQuc3VjY2VzcygpCi0gICAgICAgIFJlc3VsdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXN1bHQgPSBSZXN1bHQuc3VjY2VzcyhyZXN1bHRNYXAsICLluJblrZDliJvlu7rmiJDlip8iKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMDAiLCByZXN1bHQuZ2V0Q29kZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLluJblrZDliJvlu7rmiJDlip8iLCByZXN1bHQuZ2V0TXNnKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzTCwgcmVzdWx0LmdldERhdGEoKS5nZXQoInBvc3RObyIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5XnvJbovpHluJblrZAKLSAgICBAVGVzdAotICAgIHZvaWQgdXBkYXRlUG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0gICAgICAgIFBvc3QgcG9zdCA9IG5ldyBQb3N0KCk7Ci0gICAgICAgIHBvc3Quc2V0UG9zdE5vKHBvc3RJZCk7Ci0gICAgICAgIHBvc3Quc2V0VGl0bGUoIlVwZGF0ZWQgVGl0bGUiKTsKLSAgICAgICAgcG9zdC5zZXRQb3N0Q29udGVudCgiVXBkYXRlZCBDb250ZW50Iik7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6Ci0gICAgICAgIGRvTm90aGluZygpLndoZW4ocG9zdFNlcnZpY2UpLnVwZGF0ZVBvc3QocG9zdElkLCBwb3N0KTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLnVwZGF0ZVBvc3QocG9zdElkLCBwb3N0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJQb3N0IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5ISIsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5Yig6Zmk5biW5a2QCi0gICAgQFRlc3QKLSAgICB2b2lkIGRlbGV0ZVBvc3RUZXN0KCkgewotICAgICAgICBMb25nIHBvc3RJZCA9IDFMOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugotICAgICAgICBkb05vdGhpbmcoKS53aGVuKHBvc3RTZXJ2aWNlKS5kZWxldGVQb3N0KHBvc3RJZCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIFN0cmluZyByZXN1bHQgPSBwb3N0Q29udHJvbGxlci5kZWxldGVQb3N0KHBvc3RJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygiUG9zdCBkZWxldGVkIHN1Y2Nlc3NmdWxseSEiLCByZXN1bHQpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleeCuei1nuW4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCBsaWtlUG9zdFRlc3QoKSB7Ci0gICAgICAgIExvbmcgcG9zdElkID0gMUw7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6Ci0gICAgICAgIGRvTm90aGluZygpLndoZW4ocG9zdFNlcnZpY2UpLmxpa2VQb3N0KHBvc3RJZCwgdXNlcklkKTsKLQotICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKLSAgICAgICAgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdEJvZHkgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3RCb2R5LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIFN0cmluZyByZXN1bHQgPSBwb3N0Q29udHJvbGxlci5saWtlUG9zdChwb3N0SWQsIHJlcXVlc3RCb2R5KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJQb3N0IGxpa2VkIHN1Y2Nlc3NmdWxseSEiLCByZXN1bHQpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWPlua2iOeCuei1nuW4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCB1bmxpa2VQb3N0VGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTooYzkuLoKLSAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihwb3N0U2VydmljZSkudW5saWtlUG9zdChwb3N0SWQsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0Qm9keS5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIudW5saWtlUG9zdChwb3N0SWQsIHJlcXVlc3RCb2R5KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJQb3N0IHVubGlrZWQgc3VjY2Vzc2Z1bGx5ISIsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5pS26JeP5biW5a2QCi0gICAgQFRlc3QKLSAgICB2b2lkIGNvbGxlY3RQb3N0VGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTooYzkuLoKLSAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihwb3N0U2VydmljZSkuY29sbGVjdFBvc3QocG9zdElkLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOWIm+W7uuivt+axguS9kwotICAgICAgICBNYXA8U3RyaW5nLCBMb25nPiByZXF1ZXN0Qm9keSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVxdWVzdEJvZHkucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHBvc3RDb250cm9sbGVyLmNvbGxlY3RQb3N0KHBvc3RJZCwgcmVxdWVzdEJvZHkpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIlBvc3QgY29sbGVjdGVkIHN1Y2Nlc3NmdWxseSEiLCByZXN1bHQpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWPlua2iOaUtuiXj+W4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCB1bmNvbGxlY3RQb3N0VGVzdCgpIHsKLSAgICAgICAgTG9uZyBwb3N0SWQgPSAxTDsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTooYzkuLoKLSAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihwb3N0U2VydmljZSkudW5jb2xsZWN0UG9zdChwb3N0SWQsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3RCb2R5ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0Qm9keS5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOeahOaWueazlQotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIudW5jb2xsZWN0UG9zdChwb3N0SWQsIHJlcXVlc3RCb2R5KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJQb3N0IHVuY29sbGVjdGVkIHN1Y2Nlc3NmdWxseSEiLCByZXN1bHQpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluaJgOacieW4luWtkAotICAgIEBUZXN0Ci0gICAgdm9pZCBnZXRBbGxQb3N0c1Rlc3QoKSB7Ci0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOihjOS4ugotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlTWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZU1hcC5wdXQoInRvdGFsIiwgNSk7Ci0gICAgICAgIHJlc3BvbnNlTWFwLnB1dCgicG9zdHMiLCBuZXcgQXJyYXlMaXN0PD4oKSk7Ci0KLSAgICAgICAgd2hlbihwb3N0U2VydmljZS5nZXRBbGxQb3N0cygpKS50aGVuUmV0dXJuKHJlc3BvbnNlTWFwKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajnmoTmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHQgPSBwb3N0Q29udHJvbGxlci5nZXRBbGxQb3N0cygpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoNSwgcmVzdWx0LmdldCgidG90YWwiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5qC55o2u5biW5a2QSUTojrflj5bluJblrZAKLSAgICBAVGVzdAotICAgIHZvaWQgZ2V0UG9zdEJ5SWRUZXN0KCkgewotICAgICAgICBMb25nIHBvc3RJZCA9IDFMOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlTWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXNwb25zZU1hcC5wdXQoInBvc3RObyIsIDEyM0wpOwotICAgICAgICByZXNwb25zZU1hcC5wdXQoIm1lc3NhZ2UiLCAiUG9zdCBkZXRhaWxzIik7Ci0KLSAgICAgICAgLy8g5qih5ouf5pyN5Yqh5bGC55qE6KGM5Li6Ci0gICAgICAgIHdoZW4ocG9zdFNlcnZpY2UuZ2V0UG9zdEJ5SWQocG9zdElkKSkudGhlblJldHVybihyZXNwb25zZU1hcCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo55qE5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0ID0gcG9zdENvbnRyb2xsZXIuZ2V0UG9zdEJ5SWQocG9zdElkKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJQb3N0IGRldGFpbHMiLCByZXN1bHQuZ2V0KCJtZXNzYWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzTCwgcmVzdWx0LmdldCgicG9zdE5vIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVGFza0NvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDc2MDlkLi4wMDAwMDAwCi0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVGFza0NvbnRyb2xsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLlRhc2tDb250cm9sbGVyOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlRhc2tTZXJ2aWNlOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwotCi1jbGFzcyBUYXNrQ29udHJvbGxlclRlc3QgewotCi0gICAgQEluamVjdE1vY2tzCi0gICAgcHJpdmF0ZSBUYXNrQ29udHJvbGxlciB0YXNrQ29udHJvbGxlcjsKLQotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBUYXNrU2VydmljZSB0YXNrU2VydmljZTsKLQotICAgIEBCZWZvcmVFYWNoCi0gICAgdm9pZCBzZXR1cCgpIHsKLSAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xojrflj5blvZPliY3nlKjmiLfnmoTmlrDmiYvku7vliqHliJfooajmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdldEFsbFRhc2tzKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgidGFza3MiLCAibW9ja190YXNrcyIpOwotCi0gICAgICAgIC8vIOaooeaLnyB0YXNrU2VydmljZS5nZXRBbGxUYXNrc0ZvclVzZXIg6L+U5ZueCi0gICAgICAgIHdoZW4odGFza1NlcnZpY2UuZ2V0QWxsVGFza3NGb3JVc2VyKHVzZXJJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB0YXNrQ29udHJvbGxlci5nZXRBbGxUYXNrcyhyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtb2NrX3Rhc2tzIiwgcmVzcG9uc2UuZ2V0KCJ0YXNrcyIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xmm7TmlrDku7vliqHnirbmgIHmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdFVwZGF0ZVRhc2tTdGF0dXMoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSAidGFza18xMjMiOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZSIsICLku7vliqHnirbmgIHlt7Lmm7TmlrAiKTsKLQotICAgICAgICAvLyDmqKHmi58gdGFza1NlcnZpY2UudXBkYXRlVGFza1N0YXR1cyDov5Tlm54KLSAgICAgICAgd2hlbih0YXNrU2VydmljZS51cGRhdGVUYXNrU3RhdHVzKHVzZXJJZCwgdGFza0lkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOWIm+W7uuivt+axguS9kwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInRhc2tfaWQiLCB0YXNrSWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIudXBkYXRlVGFza1N0YXR1cyhyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5Lu75Yqh54q25oCB5bey5pu05pawIiwgcmVzcG9uc2UuZ2V0KCJtZXNzYWdlIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluW9k+WJjee7j+mqjOWSjOS7u+WKoeWlluWKseaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0RXhwZXJpZW5jZSgpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoImN1cnJlbnRfZXhwZXJpZW5jZSIsIDE1MDApOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJsZXZlbCIsICJJbnRlcm1lZGlhdGUiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgicmV3YXJkIiwgTWFwLm9mKCJleHBlcmllbmNlIiwgMTAwMCwgInBvaW50cyIsIDIwMCkpOwotCi0gICAgICAgIC8vIOaooeaLnyB0YXNrU2VydmljZS5nZXRVc2VyRXhwZXJpZW5jZSDov5Tlm54KLSAgICAgICAgd2hlbih0YXNrU2VydmljZS5nZXRVc2VyRXhwZXJpZW5jZSh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIuZ2V0RXhwZXJpZW5jZShyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDE1MDAsIHJlc3BvbnNlLmdldCgiY3VycmVudF9leHBlcmllbmNlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkludGVybWVkaWF0ZSIsIHJlc3BvbnNlLmdldCgibGV2ZWwiKSk7Ci0gICAgICAgIGFzc2VydFRydWUocmVzcG9uc2UuY29udGFpbnNLZXkoInJld2FyZCIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xojrflj5blvZPliY3nmoTmjIflvJXmraXpqqTmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdldE5ld1N0ZXAoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJjdXJyZW50X3N0ZXAiLCAic3RlcF8xIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInRvdGFsX3N0ZXBzIiwgNSk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0ZXBfZGVzY3JpcHRpb24iLCAiQ29tcGxldGUgdGhlIGludHJvZHVjdGlvbiB0YXNrIik7Ci0KLSAgICAgICAgLy8g5qih5oufIHRhc2tTZXJ2aWNlLmdldE5ld1N0ZXAg6L+U5ZueCi0gICAgICAgIHdoZW4odGFza1NlcnZpY2UuZ2V0TmV3U3RlcCh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIuZ2V0TmV3U3RlcChyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwXzEiLCByZXNwb25zZS5nZXQoImN1cnJlbnRfc3RlcCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIHJlc3BvbnNlLmdldCgidG90YWxfc3RlcHMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQ29tcGxldGUgdGhlIGludHJvZHVjdGlvbiB0YXNrIiwgcmVzcG9uc2UuZ2V0KCJzdGVwX2Rlc2NyaXB0aW9uIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleabtOaWsOi/m+W6puaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0VXBkYXRlUHJvZ3Jlc3MoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSAidGFza18xMjMiOwotICAgICAgICBJbnRlZ2VyIHByb2dyZXNzID0gNTA7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gbW9ja1Jlc3BvbnNlID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICBtb2NrUmVzcG9uc2UucHV0KCJtZXNzYWdlIiwgIui/m+W6puW3suabtOaWsCIpOwotCi0gICAgICAgIC8vIOaooeaLnyB0YXNrU2VydmljZS51cGRhdGVUYXNrUHJvZ3Jlc3Mg6L+U5ZueCi0gICAgICAgIHdoZW4odGFza1NlcnZpY2UudXBkYXRlVGFza1Byb2dyZXNzKHVzZXJJZCwgdGFza0lkLCBwcm9ncmVzcykpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0ID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0LnB1dCgidXNlcl9pZCIsIHVzZXJJZCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ0YXNrX2lkIiwgdGFza0lkKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInByb2dyZXNzIiwgcHJvZ3Jlc3MpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIudXBkYXRlUHJvZ3Jlc3MocmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIui/m+W6puW3suabtOaWsCIsIHJlc3BvbnNlLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xpooblj5bku7vliqHlpZblirHmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdFJld2FyZENsYWltKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBTdHJpbmcgdGFza0lkID0gInRhc2tfMTIzIjsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5aWW5Yqx5bey6aKG5Y+WIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInJld2FyZCIsIE1hcC5vZigiZXhwZXJpZW5jZSIsIDEwMDAsICJwb2ludHMiLCAyMDApKTsKLQotICAgICAgICAvLyDmqKHmi58gdGFza1NlcnZpY2UuY2xhaW1SZXdhcmQg6L+U5ZueCi0gICAgICAgIHdoZW4odGFza1NlcnZpY2UuY2xhaW1SZXdhcmQodXNlcklkLCB0YXNrSWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCB1c2VySWQpOwotICAgICAgICByZXF1ZXN0LnB1dCgidGFza19pZCIsIHRhc2tJZCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2UgPSB0YXNrQ29udHJvbGxlci5yZXdhcmRDbGFpbShyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5aWW5Yqx5bey6aKG5Y+WIiwgcmVzcG9uc2UuZ2V0KCJtZXNzYWdlIikpOwotICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmNvbnRhaW5zS2V5KCJyZXdhcmQiKSk7Ci0gICAgfQotCi0gICAgLy8g5rWL6K+V5qOA5p+l5Lu75Yqh5aWW5Yqx54q25oCB5o6l5Y+jCi0gICAgQFRlc3QKLSAgICB2b2lkIHRlc3RSZXdhcmRSZXZpZXcoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIFN0cmluZyB0YXNrSWQgPSAidGFza18xMjMiOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInJld2FyZF9ub3RfaXNzdWVkIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi5Lu75Yqh5aWW5Yqx5pyq6KKr6aKG5Y+WIik7Ci0KLSAgICAgICAgLy8g5qih5oufIHRhc2tTZXJ2aWNlLmNoZWNrUmV3YXJkU3RhdHVzIOi/lOWbngotICAgICAgICB3aGVuKHRhc2tTZXJ2aWNlLmNoZWNrUmV3YXJkU3RhdHVzKHVzZXJJZCwgdGFza0lkKSkudGhlblJldHVybihtb2NrUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIOWIm+W7uuivt+axguS9kwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInRhc2tfaWQiLCB0YXNrSWQpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlID0gdGFza0NvbnRyb2xsZXIucmV3YXJkUmV2aWV3KHJlcXVlc3QpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOe7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoInJld2FyZF9ub3RfaXNzdWVkIiwgcmVzcG9uc2UuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5Lu75Yqh5aWW5Yqx5pyq6KKr6aKG5Y+WIiwgcmVzcG9uc2UuZ2V0KCJtZXNzYWdlIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdC5qYXZhCmluZGV4IGE5N2UxNjkuLmQzMzJmMzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmphdmEKKysrIGIvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuamF2YQpAQCAtMSwyMzQgKzEsMTYyIEBACiBwYWNrYWdlIGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyOwogCi1pbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyczsKK2ltcG9ydCBjb20uYmFvbWlkb3UubXliYXRpc3BsdXMuY29yZS5jb25kaXRpb25zLnF1ZXJ5LlF1ZXJ5V3JhcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlVzZXI7CitpbXBvcnQgY29tLmV4YW1wbGUubXlwcm9qZWN0LnNlcnZpY2UuRW1haWxTZXJ2aWNlOwogaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJTZXJ2aWNlOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5yZXBvc2l0b3J5LlVzZXJSZXBvc2l0b3J5OworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuVXNlck1hcHBlcjsKK2ltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlZlcmlmaWNhdGlvblRva2VuTWFwcGVyOworaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb21tb24uYmFzZS5SZXN1bHQ7CiBpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CiBpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uSW5qZWN0TW9ja3M7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7CitpbXBvcnQgb3JnLm1vY2tpdG8uKjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmh0dHAuUmVzcG9uc2VFbnRpdHk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5hdXRoZW50aWNhdGlvbi5BdXRoZW50aWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS5jb3JlLkF1dGhlbnRpY2F0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29yZS5BdXRoZW50aWNhdGlvbkV4Y2VwdGlvbjsKIAotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotCi1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8uKjsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwogCiBjbGFzcyBVc2VyQ29udHJvbGxlclRlc3QgewogCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIFVzZXJTZXJ2aWNlIHVzZXJTZXJ2aWNlOwotCi0gICAgQE1vY2sKLSAgICBwcml2YXRlIFVzZXJSZXBvc2l0b3J5IHVzZXJSZXBvc2l0b3J5OwotCiAgICAgQEluamVjdE1vY2tzCiAgICAgcHJpdmF0ZSBVc2VyQ29udHJvbGxlciB1c2VyQ29udHJvbGxlcjsKIAorICAgIEBNb2NrCisgICAgcHJpdmF0ZSBVc2VyU2VydmljZSB1c2VyU2VydmljZTsKKyAgICBATW9jaworICAgIHByaXZhdGUgVXNlck1hcHBlciB1c2VyTWFwcGVyOworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBFbWFpbFNlcnZpY2UgZW1haWxTZXJ2aWNlOworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBBdXRoZW50aWNhdGlvbk1hbmFnZXIgYXV0aGVudGljYXRpb25NYW5hZ2VyOworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBWZXJpZmljYXRpb25Ub2tlbk1hcHBlciB2ZXJpZmljYXRpb25Ub2tlbk1hcHBlcjsKKwogICAgIEBCZWZvcmVFYWNoCi0gICAgdm9pZCBzZXRVcCgpIHsKLSAgICAgICAgLy8g5Yid5aeL5YyW5qih5ouf5a+56LGhCisgICAgdm9pZCBzZXR1cCgpIHsKICAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKICAgICB9CiAKLSAgICAvLyDmtYvor5XnlJ/miJDpgoDor7fnoIHmjqXlj6MKICAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdlbmVyYXRlSW52aXRlQ29kZSgpIHsKLSAgICAgICAgLy8g6K6+572u6L6T5YWl5pWw5o2uCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVxdWVzdCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInVzZXJfaWQiLCAxTCk7CisgICAgdm9pZCBsb2dpbkNvbnRyb2xsZXJfc3VjY2VzcygpIHsKKyAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gInRlc3R1c2VyIjsKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gInRlc3RwYXNzIjsKKyAgICAgICAgVXNlciBtb2NrVXNlciA9IG5ldyBVc2VyKCk7CisgICAgICAgIG1vY2tVc2VyLnNldFVzZXJuYW1lKHVzZXJuYW1lKTsKIAotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm54KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzcG9uc2VNYXAucHV0KCJzdGF0dXMiLCAic3VjY2VzcyIpOwotICAgICAgICByZXNwb25zZU1hcC5wdXQoIm1lc3NhZ2UiLCAi6YKA6K+356CB55Sf5oiQ5oiQ5YqfIik7Ci0gICAgICAgIHJlc3BvbnNlTWFwLnB1dCgiaW52aXRlX2NvZGUiLCAiQUJDMTIzWFlaIik7CisgICAgICAgIEF1dGhlbnRpY2F0aW9uIG1vY2tBdXRoID0gbW9jayhBdXRoZW50aWNhdGlvbi5jbGFzcyk7CisgICAgICAgIHdoZW4oYXV0aGVudGljYXRpb25NYW5hZ2VyLmF1dGhlbnRpY2F0ZShhbnkoKSkpLnRoZW5SZXR1cm4obW9ja0F1dGgpOworICAgICAgICB3aGVuKHVzZXJNYXBwZXIuc2VsZWN0T25lKGFueShRdWVyeVdyYXBwZXIuY2xhc3MpKSkudGhlblJldHVybihtb2NrVXNlcik7CiAKLSAgICAgICAgd2hlbih1c2VyU2VydmljZS5nZW5lcmF0ZUludml0ZUNvZGUoMUwpKS50aGVuUmV0dXJuKHJlc3BvbnNlTWFwKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLmxvZ2luQ29udHJvbGxlcih1c2VybmFtZSwgcGFzc3dvcmQpOwogCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdE1hcCA9IHVzZXJDb250cm9sbGVyLmdlbmVyYXRlSW52aXRlQ29kZShyZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzdWx0TWFwLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIumCgOivt+eggeeUn+aIkOaIkOWKnyIsIHJlc3VsdE1hcC5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQUJDMTIzWFlaIiwgcmVzdWx0TWFwLmdldCgiaW52aXRlX2NvZGUiKSk7Ci0KLSAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5bGC5pa55rOV5piv5ZCm6KKr6LCD55SoCi0gICAgICAgIHZlcmlmeSh1c2VyU2VydmljZSwgdGltZXMoMSkpLmdlbmVyYXRlSW52aXRlQ29kZSgxTCk7CisgICAgICAgIGFzc2VydEVxdWFscygiMjAwIiwgcmVzdWx0LmdldENvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhtb2NrVXNlciwgcmVzdWx0LmdldERhdGEoKSk7CiAgICAgfQogCi0gICAgLy8g5rWL6K+V55So5oi35L+u5pS55a+G56CB5o6l5Y+jCisKICAgICBAVGVzdAotICAgIHZvaWQgdGVzdENoYW5nZVBhc3N3b3JkKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VyX2lkIiwgdXNlcklkKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoIm9sZF9wYXNzd29yZCIsICJvbGRQYXNzd29yZCIpOwotICAgICAgICByZXF1ZXN0LnB1dCgibmV3X3Bhc3N3b3JkIiwgIm5ld1Bhc3N3b3JkIik7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJjb25maXJtX3Bhc3N3b3JkIiwgIm5ld1Bhc3N3b3JkIik7CisgICAgdm9pZCBsb2dpbkNvbnRyb2xsZXJfZmFpbHVyZSgpIHsKKyAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gInVzZXIiOworICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAid3JvbmdwYXNzIjsKIAotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm54KLSAgICAgICAgU3RyaW5nIHJlc3VsdE1lc3NhZ2UgPSAi5a+G56CB5L+u5pS55oiQ5YqfIjsKLSAgICAgICAgd2hlbih1c2VyU2VydmljZS5jaGFuZ2VQYXNzd29yZCh1c2VySWQsICJvbGRQYXNzd29yZCIsICJuZXdQYXNzd29yZCIsICJuZXdQYXNzd29yZCIpKQotICAgICAgICAgICAgICAgIC50aGVuUmV0dXJuKHJlc3VsdE1lc3NhZ2UpOworICAgICAgICAvLyDmqKHmi5/orqTor4HlpLHotKXvvIzmipvlh7ogQmFkIGNyZWRlbnRpYWxzIOW8guW4uAorICAgICAgICB3aGVuKGF1dGhlbnRpY2F0aW9uTWFuYWdlci5hdXRoZW50aWNhdGUoYW55KCkpKQorICAgICAgICAgICAgICAgIC50aGVuVGhyb3cobmV3IEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uKCJCYWQgY3JlZGVudGlhbHMiKSB7fSk7CiAKLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gdXNlckNvbnRyb2xsZXIuY2hhbmdlUGFzc3dvcmQocmVxdWVzdCk7CiAKLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi5a+G56CB5L+u5pS55oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibWVzc2FnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzdWx0TWFwLmdldCgic3RhdHVzIikpOworICAgICAgICAvLyDosIPnlKjnmbvlvZXmjqXlj6MKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLmxvZ2luQ29udHJvbGxlcih1c2VybmFtZSwgcGFzc3dvcmQpOwogCi0gICAgICAgIC8vIOmqjOivgeacjeWKoeWxguaWueazleaYr+WQpuiiq+iwg+eUqAotICAgICAgICB2ZXJpZnkodXNlclNlcnZpY2UsIHRpbWVzKDEpKS5jaGFuZ2VQYXNzd29yZCh1c2VySWQsICJvbGRQYXNzd29yZCIsICJuZXdQYXNzd29yZCIsICJuZXdQYXNzd29yZCIpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleeUqOaIt+azqOWGjOaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0UmVnaXN0ZXIoKSB7Ci0gICAgICAgIC8vIOiuvue9rui+k+WFpeaVsOaNrgotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VybmFtZSIsICJ0ZXN0VXNlciIpOwotICAgICAgICByZXF1ZXN0LnB1dCgiZW1haWwiLCAidGVzdEBleGFtcGxlLmNvbSIpOwotICAgICAgICByZXF1ZXN0LnB1dCgicGFzc3dvcmQiLCAicGFzc3dvcmQiKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInJvbGUiLCAiVVNFUiIpOwotICAgICAgICByZXF1ZXN0LnB1dCgiaW52aXRlQ29kZSIsICIxMjM0NSIpOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbngotICAgICAgICBTdHJpbmcgcmVzdWx0TWVzc2FnZSA9ICLnlKjmiLfms6jlhozmiJDlip8iOwotICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLnJlZ2lzdGVyVXNlcigidGVzdFVzZXIiLCAidGVzdEBleGFtcGxlLmNvbSIsICJwYXNzd29yZCIsICJVU0VSIiwgIjEyMzQ1IikpCi0gICAgICAgICAgICAgICAgLnRoZW5SZXR1cm4ocmVzdWx0TWVzc2FnZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gdXNlckNvbnRyb2xsZXIucmVnaXN0ZXIocmVxdWVzdCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygi55So5oi35rOo5YaM5oiQ5YqfIiwgcmVzdWx0TWFwLmdldCgibXNnIikpOwotCi0gICAgICAgIC8vIOmqjOivgeacjeWKoeWxguaWueazleaYr+WQpuiiq+iwg+eUqAotICAgICAgICB2ZXJpZnkodXNlclNlcnZpY2UsIHRpbWVzKDEpKS5yZWdpc3RlclVzZXIoInRlc3RVc2VyIiwgInRlc3RAZXhhbXBsZS5jb20iLCAicGFzc3dvcmQiLCAiVVNFUiIsICIxMjM0NSIpOworICAgICAgICAvLyDmlq3oqIDov5Tlm57nmoTnirbmgIHnoIHlkozmtojmga8KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0MDEiLCByZXN1bHQuZ2V0Q29kZSgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuZ2V0TXNnKCkuY29udGFpbnMoIueZu+W9leWksei0pSIpKTsKICAgICB9CiAKICAgICBAVGVzdAotICAgIHZvaWQgdGVzdExvZ2luKCkgewotICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSAidGVzdFVzZXIiOwotICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAicGFzc3dvcmQiOwotCi0gICAgICAgIC8vIOaooeaLn+acjeWKoeWxgueahOi/lOWbngotICAgICAgICBTdHJpbmcgbG9naW5NZXNzYWdlID0gIueZu+W9leaIkOWKnyI7Ci0gICAgICAgIHdoZW4odXNlclNlcnZpY2UubG9naW5Vc2VyKCJ0ZXN0VXNlciIsICJwYXNzd29yZCIpKS50aGVuUmV0dXJuKGxvZ2luTWVzc2FnZSk7Ci0KLSAgICAgICAgLy8g5qih5ouf55So5oi35p+l6K+iCi0gICAgICAgIFVzZXJzIHVzZXIgPSBuZXcgVXNlcnMoKTsKLSAgICAgICAgdXNlci5zZXRVc2VySWQoMUwpOwotICAgICAgICB1c2VyLnNldFVzZXJuYW1lKCJ0ZXN0VXNlciIpOworICAgIHZvaWQgcmVnaXN0ZXJDb250cm9sbGVyX2VtYWlsRXhpc3RzKCkgeworICAgICAgICBVc2VyIHVzZXIgPSBuZXcgVXNlcigpOwogICAgICAgICB1c2VyLnNldEVtYWlsKCJ0ZXN0QGV4YW1wbGUuY29tIik7Ci0gICAgICAgIHdoZW4odXNlclJlcG9zaXRvcnkuZmluZEJ5VXNlcm5hbWUoInRlc3RVc2VyIikpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodXNlcikpOwogCi0gICAgICAgIC8vIOiuvue9ruivt+axguaVsOaNrgotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3QgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3QucHV0KCJ1c2VybmFtZSIsIHVzZXJuYW1lKTsKLSAgICAgICAgcmVxdWVzdC5wdXQoInBhc3N3b3JkIiwgcGFzc3dvcmQpOworICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLmNoZWNrRW1haWxFeGlzdHModXNlci5nZXRFbWFpbCgpKSkudGhlblJldHVybih0cnVlKTsKIAotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHRNYXAgPSB1c2VyQ29udHJvbGxlci5sb2dpbihyZXF1ZXN0KTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLnJlZ2lzdGVyQ29udHJvbGxlcih1c2VyKTsKIAotICAgICAgICAvLyDpqozor4Hov5Tlm57nu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLnmbvlvZXmiJDlip8iLCByZXN1bHRNYXAuZ2V0KCJtc2ciKSk7Ci0KLSAgICAgICAgLy8g6aqM6K+BIHVzZXIg5LiN5pivIE1hcCDnsbvlnovvvIzogIzmmK8gVXNlcnMg5a+56LGhCi0gICAgICAgIFVzZXJzIGxvZ2dlZEluVXNlciA9IChVc2VycykgcmVzdWx0TWFwLmdldCgidXNlciIpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGxvZ2dlZEluVXNlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdFVzZXIiLCBsb2dnZWRJblVzZXIuZ2V0VXNlcm5hbWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdEBleGFtcGxlLmNvbSIsIGxvZ2dlZEluVXNlci5nZXRFbWFpbCgpKTsKLQotICAgICAgICAvLyDpqozor4HmnI3liqHlsYLmlrnms5XmmK/lkKbooqvosIPnlKgKLSAgICAgICAgdmVyaWZ5KHVzZXJTZXJ2aWNlLCB0aW1lcygxKSkubG9naW5Vc2VyKCJ0ZXN0VXNlciIsICJwYXNzd29yZCIpOworICAgICAgICBhc3NlcnRFcXVhbHMoIumCrueuseWGsueqgSIsIHJlc3VsdC5nZXRDb2RlKCkpOwogICAgIH0KIAotCi0gICAgLy8g5rWL6K+V6I635Y+W55So5oi35Liq5Lq66LWE5paZ5o6l5Y+jCiAgICAgQFRlc3QKLSAgICB2b2lkIHRlc3RHZXRQcm9maWxlKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotCi0gICAgICAgIC8vIE1vY2sg55So5oi35pWw5o2uCi0gICAgICAgIFVzZXJzIHVzZXIgPSBuZXcgVXNlcnMoKTsKLSAgICAgICAgdXNlci5zZXRVc2VySWQodXNlcklkKTsKLSAgICAgICAgdXNlci5zZXRVc2VybmFtZSgidGVzdFVzZXIiKTsKKyAgICB2b2lkIHJlZ2lzdGVyQ29udHJvbGxlcl9zdWNjZXNzKCkgeworICAgICAgICBVc2VyIHVzZXIgPSBuZXcgVXNlcigpOwogICAgICAgICB1c2VyLnNldEVtYWlsKCJ0ZXN0QGV4YW1wbGUuY29tIik7Ci0gICAgICAgIHVzZXIuc2V0QXZhdGFyVXJsKCJodHRwczovL2V4YW1wbGUuY29tL2F2YXRhci5qcGciKTsKIAotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLov5Tlm54KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwcm9maWxlRGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcHJvZmlsZURhdGEucHV0KCJhdmF0YXJVcmwiLCB1c2VyLmdldEF2YXRhclVybCgpKTsKLSAgICAgICAgcHJvZmlsZURhdGEucHV0KCJ1c2VybmFtZSIsIHVzZXIuZ2V0VXNlcm5hbWUoKSk7Ci0gICAgICAgIHByb2ZpbGVEYXRhLnB1dCgiZW1haWwiLCB1c2VyLmdldEVtYWlsKCkpOwotICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLmdldFByb2ZpbGUodXNlcklkKSkudGhlblJldHVybihwcm9maWxlRGF0YSk7CisgICAgICAgIHdoZW4odXNlclNlcnZpY2UuY2hlY2tFbWFpbEV4aXN0cyh1c2VyLmdldEVtYWlsKCkpKS50aGVuUmV0dXJuKGZhbHNlKTsKKyAgICAgICAgd2hlbih1c2VyU2VydmljZS5wcmVSZWdpc3RlclVzZXIodXNlcikpLnRoZW5SZXR1cm4odHJ1ZSk7CiAKLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0TWFwID0gdXNlckNvbnRyb2xsZXIuZ2V0UHJvZmlsZSh1c2VySWQpOworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gdXNlckNvbnRyb2xsZXIucmVnaXN0ZXJDb250cm9sbGVyKHVzZXIpOwogCi0gICAgICAgIC8vIOmqjOivgei/lOWbnue7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3RVc2VyIiwgcmVzdWx0TWFwLmdldCgidXNlcm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdEBleGFtcGxlLmNvbSIsIHJlc3VsdE1hcC5nZXQoImVtYWlsIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHBzOi8vZXhhbXBsZS5jb20vYXZhdGFyLmpwZyIsIHJlc3VsdE1hcC5nZXQoImF2YXRhclVybCIpKTsKLQotICAgICAgICAvLyDpqozor4HmnI3liqHlsYLmlrnms5XmmK/lkKbooqvosIPnlKgKLSAgICAgICAgdmVyaWZ5KHVzZXJTZXJ2aWNlLCB0aW1lcygxKSkuZ2V0UHJvZmlsZSh1c2VySWQpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleS/ruaUueeUqOaIt+S4quS6uui1hOaWmeaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0RWRpdFByb2ZpbGUoKSB7Ci0gICAgICAgIExvbmcgdXNlcklkID0gMUw7Ci0gICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcHJvZmlsZURhdGEgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHByb2ZpbGVEYXRhLnB1dCgiYXZhdGFyVXJsIiwgImh0dHBzOi8vZXhhbXBsZS5jb20vYXZhdGFyLmpwZyIpOwotICAgICAgICBwcm9maWxlRGF0YS5wdXQoIm5pY2tuYW1lIiwgIm5ld05pY2tuYW1lIik7Ci0gICAgICAgIHByb2ZpbGVEYXRhLnB1dCgiZ2VuZGVyIiwgIk1hbGUiKTsKLSAgICAgICAgcHJvZmlsZURhdGEucHV0KCJkZXNjcmlwdGlvbiIsICJVcGRhdGVkIGRlc2NyaXB0aW9uIik7Ci0gICAgICAgIHByb2ZpbGVEYXRhLnB1dCgiaG9iYmllcyIsICJSZWFkaW5nLCBIaWtpbmciKTsKLQotICAgICAgICAvLyDmqKHmi5/mnI3liqHlsYLnmoTov5Tlm54KLSAgICAgICAgd2hlbih1c2VyU2VydmljZS5lZGl0UHJvZmlsZSh1c2VySWQsICJodHRwczovL2V4YW1wbGUuY29tL2F2YXRhci5qcGciLCAibmV3Tmlja25hbWUiLCAiTWFsZSIsICJVcGRhdGVkIGRlc2NyaXB0aW9uIiwgIlJlYWRpbmcsIEhpa2luZyIpKQotICAgICAgICAgICAgICAgIC50aGVuUmV0dXJuKHRydWUpOwotCi0gICAgICAgIC8vIOiwg+eUqOaOp+WItuWZqOaWueazlQotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc3VsdE1hcCA9IHVzZXJDb250cm9sbGVyLmVkaXRQcm9maWxlKHVzZXJJZCwgcHJvZmlsZURhdGEpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnue7k+aenAotICAgICAgICBhc3NlcnRFcXVhbHMoIueUqOaIt+i1hOaWmeabtOaWsOaIkOWKnyIsIHJlc3VsdE1hcC5nZXQoIm1lc3NhZ2UiKSk7Ci0KLSAgICAgICAgLy8g6aqM6K+B5pyN5Yqh5bGC5pa55rOV5piv5ZCm6KKr6LCD55SoCi0gICAgICAgIHZlcmlmeSh1c2VyU2VydmljZSwgdGltZXMoMSkpLmVkaXRQcm9maWxlKHVzZXJJZCwgImh0dHBzOi8vZXhhbXBsZS5jb20vYXZhdGFyLmpwZyIsICJuZXdOaWNrbmFtZSIsICJNYWxlIiwgIlVwZGF0ZWQgZGVzY3JpcHRpb24iLCAiUmVhZGluZywgSGlraW5nIik7CisgICAgICAgIGFzc2VydEVxdWFscygiMjAwIiwgcmVzdWx0LmdldENvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyh1c2VyLmdldEVtYWlsKCksICgoVXNlcikgcmVzdWx0LmdldERhdGEoKSkuZ2V0RW1haWwoKSk7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRlU2hhcmVSYXRlKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOworICAgIHZvaWQgdmVyaWZ5RW1haWxDb2RlX3N1Y2Nlc3MoKSB7CisgICAgICAgIHdoZW4odXNlclNlcnZpY2UudmVyaWZ5RW1haWwoInRlc3RAZXhhbXBsZS5jb20iLCAiMTIzNDU2IikpLnRoZW5SZXR1cm4odHJ1ZSk7CiAKLSAgICAgICAgLy8g5qih5oufIFVzZXJTZXJ2aWNlIOi/lOWbnueahOe7k+aenAotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGV4cGVjdGVkUmVzcG9uc2UgPSBNYXAub2YoCi0gICAgICAgICAgICAgICAgInN0YXR1cyIsICJzdWNjZXNzIiwKLSAgICAgICAgICAgICAgICAibWVzc2FnZSIsICLliIbkuqvnjoforqHnrpfmiJDlip8iLAotICAgICAgICAgICAgICAgICJzaGFyZVJhdGUiLCAwLjVmCi0gICAgICAgICk7CisgICAgICAgIFVzZXJDb250cm9sbGVyLlZlcmlmaWNhdGlvblJlcXVlc3QgcmVxdWVzdCA9IG5ldyBVc2VyQ29udHJvbGxlci5WZXJpZmljYXRpb25SZXF1ZXN0KCk7CisgICAgICAgIHJlcXVlc3Quc2V0RW1haWwoInRlc3RAZXhhbXBsZS5jb20iKTsKKyAgICAgICAgcmVxdWVzdC5zZXRDb2RlKCIxMjM0NTYiKTsKIAotICAgICAgICAvLyDorr7nva7nlKjmiLfmlbDmja4KLSAgICAgICAgVXNlcnMgdXNlciA9IG5ldyBVc2VycygpOwotICAgICAgICB1c2VyLnNldFVzZXJJZCh1c2VySWQpOwotICAgICAgICB1c2VyLnNldFVwbG9hZENvdW50KDUwZik7ICAvLyDkuIrkvKDph4/kuLo1MAotICAgICAgICB1c2VyLnNldERvd25sb2FkQ291bnQoMTAwZik7ICAvLyDkuIvovb3ph4/kuLoxMDAKLSAgICAgICAgd2hlbih1c2VyU2VydmljZS5jYWxjdWxhdGVTaGFyZVJhdGUodXNlcklkKSkudGhlblJldHVybihleHBlY3RlZFJlc3BvbnNlKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLnZlcmlmeUVtYWlsQ29kZShyZXF1ZXN0KTsKIAotICAgICAgICAvLyDosIPnlKjmjqXlj6MKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHQgPSB1c2VyQ29udHJvbGxlci5jYWxjdWxhdGVTaGFyZVJhdGUodXNlcklkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMDAiLCByZXN1bHQuZ2V0Q29kZSgpKTsKKyAgICB9CiAKLSAgICAgICAgLy8g6aqM6K+B57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFJlc3BvbnNlLCByZXN1bHQpOwotICAgICAgICB2ZXJpZnkodXNlclNlcnZpY2UsIHRpbWVzKDEpKS5jYWxjdWxhdGVTaGFyZVJhdGUodXNlcklkKTsgIC8vIOmqjOivgeacjeWKoeaWueazleaYr+WQpuiiq+iwg+eUqAorICAgIEBUZXN0CisgICAgdm9pZCB2ZXJpZnlFbWFpbENvZGVfZmFpbHVyZSgpIHsKKyAgICAgICAgd2hlbih1c2VyU2VydmljZS52ZXJpZnlFbWFpbCgidGVzdEBleGFtcGxlLmNvbSIsICIwMDAwMDAiKSkudGhlblJldHVybihmYWxzZSk7CisKKyAgICAgICAgVXNlckNvbnRyb2xsZXIuVmVyaWZpY2F0aW9uUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFVzZXJDb250cm9sbGVyLlZlcmlmaWNhdGlvblJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdC5zZXRFbWFpbCgidGVzdEBleGFtcGxlLmNvbSIpOworICAgICAgICByZXF1ZXN0LnNldENvZGUoIjAwMDAwMCIpOworCisgICAgICAgIFJlc3VsdCByZXN1bHQgPSB1c2VyQ29udHJvbGxlci52ZXJpZnlFbWFpbENvZGUocmVxdWVzdCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLpqozor4HlpLHotKUiLCByZXN1bHQuZ2V0Q29kZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHZvaWQgY2hlY2tQYXNzd29yZF9zdWNjZXNzKCkgeworICAgICAgICB3aGVuKHVzZXJTZXJ2aWNlLmNoZWNrUGFzc3dvcmQoMUwsICJhYmMxMjMiKSkudGhlblJldHVybih0cnVlKTsKKworICAgICAgICBSZXN1bHQ8U3RyaW5nPiByZXN1bHQgPSB1c2VyQ29udHJvbGxlci5jaGVja1Bhc3N3b3JkKDFMLCAiYWJjMTIzIik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMDAiLCByZXN1bHQuZ2V0Q29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCLljp/lp4vlr4bnoIHovpPlhaXmraPnoa4iLCByZXN1bHQuZ2V0TXNnKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgdm9pZCBjaGVja1Bhc3N3b3JkX2ZhaWx1cmUoKSB7CisgICAgICAgIHdoZW4odXNlclNlcnZpY2UuY2hlY2tQYXNzd29yZCgxTCwgIndyb25nIikpLnRoZW5SZXR1cm4oZmFsc2UpOworCisgICAgICAgIFJlc3VsdDxTdHJpbmc+IHJlc3VsdCA9IHVzZXJDb250cm9sbGVyLmNoZWNrUGFzc3dvcmQoMUwsICJ3cm9uZyIpOworCisgICAgICAgIGFzc2VydEVxdWFscygiMzA1IiwgcmVzdWx0LmdldENvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygi5Y6f5aeL5a+G56CB6L6T5YWl6ZSZ6K+vIiwgcmVzdWx0LmdldE1zZygpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHZvaWQgc2VuZFZlcmlmaWNhdGlvbkVtYWlsX3VzZXJOb3RGb3VuZCgpIHsKKyAgICAgICAgVXNlckNvbnRyb2xsZXIuRW1haWxSZXF1ZXN0IHJlcXVlc3QgPSBuZXcgVXNlckNvbnRyb2xsZXIuRW1haWxSZXF1ZXN0KCk7CisgICAgICAgIHJlcXVlc3Quc2V0RW1haWwoIm5vdGZvdW5kQGV4YW1wbGUuY29tIik7CisKKyAgICAgICAgd2hlbih1c2VyTWFwcGVyLnNlbGVjdE9uZShhbnkoKSkpLnRoZW5SZXR1cm4obnVsbCk7CisKKyAgICAgICAgUmVzcG9uc2VFbnRpdHk8UmVzdWx0PiByZXNwb25zZSA9IHVzZXJDb250cm9sbGVyLnNlbmRWZXJpZmljYXRpb25FbWFpbChyZXF1ZXN0KTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoNDAwLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiMSIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXRDb2RlKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWJmNDdmLi4wMDAwMDAwCi0tLSBhL3NyYy90ZXN0L2phdmEvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotcGFja2FnZSBjb20uZXhhbXBsZS5teXByb2plY3QuY29udHJvbGxlcjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5jb250cm9sbGVyLlVzZXJGb2xsb3dDb250cm9sbGVyOwotaW1wb3J0IGNvbS5leGFtcGxlLm15cHJvamVjdC5zZXJ2aWNlLlVzZXJGb2xsb3dTZXJ2aWNlOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOwotaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0b0Fubm90YXRpb25zOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5SZXNwb25zZUVudGl0eTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwotCi1jbGFzcyBVc2VyRm9sbG93Q29udHJvbGxlclRlc3QgewotCi0gICAgQEluamVjdE1vY2tzCi0gICAgcHJpdmF0ZSBVc2VyRm9sbG93Q29udHJvbGxlciB1c2VyRm9sbG93Q29udHJvbGxlcjsKLQotICAgIEBNb2NrCi0gICAgcHJpdmF0ZSBVc2VyRm9sbG93U2VydmljZSB1c2VyRm9sbG93U2VydmljZTsKLQotICAgIEBCZWZvcmVFYWNoCi0gICAgdm9pZCBzZXR1cCgpIHsKLSAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5XnlKjmiLflhbPms6jmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEZvbGxvdygpIHsKLSAgICAgICAgTG9uZyBmb2xsb3dlcklkID0gMUw7Ci0gICAgICAgIExvbmcgZm9sbG93ZWRJZCA9IDJMOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IE1hcC5vZigKLSAgICAgICAgICAgICAgICAic3RhdHVzIiwgInN1Y2Nlc3MiLAotICAgICAgICAgICAgICAgICJtZXNzYWdlIiwgIuWFs+azqOaIkOWKnyIKLSAgICAgICAgKTsKLQotICAgICAgICAvLyDmqKHmi58gdXNlckZvbGxvd1NlcnZpY2UuZm9sbG93KCkg6L+U5ZueCi0gICAgICAgIHdoZW4odXNlckZvbGxvd1NlcnZpY2UuZm9sbG93KGZvbGxvd2VySWQsIGZvbGxvd2VkSWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5Yib5bu66K+35rGC5L2TCi0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IHJlcXVlc3QgPSBNYXAub2YoImZvbGxvd2VyX2lkIiwgZm9sbG93ZXJJZCk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlRW50aXR5ID0gdXNlckZvbGxvd0NvbnRyb2xsZXIuZm9sbG93KGZvbGxvd2VkSWQsIHJlcXVlc3QpOwotCi0gICAgICAgIC8vIOmqjOivgei/lOWbnueahOeKtuaAgeeggeWSjOWGheWuuQotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZUVudGl0eS5nZXRTdGF0dXNDb2RlVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3VjY2VzcyIsIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoInN0YXR1cyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCLlhbPms6jmiJDlip8iLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlIikpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleWPlua2iOWFs+azqOaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0VW5mb2xsb3coKSB7Ci0gICAgICAgIExvbmcgZm9sbG93ZXJJZCA9IDFMOwotICAgICAgICBMb25nIGZvbGxvd2VkSWQgPSAyTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBNYXAub2YoCi0gICAgICAgICAgICAgICAgInN0YXR1cyIsICJzdWNjZXNzIiwKLSAgICAgICAgICAgICAgICAibWVzc2FnZSIsICLlj5bmtojlhbPms6jmiJDlip8iCi0gICAgICAgICk7Ci0KLSAgICAgICAgLy8g5qih5oufIHVzZXJGb2xsb3dTZXJ2aWNlLnVuZm9sbG93KCkg6L+U5ZueCi0gICAgICAgIHdoZW4odXNlckZvbGxvd1NlcnZpY2UudW5mb2xsb3coZm9sbG93ZXJJZCwgZm9sbG93ZWRJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDliJvlu7ror7fmsYLkvZMKLSAgICAgICAgTWFwPFN0cmluZywgTG9uZz4gcmVxdWVzdCA9IE1hcC5vZigiZm9sbG93ZXJfaWQiLCBmb2xsb3dlcklkKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2VFbnRpdHkgPSB1c2VyRm9sbG93Q29udHJvbGxlci51bmZvbGxvdyhmb2xsb3dlZElkLCByZXF1ZXN0KTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnirbmgIHnoIHlkozlhoXlrrkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2VFbnRpdHkuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygi5Y+W5raI5YWz5rOo5oiQ5YqfIiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgibWVzc2FnZSIpKTsKLSAgICB9Ci0KLSAgICAvLyDmtYvor5Xojrflj5bmn5DkuKrnlKjmiLfnmoTnsonkuJ3liJfooajmjqXlj6MKLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdEdldEZvbGxvd2VycygpIHsKLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBNYXAub2YoCi0gICAgICAgICAgICAgICAgInN0YXR1cyIsICJzdWNjZXNzIiwKLSAgICAgICAgICAgICAgICAidG90YWwiLCAyLAotICAgICAgICAgICAgICAgICJmb2xsb3dlcnMiLCBMaXN0Lm9mKAotICAgICAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJ1c2VyX2lkIiwgMkwsICJ1c2VybmFtZSIsICJ1c2VyMiIsICJhdmF0YXJfdXJsIiwgInVybDIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hcC5vZigidXNlcl9pZCIsIDNMLCAidXNlcm5hbWUiLCAidXNlcjMiLCAiYXZhdGFyX3VybCIsICJ1cmwzIikKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICk7Ci0KLSAgICAgICAgLy8g5qih5oufIHVzZXJGb2xsb3dTZXJ2aWNlLmdldEZvbGxvd2VycygpIOi/lOWbngotICAgICAgICB3aGVuKHVzZXJGb2xsb3dTZXJ2aWNlLmdldEZvbGxvd2Vycyh1c2VySWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g6LCD55So5o6n5Yi25Zmo5pa55rOVCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlRW50aXR5ID0gdXNlckZvbGxvd0NvbnRyb2xsZXIuZ2V0Rm9sbG93ZXJzKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B6L+U5Zue55qE54q25oCB56CB5ZKM5YaF5a65Ci0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlRW50aXR5LmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgidG90YWwiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCAoKExpc3Q8Pz4pIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5nZXQoImZvbGxvd2VycyIpKS5zaXplKCkpOwotICAgIH0KLQotICAgIC8vIOa1i+ivleiOt+WPluafkOS4queUqOaIt+eahOWFs+azqOWIl+ihqOaOpeWPowotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0Rm9sbG93aW5nKCkgewotICAgICAgICBMb25nIHVzZXJJZCA9IDFMOwotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IE1hcC5vZigKLSAgICAgICAgICAgICAgICAic3RhdHVzIiwgInN1Y2Nlc3MiLAotICAgICAgICAgICAgICAgICJ0b3RhbCIsIDIsCi0gICAgICAgICAgICAgICAgImZvbGxvd2luZyIsIExpc3Qub2YoCi0gICAgICAgICAgICAgICAgICAgICAgICBNYXAub2YoInVzZXJfaWQiLCAyTCwgInVzZXJuYW1lIiwgInVzZXIyIiwgImF2YXRhcl91cmwiLCAidXJsMiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgTWFwLm9mKCJ1c2VyX2lkIiwgM0wsICJ1c2VybmFtZSIsICJ1c2VyMyIsICJhdmF0YXJfdXJsIiwgInVybDMiKQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgKTsKLQotICAgICAgICAvLyDmqKHmi58gdXNlckZvbGxvd1NlcnZpY2UuZ2V0Rm9sbG93aW5nKCkg6L+U5ZueCi0gICAgICAgIHdoZW4odXNlckZvbGxvd1NlcnZpY2UuZ2V0Rm9sbG93aW5nKHVzZXJJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDosIPnlKjmjqfliLblmajmlrnms5UKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2VFbnRpdHkgPSB1c2VyRm9sbG93Q29udHJvbGxlci5nZXRGb2xsb3dpbmcodXNlcklkKTsKLQotICAgICAgICAvLyDpqozor4Hov5Tlm57nmoTnirbmgIHnoIHlkozlhoXlrrkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2VFbnRpdHkuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZ2V0KCJ0b3RhbCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsICgoTGlzdDw/PikgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmdldCgiZm9sbG93aW5nIikpLnNpemUoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvamF2YS9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXJUZXN0LmphdmEgYi9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjYmNjNy4uMDAwMDAwMAotLS0gYS9zcmMvdGVzdC9qYXZhL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLXBhY2thZ2UgY29tLmV4YW1wbGUubXlwcm9qZWN0LmNvbnRyb2xsZXI7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5teXByb2plY3Quc2VydmljZS5Vc2VyTWVzc2FnZVNlcnZpY2U7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7Ci1pbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uSW5qZWN0TW9ja3M7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLlJlc3BvbnNlRW50aXR5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ud2hlbjsKLQotY2xhc3MgVXNlck1lc3NhZ2VDb250cm9sbGVyVGVzdCB7Ci0KLSAgICBASW5qZWN0TW9ja3MKLSAgICBwcml2YXRlIFVzZXJNZXNzYWdlQ29udHJvbGxlciB1c2VyTWVzc2FnZUNvbnRyb2xsZXI7Ci0KLSAgICBATW9jawotICAgIHByaXZhdGUgVXNlck1lc3NhZ2VTZXJ2aWNlIHVzZXJNZXNzYWdlU2VydmljZTsKLQotICAgIEBCZWZvcmVFYWNoCi0gICAgdm9pZCBzZXR1cCgpIHsKLSAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLm9wZW5Nb2Nrcyh0aGlzKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHZvaWQgdGVzdFNlbmRNZXNzYWdlKCkgewotICAgICAgICAvLyDlh4blpIfmtYvor5XmlbDmja4KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHBhcmFtcy5wdXQoInNlbmRlcl9pZCIsIDFMKTsKLSAgICAgICAgcGFyYW1zLnB1dCgicmVjZWl2ZXJfaWQiLCAyTCk7Ci0gICAgICAgIHBhcmFtcy5wdXQoImNvbnRlbnQiLCAi5rWL6K+V5raI5oGvIik7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCAi56eB5L+h5Y+R6YCB5oiQ5YqfIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2VfaWQiLCAxMDBMKTsKLQotICAgICAgICAvLyDmqKHmi59TZXJ2aWNl5pa55rOV6LCD55SoCi0gICAgICAgIHdoZW4odXNlck1lc3NhZ2VTZXJ2aWNlLnNlbmRNZXNzYWdlKDFMLCAyTCwgIua1i+ivlea2iOaBryIpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5omn6KGM5rWL6K+VCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gdXNlck1lc3NhZ2VDb250cm9sbGVyLnNlbmRNZXNzYWdlKHBhcmFtcyk7Ci0KLSAgICAgICAgLy8g6aqM6K+B57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgic3RhdHVzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIuengeS/oeWPkemAgeaIkOWKnyIsIHJlc3BvbnNlLmdldEJvZHkoKS5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMDBMLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJtZXNzYWdlX2lkIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0VXNlck1lc3NhZ2VzKCkgewotICAgICAgICAvLyDlh4blpIfmtYvor5XmlbDmja4KLSAgICAgICAgTG9uZyB1c2VySWQgPSAxTDsKLQotICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1vY2tSZXNwb25zZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgic3RhdHVzIiwgInN1Y2Nlc3MiKTsKLSAgICAgICAgbW9ja1Jlc3BvbnNlLnB1dCgibWVzc2FnZXMiLCBuZXcgSGFzaE1hcDw+KCkpOwotCi0gICAgICAgIC8vIOaooeaLn1NlcnZpY2Xmlrnms5XosIPnlKgKLSAgICAgICAgd2hlbih1c2VyTWVzc2FnZVNlcnZpY2UuZ2V0VXNlck1lc3NhZ2VzKHVzZXJJZCkpLnRoZW5SZXR1cm4obW9ja1Jlc3BvbnNlKTsKLQotICAgICAgICAvLyDmiafooYzmtYvor5UKLSAgICAgICAgUmVzcG9uc2VFbnRpdHk8TWFwPFN0cmluZywgT2JqZWN0Pj4gcmVzcG9uc2UgPSB1c2VyTWVzc2FnZUNvbnRyb2xsZXIuZ2V0VXNlck1lc3NhZ2VzKHVzZXJJZCk7Ci0KLSAgICAgICAgLy8g6aqM6K+B57uT5p6cCi0gICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGVWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdWNjZXNzIiwgcmVzcG9uc2UuZ2V0Qm9keSgpLmdldCgic3RhdHVzIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgdm9pZCB0ZXN0R2V0TWVzc2FnZSgpIHsKLSAgICAgICAgLy8g5YeG5aSH5rWL6K+V5pWw5o2uCi0gICAgICAgIExvbmcgbWVzc2FnZUlkID0gMUw7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtb2NrUmVzcG9uc2UgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoInN0YXR1cyIsICJzdWNjZXNzIik7Ci0gICAgICAgIG1vY2tSZXNwb25zZS5wdXQoIm1lc3NhZ2UiLCBuZXcgSGFzaE1hcDw+KCkpOwotCi0gICAgICAgIC8vIOaooeaLn1NlcnZpY2Xmlrnms5XosIPnlKgKLSAgICAgICAgd2hlbih1c2VyTWVzc2FnZVNlcnZpY2UuZ2V0TWVzc2FnZShtZXNzYWdlSWQpKS50aGVuUmV0dXJuKG1vY2tSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8g5omn6KGM5rWL6K+VCi0gICAgICAgIFJlc3BvbnNlRW50aXR5PE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3BvbnNlID0gdXNlck1lc3NhZ2VDb250cm9sbGVyLmdldE1lc3NhZ2UobWVzc2FnZUlkKTsKLQotICAgICAgICAvLyDpqozor4Hnu5PmnpwKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZVZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInN1Y2Nlc3MiLCByZXNwb25zZS5nZXRCb2R5KCkuZ2V0KCJzdGF0dXMiKSk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2FwcGxpY2F0aW9uLnByb3BlcnRpZXMgYi90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTAzMzMKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9hcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzEgQEAKK3NlcnZlci5wb3J0PTgwODAKK3NwcmluZy5kYXRhc291cmNlLnVybD1qZGJjOm15c3FsOi8vbG9jYWxob3N0OjMzMDYvcHQKK3NwcmluZy5kYXRhc291cmNlLnVzZXJuYW1lPXJvb3QKK3NwcmluZy5kYXRhc291cmNlLnBhc3N3b3JkPXJvb3QKK3NwcmluZy5kYXRhc291cmNlLmRyaXZlci1jbGFzcy1uYW1lPWNvbS5teXNxbC5jai5qZGJjLkRyaXZlcgorCitteWJhdGlzLXBsdXMuY29uZmlndXJhdGlvbi5sb2ctaW1wbD1vcmcuYXBhY2hlLmliYXRpcy5sb2dnaW5nLnN0ZG91dC5TdGRPdXRJbXBsCisKKworIyBNYWlsIGNvbmZpZ3VyYXRpb24KK3NwcmluZy5tYWlsLnBhc3N3b3JkPXRsam5lYm9uaHpocWVjZGEKK3NwcmluZy5tYWlsLnVzZXJuYW1lPTIzNzA1MjM3MTZAcXEuY29tCitzcHJpbmcubWFpbC5ob3N0PXNtdHAucXEuY29tCitzcHJpbmcubWFpbC5wcm9wZXJ0aWVzLm1haWwuc210cC5zc2wuZW5hYmxlPXRydWUKK3NwcmluZy5tYWlsLnByb3BlcnRpZXMubWFpbC5zbXRwLmF1dGg9dHJ1ZQorc3ByaW5nLm1haWwucHJvcGVydGllcy5tYWlsLnNtdHAuc3RhcnR0bHMuZW5hYmxlPXRydWUKKworCitzcHJpbmcuanBhLmVuYWJsZWQ9ZmFsc2UKK3NwcmluZy5qcGEuaGliZXJuYXRlLmRkbC1hdXRvPW5vbmUKK3NwcmluZy5qcGEub3Blbi1pbi12aWV3PWZhbHNlCisKKyMgdHJhY2tlcj8/CitwdC50cmFja2VyLnBvcnQ9Njk2OQorCitwdC50cmFja2VyLnRvcnJlbnQtZGlyPSR7dXNlci5kaXJ9L2RhdGEvdG9ycmVudHMKKworcHQudHJhY2tlci5hbGxvdy1mb3JlaWduPWZhbHNlCitwdC50cmFja2VyLmFubm91bmNlLXVybD0vY3VzdG9tLWFubm91bmNlCisKK215YmF0aXMtcGx1cy5tYXBwZXItbG9jYXRpb25zPWNsYXNzcGF0aDovbWFwcGVyLyoqLyoueG1sCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvTXlQcm9qZWN0QXBwbGljYXRpb24uY2xhc3MKaW5kZXggMWViZDM0OS4uYTEyODFhOSAxMDA2NDQKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L015UHJvamVjdEFwcGxpY2F0aW9uLmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9NeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTQzYTQ1Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0NvbW1lbnRDb250cm9sbGVyLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlci5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc2MDQ1Mi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9EeW5hbWljQ29udHJvbGxlci5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0dyb3VwQ29udHJvbGxlci5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMxZjc3My4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXIuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9MZXZlbENvbnRyb2xsZXIuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0Y2U5MWUuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI1YzQ3Mi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Qb3N0Q29udHJvbGxlci5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVGFza0NvbnRyb2xsZXIuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZDliODkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVGFza0NvbnRyb2xsZXIuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRFbWFpbFJlcXVlc3QuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmZmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyJEVtYWlsUmVxdWVzdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlciRWZXJpZmljYXRpb25SZXF1ZXN0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzI1MDVlCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXIkVmVyaWZpY2F0aW9uUmVxdWVzdC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmNsYXNzCmluZGV4IDc3YzFhOWMuLmNkMWFiMTMgMTAwNjQ0Ci0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmNsYXNzCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXIuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MzBlNjAuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckZvbGxvd0NvbnRyb2xsZXIuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXIuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyTWVzc2FnZUNvbnRyb2xsZXIuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NzI1OGMuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db2xsZWN0aW9ucy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29sbGVjdGlvbnMuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYjJjMWIuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Db2xsZWN0aW9ucy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0NvbW1lbnRzLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWFlNjFlLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvQ29tbWVudHMuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNDb21tZW50LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljQ29tbWVudC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JjYjBiZi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNDb21tZW50LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9EeW5hbWljTGlrZXMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNMaWtlcy5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4YjAxMC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0R5bmFtaWNMaWtlcy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRXhwZXJpZW5jZUhpc3RvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0V4cGVyaWVuY2VIaXN0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWIwZTRlLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvRXhwZXJpZW5jZUhpc3RvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0ZyaWVuZFJlbGF0aW9uLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9GcmllbmRSZWxhdGlvbi5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhjZTJhZS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0ZyaWVuZFJlbGF0aW9uLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cC5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXAuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MzEzMmUuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBDb21tZW50cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBDb21tZW50cy5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E0Yzg4Zi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwQ29tbWVudHMuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwTWVtYmVycy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBNZW1iZXJzLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTczYjg2Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvR3JvdXBNZW1iZXJzLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Hcm91cFBvc3QuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwUG9zdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY0YjQ1OS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0dyb3VwUG9zdC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGV2ZWwuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xldmVsLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2JjOWI2Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvTGV2ZWwuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xpa2VzLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9MaWtlcy5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk0N2Q3Mi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L0xpa2VzLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Qb3N0LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjdiMzQ2Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvUG9zdC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVGFzay5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVGFzay5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQyZmQ4YS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1Rhc2suY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEeW5hbWljLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRHluYW1pYy5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3OGZlZC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJEeW5hbWljLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRm9sbG93LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyRm9sbG93LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjAyMWVmLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckZvbGxvdy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJJbnZpdGVDb2RlLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGQ0ZDY3Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlckludml0ZUNvZGUuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJNZXNzYWdlcy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlck1lc3NhZ2VzLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTAxNGUxLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlck1lc3NhZ2VzLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyVGFza1N0YXR1cy5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlclRhc2tTdGF0dXMuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZTI5NTkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2VudGl0eS9Vc2VyVGFza1N0YXR1cy5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvZW50aXR5L1VzZXJzLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWMzMTI1Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9lbnRpdHkvVXNlcnMuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db2xsZWN0aW9uc1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db2xsZWN0aW9uc1JlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNjdjODYuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29sbGVjdGlvbnNSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db21tZW50UmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UzOWUwOC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Db21tZW50UmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0R5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhY2UzMi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRHluYW1pY0xpa2VzUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAwYjQ1My4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9EeW5hbWljTGlrZXNSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvRXhwZXJpZW5jZUhpc3RvcnlSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjQzMzA3Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0V4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0ZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0ZyaWVuZFJlbGF0aW9uUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmY2U5Ni4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9GcmllbmRSZWxhdGlvblJlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cENvbW1lbnRzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwQ29tbWVudHNSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjcxMjNiLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwQ29tbWVudHNSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwTWVtYmVyc1JlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZjhjOGMuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFBvc3RSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTk2ZjhhLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0dyb3VwUG9zdFJlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFJlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Hcm91cFJlcG9zaXRvcnkuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYmYwMzguLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvR3JvdXBSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGV2ZWxSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvTGV2ZWxSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQxNzgyLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xldmVsUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xpa2VzUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L0xpa2VzUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhiYjRmYy4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9MaWtlc1JlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Qb3N0UmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDBmZjM1Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1Bvc3RSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVGFza1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9UYXNrUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E2NTRhZS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9UYXNrUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJEeW5hbWljUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJEeW5hbWljUmVwb3NpdG9yeS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M0OWVlNS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRHluYW1pY1JlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyRm9sbG93UmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJGb2xsb3dSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDAxNjgyLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJGb2xsb3dSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlckludml0ZUNvZGVSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjdiYjlmLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJNZXNzYWdlc1JlcG9zaXRvcnkuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyTWVzc2FnZXNSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ5OTZhLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJNZXNzYWdlc1JlcG9zaXRvcnkuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvcmVwb3NpdG9yeS9Vc2VyUmVwb3NpdG9yeS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTFiM2FkLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJSZXBvc2l0b3J5LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3JlcG9zaXRvcnkvVXNlclRhc2tTdGF0dXNSZXBvc2l0b3J5LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzU4NWIxLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9yZXBvc2l0b3J5L1VzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0NvbW1lbnRTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZGYzZjguLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvQ29tbWVudFNlcnZpY2UuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9EeW5hbWljU2VydmljZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0R5bmFtaWNTZXJ2aWNlLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDJkZTM5Li4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0R5bmFtaWNTZXJ2aWNlLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvR3JvdXBTZXJ2aWNlLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWUzMGNlLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0dyb3VwU2VydmljZS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0xldmVsU2VydmljZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL0xldmVsU2VydmljZS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg0NmRkYS4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9MZXZlbFNlcnZpY2UuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Qb3N0U2VydmljZS5jbGFzcyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1Bvc3RTZXJ2aWNlLmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjcwMjNiLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1Bvc3RTZXJ2aWNlLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVGFza1NlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE5ZTBmNi4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9UYXNrU2VydmljZS5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL1VzZXJGb2xsb3dTZXJ2aWNlLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckZvbGxvd1NlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZDUxMzIuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlckZvbGxvd1NlcnZpY2UuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyTWVzc2FnZVNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyTWVzc2FnZVNlcnZpY2UuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYmFmODkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlck1lc3NhZ2VTZXJ2aWNlLmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2UvVXNlclNlcnZpY2UuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcwppbmRleCAwMDNlMDQyLi4yNDJiYjFjIDEwMDY0NAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcworKysgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9Vc2VyU2VydmljZS5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQ3MGVkCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3NlcnZpY2Uvc2VydmljZUltcGwvVXNlckRldGFpbHNTZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyU2VydmljZUltcGwuY2xhc3MgYi90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3Qvc2VydmljZS9zZXJ2aWNlSW1wbC9Vc2VyU2VydmljZUltcGwuY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5NzE1OAotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9zZXJ2aWNlL3NlcnZpY2VJbXBsL1VzZXJTZXJ2aWNlSW1wbC5jbGFzcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzIGIvdGFyZ2V0L2NsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L3V0aWxzL1Jlc3VsdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjNWFhMC4uMDAwMDAwMAotLS0gYS90YXJnZXQvY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvdXRpbHMvUmVzdWx0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvZmlsZXMvZmlsZXMudG9ycmVudCBiL3RhcmdldC9jbGFzc2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0OTc0ZgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL2ZpbGVzL2ZpbGVzLnRvcnJlbnQKQEAgLTAsMCArMSBAQAorZDg6YW5ub3VuY2UyMjpodHRwczovL3RyYWNrZXIuYnlyLnB0MTA6Y3JlYXRlZCBieTIxOnFCaXR0b3JyZW50IHY0LjUuMy4xMDEzOmNyZWF0aW9uIGRhdGVpMTc0NzcxNzkwMWU0OmluZm9kNTpmaWxlc2xkNjpsZW5ndGhpMTczZTQ6cGF0aGwxMzp2YWxpZC50b3JyZW50ZWVlNDpuYW1lNTpmaWxlczEyOnBpZWNlIGxlbmd0aGkxNjM4NGU2OnBpZWNlczIwOi/x7ehF9DXjPPL7H+zVhJ9RoZb7ZWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvRmF2b3JpdGVNYXBwZXIueG1sIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQ4ZWMyCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL0Zhdm9yaXRlTWFwcGVyLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorPG1hcHBlciBuYW1lc3BhY2U9ImNvbS5leGFtcGxlLm15cHJvamVjdC5tYXBwZXIuRmF2b3JpdGVNYXBwZXIiPgorIAorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbCBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9Qcm9tb3Rpb25NYXBwZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZmZkOTUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvUHJvbW90aW9uTWFwcGVyLnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlByb21vdGlvbk1hcHBlciI+CisKKyAgICA8aW5zZXJ0IGlkPSJpbnNlcnQiIHBhcmFtZXRlclR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuUHJvbW90aW9uIj4KKyAgICAgICAgSU5TRVJUIElOVE8gcHJvbW90aW9uICgKKyAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sIHN0YXJ0X3RpbWUsIGVuZF90aW1lLCBkaXNjb3VudF9wZXJjZW50YWdlLCBhcHBsaWNhYmxlX3RvcnJlbnRfaWRzCisgICAgICAgICkgVkFMVUVTICgKKyAgICAgICAgI3tuYW1lfSwgI3tkZXNjcmlwdGlvbn0sICN7c3RhcnRUaW1lfSwgI3tlbmRUaW1lfSwgI3tkaXNjb3VudFBlcmNlbnRhZ2V9LCAje2FwcGxpY2FibGVUb3JyZW50SWRzfQorICAgICAgICApCisgICAgPC9pbnNlcnQ+CisKKzwvbWFwcGVyPgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1RvcnJlbnRNYXBwZXIueG1sIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1RvcnJlbnRNYXBwZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZjAxOGUKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVG9ycmVudE1hcHBlci54bWwKQEAgLTAsMCArMSwxMDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgbWFwcGVyIFBVQkxJQyAiLS8vbXliYXRpcy5vcmcvL0RURCBNYXBwZXIgMy4wLy9FTiIKKyAgICAgICAgImh0dHA6Ly9teWJhdGlzLm9yZy9kdGQvbXliYXRpcy0zLW1hcHBlci5kdGQiPgorCis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5Ub3JyZW50TWFwcGVyIj4KKyAgICA8cmVzdWx0TWFwIGlkPSJCYXNlUmVzdWx0TWFwIiB0eXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlRvcnJlbnRFbnRpdHkiPgorICAgICAgICA8aWQgY29sdW1uPSJpbmZvX2hhc2giIHByb3BlcnR5PSJpbmZvSGFzaCIvPgorICAgICAgICA8cmVzdWx0IGNvbHVtbj0iZmlsZV9uYW1lIiBwcm9wZXJ0eT0iZmlsZU5hbWUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InVwbG9hZGVyIiBwcm9wZXJ0eT0idXBsb2FkZXIiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InVwbG9hZF90aW1lIiBwcm9wZXJ0eT0idXBsb2FkVGltZSIvPgorICAgICAgICA8cmVzdWx0IGNvbHVtbj0ic2l6ZSIgcHJvcGVydHk9InNpemUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49InRpdGxlIiBwcm9wZXJ0eT0idGl0bGUiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImRlc2NyaXB0aW9uIiBwcm9wZXJ0eT0iZGVzY3JpcHRpb24iLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImNhdGVnb3J5IiBwcm9wZXJ0eT0iY2F0ZWdvcnkiLz4KKyAgICAgICAgPHJlc3VsdCBjb2x1bW49ImltYWdlX3VybCIgcHJvcGVydHk9ImltYWdlVXJsIi8+CisgICAgPC9yZXN1bHRNYXA+CisKKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeUluZm9IYXNoIiByZXN1bHRNYXA9IkJhc2VSZXN1bHRNYXAiPgorICAgICAgICBTRUxFQ1QgKiBGUk9NIHRvcnJlbnQgV0hFUkUgaW5mb19oYXNoID0gI3tpbmZvSGFzaH0KKyAgICA8L3NlbGVjdD4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVNlZWRJZCIgcmVzdWx0TWFwPSJCYXNlUmVzdWx0TWFwIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50IFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0KKyAgICA8L3NlbGVjdD4KKworCisKKworICAgIDx1cGRhdGUgaWQ9InVwZGF0ZSIgcGFyYW1ldGVyVHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgVVBEQVRFIHRvcnJlbnQKKyAgICAgICAgU0VUIGZpbGVfbmFtZSA9ICN7ZmlsZU5hbWV9LAorICAgICAgICB1cGxvYWRlciA9ICN7dXBsb2FkZXJ9LAorICAgICAgICB1cGxvYWRfdGltZSA9ICN7dXBsb2FkVGltZX0sCisgICAgICAgIHNpemUgPSAje3NpemV9LAorICAgICAgICB0aXRsZSA9ICN7dGl0bGV9LAorICAgICAgICBkZXNjcmlwdGlvbiA9ICN7ZGVzY3JpcHRpb259LAorICAgICAgICBjYXRlZ29yeSA9ICN7Y2F0ZWdvcnl9LAorICAgICAgICBpbWFnZV91cmwgPSAje2ltYWdlVXJsfQorICAgICAgICBXSEVSRSBpbmZvX2hhc2ggPSAje2luZm9IYXNofQorICAgIDwvdXBkYXRlPgorICAgIDxzZWxlY3QgaWQ9InNlYXJjaCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Ub3JyZW50RW50aXR5Ij4KKyAgICAgICAgU0VMRUNUICogRlJPTSB0b3JyZW50CisgICAgICAgIDx3aGVyZT4KKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5jYXRlZ29yeSAhPSBudWxsIj4KKyAgICAgICAgICAgICAgICBBTkQgY2F0ZWdvcnkgPSAje3BhcmFtLmNhdGVnb3J5fQorICAgICAgICAgICAgPC9pZj4KKworICAgICAgICAgICAgPCEtLSAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmZyZWUgIT0gbnVsbCBhbmQgcGFyYW0uZnJlZSAhPSAnJyI+LS0+CisgICAgICAgICAgICA8IS0tICAgICAgICAgICAgQU5EIGZyZWUgPSAje3BhcmFtLmZyZWV9LS0+CisgICAgICAgICAgICA8IS0tICAgICAgICA8L2lmPi0tPgorICAgICAgICAgICAgPGlmIHRlc3Q9InBhcmFtLmZyZWUgIT0gbnVsbCI+CisgICAgICAgICAgICA8Y2hvb3NlPgorICAgICAgICAgICAgICAgIDwhLS0g562b6YCJ4oCc5q2j5Zyo5L+D6ZSA5Lit4oCd55qE56eN5a2QIC0tPgorICAgICAgICAgICAgICAgIDx3aGVuIHRlc3Q9InBhcmFtLmZyZWUgPT0gdHJ1ZSI+CisgICAgICAgICAgICAgICAgICAgIEFORCBFWElTVFMgKAorICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgMSBGUk9NIHByb21vdGlvbiBwCisgICAgICAgICAgICAgICAgICAgIFdIRVJFCisgICAgICAgICAgICAgICAgICAgIEpTT05fQ09OVEFJTlMocC5hcHBsaWNhYmxlX3RvcnJlbnRfaWRzLCBKU09OX0FSUkFZKHQuaWQpKQorICAgICAgICAgICAgICAgICAgICBBTkQgTk9XKCkgQkVUV0VFTiBwLnN0YXJ0X3RpbWUgQU5EIHAuZW5kX3RpbWUKKyAgICAgICAgICAgICAgICAgICAgQU5EIHAuaXNfZGVsZXRlZCA9IDAKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIDwvd2hlbj4KKyAgICAgICAgICAgICAgICA8IS0tIOetm+mAieKAnOacquWcqOS/g+mUgOS4reKAneeahOenjeWtkCAtLT4KKyAgICAgICAgICAgICAgICA8b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIEVYSVNUUyAoCisgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcHJvbW90aW9uIHAKKyAgICAgICAgICAgICAgICAgICAgV0hFUkUKKyAgICAgICAgICAgICAgICAgICAgSlNPTl9DT05UQUlOUyhwLmFwcGxpY2FibGVfdG9ycmVudF9pZHMsIEpTT05fQVJSQVkodC5pZCkpCisgICAgICAgICAgICAgICAgICAgIEFORCBOT1coKSBCRVRXRUVOIHAuc3RhcnRfdGltZSBBTkQgcC5lbmRfdGltZQorICAgICAgICAgICAgICAgICAgICBBTkQgcC5pc19kZWxldGVkID0gMAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgPC9vdGhlcndpc2U+CisgICAgICAgICAgICA8L2Nob29zZT4KKyAgICAgICAgICAgIDwvaWY+CisKKyAgICAgICAgICAgIDxpZiB0ZXN0PSJwYXJhbS5saWtlRXhwcmVzc2lvbnMgIT0gbnVsbCBhbmQgcGFyYW0ubGlrZUV4cHJlc3Npb25zLnNpemUgPiAwIj4KKyAgICAgICAgICAgICAgICBBTkQgKAorICAgICAgICAgICAgICAgIDxmb3JlYWNoIGNvbGxlY3Rpb249InBhcmFtLmxpa2VFeHByZXNzaW9ucyIgaXRlbT0iaXRlbSIgb3Blbj0iKCIgc2VwYXJhdG9yPSIgQU5EICIgY2xvc2U9IikiPgorCisgICAgICAgICAgICAgICAgICAgICggdGl0bGUgTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkgb3IgKCBkZXNjcmlwdGlvbiBMSUtFIENPTkNBVCgnJScsICN7aXRlbX0sICclJykgKSBvciAoIHRhZ3MgTElLRSBDT05DQVQoJyUnLCAje2l0ZW19LCAnJScpICkKKyAgICAgICAgICAgICAgICA8L2ZvcmVhY2g+CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgPC9pZj4KKyAgICAgICAgPC93aGVyZT4KKworICAgICAgICA8aWYgdGVzdD0icGFyYW0ucHJvcCAhPSBudWxsIGFuZCBwYXJhbS5zb3J0ICE9IG51bGwiPgorICAgICAgICAgICAgT1JERVIgQlkgJHtwYXJhbS5wcm9wfSAke3BhcmFtLnNvcnR9CisgICAgICAgIDwvaWY+CisgICAgPC9zZWxlY3Q+CisgICAgPHNlbGVjdCBpZD0iY2hlY2tGYXZvcml0ZSIgcmVzdWx0VHlwZT0iYm9vbGVhbiI+CisgICAgICAgIFNFTEVDVCBDT1VOVCgqKSA+IDAKKyAgICAgICAgRlJPTSBmYXZvcml0ZQorICAgICAgICBXSEVSRSBzZWVkX2lkID0gI3tzZWVkSWR9IEFORCB1c2VyX2lkID0gI3t1c2VySWR9CisgICAgPC9zZWxlY3Q+CisgICAgPGluc2VydCBpZD0iYWRkRmF2b3JpdGUiPgorICAgICAgICBJTlNFUlQgSU5UTyBmYXZvcml0ZSAoc2VlZF9pZCwgdXNlcl9pZCkKKyAgICAgICAgVkFMVUVTICgje3NlZWRJZH0sICN7dXNlcklkfSkKKyAgICA8L2luc2VydD4KKyAgICA8ZGVsZXRlIGlkPSJyZW1vdmVGYXZvcml0ZSI+CisgICAgICAgIERFTEVURSBGUk9NIGZhdm9yaXRlCisgICAgICAgIFdIRVJFIHNlZWRfaWQgPSAje3NlZWRJZH0gQU5EIHVzZXJfaWQgPSAje3VzZXJJZH0KKyAgICA8L2RlbGV0ZT4KKworCis8L21hcHBlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVXNlck1hcHBlci54bWwgYi90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVXNlck1hcHBlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAzYWIwYQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9jbGFzc2VzL21hcHBlci9Vc2VyTWFwcGVyLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIG1hcHBlciBQVUJMSUMgIi0vL215YmF0aXMub3JnLy9EVEQgTWFwcGVyIDMuMC8vRU4iCisgICAgICAgICJodHRwOi8vbXliYXRpcy5vcmcvZHRkL215YmF0aXMtMy1tYXBwZXIuZHRkIj4KKzxtYXBwZXIgbmFtZXNwYWNlPSJjb20uZXhhbXBsZS5teXByb2plY3QubWFwcGVyLlVzZXJNYXBwZXIiPgorICAgIDwhLS0g5qC55o2u55So5oi35ZCN5p+l5om+55So5oi3IC0tPgorICAgIDxzZWxlY3QgaWQ9InNlbGVjdEJ5VXNlcm5hbWUiIHBhcmFtZXRlclR5cGU9InN0cmluZyIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lID0gI3t1c2VybmFtZX0KKyAgICA8L3NlbGVjdD4KKyAgICA8IS0tIOagueaNrueUqOaIt+WQjeWSjOWvhueggeafpeaJvueUqOaItyAtLT4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeVVzZXJuYW1lQW5kUGFzc3dvcmQiIHBhcmFtZXRlclR5cGU9Im1hcCIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lID0gI3t1c2VybmFtZX0gQU5EIHBhc3N3b3JkID0gI3twYXNzd29yZH0KKyAgICA8L3NlbGVjdD4KKyAgICA8IS0tIOagueaNrumCrueuseafpeaJvueUqOaItyAtLT4KKyAgICA8c2VsZWN0IGlkPSJzZWxlY3RCeUVtYWlsIiBwYXJhbWV0ZXJUeXBlPSJzdHJpbmciIHJlc3VsdFR5cGU9ImNvbS5leGFtcGxlLm15cHJvamVjdC5lbnRpdHkuVXNlciI+CisgICAgICAgIFNFTEVDVCAqIEZST00gdXNlciBXSEVSRSBlbWFpbCA9ICN7ZW1haWx9CisgICAgPC9zZWxlY3Q+CisgICAgPCEtLSDmoLnmja7nlKjmiLflkI3ljIXlkKvmn6Xmib7nlKjmiLcgLS0+CisgICAgPHNlbGVjdCBpZD0ic2VsZWN0QnlVc2VybmFtZUNvbnRhaW5pbmciIHBhcmFtZXRlclR5cGU9InN0cmluZyIgcmVzdWx0VHlwZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0LmVudGl0eS5Vc2VyIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB1c2VyIFdIRVJFIHVzZXJuYW1lIExJS0UgQ09OQ0FUKCclJywgI3tuYW1lfSwgJyUnKQorICAgIDwvc2VsZWN0PgorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9tYXBwZXIvVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIueG1sIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2IxOWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2NsYXNzZXMvbWFwcGVyL1ZlcmlmaWNhdGlvblRva2VuTWFwcGVyLnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhRE9DVFlQRSBtYXBwZXIgUFVCTElDICItLy9teWJhdGlzLm9yZy8vRFREIE1hcHBlciAzLjAvL0VOIgorICAgICAgICAiaHR0cDovL215YmF0aXMub3JnL2R0ZC9teWJhdGlzLTMtbWFwcGVyLmR0ZCI+Cis8bWFwcGVyIG5hbWVzcGFjZT0iY29tLmV4YW1wbGUubXlwcm9qZWN0Lm1hcHBlci5WZXJpZmljYXRpb25Ub2tlbk1hcHBlciI+CisgICAgPCEtLSDpgJrov4cgdG9rZW4g5ZKMIGVtYWlsIOafpeivoiBWZXJpZmljYXRpb25Ub2tlbiAtLT4KKyAgICA8c2VsZWN0IGlkPSJmaW5kQnlUb2tlbkFuZEVtYWlsIiByZXN1bHRUeXBlPSJjb20uZXhhbXBsZS5teXByb2plY3QuZW50aXR5LlZlcmlmaWNhdGlvblRva2VuIj4KKyAgICAgICAgU0VMRUNUICogRlJPTSB2ZXJpZmljYXRpb25fdG9rZW4KKyAgICAgICAgV0hFUkUgdG9rZW4gPSAje3Rva2VufSBBTkQgZW1haWwgPSAje2VtYWlsfQorICAgIDwvc2VsZWN0PgorPC9tYXBwZXI+CmRpZmYgLS1naXQgYS90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudCBiL3RhcmdldC9jbGFzc2VzL291dHB1dC92YWxpZC50b3JyZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTBlNTIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvY2xhc3Nlcy9vdXRwdXQvdmFsaWQudG9ycmVudApAQCAtMCwwICsxIEBACitkMTA6Y3JlYXRlZCBieTE4OnFCaXR0b3JyZW50IHY1LjEuMDEzOmNyZWF0aW9uIGRhdGVpMTc0NTk0ODk5NWU0OmluZm9kNjpsZW5ndGhpMjJlNDpuYW1lMTU6ZXhhbXBsZS50b3JyZW50MTI6cGllY2UgbGVuZ3RoaTE2Mzg0ZTY6cGllY2VzMjA6Rm4e8LYaKfo8xwmOBubCaBSjdGw3OnByaXZhdGVpMWVlZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphciBiL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphcgppbmRleCAyMjY3MWM2Li4yYWU5NzlhIDEwMDY0NAotLS0gYS90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIKKysrIGIvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbCBiL3RhcmdldC9lY2hvLWJhY2tlbmQtMS4wLVNOQVBTSE9ULmphci5vcmlnaW5hbAppbmRleCBlOWViYjllLi40ZmQ4MDE0IDEwMDY0NAotLS0gYS90YXJnZXQvZWNoby1iYWNrZW5kLTEuMC1TTkFQU0hPVC5qYXIub3JpZ2luYWwKKysrIGIvdGFyZ2V0L2VjaG8tYmFja2VuZC0xLjAtU05BUFNIT1QuamFyLm9yaWdpbmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi9jb21waWxlL2RlZmF1bHQtY29tcGlsZS9jcmVhdGVkRmlsZXMubHN0CmluZGV4IDU3MTFjYTIuLjg5OTRkMGEgMTAwNjQ0Ci0tLSBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QKKysrIGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdApAQCAtMSwxMDYgKzEsNTggQEAKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJNZXNzYWdlU2VydmljZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxUYXNrLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbnN0YW50cyRGaW5pc2hTdGF0dXMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFBvc3RSZXBvc2l0b3J5LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJGb2xsb3cuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcQ29sbGVjdGlvbnMuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcTXlNZXRhT2JqZWN0SGFuZGxlci5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVXNlclNlcnZpY2VJbXBsLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlci5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1x2b1xUb3JyZW50Vk8uY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cUHJvbW90aW9uQ3JlYXRlRFRPLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJzLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJUYXNrU3RhdHVzLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxDb21tZW50Q29udHJvbGxlci5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVG9ycmVudENvbnRyb2xsZXIuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXER5bmFtaWNDb250cm9sbGVyLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxHcm91cENvbnRyb2xsZXIuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJTZXJ2aWNlLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbnN0YW50cyRPcmRlci5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VySW52aXRlQ29kZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckZvbGxvd0NvbnRyb2xsZXIuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxSZXN1bHQuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVG9ycmVudE1hcHBlci5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVGFza0NvbnRyb2xsZXIuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFRvcnJlbnRTZXJ2aWNlSW1wbC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxUb3JyZW50RW50aXR5LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEV4cGVyaWVuY2VIaXN0b3J5LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyTWVzc2FnZUNvbnRyb2xsZXIuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRnJpZW5kUmVsYXRpb24uY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJEZXRhaWxzU2VydmljZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxEeW5hbWljTGlrZXMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFRvcnJlbnRTZXJ2aWNlLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcSTE4bk1lc3NhZ2UuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcR2xvYmFsQ29yc0NvbmZpZy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlckZvbGxvd1NlcnZpY2UuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcVHJhY2tlckNvbmZpZy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxGYXZvcml0ZU1hcHBlci5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxQb3N0LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVV0aWwuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XER5bmFtaWNDb21tZW50UmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcRHluYW1pY1NlcnZpY2UuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXEVtYWlsU2VydmljZUltcGwuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFByb21vdGlvblNlcnZpY2VJbXBsLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcU3RhdHVzLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxHcm91cENvbW1lbnRzUmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcR3JvdXBSZXBvc2l0b3J5LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyRm9sbG93UmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcUHJvbW90aW9uU2VydmljZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcQ29tbWVudFJlcG9zaXRvcnkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxHcm91cFBvc3QuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xNeU1ldGFPYmplY3RIYW5kbGVyLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcdXRpbHNcUmVzdWx0LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxMZXZlbENvbnRyb2xsZXIuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXAuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEV4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcVGFza1JlcG9zaXRvcnkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBDb21tZW50cy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcR3JvdXBTZXJ2aWNlLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyUmVwb3NpdG9yeS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcUG9zdENvbnRyb2xsZXIuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcQ29tbWVudHMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwUG9zdFJlcG9zaXRvcnkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XExpa2VzUmVwb3NpdG9yeS5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyRGV0YWlscy5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFJlc3VsdC5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxQcm9tb3Rpb24uY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJEeW5hbWljUmVwb3NpdG9yeS5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFJlc1BhZ2UuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXExldmVsU2VydmljZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxUb3JyZW50TWFwcGVyLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFNlY3VyaXR5Q29uZmlnLmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxUYXNrU2VydmljZS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxMaWtlcy5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcRnJpZW5kUmVsYXRpb25SZXBvc2l0b3J5LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyTWVzc2FnZXNSZXBvc2l0b3J5LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxMZXZlbFJlcG9zaXRvcnkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XER5bmFtaWNMaWtlc1JlcG9zaXRvcnkuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEludml0YXRpb25TZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxUb3JyZW50U2VydmljZUltcGwuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcVmVyaWZpY2F0aW9uVG9rZW5NYXBwZXIuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVG9ycmVudEVudGl0eS5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxFbnRpdHlCYXNlLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXFRvcnJlbnRQYXJhbS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxEeW5hbWljQ29tbWVudC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyTWVzc2FnZXMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEdyb3VwTWVtYmVyc1JlcG9zaXRvcnkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFBvc3RTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxVc2VyRGV0YWlsc1NlcnZpY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFRvcnJlbnRTZXJ2aWNlLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcSTE4bk1lc3NhZ2UuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cQ29uc3RhbnRzLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFZlcmlmaWNhdGlvblRva2VuLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXEludml0YXRpb25NYXBwZXIuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxPcmRlclBhZ2VQYXJhbS5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcQ29tbWVudFNlcnZpY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXEludml0YXRpb25TZXJ2aWNlSW1wbC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xHbG9iYWxDb3JzQ29uZmlnLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFVzZXJNYXBwZXIuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxNeVByb2plY3RBcHBsaWNhdGlvbi5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xUcmFja2VyQ29uZmlnLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXEZhdm9yaXRlTWFwcGVyLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbnN0YW50cyRTb3VyY2UuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cUmVzdWx0U3RhdHVzLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXFRvcnJlbnRVcGRhdGVEVE8uY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBNZW1iZXJzLmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVV0aWwuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcR2xvYmFsQ29yc0NvbmZpZyQxLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbnN0YW50cyRBbm5vdW5jZS5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb21tb25SZXN1bHRTdGF0dXMuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcTGV2ZWwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyJFZlcmlmaWNhdGlvblJlcXVlc3QuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXEVtYWlsU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyJEVtYWlsUmVxdWVzdC5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcUHJvbW90aW9uU2VydmljZUltcGwuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxTdGF0dXMuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxQYWdlUGFyYW0uY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcUHJvbW90aW9uTWFwcGVyLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGV4Y2VwdGlvblxSb2NrZXRQVEV4Y2VwdGlvbi5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyLmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3RcdXRpbHNcVmVyaWZ5Q29kZS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxJbnZpdGVQYXJhbS5jbGFzcwogY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50VXBsb2FkUGFyYW0uY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XENvbGxlY3Rpb25zUmVwb3NpdG9yeS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxJbnZpdGF0aW9uRW50aXR5LmNsYXNzCiBjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxFbWFpbFNlcnZpY2UuY2xhc3MKK2NvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFByb21vdGlvblNlcnZpY2UuY2xhc3MKIGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRmF2b3JpdGVFbnRpdHkuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlckR5bmFtaWMuY2xhc3MKZGlmZiAtLWdpdCBhL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL2NvbXBpbGUvZGVmYXVsdC1jb21waWxlL2lucHV0RmlsZXMubHN0IGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvaW5wdXRGaWxlcy5sc3QKaW5kZXggMTU3MzA5Mi4uMTVmMjgwNyAxMDA2NDQKLS0tIGEvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvaW5wdXRGaWxlcy5sc3QKKysrIGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vY29tcGlsZS9kZWZhdWx0LWNvbXBpbGUvaW5wdXRGaWxlcy5sc3QKQEAgLTEsMTAyICsxLDUyIEBACi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJUYXNrU3RhdHVzLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRXhwZXJpZW5jZUhpc3RvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxGYXZvcml0ZUVudGl0eS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxQcm9tb3Rpb25TZXJ2aWNlLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcR2xvYmFsQ29yc0NvbmZpZy5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFNlY3VyaXR5Q29uZmlnLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcQ29sbGVjdGlvbnMuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VySW52aXRlQ29kZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUmVzUGFnZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XEZyaWVuZFJlbGF0aW9uLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJGb2xsb3dTZXJ2aWNlLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJJbnZpdGVDb2RlUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxDb21tZW50UmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFVzZXJNYXBwZXIuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcR3JvdXBDb250cm9sbGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFRhc2tTZXJ2aWNlLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlckRldGFpbHMuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxEeW5hbWljQ29tbWVudC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJNZXNzYWdlc1JlcG9zaXRvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xQcm9tb3Rpb25DcmVhdGVEVE8uamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxMaWtlcy5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxDb2xsZWN0aW9uc1JlcG9zaXRvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXE9yZGVyUGFnZVBhcmFtLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxtYXBwZXJcRmF2b3JpdGVNYXBwZXIuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1x2b1xUb3JyZW50Vk8uamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVG9ycmVudFNlcnZpY2UuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcQ29tbWVudENvbnRyb2xsZXIuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxUb3JyZW50TWFwcGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXEVtYWlsU2VydmljZUltcGwuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcR3JvdXBNZW1iZXJzUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcTXlQcm9qZWN0QXBwbGljYXRpb24uamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlck1lc3NhZ2VDb250cm9sbGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XEV4cGVyaWVuY2VIaXN0b3J5UmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcU3RhdHVzLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcTXlNZXRhT2JqZWN0SGFuZGxlci5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXFJlc3VsdFN0YXR1cy5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFVzZXJGb2xsb3cuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxQb3N0LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFRhc2tSZXBvc2l0b3J5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxQYWdlVXRpbC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxHcm91cENvbW1lbnRzUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxHcm91cFJlcG9zaXRvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcUG9zdFJlcG9zaXRvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcRHluYW1pY0NvbnRyb2xsZXIuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyTWVzc2FnZXMuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcTGV2ZWxTZXJ2aWNlLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcVHJhY2tlckNvbmZpZy5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxVc2VyRGV0YWlsc1NlcnZpY2UuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxHcm91cENvbW1lbnRzLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVmVyaWZpY2F0aW9uVG9rZW4uamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxleGNlcHRpb25cUm9ja2V0UFRFeGNlcHRpb24uamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcTGV2ZWxSZXBvc2l0b3J5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XExpa2VzUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFByb21vdGlvbi5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyRm9sbG93Q29udHJvbGxlci5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxVc2VyRHluYW1pY1JlcG9zaXRvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXHNlcnZpY2VJbXBsXFByb21vdGlvblNlcnZpY2VJbXBsLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFRvcnJlbnRDb250cm9sbGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRW50aXR5QmFzZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFZlcmlmaWNhdGlvblRva2VuTWFwcGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXAuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxUb3JyZW50RW50aXR5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJUYXNrU3RhdHVzUmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVBhcmFtLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBNZW1iZXJzLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJDb250cm9sbGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFBvc3RTZXJ2aWNlLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxSZXN1bHQuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcTGV2ZWxDb250cm9sbGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFx1dGlsc1xWZXJpZnlDb2RlLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XER5bmFtaWNMaWtlc1JlcG9zaXRvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcVXNlclJlcG9zaXRvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcR3JvdXBQb3N0UmVwb3NpdG9yeS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXFRvcnJlbnRVcGRhdGVEVE8uamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxEeW5hbWljTGlrZXMuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxUYXNrLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXENvbW1lbnRTZXJ2aWNlLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxyZXBvc2l0b3J5XFVzZXJGb2xsb3dSZXBvc2l0b3J5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFRhc2tDb250cm9sbGVyLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcQ29tbWVudHMuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcUG9zdENvbnRyb2xsZXIuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHJlcG9zaXRvcnlcRHluYW1pY0NvbW1lbnRSZXBvc2l0b3J5LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb21tb25cYmFzZVxJMThuTWVzc2FnZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcdXRpbHNcUmVzdWx0LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcR3JvdXBQb3N0LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcVXNlckR5bmFtaWMuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxMZXZlbC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RccmVwb3NpdG9yeVxGcmllbmRSZWxhdGlvblJlcG9zaXRvcnkuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2Vycy5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXFRvcnJlbnRQYXJhbS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFByb21vdGlvbk1hcHBlci5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxVc2VyTWVzc2FnZVNlcnZpY2UuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVG9ycmVudFNlcnZpY2VJbXBsLmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEdyb3VwU2VydmljZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbW1vblJlc3VsdFN0YXR1cy5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxEeW5hbWljU2VydmljZS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXFRvcnJlbnRVcGxvYWRQYXJhbS5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxFbWFpbFNlcnZpY2UuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlclNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxJbnZpdGF0aW9uU2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXENvbW1vblJlc3VsdFN0YXR1cy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb25maWdcU2VjdXJpdHlDb25maWcuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXFRvcnJlbnRVcGRhdGVEVE8uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFVzZXJNYXBwZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUGFnZVBhcmFtLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxFbnRpdHlCYXNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVXNlckRldGFpbHNTZXJ2aWNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxleGNlcHRpb25cUm9ja2V0UFRFeGNlcHRpb24uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXEZhdm9yaXRlTWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50UGFyYW0uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFByb21vdGlvbk1hcHBlci5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcRmF2b3JpdGVFbnRpdHkuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFRvcnJlbnRFbnRpdHkuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcbWFwcGVyXFZlcmlmaWNhdGlvblRva2VuTWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZHRvXHBhcmFtXEludml0ZVBhcmFtLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXEkxOG5NZXNzYWdlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xwYXJhbVxUb3JyZW50VXBsb2FkUGFyYW0uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcT3JkZXJQYWdlUGFyYW0uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFByb21vdGlvbi5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxlbnRpdHlcSW52aXRhdGlvbkVudGl0eS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXEludml0YXRpb25TZXJ2aWNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcVG9ycmVudFNlcnZpY2VJbXBsLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxSZXN1bHRTdGF0dXMuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxFbWFpbFNlcnZpY2VJbXBsLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxDb25zdGFudHMuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXFRyYWNrZXJDb25maWcuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29tbW9uXGJhc2VcUmVzUGFnZS5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFByb21vdGlvblNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyU2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3Rcc2VydmljZVxzZXJ2aWNlSW1wbFxVc2VyRGV0YWlsc1NlcnZpY2VJbXBsLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcRW1haWxTZXJ2aWNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFN0YXR1cy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFx1dGlsc1xWZXJpZnlDb2RlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XE15UHJvamVjdEFwcGxpY2F0aW9uLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxUb3JyZW50TWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyRGV0YWlscy5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxzZXJ2aWNlXFVzZXJTZXJ2aWNlLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGVudGl0eVxVc2VyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFBhZ2VVdGlsLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbW1vblxiYXNlXFJlc3VsdC5qYXZhCitEOlxzdHVkeVzlrabkuaDotYTmupBc5aSn5LiJ5LiLXGVjaG8tYmFja2VuZFxzcmNcbWFpblxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxkdG9cdm9cVG9ycmVudFZPLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XG1hcHBlclxJbnZpdGF0aW9uTWFwcGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2VcVG9ycmVudFNlcnZpY2UuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29uZmlnXE15TWV0YU9iamVjdEhhbmRsZXIuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcZW50aXR5XFZlcmlmaWNhdGlvblRva2VuLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XHNlcnZpY2Vcc2VydmljZUltcGxcUHJvbW90aW9uU2VydmljZUltcGwuamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxJbnZpdGVDb250cm9sbGVyLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbmZpZ1xHbG9iYWxDb3JzQ29uZmlnLmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1xtYWluXGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGR0b1xQcm9tb3Rpb25DcmVhdGVEVE8uamF2YQorRDpcc3R1ZHlc5a2m5Lmg6LWE5rqQXOWkp+S4ieS4i1xlY2hvLWJhY2tlbmRcc3JjXG1haW5camF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxUb3JyZW50Q29udHJvbGxlci5qYXZhCmRpZmYgLS1naXQgYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QgYi90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2NyZWF0ZWRGaWxlcy5sc3QKaW5kZXggMTgxYTU2Zi4uYmFjMjM1YiAxMDA2NDQKLS0tIGEvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9jcmVhdGVkRmlsZXMubHN0CisrKyBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvY3JlYXRlZEZpbGVzLmxzdApAQCAtMSw4ICsxLDIgQEAKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFVzZXJGb2xsb3dDb250cm9sbGVyVGVzdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlck1lc3NhZ2VDb250cm9sbGVyVGVzdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcR3JvdXBDb250cm9sbGVyVGVzdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcTGV2ZWxDb250cm9sbGVyVGVzdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcUG9zdENvbnRyb2xsZXJUZXN0LmNsYXNzCi1jb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxDb21tZW50Q29udHJvbGxlclRlc3QuY2xhc3MKLWNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXER5bmFtaWNDb250cm9sbGVyVGVzdC5jbGFzcwotY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVGFza0NvbnRyb2xsZXJUZXN0LmNsYXNzCitjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlclRlc3QkMS5jbGFzcworY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzCmRpZmYgLS1naXQgYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2lucHV0RmlsZXMubHN0IGIvdGFyZ2V0L21hdmVuLXN0YXR1cy9tYXZlbi1jb21waWxlci1wbHVnaW4vdGVzdENvbXBpbGUvZGVmYXVsdC10ZXN0Q29tcGlsZS9pbnB1dEZpbGVzLmxzdAppbmRleCA3YzkxMTk1Li4xODhkY2U4IDEwMDY0NAotLS0gYS90YXJnZXQvbWF2ZW4tc3RhdHVzL21hdmVuLWNvbXBpbGVyLXBsdWdpbi90ZXN0Q29tcGlsZS9kZWZhdWx0LXRlc3RDb21waWxlL2lucHV0RmlsZXMubHN0CisrKyBiL3RhcmdldC9tYXZlbi1zdGF0dXMvbWF2ZW4tY29tcGlsZXItcGx1Z2luL3Rlc3RDb21waWxlL2RlZmF1bHQtdGVzdENvbXBpbGUvaW5wdXRGaWxlcy5sc3QKQEAgLTEsMTAgKzEsMiBAQAotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlck1lc3NhZ2VDb250cm9sbGVyVGVzdC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxVc2VyQ29udHJvbGxlclRlc3QuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcR3JvdXBDb250cm9sbGVyVGVzdC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxEeW5hbWljQ29udHJvbGxlclRlc3QuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcTGV2ZWxDb250cm9sbGVyVGVzdC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxDb21tZW50Q29udHJvbGxlclRlc3QuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcUG9zdENvbnRyb2xsZXJUZXN0LmphdmEKLUQ6XFBUXGVjaG8tYmFja2VuZFxzcmNcdGVzdFxqYXZhXGNvbVxleGFtcGxlXG15cHJvamVjdFxjb250cm9sbGVyXFRhc2tDb250cm9sbGVyVGVzdC5qYXZhCi1EOlxQVFxlY2hvLWJhY2tlbmRcc3JjXHRlc3RcamF2YVxjb21cZXhhbXBsZVxteXByb2plY3RcY29udHJvbGxlclxUb3JyZW50Q29udHJvbGxlclRlc3QuamF2YQotRDpcUFRcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckZvbGxvd0NvbnRyb2xsZXJUZXN0LmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVXNlckNvbnRyb2xsZXJUZXN0LmphdmEKK0Q6XHN0dWR5XOWtpuS5oOi1hOa6kFzlpKfkuInkuItcZWNoby1iYWNrZW5kXHNyY1x0ZXN0XGphdmFcY29tXGV4YW1wbGVcbXlwcm9qZWN0XGNvbnRyb2xsZXJcVG9ycmVudENvbnRyb2xsZXJUZXN0LmphdmEKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY2xhc3NwYXRoLmluZGV4IGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jbGFzc3BhdGguaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY2xhc3NwYXRoLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvQ29tbWVudENvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlclRlc3QuY2xhc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YThlZWMuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Db21tZW50Q29udHJvbGxlclRlc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0R5bmFtaWNDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXJUZXN0LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGM2YjZkLi4wMDAwMDAwCi0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvRHluYW1pY0NvbnRyb2xsZXJUZXN0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Hcm91cENvbnRyb2xsZXJUZXN0LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ3MmZjLi4wMDAwMDAwCi0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvR3JvdXBDb250cm9sbGVyVGVzdC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvTGV2ZWxDb250cm9sbGVyVGVzdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMwNzdlYi4uMDAwMDAwMAotLS0gYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL0xldmVsQ29udHJvbGxlclRlc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Bvc3RDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXJUZXN0LmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWU2MWQ2Li4wMDAwMDAwCi0tLSBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvUG9zdENvbnRyb2xsZXJUZXN0LmNsYXNzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9UYXNrQ29udHJvbGxlclRlc3QuY2xhc3MgYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyVGVzdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFiYmVlZS4uMDAwMDAwMAotLS0gYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1Rhc2tDb250cm9sbGVyVGVzdC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0JDEuY2xhc3MgYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdCQxLmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjk1NGIKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyVGVzdCQxLmNsYXNzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlckNvbnRyb2xsZXJUZXN0LmNsYXNzIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuY2xhc3MKaW5kZXggNWU3YmVmNC4uOTIzY2EwOSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuY2xhc3MKKysrIGIvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlclRlc3QuY2xhc3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Rlc3QtY2xhc3Nlcy9jb20vZXhhbXBsZS9teXByb2plY3QvY29udHJvbGxlci9Vc2VyRm9sbG93Q29udHJvbGxlclRlc3QuY2xhc3MgYi90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyVGVzdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I4MDc4NC4uMDAwMDAwMAotLS0gYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJGb2xsb3dDb250cm9sbGVyVGVzdC5jbGFzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyVGVzdC5jbGFzcyBiL3RhcmdldC90ZXN0LWNsYXNzZXMvY29tL2V4YW1wbGUvbXlwcm9qZWN0L2NvbnRyb2xsZXIvVXNlck1lc3NhZ2VDb250cm9sbGVyVGVzdC5jbGFzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjNDliMC4uMDAwMDAwMAotLS0gYS90YXJnZXQvdGVzdC1jbGFzc2VzL2NvbS9leGFtcGxlL215cHJvamVjdC9jb250cm9sbGVyL1VzZXJNZXNzYWdlQ29udHJvbGxlclRlc3QuY2xhc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdXBsb2Fkcy9wb3N0L1wzNDVcMjc2XDI1NlwzNDRcMjc3XDI0MVwzNDVcMjMzXDI3NlwzNDdcMjExXDIwN18yMDI1MDQwODE1NDAwNy5qcGciICJiL3VwbG9hZHMvcG9zdC9cMzQ1XDI3NlwyNTZcMzQ0XDI3N1wyNDFcMzQ1XDIzM1wyNzZcMzQ3XDIxMVwyMDdfMjAyNTA0MDgxNTQwMDcuanBnIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gImEvdXBsb2Fkcy9wb3N0L1wzNDVcMjc2XDI1NlwzNDRcMjc3XDI0MVwzNDVcMjMzXDI3NlwzNDdcMjExXDIwN18yMDI1MDQwODE1NDAwNy5qcGciCisrKyAvZGV2L251bGwK