tango-app-ui-auth 3.5.0-beta.7 → 3.5.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/tango-auth-forgot-password/tango-auth-forgot-password.component.mjs +3 -2
- package/esm2022/lib/components/tango-auth-login/tango-auth-login.component.mjs +17 -5
- package/esm2022/lib/guards/auth.guard.mjs +27 -8
- package/esm2022/lib/services/auth.service.mjs +56 -6
- package/fesm2022/tango-app-ui-auth.mjs +99 -17
- package/fesm2022/tango-app-ui-auth.mjs.map +1 -1
- package/lib/guards/auth.guard.d.ts +2 -2
- package/lib/services/auth.service.d.ts +5 -1
- package/package.json +1 -1
package/esm2022/lib/components/tango-auth-forgot-password/tango-auth-forgot-password.component.mjs
CHANGED
@@ -141,7 +141,8 @@ export class TangoAuthForgotPasswordComponent {
|
|
141
141
|
const payload = {
|
142
142
|
...this.PasswordForm.value,
|
143
143
|
password: encryptedPassword,
|
144
|
-
confirmPassword: encryptedPassword
|
144
|
+
confirmPassword: encryptedPassword,
|
145
|
+
loginType: "web",
|
145
146
|
};
|
146
147
|
this.authService.forgotPassword(payload).subscribe({
|
147
148
|
next: (res) => {
|
@@ -169,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
169
170
|
type: Component,
|
170
171
|
args: [{ selector: "lib-tango-auth-forgot-password", template: "<div class=\"container\">\r\n <div class=\"row position-absolute\">\r\n <div class=\"col-md-6 pe-10 d-flex justify-content-center align-items-center \">\r\n <img src=\"./assets/tango/Icons/LHS.svg\" alt=\"Image\" class=\"img-fluid\">\r\n </div>\r\n @if (emailEnable) {\r\n <div class=\"col-md-6 ps-10 d-flex justify-content-center align-items-center\">\r\n <div class=\"card card-flush w-lg-600px ms-20 py-3 mt-20\">\r\n\r\n <div class=\"login-form login-signin w-100\">\r\n\r\n <div class=\"d-flex flex-column align-items-between title-padding\">\r\n <div class=\"text-start my-10 ms-10\">\r\n <h1 class=\"title my-4\"> Forgot Password\r\n </h1>\r\n <div class=\"title-subtitle mb-1\"> Enter the Email associated with your account and\r\n we'll send you a OTP to reset your password.\r\n </div>\r\n </div>\r\n <form class=\"w-100 title-padding\" novalidate=\"novalidate\">\r\n <div class=\"mb-1\">\r\n <label class=\"label\">Email</label>\r\n <input class=\"form-control my-3\" [formControl]=\"email\" type=\"email\" id=\"email\"\r\n name=\"email\">\r\n </div>\r\n </form>\r\n\r\n <div class=\"d-flex mt-5 mb-5 mx-10\" role=\"group\">\r\n\r\n <button class=\"btn btn-primary w-100\" id=\"alert-toast\" [disabled]=\"email.invalid\"\r\n (click)=\"onSubmit()\">Request reset link</button>\r\n </div>\r\n <a class=\"text-decoration-underline backtologin text-center my-3\" routerLink=\"/auth/login\">Back\r\n to\r\n login</a>\r\n </div>\r\n <div class=\" d-flex flex-column flex-md-row mb-3 flex-md-stack pt-3 container-fluid\">\r\n <div class=\"text-gray-900 order-2 order-md-1 ms-20\">\r\n <span class=\"me-1 footer\">2024</span>\r\n <a target=\"_blank\"\r\n class=\"footer text-decoration-underline cursor-pointer\">@TangoITSolutions\r\n India Pvt Ltd</a>\r\n </div>\r\n <ul class=\"menu menu-gray-600 menu-hover-primary fw-semibold order-1 me-7\">\r\n <li class=\"menu-item footer\"><a target=\"_blank\" href=\"https://tangoeye.ai/#aboutus\"\r\n class=\"menu-link px-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\">\r\n <path\r\n d=\"M11 3.7002C11 3.1502 10.55 2.7002 10 2.7002H2C1.45 2.7002 1 3.1502 1 3.7002M11 3.7002V9.7002C11 10.2502 10.55 10.7002 10 10.7002H2C1.45 10.7002 1 10.2502 1 9.7002V3.7002M11 3.7002L6 7.2002L1 3.7002\"\r\n stroke=\"#667085\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">support@tangotech.co.in</span></a></li>\r\n\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n }\r\n @if(passwordEnable) {\r\n <div class=\"col-md-6 ps-10 d-flex justify-content-center align-items-center\">\r\n <div class=\"card card-flush w-lg-600px ms-20 py-3 mt-20\">\r\n\r\n <div class=\"login-form login-signin w-100\">\r\n\r\n <div class=\"d-flex flex-column align-items-between title-padding\">\r\n <div class=\"text-start my-5 ms-10\">\r\n\r\n <h1 class=\"title my-4\">Reset Password\r\n </h1>\r\n <div class=\"title-subtitle mb-7\">Enter a new password to reset the password on your account\r\n </div>\r\n <form [formGroup]=\"PasswordForm\" novalidate=\"novalidate\" class=\"\">\r\n <div class=\"row px-0\">\r\n <div class=\"col-md-12 col-lg-12 col-xl-12 col-xxl-12 mb-7\">\r\n <label for=\"email\" class=\"form-label\">New Password</label>\r\n <div class=\"position-relative mb-3\">\r\n <input [type]=\"newPasswordShow ? 'text' : 'password'\" class=\"form-control\" id=\"password\"\r\n formControlName=\"password\"\r\n [ngClass]=\"{ 'is-invalid': PasswordForm.get('password')?.touched && PasswordForm.get('password')?.hasError('required') }\">\r\n <span (click)=\"showNewPassword()\"\r\n class=\"btn btn-sm btn-icon position-absolute translate-middle top-50 end-0 me-n2\"\r\n data-kt-password-meter-control=\"visibility\">\r\n <i *ngIf=\"newPasswordShow\" class=\"fa fa-eye\" aria-hidden=\"true\"></i>\r\n <i *ngIf=\"!newPasswordShow\" class=\"fa fa-eye-slash\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n @if(PasswordForm.get('password')?.touched) {\r\n @if (PasswordForm.get('password')?.hasError('required')) {\r\n <small>Password is required</small>\r\n } \r\n }\r\n <small *ngIf=\"PasswordForm.get('password')?.hasError('pattern')\">The password must contain atleast one capital letter, one special character, number and the strength should be more than 7 characters.</small>\r\n <small *ngIf=\"PasswordForm.get('password')?.hasError('noSpaces') && !PasswordForm.get('password')?.hasError('pattern') && PasswordForm.get('password')?.touched\">Password cannot contain spaces.</small> \r\n </div>\r\n <div class=\"col-md-12 col-lg-12 col-xl-12 col-xxl-12 mb-7\">\r\n <label for=\"contact\" class=\"form-label\">Confirm New Password</label>\r\n <div class=\"position-relative mb-3\">\r\n <input [type]=\"verifyPasswordShow ? 'text' : 'password'\" class=\"form-control\" id=\"confirmPassword\"\r\n formControlName=\"confirmPassword\"\r\n [ngClass]=\"{ 'is-invalid': PasswordForm.get('confirmPassword')?.touched && PasswordForm.get('confirmPassword')?.hasError('required') }\">\r\n <span (click)=\"showVerifyPassword()\"\r\n class=\"btn btn-sm btn-icon position-absolute translate-middle top-50 end-0 me-n2\"\r\n data-kt-password-meter-control=\"visibility\">\r\n <i *ngIf=\"verifyPasswordShow\" class=\"fa fa-eye\" aria-hidden=\"true\"></i>\r\n <i *ngIf=\"!verifyPasswordShow\" class=\"fa fa-eye-slash\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n @if(PasswordForm.get('confirmPassword')?.touched) {\r\n @if (PasswordForm.get('confirmPassword')?.hasError('required')) {\r\n <small>Confirm password is required</small>\r\n } @else {\r\n <!-- <small *ngIf=\"PasswordForm.get('confirmPassword')?.hasError('pattern')\">The confirm password must\r\n contain atleast one capital letter and number.</small> -->\r\n <small\r\n *ngIf=\"PasswordForm.get('confirmPassword')?.touched && PasswordForm.get('confirmPassword')?.hasError('NotEqual') && !PasswordForm.get('confirmPassword')?.hasError('required')\">Password\r\n does not match</small>\r\n }\r\n <small *ngIf=\"PasswordForm.get('confirmPassword')?.hasError('noSpaces') && !PasswordForm.get('confirmPassword')?.hasError('NotEqual') && PasswordForm.get('confirmPassword')?.touched\">Password cannot contain spaces.</small> \r\n }\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex mt-10 mb-5\" role=\"group\">\r\n <button class=\"btn btn-primary w-100 \" id=\"alert-toast\" [disabled]=\"PasswordForm.invalid\"\r\n (click)=\"onPasswordSubmit()\">Reset\r\n password</button>\r\n </div>\r\n </div>\r\n <a class=\"text-decoration-underline backtologin text-center\" routerLink=\"/auth/login\">Back to\r\n login</a>\r\n\r\n </div>\r\n <div class=\" d-flex flex-column flex-md-row mb-3 flex-md-stack pt-3 container-fluid\">\r\n <div class=\"text-gray-900 order-2 order-md-1 ms-20\">\r\n <span class=\"me-1 footer\">2024</span>\r\n <a target=\"_blank\"\r\n class=\"footer text-decoration-underline cursor-pointer\">@TangoITSolutions\r\n India Pvt Ltd</a>\r\n </div>\r\n <ul class=\"menu menu-gray-600 menu-hover-primary fw-semibold order-1 me-7\">\r\n <li class=\"menu-item footer\"><a target=\"_blank\" href=\"https://tangoeye.ai/#aboutus\"\r\n class=\"menu-link px-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\">\r\n <path\r\n d=\"M11 3.7002C11 3.1502 10.55 2.7002 10 2.7002H2C1.45 2.7002 1 3.1502 1 3.7002M11 3.7002V9.7002C11 10.2502 10.55 10.7002 10 10.7002H2C1.45 10.7002 1 10.2502 1 9.7002V3.7002M11 3.7002L6 7.2002L1 3.7002\"\r\n stroke=\"#667085\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">support@tangotech.co.in</span></a></li>\r\n\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <img src=\"./assets/tango/Icons/login-background1.svg\" alt=\"Image\" class=\"background-image\">\r\n</div>\r\n\r\n\r\n\r\n\r\n", styles: [".title{color:var(--Gray-900, #101828)!important;font-size:24px!important;font-weight:600;line-height:32px!important}.title-subtitle{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400;line-height:20px!important}.label{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500;line-height:20px!important}:host ::ng-deep .ng-otp-input-wrapper .otp-input:first-child{margin:0}:host ::ng-deep .ng-otp-input-wrapper .otp-input{margin-right:0!important;height:80px!important;width:80px;padding:8px;text-align:center;margin:10px 38px;color:var(--Gray-300, #D0D5DD)!important;font-size:60px;font-style:normal;font-weight:500;line-height:72px;letter-spacing:-1.2px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}.small_lbl{color:var(--Gray-500, #667085);text-align:center;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.container{width:100%;height:100%;overflow:hidden}.background-image{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;z-index:-1}.content{position:relative;z-index:1;width:45%;margin-left:auto;padding:20px;border-radius:16px;background:#fff;box-shadow:0 4px 10px #0000000d}.login-form .title-padding{padding:0 32px}.login-form .login-title{color:var(--Gray-900, #101828);font-size:36px;font-weight:600;line-height:44px;letter-spacing:-.72px}.login-form .login-sub-title{color:var(--Gray-500, #667085);font-size:16px;font-weight:400;line-height:24px}.login-form .form-label{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500;line-height:20px}.login-form .img-src{padding:10px 5px 32px}.login-form .mx-25{margin-right:-10px!important;margin-left:-45px!important}.login-form .w-360px{width:360px!important}.login-form .forgot{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize;text-align:center}.login-form .signup-default{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.login-form .signup-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px;font-weight:600!important;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.login-form .footer{color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:400!important;line-height:20px}@media (min-width: 1745px) and (max-width: 1910px){.mt-6{margin-top:7rem!important}}@media (min-width: 1920px) and (max-width: 2100px){.mt-6{margin-top:10rem!important}.login-form .mx-25{margin-right:0!important;margin-left:20px!important}}.position-absolute{position:absolute;top:50%;transform:translateY(-50%)}.card{border-radius:16px;background:#fff;box-shadow:0 4px 10px #0000000d}.backtologin{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.form-control{display:block;color:var(--Gray-500, #667085);font-size:16px;font-weight:400;line-height:24px;-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-select{font-size:1.1rem;font-weight:600;line-height:2.35;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important}.form-label{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}small{color:var(--Error-500, #F04438)!important;font-size:13px!important;font-weight:400!important;line-height:20px}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}.alert-required{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:500!important;line-height:20px}.translate-middle{transform:translate(-65%,-50%)!important}\n"] }]
|
171
172
|
}], ctorParameters: () => [{ type: i1.ToastService }, { type: i2.AuthService }, { type: i3.ActivatedRoute }, { type: i4.FormBuilder }, { type: i5.GlobalStateService }, { type: i3.Router }, { type: i5.PageInfoService }] });
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQvdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQvdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQWdDLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtsRyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFNMUMsTUFBTSxPQUFPLGdDQUFnQztJQWlCakM7SUFDQTtJQUNBO0lBQ0E7SUFBdUI7SUFDdkI7SUFBdUI7SUFwQmpDLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDNUIsR0FBRyxDQUFNO0lBQ1QsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUNwQyxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDckMsS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUMxQixVQUFVLENBQUMsUUFBUTtRQUNuQixVQUFVLENBQUMsS0FBSztRQUNoQixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUN6QixVQUFVLENB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QkFMNUMsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RhbmdvLWF1dGgtZm9yZ290LXBhc3N3b3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi90YW5nby1hdXRoLWZvcmdvdC1wYXNzd29yZC5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFuZ29BdXRoRm9yZ290UGFzc3dvcmRDb21wb25lbnQge1xyXG4gIGVtYWlsRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBPVFA6IGFueTtcclxuICBwYXNzd29yZEVuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG5ld1Bhc3N3b3JkU2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZlcmlmeVBhc3N3b3JkU2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbmZpcm1QYXNzd29yZFNob3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbWFpbCA9IG5ldyBGb3JtQ29udHJvbChcIlwiLCBbXHJcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgVmFsaWRhdG9ycy5lbWFpbCxcclxuICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCksXHJcbiAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcclxuICBdKTtcclxuICBQYXNzd29yZEZvcm06IEZvcm1Hcm91cDtcclxuICBwcml2YXRlIHNlY3JldEtleTogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLHB1YmxpYyBnczpHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLHByaXZhdGUgcGFnZUluZm86UGFnZUluZm9TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnNlY3JldEtleT1lbnYuc2VjcmV0S2V5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuUGFzc3dvcmRGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHBhc3N3b3JkOiBbXHJcbiAgICAgICAgXCJcIixcclxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIwKSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybigvXig/PS4qW0EtWl0pKD89LipcXGQpLns4LH0kLyksdGhpcy5ub1NwYWNlVmFsaWRhdG9yXHJcbiAgICAgICAgXSksICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICBdLFxyXG4gICAgICBjb25maXJtUGFzc3dvcmQ6IFtcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgzMjApLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKD89LipbQS1aXSkoPz0uKlxcZCkuezgsfSQvKSx0aGlzLm5vU3BhY2VWYWxpZGF0b3IsXHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlQXJlRXF1YWwuYmluZCh0aGlzKSxcclxuICAgICAgICBdKSxcclxuICAgICAgXSxcclxuICAgICAgdG9rZW46IFtcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgXVxyXG4gICAgfSk7XHJcblxyXG4gICAgXHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChxcGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocXBhcmFtcykge1xyXG4gICAgICAgICAgaWYgKHFwYXJhbXMudG9rZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzd29yZEVuYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxFbmFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCd0b2tlbicpPy5zZXRWYWx1ZShxcGFyYW1zLnRva2VuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxFbmFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkRW5hYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCdwYXNzd29yZCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgfVxyXG4gIG5vU3BhY2VWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwge1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5pbmRleE9mKCcgJykgPj0gMCkge1xyXG4gICAgICByZXR1cm4geyAnbm9TcGFjZXMnOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgdmFsaWRhdGVBcmVFcXVhbChmaWVsZENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnk+KSB7XHJcbiAgICByZXR1cm4gZmllbGRDb250cm9sPy52YWx1ZSA9PT0gdGhpcy5QYXNzd29yZEZvcm0/LmdldChcInBhc3N3b3JkXCIpIS52YWx1ZSA/IG51bGwgOiB7IE5vdEVxdWFsOiB0cnVlIH07XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgLmZvcmdvdFBhc3N3b3JkVHJpZ2dlcih7IGVtYWlsOiB0aGlzLmVtYWlsLnZhbHVlIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QoXHJcbiAgICAgICAgICAgICAgYFJlc2V0IHBhc3N3b3JkIGxpbmsgc2VudCB0byAke3RoaXMuZW1haWwudmFsdWV9YFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXNldCBwYXNzd29yZCBsaW5rIHRvICR7dGhpcy5lbWFpbC52YWx1ZX1gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVzZXQgcGFzc3dvcmQgbGluayB0byAke3RoaXMuZW1haWwudmFsdWV9YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3dOZXdQYXNzd29yZCgpIHtcclxuICAgIHRoaXMubmV3UGFzc3dvcmRTaG93ID0gIXRoaXMubmV3UGFzc3dvcmRTaG93O1xyXG4gIH1cclxuXHJcbiAgc2hvd1ZlcmlmeVBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy52ZXJpZnlQYXNzd29yZFNob3cgPSAhdGhpcy52ZXJpZnlQYXNzd29yZFNob3c7XHJcbiAgfVxyXG5cclxuICBzaG93Q29uZmlybVBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy5jb25maXJtUGFzc3dvcmRTaG93ID0gIXRoaXMuY29uZmlybVBhc3N3b3JkU2hvdztcclxuICB9XHJcblxyXG4gIG9uUGFzc3dvcmRTdWJtaXQoKSB7XHJcbiAgaWYgKHRoaXMuUGFzc3dvcmRGb3JtLmludmFsaWQpIHtcclxuICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnUGxlYXNlIGZpbGwgb3V0IHRoZSBmb3JtIGNvcnJlY3RseS4nKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IHBhc3N3b3JkID0gdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCdwYXNzd29yZCcpPy52YWx1ZTtcclxuICBjb25zdCBjb25maXJtUGFzc3dvcmQgPSB0aGlzLlBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy52YWx1ZTtcclxuXHJcbiAgaWYgKHBhc3N3b3JkICE9PSBjb25maXJtUGFzc3dvcmQpIHtcclxuICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaC4nKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IGFkZG9uUGFzc3dvcmQgPSBgJHtwYXNzd29yZH1fX18ke01hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApfWA7XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gdGhpcy5zZWNyZXRLZXk7XHJcbiAgY29uc3QgZW5jcnlwdGVkUGFzc3dvcmQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChhZGRvblBhc3N3b3JkLCBzZWNyZXRLZXkpLnRvU3RyaW5nKCk7XHJcbiAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgIC4uLnRoaXMuUGFzc3dvcmRGb3JtLnZhbHVlLFxyXG4gICAgcGFzc3dvcmQ6IGVuY3J5cHRlZFBhc3N3b3JkLFxyXG4gICAgY29uZmlybVBhc3N3b3JkOiBlbmNyeXB0ZWRQYXNzd29yZFxyXG4gIH07XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmZvcmdvdFBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiUGFzc3dvcmQgdXBkYXRlZCBzdWNjZXNzZnVsbHkuXCIpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhdXRoL2xvZ2luJ10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCdwYXNzd29yZCcpPy5zZXRWYWx1ZShwYXNzd29yZCk7XHJcbiAgICAgICB0aGlzLlBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy5zZXRWYWx1ZShjb25maXJtUGFzc3dvcmQpXHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1VuYWJsZSB0byByZXNldCBwYXNzd29yZCEgUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICB0aGlzLlBhc3N3b3JkRm9ybS5nZXQoJ3Bhc3N3b3JkJyk/LnNldFZhbHVlKHBhc3N3b3JkKTtcclxuICAgICAgIHRoaXMuUGFzc3dvcmRGb3JtLmdldCgnY29uZmlybVBhc3N3b3JkJyk/LnNldFZhbHVlKGNvbmZpcm1QYXNzd29yZClcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1VuYWJsZSB0byByZXNldCBwYXNzd29yZCEgUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IHBvc2l0aW9uLWFic29sdXRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHBlLTEwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBcIj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9MSFMuc3ZnXCIgYWx0PVwiSW1hZ2VcIiBjbGFzcz1cImltZy1mbHVpZFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZiAoZW1haWxFbmFibGUpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHBzLTEwICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtZmx1c2ggdy1sZy02MDBweCBtcy0yMCBweS0zIG10LTIwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1mb3JtIGxvZ2luLXNpZ25pbiB3LTEwMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1iZXR3ZWVuIHRpdGxlLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IG15LTEwIG1zLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwidGl0bGUgbXktNFwiPiBGb3Jnb3QgUGFzc3dvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1zdWJ0aXRsZSBtYi0xXCI+IEVudGVyIHRoZSBFbWFpbCBhc3NvY2lhdGVkIHdpdGggeW91ciBhY2NvdW50IGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSdsbCBzZW5kIHlvdSBhIE9UUCB0byByZXNldCB5b3VyIHBhc3N3b3JkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cInctMTAwIHRpdGxlLXBhZGRpbmdcIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+RW1haWw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXktM1wiIFtmb3JtQ29udHJvbF09XCJlbWFpbFwiIHR5cGU9XCJlbWFpbFwiIGlkPVwiZW1haWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImVtYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtdC01IG1iLTUgbXgtMTBcIiByb2xlPVwiZ3JvdXBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMFwiIGlkPVwiYWxlcnQtdG9hc3RcIiBbZGlzYWJsZWRdPVwiZW1haWwuaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdCgpXCI+UmVxdWVzdCByZXNldCBsaW5rPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZSBiYWNrdG9sb2dpbiB0ZXh0LWNlbnRlciBteS0zXCIgcm91dGVyTGluaz1cIi9hdXRoL2xvZ2luXCI+QmFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naW48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LW1kLXJvdyBtYi0zICBmbGV4LW1kLXN0YWNrIHB0LTMgY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCBvcmRlci0yIG9yZGVyLW1kLTEgbXMtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTEgZm9vdGVyXCI+MjAyNDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvb3RlciB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCI+JiM2NDtUYW5nb0lUU29sdXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGlhIFB2dCBMdGQ8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm1lbnUgbWVudS1ncmF5LTYwMCBtZW51LWhvdmVyLXByaW1hcnkgZnctc2VtaWJvbGQgb3JkZXItMSBtZS03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWVudS1pdGVtIGZvb3RlclwiPjxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCJodHRwczovL3RhbmdvZXllLmFpLyNhYm91dHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1saW5rIHB4LTVcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTIgMTNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMy43MDAyQzExIDMuMTUwMiAxMC41NSAyLjcwMDIgMTAgMi43MDAySDJDMS40NSAyLjcwMDIgMSAzLjE1MDIgMSAzLjcwMDJNMTEgMy43MDAyVjkuNzAwMkMxMSAxMC4yNTAyIDEwLjU1IDEwLjcwMDIgMTAgMTAuNzAwMkgyQzEuNDUgMTAuNzAwMiAxIDEwLjI1MDIgMSA5LjcwMDJWMy43MDAyTTExIDMuNzAwMkw2IDcuMjAwMkwxIDMuNzAwMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+c3VwcG9ydCYjNjQ7dGFuZ290ZWNoLmNvLmluPC9zcGFuPjwvYT48L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmKHBhc3N3b3JkRW5hYmxlKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBwcy0xMCAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWZsdXNoIHctbGctNjAwcHggbXMtMjAgcHktMyBtdC0yMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZm9ybSBsb2dpbi1zaWduaW4gdy0xMDBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtYmV0d2VlbiB0aXRsZS1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdGFydCBteS01IG1zLTEwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRpdGxlIG15LTRcIj5SZXNldCBQYXNzd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXN1YnRpdGxlIG1iLTdcIj5FbnRlciBhIG5ldyBwYXNzd29yZCB0byByZXNldCB0aGUgcGFzc3dvcmQgb24geW91ciBhY2NvdW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJQYXNzd29yZEZvcm1cIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctMTIgY29sLXhsLTEyIGNvbC14eGwtMTIgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlbWFpbFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk5ldyBQYXNzd29yZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFt0eXBlXT1cIm5ld1Bhc3N3b3JkU2hvdyA/ICd0ZXh0JyA6ICdwYXNzd29yZCdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IFBhc3N3b3JkRm9ybS5nZXQoJ3Bhc3N3b3JkJyk/LnRvdWNoZWQgJiYgUGFzc3dvcmRGb3JtLmdldCgncGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2hvd05ld1Bhc3N3b3JkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIHBvc2l0aW9uLWFic29sdXRlIHRyYW5zbGF0ZS1taWRkbGUgdG9wLTUwIGVuZC0wIG1lLW4yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEta3QtcGFzc3dvcmQtbWV0ZXItY29udHJvbD1cInZpc2liaWxpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibmV3UGFzc3dvcmRTaG93XCIgY2xhc3M9XCJmYSBmYS1leWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFuZXdQYXNzd29yZFNob3dcIiBjbGFzcz1cImZhIGZhLWV5ZS1zbGFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihQYXNzd29yZEZvcm0uZ2V0KCdwYXNzd29yZCcpPy50b3VjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoUGFzc3dvcmRGb3JtLmdldCgncGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5QYXNzd29yZCBpcyByZXF1aXJlZDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCAqbmdJZj1cIlBhc3N3b3JkRm9ybS5nZXQoJ3Bhc3N3b3JkJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5UaGUgcGFzc3dvcmQgbXVzdCBjb250YWluIGF0bGVhc3Qgb25lIGNhcGl0YWwgbGV0dGVyLCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIsIG51bWJlciBhbmQgdGhlIHN0cmVuZ3RoIHNob3VsZCBiZSBtb3JlIHRoYW4gNyBjaGFyYWN0ZXJzLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiUGFzc3dvcmRGb3JtLmdldCgncGFzc3dvcmQnKT8uaGFzRXJyb3IoJ25vU3BhY2VzJykgJiYgIVBhc3N3b3JkRm9ybS5nZXQoJ3Bhc3N3b3JkJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJykgJiYgUGFzc3dvcmRGb3JtLmdldCgncGFzc3dvcmQnKT8udG91Y2hlZFwiPlBhc3N3b3JkIGNhbm5vdCBjb250YWluIHNwYWNlcy48L3NtYWxsPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctMTIgY29sLXhsLTEyIGNvbC14eGwtMTIgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb250YWN0XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q29uZmlybSBOZXcgUGFzc3dvcmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbdHlwZV09XCJ2ZXJpZnlQYXNzd29yZFNob3cgPyAndGV4dCcgOiAncGFzc3dvcmQnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImNvbmZpcm1QYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb25maXJtUGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IFBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy50b3VjaGVkICYmIFBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJzaG93VmVyaWZ5UGFzc3dvcmQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gcG9zaXRpb24tYWJzb2x1dGUgdHJhbnNsYXRlLW1pZGRsZSB0b3AtNTAgZW5kLTAgbWUtbjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1rdC1wYXNzd29yZC1tZXRlci1jb250cm9sPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJ2ZXJpZnlQYXNzd29yZFNob3dcIiBjbGFzcz1cImZhIGZhLWV5ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIXZlcmlmeVBhc3N3b3JkU2hvd1wiIGNsYXNzPVwiZmEgZmEtZXllLXNsYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKFBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy50b3VjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoUGFzc3dvcmRGb3JtLmdldCgnY29uZmlybVBhc3N3b3JkJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+Q29uZmlybSBwYXNzd29yZCBpcyByZXF1aXJlZDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c21hbGwgKm5nSWY9XCJQYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlRoZSBjb25maXJtIHBhc3N3b3JkIG11c3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIGF0bGVhc3Qgb25lIGNhcGl0YWwgbGV0dGVyIGFuZCBudW1iZXIuPC9zbWFsbD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUGFzc3dvcmRGb3JtLmdldCgnY29uZmlybVBhc3N3b3JkJyk/LnRvdWNoZWQgJiYgUGFzc3dvcmRGb3JtLmdldCgnY29uZmlybVBhc3N3b3JkJyk/Lmhhc0Vycm9yKCdOb3RFcXVhbCcpICYmICFQYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5QYXNzd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IG1hdGNoPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJQYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaGFzRXJyb3IoJ25vU3BhY2VzJykgJiYgIVBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy5oYXNFcnJvcignTm90RXF1YWwnKSAmJiBQYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8udG91Y2hlZFwiPlBhc3N3b3JkIGNhbm5vdCBjb250YWluIHNwYWNlcy48L3NtYWxsPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtMTAgbWItNVwiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIFwiIGlkPVwiYWxlcnQtdG9hc3RcIiBbZGlzYWJsZWRdPVwiUGFzc3dvcmRGb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUGFzc3dvcmRTdWJtaXQoKVwiPlJlc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgYmFja3RvbG9naW4gdGV4dC1jZW50ZXJcIiByb3V0ZXJMaW5rPVwiL2F1dGgvbG9naW5cIj5CYWNrIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naW48L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBkLWZsZXggZmxleC1jb2x1bW4gZmxleC1tZC1yb3cgbWItMyAgZmxleC1tZC1zdGFjayBwdC0zIGNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgb3JkZXItMiBvcmRlci1tZC0xIG1zLTIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xIGZvb3RlclwiPjIwMjQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb290ZXIgdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiPiYjNjQ7VGFuZ29JVFNvbHV0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRpYSBQdnQgTHRkPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJtZW51IG1lbnUtZ3JheS02MDAgbWVudS1ob3Zlci1wcmltYXJ5IGZ3LXNlbWlib2xkIG9yZGVyLTEgbWUtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1lbnUtaXRlbSBmb290ZXJcIj48YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly90YW5nb2V5ZS5haS8jYWJvdXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtbGluayBweC01XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEyIDEzXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDMuNzAwMkMxMSAzLjE1MDIgMTAuNTUgMi43MDAyIDEwIDIuNzAwMkgyQzEuNDUgMi43MDAyIDEgMy4xNTAyIDEgMy43MDAyTTExIDMuNzAwMlY5LjcwMDJDMTEgMTAuMjUwMiAxMC41NSAxMC43MDAyIDEwIDEwLjcwMDJIMkMxLjQ1IDEwLjcwMDIgMSAxMC4yNTAyIDEgOS43MDAyVjMuNzAwMk0xMSAzLjcwMDJMNiA3LjIwMDJMMSAzLjcwMDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPnN1cHBvcnQmIzY0O3RhbmdvdGVjaC5jby5pbjwvc3Bhbj48L2E+PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvbG9naW4tYmFja2dyb3VuZDEuc3ZnXCIgYWx0PVwiSW1hZ2VcIiBjbGFzcz1cImJhY2tncm91bmQtaW1hZ2VcIj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4iXX0=
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQvdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQvdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQWdDLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtsRyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFNMUMsTUFBTSxPQUFPLGdDQUFnQztJQWlCakM7SUFDQTtJQUNBO0lBQ0E7SUFBdUI7SUFDdkI7SUFBdUI7SUFwQmpDLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDNUIsR0FBRyxDQUFNO0lBQ1QsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUNwQyxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDckMsS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUMxQixVQUFVLENBQUMsUUFBUTtRQUNuQixVQUFVLENBQUMsS0FBSztRQUNoQixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUN6QixVQUFVLENB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QXFLQTs7NEZEeEphLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdGFuZ28tYXV0aC1mb3Jnb3QtcGFzc3dvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RhbmdvLWF1dGgtZm9yZ290LXBhc3N3b3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi90YW5nby1hdXRoLWZvcmdvdC1wYXNzd29yZC5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFuZ29BdXRoRm9yZ290UGFzc3dvcmRDb21wb25lbnQge1xyXG4gIGVtYWlsRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBPVFA6IGFueTtcclxuICBwYXNzd29yZEVuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG5ld1Bhc3N3b3JkU2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZlcmlmeVBhc3N3b3JkU2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbmZpcm1QYXNzd29yZFNob3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbWFpbCA9IG5ldyBGb3JtQ29udHJvbChcIlwiLCBbXHJcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgVmFsaWRhdG9ycy5lbWFpbCxcclxuICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCksXHJcbiAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxcclxuICBdKTtcclxuICBQYXNzd29yZEZvcm06IEZvcm1Hcm91cDtcclxuICBwcml2YXRlIHNlY3JldEtleTogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLHB1YmxpYyBnczpHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLHByaXZhdGUgcGFnZUluZm86UGFnZUluZm9TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnNlY3JldEtleT1lbnYuc2VjcmV0S2V5XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuUGFzc3dvcmRGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHBhc3N3b3JkOiBbXHJcbiAgICAgICAgXCJcIixcclxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIwKSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybigvXig/PS4qW0EtWl0pKD89LipcXGQpLns4LH0kLyksdGhpcy5ub1NwYWNlVmFsaWRhdG9yXHJcbiAgICAgICAgXSksICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICBdLFxyXG4gICAgICBjb25maXJtUGFzc3dvcmQ6IFtcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgzMjApLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKD89LipbQS1aXSkoPz0uKlxcZCkuezgsfSQvKSx0aGlzLm5vU3BhY2VWYWxpZGF0b3IsXHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlQXJlRXF1YWwuYmluZCh0aGlzKSxcclxuICAgICAgICBdKSxcclxuICAgICAgXSxcclxuICAgICAgdG9rZW46IFtcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgXVxyXG4gICAgfSk7XHJcblxyXG4gICAgXHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChxcGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocXBhcmFtcykge1xyXG4gICAgICAgICAgaWYgKHFwYXJhbXMudG9rZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzd29yZEVuYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxFbmFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCd0b2tlbicpPy5zZXRWYWx1ZShxcGFyYW1zLnRva2VuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxFbmFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkRW5hYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCdwYXNzd29yZCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgfVxyXG4gIG5vU3BhY2VWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwge1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5pbmRleE9mKCcgJykgPj0gMCkge1xyXG4gICAgICByZXR1cm4geyAnbm9TcGFjZXMnOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgdmFsaWRhdGVBcmVFcXVhbChmaWVsZENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnk+KSB7XHJcbiAgICByZXR1cm4gZmllbGRDb250cm9sPy52YWx1ZSA9PT0gdGhpcy5QYXNzd29yZEZvcm0/LmdldChcInBhc3N3b3JkXCIpIS52YWx1ZSA/IG51bGwgOiB7IE5vdEVxdWFsOiB0cnVlIH07XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgLmZvcmdvdFBhc3N3b3JkVHJpZ2dlcih7IGVtYWlsOiB0aGlzLmVtYWlsLnZhbHVlIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QoXHJcbiAgICAgICAgICAgICAgYFJlc2V0IHBhc3N3b3JkIGxpbmsgc2VudCB0byAke3RoaXMuZW1haWwudmFsdWV9YFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXNldCBwYXNzd29yZCBsaW5rIHRvICR7dGhpcy5lbWFpbC52YWx1ZX1gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVzZXQgcGFzc3dvcmQgbGluayB0byAke3RoaXMuZW1haWwudmFsdWV9YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3dOZXdQYXNzd29yZCgpIHtcclxuICAgIHRoaXMubmV3UGFzc3dvcmRTaG93ID0gIXRoaXMubmV3UGFzc3dvcmRTaG93O1xyXG4gIH1cclxuXHJcbiAgc2hvd1ZlcmlmeVBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy52ZXJpZnlQYXNzd29yZFNob3cgPSAhdGhpcy52ZXJpZnlQYXNzd29yZFNob3c7XHJcbiAgfVxyXG5cclxuICBzaG93Q29uZmlybVBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy5jb25maXJtUGFzc3dvcmRTaG93ID0gIXRoaXMuY29uZmlybVBhc3N3b3JkU2hvdztcclxuICB9XHJcblxyXG4gIG9uUGFzc3dvcmRTdWJtaXQoKSB7XHJcbiAgaWYgKHRoaXMuUGFzc3dvcmRGb3JtLmludmFsaWQpIHtcclxuICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnUGxlYXNlIGZpbGwgb3V0IHRoZSBmb3JtIGNvcnJlY3RseS4nKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IHBhc3N3b3JkID0gdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCdwYXNzd29yZCcpPy52YWx1ZTtcclxuICBjb25zdCBjb25maXJtUGFzc3dvcmQgPSB0aGlzLlBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy52YWx1ZTtcclxuXHJcbiAgaWYgKHBhc3N3b3JkICE9PSBjb25maXJtUGFzc3dvcmQpIHtcclxuICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaC4nKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IGFkZG9uUGFzc3dvcmQgPSBgJHtwYXNzd29yZH1fX18ke01hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApfWA7XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gdGhpcy5zZWNyZXRLZXk7XHJcbiAgY29uc3QgZW5jcnlwdGVkUGFzc3dvcmQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChhZGRvblBhc3N3b3JkLCBzZWNyZXRLZXkpLnRvU3RyaW5nKCk7XHJcbiAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgIC4uLnRoaXMuUGFzc3dvcmRGb3JtLnZhbHVlLFxyXG4gICAgcGFzc3dvcmQ6IGVuY3J5cHRlZFBhc3N3b3JkLFxyXG4gICAgY29uZmlybVBhc3N3b3JkOiBlbmNyeXB0ZWRQYXNzd29yZCxcclxuICAgIGxvZ2luVHlwZTpcIndlYlwiLFxyXG4gIH07XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmZvcmdvdFBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiUGFzc3dvcmQgdXBkYXRlZCBzdWNjZXNzZnVsbHkuXCIpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhdXRoL2xvZ2luJ10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgdGhpcy5QYXNzd29yZEZvcm0uZ2V0KCdwYXNzd29yZCcpPy5zZXRWYWx1ZShwYXNzd29yZCk7XHJcbiAgICAgICB0aGlzLlBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy5zZXRWYWx1ZShjb25maXJtUGFzc3dvcmQpXHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1VuYWJsZSB0byByZXNldCBwYXNzd29yZCEgUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICB0aGlzLlBhc3N3b3JkRm9ybS5nZXQoJ3Bhc3N3b3JkJyk/LnNldFZhbHVlKHBhc3N3b3JkKTtcclxuICAgICAgIHRoaXMuUGFzc3dvcmRGb3JtLmdldCgnY29uZmlybVBhc3N3b3JkJyk/LnNldFZhbHVlKGNvbmZpcm1QYXNzd29yZClcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1VuYWJsZSB0byByZXNldCBwYXNzd29yZCEgUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IHBvc2l0aW9uLWFic29sdXRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHBlLTEwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBcIj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9MSFMuc3ZnXCIgYWx0PVwiSW1hZ2VcIiBjbGFzcz1cImltZy1mbHVpZFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZiAoZW1haWxFbmFibGUpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHBzLTEwICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtZmx1c2ggdy1sZy02MDBweCBtcy0yMCBweS0zIG10LTIwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1mb3JtIGxvZ2luLXNpZ25pbiB3LTEwMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1iZXR3ZWVuIHRpdGxlLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IG15LTEwIG1zLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwidGl0bGUgbXktNFwiPiBGb3Jnb3QgUGFzc3dvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1zdWJ0aXRsZSBtYi0xXCI+IEVudGVyIHRoZSBFbWFpbCBhc3NvY2lhdGVkIHdpdGggeW91ciBhY2NvdW50IGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSdsbCBzZW5kIHlvdSBhIE9UUCB0byByZXNldCB5b3VyIHBhc3N3b3JkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cInctMTAwIHRpdGxlLXBhZGRpbmdcIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+RW1haWw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXktM1wiIFtmb3JtQ29udHJvbF09XCJlbWFpbFwiIHR5cGU9XCJlbWFpbFwiIGlkPVwiZW1haWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImVtYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtdC01IG1iLTUgbXgtMTBcIiByb2xlPVwiZ3JvdXBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMFwiIGlkPVwiYWxlcnQtdG9hc3RcIiBbZGlzYWJsZWRdPVwiZW1haWwuaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdCgpXCI+UmVxdWVzdCByZXNldCBsaW5rPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZSBiYWNrdG9sb2dpbiB0ZXh0LWNlbnRlciBteS0zXCIgcm91dGVyTGluaz1cIi9hdXRoL2xvZ2luXCI+QmFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naW48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LW1kLXJvdyBtYi0zICBmbGV4LW1kLXN0YWNrIHB0LTMgY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTkwMCBvcmRlci0yIG9yZGVyLW1kLTEgbXMtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTEgZm9vdGVyXCI+MjAyNDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvb3RlciB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCI+JiM2NDtUYW5nb0lUU29sdXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGlhIFB2dCBMdGQ8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm1lbnUgbWVudS1ncmF5LTYwMCBtZW51LWhvdmVyLXByaW1hcnkgZnctc2VtaWJvbGQgb3JkZXItMSBtZS03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWVudS1pdGVtIGZvb3RlclwiPjxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCJodHRwczovL3RhbmdvZXllLmFpLyNhYm91dHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1saW5rIHB4LTVcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTIgMTNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMy43MDAyQzExIDMuMTUwMiAxMC41NSAyLjcwMDIgMTAgMi43MDAySDJDMS40NSAyLjcwMDIgMSAzLjE1MDIgMSAzLjcwMDJNMTEgMy43MDAyVjkuNzAwMkMxMSAxMC4yNTAyIDEwLjU1IDEwLjcwMDIgMTAgMTAuNzAwMkgyQzEuNDUgMTAuNzAwMiAxIDEwLjI1MDIgMSA5LjcwMDJWMy43MDAyTTExIDMuNzAwMkw2IDcuMjAwMkwxIDMuNzAwMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+c3VwcG9ydCYjNjQ7dGFuZ290ZWNoLmNvLmluPC9zcGFuPjwvYT48L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmKHBhc3N3b3JkRW5hYmxlKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBwcy0xMCAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWZsdXNoIHctbGctNjAwcHggbXMtMjAgcHktMyBtdC0yMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZm9ybSBsb2dpbi1zaWduaW4gdy0xMDBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtYmV0d2VlbiB0aXRsZS1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdGFydCBteS01IG1zLTEwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRpdGxlIG15LTRcIj5SZXNldCBQYXNzd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXN1YnRpdGxlIG1iLTdcIj5FbnRlciBhIG5ldyBwYXNzd29yZCB0byByZXNldCB0aGUgcGFzc3dvcmQgb24geW91ciBhY2NvdW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJQYXNzd29yZEZvcm1cIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctMTIgY29sLXhsLTEyIGNvbC14eGwtMTIgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlbWFpbFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk5ldyBQYXNzd29yZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFt0eXBlXT1cIm5ld1Bhc3N3b3JkU2hvdyA/ICd0ZXh0JyA6ICdwYXNzd29yZCdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IFBhc3N3b3JkRm9ybS5nZXQoJ3Bhc3N3b3JkJyk/LnRvdWNoZWQgJiYgUGFzc3dvcmRGb3JtLmdldCgncGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2hvd05ld1Bhc3N3b3JkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIHBvc2l0aW9uLWFic29sdXRlIHRyYW5zbGF0ZS1taWRkbGUgdG9wLTUwIGVuZC0wIG1lLW4yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEta3QtcGFzc3dvcmQtbWV0ZXItY29udHJvbD1cInZpc2liaWxpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibmV3UGFzc3dvcmRTaG93XCIgY2xhc3M9XCJmYSBmYS1leWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFuZXdQYXNzd29yZFNob3dcIiBjbGFzcz1cImZhIGZhLWV5ZS1zbGFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihQYXNzd29yZEZvcm0uZ2V0KCdwYXNzd29yZCcpPy50b3VjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoUGFzc3dvcmRGb3JtLmdldCgncGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5QYXNzd29yZCBpcyByZXF1aXJlZDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCAqbmdJZj1cIlBhc3N3b3JkRm9ybS5nZXQoJ3Bhc3N3b3JkJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5UaGUgcGFzc3dvcmQgbXVzdCBjb250YWluIGF0bGVhc3Qgb25lIGNhcGl0YWwgbGV0dGVyLCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIsIG51bWJlciBhbmQgdGhlIHN0cmVuZ3RoIHNob3VsZCBiZSBtb3JlIHRoYW4gNyBjaGFyYWN0ZXJzLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiUGFzc3dvcmRGb3JtLmdldCgncGFzc3dvcmQnKT8uaGFzRXJyb3IoJ25vU3BhY2VzJykgJiYgIVBhc3N3b3JkRm9ybS5nZXQoJ3Bhc3N3b3JkJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJykgJiYgUGFzc3dvcmRGb3JtLmdldCgncGFzc3dvcmQnKT8udG91Y2hlZFwiPlBhc3N3b3JkIGNhbm5vdCBjb250YWluIHNwYWNlcy48L3NtYWxsPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctMTIgY29sLXhsLTEyIGNvbC14eGwtMTIgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb250YWN0XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q29uZmlybSBOZXcgUGFzc3dvcmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbdHlwZV09XCJ2ZXJpZnlQYXNzd29yZFNob3cgPyAndGV4dCcgOiAncGFzc3dvcmQnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImNvbmZpcm1QYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb25maXJtUGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IFBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy50b3VjaGVkICYmIFBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJzaG93VmVyaWZ5UGFzc3dvcmQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gcG9zaXRpb24tYWJzb2x1dGUgdHJhbnNsYXRlLW1pZGRsZSB0b3AtNTAgZW5kLTAgbWUtbjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1rdC1wYXNzd29yZC1tZXRlci1jb250cm9sPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJ2ZXJpZnlQYXNzd29yZFNob3dcIiBjbGFzcz1cImZhIGZhLWV5ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIXZlcmlmeVBhc3N3b3JkU2hvd1wiIGNsYXNzPVwiZmEgZmEtZXllLXNsYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKFBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy50b3VjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoUGFzc3dvcmRGb3JtLmdldCgnY29uZmlybVBhc3N3b3JkJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+Q29uZmlybSBwYXNzd29yZCBpcyByZXF1aXJlZDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c21hbGwgKm5nSWY9XCJQYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlRoZSBjb25maXJtIHBhc3N3b3JkIG11c3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIGF0bGVhc3Qgb25lIGNhcGl0YWwgbGV0dGVyIGFuZCBudW1iZXIuPC9zbWFsbD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUGFzc3dvcmRGb3JtLmdldCgnY29uZmlybVBhc3N3b3JkJyk/LnRvdWNoZWQgJiYgUGFzc3dvcmRGb3JtLmdldCgnY29uZmlybVBhc3N3b3JkJyk/Lmhhc0Vycm9yKCdOb3RFcXVhbCcpICYmICFQYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5QYXNzd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IG1hdGNoPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJQYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8uaGFzRXJyb3IoJ25vU3BhY2VzJykgJiYgIVBhc3N3b3JkRm9ybS5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpPy5oYXNFcnJvcignTm90RXF1YWwnKSAmJiBQYXNzd29yZEZvcm0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKT8udG91Y2hlZFwiPlBhc3N3b3JkIGNhbm5vdCBjb250YWluIHNwYWNlcy48L3NtYWxsPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtMTAgbWItNVwiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIFwiIGlkPVwiYWxlcnQtdG9hc3RcIiBbZGlzYWJsZWRdPVwiUGFzc3dvcmRGb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUGFzc3dvcmRTdWJtaXQoKVwiPlJlc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgYmFja3RvbG9naW4gdGV4dC1jZW50ZXJcIiByb3V0ZXJMaW5rPVwiL2F1dGgvbG9naW5cIj5CYWNrIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naW48L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBkLWZsZXggZmxleC1jb2x1bW4gZmxleC1tZC1yb3cgbWItMyAgZmxleC1tZC1zdGFjayBwdC0zIGNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgb3JkZXItMiBvcmRlci1tZC0xIG1zLTIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xIGZvb3RlclwiPjIwMjQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb290ZXIgdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiPiYjNjQ7VGFuZ29JVFNvbHV0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRpYSBQdnQgTHRkPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJtZW51IG1lbnUtZ3JheS02MDAgbWVudS1ob3Zlci1wcmltYXJ5IGZ3LXNlbWlib2xkIG9yZGVyLTEgbWUtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1lbnUtaXRlbSBmb290ZXJcIj48YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly90YW5nb2V5ZS5haS8jYWJvdXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtbGluayBweC01XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEyIDEzXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDMuNzAwMkMxMSAzLjE1MDIgMTAuNTUgMi43MDAyIDEwIDIuNzAwMkgyQzEuNDUgMi43MDAyIDEgMy4xNTAyIDEgMy43MDAyTTExIDMuNzAwMlY5LjcwMDJDMTEgMTAuMjUwMiAxMC41NSAxMC43MDAyIDEwIDEwLjcwMDJIMkMxLjQ1IDEwLjcwMDIgMSAxMC4yNTAyIDEgOS43MDAyVjMuNzAwMk0xMSAzLjcwMDJMNiA3LjIwMDJMMSAzLjcwMDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPnN1cHBvcnQmIzY0O3RhbmdvdGVjaC5jby5pbjwvc3Bhbj48L2E+PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxpbWcgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvbG9naW4tYmFja2dyb3VuZDEuc3ZnXCIgYWx0PVwiSW1hZ2VcIiBjbGFzcz1cImJhY2tncm91bmQtaW1hZ2VcIj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4iXX0=
|