Disable Defender Antivirus service communication with apps
- Single actionThis page belongs to a script, containing basic changes to achieve a task.
- Windows onlyThis script improves your privacy on Windows
- Impact: HighSystem Functionality Loss Risk: High
This action improves privacy with high impact when you run the recommended script. - Batch (batchfile)These changes use Windows system commands to update your settings.
- Fully reversible
You can fully restore this action (revert back to the original behavior) using this website.
The restore/revert methods provided here can help you fix issues.
Overview
This script prevents Defender Antivirus from communicating with other applications.
The script blocks communication by removing components that allow Defender Antivirus to share data with other programs. Windows enables applications to communicate and share data using interprocess communications (IPC) 1. This communication is achieved through the Component Object Model (COM) 1. COM lets programs communicate and share data with other programs 1. Programs communicate across computer networks 1.
This script enhances privacy by limiting system monitoring and data collection. It may also improve system performance by reducing background processes and resource usage.
However, disabling these components may significantly reduce system security. Without these components, your system becomes vulnerable to malware, ransomware, and other cyber attacks.
This action disables your antivirus protection, exposing your computer to viruses and other cyber threats.
Technical Details
These components belong to Defender Antivirus and its main service 2.
Windows updates and installs these through the Windows-Defender-Service.Resources
package 2.
Defender COM objects use two main files:
The script disables the following components:
- Microsoft Windows Defender
- Microsoft Windows Defender COM Utility Type Library (
8C389764-F036-48F2-9AE2-88C260DCF43B
) 2 - DLL file at
%PROGRAMFILES%\Windows Defender\MsMpCom.dll
2 3 - COM interfaces:
- Not Advised
This script should only be used by advanced users.
This script is not recommended for daily use as it breaks important functionality.
Consider creating a system restore point before doing any changes.
- Security Trade-off
This action prioritizes privacy over certain security features. It's not recommended and should only be used by advanced users after understanding its implications.
Increased Privacy
Enhanced privacy through reduced data collection and trackingDecreased Security
Some security features will be disabled or limitedThis script can be reversed, this allows you to restore the default system security.
Sources
- Interprocess communications - Win32 apps. Microsoft Learn. learn.microsoft.com. (2024).
Original: https://learn.microsoft.com/en-us/windows/win32/ipc/interprocess-communications
Archived: https://archive.ph/2024.10.28-091311/https://learn.microsoft.com/en-us/windows/win32/ipc/interprocess-communications - nickel-x64/WinSxS/Manifests/amd64_windows-defender-service_31bf3856ad364e35_10.0.22621.1_none_273bee824a8ac431.manifest at b3f8c9549e49f2a92b401b3809b210d5f78190ba · privacysexy-forks/nickel-x64. github.com. (2024).
Original: https://github.com/privacysexy-forks/nickel-x64/blob/b3f8c9549e49f2a92b401b3809b210d5f78190ba/WinSxS/Manifests/amd64_windows-defender-service_31bf3856ad364e35_10.0.22621.1_none_273bee824a8ac431.manifest
Archived: https://web.archive.org/web/20240829205326/https://github.com/privacysexy-forks/nickel-x64/blob/b3f8c9549e49f2a92b401b3809b210d5f78190ba/WinSxS/Manifests/amd64_windows-defender-service_31bf3856ad364e35_10.0.22621.1_none_273bee824a8ac431.manifest - CLSID A2D75874-6750-4931-94C1-C99D3BC9D0C7. Microsoft Windows Defender. STRONTIC. strontic.github.io. (2024).
Original: https://strontic.github.io/xcyclopedia/library/clsid_A2D75874-6750-4931-94C1-C99D3BC9D0C7.html
Archived: https://web.archive.org/web/20240829212450/https://strontic.github.io/xcyclopedia/library/clsid_A2D75874-6750-4931-94C1-C99D3BC9D0C7.html - Onboard Windows servers to the Microsoft Defender for Endpoint service - Microsoft Defender for Endpoint. Microsoft Learn. learn.microsoft.com. (2024).
Original: https://learn.microsoft.com/en-us/defender-endpoint/configure-server-endpoints
Archived: https://web.archive.org/web/20240829212436/https://learn.microsoft.com/en-us/defender-endpoint/configure-server-endpoints#known-issues-and-limitations-in-the-new-unified-solution-package-for-windows-server-2016-and-windows-server-2012-r2 - SchoolNotes/ifs4102/Assignments/Assignment-2/a2system.txt at af823cecc159021e1a54fb5ca15d54ce35734ee9 · privacysexy-forks/SchoolNotes. github.com. (2024).
Original: https://github.com/privacysexy-forks/SchoolNotes/blob/af823cecc159021e1a54fb5ca15d54ce35734ee9/ifs4102/Assignments/Assignment-2/a2system.txt
Archived: https://web.archive.org/web/20240829212123/https://github.com/privacysexy-forks/SchoolNotes/blob/af823cecc159021e1a54fb5ca15d54ce35734ee9/ifs4102/Assignments/Assignment-2/a2system.txt
Apply Now
Choose one of three ways to apply:
Download script
Download and run the script directly- No app needed
- Offline usage
- Easy-to-apply
- Free
- Open-source
Help
How to apply or restore "Disable Defender Antivirus service communication with apps" using script
- ≈ 2 min to complete
- Tools: Web Browser
- Difficulty: Simple
- ≈ 5 instructions
- 1
Download
Download the script file by clicking on thebutton above.
Use button above to restore changes. - 2
Keep the file
If warned by your browser, keep the file. - 3
Open
Open the downloaded file. - 4
Exit
Once it's done, press any key to exit the window. - 5
Restart
Restart your computer for all changes to take effect.
Apply with privacy.sexy
Guided, automated application with safety checks- Recommended for most users
- Includes safety checks
- Free
- Open-source
- Popular
- Offline/Online usage
Help
How to apply or restore "Disable Defender Antivirus service communication with apps" using privacy.sexy
- ≈ 3 min to complete
- Tools: privacy.sexy
- Difficulty: Simple
- ≈ 4 instructions
- 2
Choose script
- Search for the script name: Disable Defender Antivirus service communication with apps
- Check the script by clicking on the checkbox.
- 3
Run
Click on ▶️ Run button at the bottom of the page.This button only appears on desktop version (recommended). On browser, use 💾 Save button.
- Apply
- Revert
:: Soft-delete the registry key: HKLM\Software\Classes\CLSID\{A2D75874-6750-4931-94C1-C99D3BC9D0C7} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\Software\Classes\CLSID\{A2D75874-6750-4931-94C1-C99D3BC9D0C7}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\Software\Classes\AppID\{A79DB36D-6218-48e6-9EC9-DCBA9A39BF0F} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\Software\Classes\AppID\{A79DB36D-6218-48e6-9EC9-DCBA9A39BF0F}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\Software\Classes\TypeLib\{8C389764-F036-48F2-9AE2-88C260DCF43B} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\Software\Classes\TypeLib\{8C389764-F036-48F2-9AE2-88C260DCF43B}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft delete files matching pattern: "%PROGRAMFILES%\Windows Defender\MsMpCom.dll" as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = '$pathGlobPattern = "^""%PROGRAMFILES%\Windows Defender\MsMpCom.dll"^""'+"^""`r`n"^""+'$expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern)'+"^""`r`n"^""+'Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""'+"^""`r`n"^""+''+"^""`r`n"^""+'$renamedCount = 0'+"^""`r`n"^""+'$skippedCount = 0'+"^""`r`n"^""+'$failedCount = 0'+"^""`r`n"^""+''+"^""`r`n"^""+'$foundAbsolutePaths = @()'+"^""`r`n"^""+''+"^""`r`n"^""+'try {'+"^""`r`n"^""+' $foundAbsolutePaths += @('+"^""`r`n"^""+' Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName'+"^""`r`n"^""+' )'+"^""`r`n"^""+'} catch [System.Management.Automation.ItemNotFoundException] {'+"^""`r`n"^""+' <# Swallow, do not run `Test-Path` before, it''s unreliable for globs requiring extra permissions #>'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$foundAbsolutePaths = $foundAbsolutePaths `'+"^""`r`n"^""+' | Select-Object -Unique `'+"^""`r`n"^""+' | Sort-Object -Property { $_.Length } -Descending'+"^""`r`n"^""+'if (!$foundAbsolutePaths) {'+"^""`r`n"^""+' Write-Host ''Skipping, no items available.'''+"^""`r`n"^""+' exit 0'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""'+"^""`r`n"^""+'foreach ($path in $foundAbsolutePaths) {'+"^""`r`n"^""+' if (Test-Path -Path $path -PathType Container) {'+"^""`r`n"^""+' Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if($revert -eq $true) {'+"^""`r`n"^""+' if (-not $path.EndsWith(''.OLD'')) {'+"^""`r`n"^""+' Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+'} else {'+"^""`r`n"^""+' if ($path.EndsWith(''.OLD'')) {'+"^""`r`n"^""+' Write-Host "^""Skipping backup file: `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$originalFilePath = $path'+"^""`r`n"^""+'Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""'+"^""`r`n"^""+'if (-Not (Test-Path $originalFilePath)) {'+"^""`r`n"^""+' Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' exit 0'+"^""`r`n"^""+'}'+"^""`r`n"^""+''+"^""`r`n"^""+'if ($revert -eq $true) {'+"^""`r`n"^""+' $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4)'+"^""`r`n"^""+'} else {'+"^""`r`n"^""+' $newFilePath = "^""$($originalFilePath).OLD"^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+'try {'+"^""`r`n"^""+' Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop'+"^""`r`n"^""+' Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""'+"^""`r`n"^""+' $renamedCount++'+"^""`r`n"^""+' '+"^""`r`n"^""+'} catch {'+"^""`r`n"^""+' Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""'+"^""`r`n"^""+' $failedCount++'+"^""`r`n"^""+' '+"^""`r`n"^""+'}'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if ($failedCount -gt 0) {'+"^""`r`n"^""+' Write-Warning "^""Failed to process $($failedCount) items."^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+''; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\Interface\{AC30C2BA-0109-403D-9D8E-140BB470379C} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\SOFTWARE\Classes\Interface\{AC30C2BA-0109-403D-9D8E-140BB470379C}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\Interface\{E2D74550-8E41-460E-BB51-52E1F9522134} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\SOFTWARE\Classes\Interface\{E2D74550-8E41-460E-BB51-52E1F9522134}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\Interface\{CDFED399-7999-4309-B064-1EDE04BC580D} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\SOFTWARE\Classes\Interface\{CDFED399-7999-4309-B064-1EDE04BC580D}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
Ijo6IFJlc3RvcmUgcmVnaXN0cnkga2V5OiBIS0xNXFxTb2Z0d2FyZVxcQ2xhc3Nlc1xcQ0xTSURcXHtBMkQ3NTg3NC02NzUwLTQ5MzEtOTRDMS1DOTlEM0JDOUQwQzd9IGFzIFRydXN0ZWRJbnN0YWxsZXJcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCJmdW5jdGlvbiBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyKCRTY3JpcHQpIHsgJHByaW5jaXBhbFNpZCA9IFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLlNlY3VyaXR5SWRlbnRpZmllcl06Om5ldygnUy0xLTUtODAtOTU2MDA4ODg1LTM0MTg1MjI2NDktMTgzMTAzODA0NC0xODUzMjkyNjMxLTIyNzE0Nzg0NjQnKTsgJHByaW5jaXBhbE5hbWUgPSAkcHJpbmNpcGFsU2lkLlRyYW5zbGF0ZShbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5OVEFjY291bnRdKTsgJHN0cmVhbUZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgJHNjcmlwdEZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgdHJ5IHsgJHNjcmlwdEZpbGUgPSBSZW5hbWUtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdEZpbGUgLU5ld05hbWUgKCRzY3JpcHRGaWxlLkJhc2VOYW1lICsgJy5wczEnKSAtRm9yY2UgLVBhc3NUaHJ1OyAkU2NyaXB0IHwgT3V0LUZpbGUgJHNjcmlwdEZpbGUgLUVuY29kaW5nIFVURjg7ICR0YXNrTmFtZSA9IFwiXlwiXCJwcml2YWN5JChbY2hhcl0weDAwMkUpc2V4eSBpbnZva2VcIl5cIlwiOyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIDI+JjEgfCBPdXQtTnVsbDsgJGV4ZWN1dGlvbkNvbW1hbmQgPSBcIl5cIlwicG93ZXJzaGVsbC5leGUgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUZpbGUgJyRzY3JpcHRGaWxlJyAqPiYxIHwgT3V0LUZpbGUgLUZpbGVQYXRoICckc3RyZWFtRmlsZScgLUVuY29kaW5nIFVURjhcIl5cIlwiOyAkYWN0aW9uID0gTmV3LVNjaGVkdWxlZFRhc2tBY3Rpb24gLUV4ZWN1dGUgJ3Bvd2Vyc2hlbGwuZXhlJyAtQXJndW1lbnQgXCJeXCJcIi1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1Db21tYW5kIGBcIl5cIlwiJGV4ZWN1dGlvbkNvbW1hbmRgXCJeXCJcIlwiXlwiXCI7ICRzZXR0aW5ncyA9IE5ldy1TY2hlZHVsZWRUYXNrU2V0dGluZ3NTZXQgLUFsbG93U3RhcnRJZk9uQmF0dGVyaWVzIC1Eb250U3RvcElmR29pbmdPbkJhdHRlcmllczsgUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtVGFza05hbWUgJHRhc2tOYW1lIC1BY3Rpb24gJGFjdGlvbiAtU2V0dGluZ3MgJHNldHRpbmdzIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsOyB0cnkgeyAoJHNjaGVkdWxlU2VydmljZSA9IE5ldy1PYmplY3QgLUNvbU9iamVjdCBTY2hlZHVsZS5TZXJ2aWNlKS5Db25uZWN0KCk7ICRzY2hlZHVsZVNlcnZpY2UuR2V0Rm9sZGVyKCdcXCcpLkdldFRhc2soJHRhc2tOYW1lKS5SdW5FeCgkbnVsbCwgMCwgMCwgJHByaW5jaXBhbE5hbWUpIHwgT3V0LU51bGw7ICR0aW1lb3V0ID0gKEdldC1EYXRlKS5BZGRNaW51dGVzKDUpOyBXcml0ZS1Ib3N0IFwiXlwiXCJSdW5uaW5nIGFzICRwcmluY2lwYWxOYW1lXCJeXCJcIjsgd2hpbGUgKChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCAtZXEgMjY3MDA5KSB7IFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjAwOyBpZiAoKEdldC1EYXRlKSAtZ3QgJHRpbWVvdXQpIHsgV3JpdGUtV2FybmluZyAnU2tpcHBpbmc6IFRpbWVvdXQnOyBicmVhazsgfTsgfTsgaWYgKCgkcmVzdWx0ID0gKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0KSAtbmUgMCkgeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkLCBkdWUgdG8gZXhpdCBjb2RlOiAkcmVzdWx0LlwiXlwiXCI7IH0gfSBmaW5hbGx5IHsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiB8IE91dC1OdWxsOyB9OyBHZXQtQ29udGVudCAkc3RyZWFtRmlsZSB9IGZpbmFsbHkgeyBSZW1vdmUtSXRlbSAkc3RyZWFtRmlsZSwgJHNjcmlwdEZpbGU7IH07IH07ICRjbWQgPSAnZnVuY3Rpb24gQ29weS1BY2woJFNyYywgJERzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyY0tleXMgPSBAKEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRTcmMgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRzcmNLZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJGRzdEtleSA9IEpvaW4tUGF0aCAkRHN0ICRrZXkuUFNDaGlsZE5hbWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUFjbCAtU3JjICRrZXkuUFNQYXRoIC1Ec3QgJGRzdEtleScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbCA9IEdldC1BY2wgLVBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNlY3Rpb25zID0gW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106OkFsbCAtYmFuZCAoLWJub3QgW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106Ok93bmVyKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNkZGwgPSAkYWNsLkdldFNlY3VyaXR5RGVzY3JpcHRvclNkZGxGb3JtKCRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRhY2wuU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNkZGwsICRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFNldC1BY2wgLVBhdGggJERzdCAtQWNsT2JqZWN0ICRhY2wgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZW5hbWUtS2V5V2l0aEFjbCgkT2xkLCAkTmV3KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJE9sZCAtRGVzdGluYXRpb24gJE5ldyAtUmVjdXJzZSAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gY29weTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJE9sZCAtRHN0ICROZXcnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjb3B5IEFDTDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE5ldyAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY2xlYW4gdXA6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHJhd1BhdGg9JydIS0xNXFxTb2Z0d2FyZVxcQ2xhc3Nlc1xcQ0xTSURcXHtBMkQ3NTg3NC02NzUwLTQ5MzEtOTRDMS1DOTlEM0JDOUQwQzd9JycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJHN1ZmZpeCA9JycuT0xEJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJGdsb2JhbDpmYWlsID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOm9rID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBHZXQtUmVhbCgkcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgd2hpbGUgKCRzLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHMgPSAkcy5TdWJzdHJpbmcoMCwgJHMuTGVuZ3RoIC0gJHN1ZmZpeC5MZW5ndGgpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICByZXR1cm4gJHMnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUtleVRyZWUoJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRkZXN0ID0gR2V0LVJlYWwgJFBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzcmMgPSAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIGtleTogJyckZGVzdCcnIGZyb20gJyckc3JjJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoLU5vdCAkc3JjLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHNyYyArPSAkc3VmZml4JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyYykpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBkYXRhLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGRlc3QpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmcgdG8gYXZvaWQgZGF0YSBsb3NzLiBLZXkgYWxyZWFkeSBleGlzdHMuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJNYW51YWwgaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZCB0byBmdWxseSByZXN0b3JlIGZyb20gJyckc3JjJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBlbHNlIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtS2V5V2l0aEFjbCAtT2xkICRzcmMgLU5ldyAkZGVzdCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUNoaWxkcmVuKCRQYXRoKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWVzIGluICcnJFBhdGgnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRQYXRoKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogS2V5IGRvZXMgbm90IGV4aXN0LiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkdmFsdWVzID0gKCBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRQYXRoIC1FcnJvckFjdGlvbiBTdG9wIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgUHJvcGVydHkgYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJHZhbHVlIGluICR2YWx1ZXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWUgJyckdmFsdWUnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAkdmFsdWUuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRyZWFsID0gR2V0LVJlYWwgJHZhbHVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVuYW1pbmcgdG8gJyckcmVhbCcnLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtSXRlbVByb3BlcnR5IC1MaXRlcmFsUGF0aCAkUGF0aCAtTmFtZSAkdmFsdWUgLU5ld05hbWUgJHJlYWwgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1N1Y2Nlc3NmdWxseSByZXN0b3JlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOm9rKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpmYWlsKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAka2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRrZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVzdG9yZS1LZXlUcmVlICRrZXkuUFNQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHJlZ2lzdHJ5IGtleSAnJyRyYXdQYXRoJycgcmVjdXJzaXZlbHkuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyckaGl2ZSA9ICRyYXdQYXRoLlNwbGl0KCcnXFwnJylbMF0nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHBhdGggPSAkaGl2ZSArICcnOicnICsgJHJhd1BhdGguU3Vic3RyaW5nKCRoaXZlLkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnUmVzdG9yZS1LZXlUcmVlICRwYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkZ2xvYmFsOmZhaWwpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUVycm9yICcnRmFpbGVkIHRvIHJlc3RvcmUnJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgRXhpdCAxJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nOyBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyICRjbWRcIlxuOjogUmVzdG9yZSByZWdpc3RyeSBrZXk6IEhLTE1cXFNvZnR3YXJlXFxDbGFzc2VzXFxBcHBJRFxce0E3OURCMzZELTYyMTgtNDhlNi05RUM5LURDQkE5QTM5QkYwRn0gYXMgVHJ1c3RlZEluc3RhbGxlclxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcImZ1bmN0aW9uIEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIoJFNjcmlwdCkgeyAkcHJpbmNpcGFsU2lkID0gW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuU2VjdXJpdHlJZGVudGlmaWVyXTo6bmV3KCdTLTEtNS04MC05NTYwMDg4ODUtMzQxODUyMjY0OS0xODMxMDM4MDQ0LTE4NTMyOTI2MzEtMjI3MTQ3ODQ2NCcpOyAkcHJpbmNpcGFsTmFtZSA9ICRwcmluY2lwYWxTaWQuVHJhbnNsYXRlKFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLk5UQWNjb3VudF0pOyAkc3RyZWFtRmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyAkc2NyaXB0RmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyB0cnkgeyAkc2NyaXB0RmlsZSA9IFJlbmFtZS1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0RmlsZSAtTmV3TmFtZSAoJHNjcmlwdEZpbGUuQmFzZU5hbWUgKyAnLnBzMScpIC1Gb3JjZSAtUGFzc1RocnU7ICRTY3JpcHQgfCBPdXQtRmlsZSAkc2NyaXB0RmlsZSAtRW5jb2RpbmcgVVRGODsgJHRhc2tOYW1lID0gXCJeXCJcInByaXZhY3kkKFtjaGFyXTB4MDAyRSlzZXh5IGludm9rZVwiXlwiXCI7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgMj4mMSB8IE91dC1OdWxsOyAkZXhlY3V0aW9uQ29tbWFuZCA9IFwiXlwiXCJwb3dlcnNoZWxsLmV4ZSAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtRmlsZSAnJHNjcmlwdEZpbGUnICo+JjEgfCBPdXQtRmlsZSAtRmlsZVBhdGggJyRzdHJlYW1GaWxlJyAtRW5jb2RpbmcgVVRGOFwiXlwiXCI7ICRhY3Rpb24gPSBOZXctU2NoZWR1bGVkVGFza0FjdGlvbiAtRXhlY3V0ZSAncG93ZXJzaGVsbC5leGUnIC1Bcmd1bWVudCBcIl5cIlwiLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUNvbW1hbmQgYFwiXlwiXCIkZXhlY3V0aW9uQ29tbWFuZGBcIl5cIlwiXCJeXCJcIjsgJHNldHRpbmdzID0gTmV3LVNjaGVkdWxlZFRhc2tTZXR0aW5nc1NldCAtQWxsb3dTdGFydElmT25CYXR0ZXJpZXMgLURvbnRTdG9wSWZHb2luZ09uQmF0dGVyaWVzOyBSZWdpc3Rlci1TY2hlZHVsZWRUYXNrIC1UYXNrTmFtZSAkdGFza05hbWUgLUFjdGlvbiAkYWN0aW9uIC1TZXR0aW5ncyAkc2V0dGluZ3MgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGw7IHRyeSB7ICgkc2NoZWR1bGVTZXJ2aWNlID0gTmV3LU9iamVjdCAtQ29tT2JqZWN0IFNjaGVkdWxlLlNlcnZpY2UpLkNvbm5lY3QoKTsgJHNjaGVkdWxlU2VydmljZS5HZXRGb2xkZXIoJ1xcJykuR2V0VGFzaygkdGFza05hbWUpLlJ1bkV4KCRudWxsLCAwLCAwLCAkcHJpbmNpcGFsTmFtZSkgfCBPdXQtTnVsbDsgJHRpbWVvdXQgPSAoR2V0LURhdGUpLkFkZE1pbnV0ZXMoNSk7IFdyaXRlLUhvc3QgXCJeXCJcIlJ1bm5pbmcgYXMgJHByaW5jaXBhbE5hbWVcIl5cIlwiOyB3aGlsZSAoKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0IC1lcSAyNjcwMDkpIHsgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAyMDA7IGlmICgoR2V0LURhdGUpIC1ndCAkdGltZW91dCkgeyBXcml0ZS1XYXJuaW5nICdTa2lwcGluZzogVGltZW91dCc7IGJyZWFrOyB9OyB9OyBpZiAoKCRyZXN1bHQgPSAoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQpIC1uZSAwKSB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQsIGR1ZSB0byBleGl0IGNvZGU6ICRyZXN1bHQuXCJeXCJcIjsgfSB9IGZpbmFsbHkgeyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIHwgT3V0LU51bGw7IH07IEdldC1Db250ZW50ICRzdHJlYW1GaWxlIH0gZmluYWxseSB7IFJlbW92ZS1JdGVtICRzdHJlYW1GaWxlLCAkc2NyaXB0RmlsZTsgfTsgfTsgJGNtZCA9ICdmdW5jdGlvbiBDb3B5LUFjbCgkU3JjLCAkRHN0KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc3JjS2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJHNyY0tleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkZHN0S2V5ID0gSm9pbi1QYXRoICREc3QgJGtleS5QU0NoaWxkTmFtZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJGtleS5QU1BhdGggLURzdCAkZHN0S2V5JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkYWNsID0gR2V0LUFjbCAtUGF0aCAkU3JjIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2VjdGlvbnMgPSBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6QWxsIC1iYW5kICgtYm5vdCBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6T3duZXIpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2RkbCA9ICRhY2wuR2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbC5TZXRTZWN1cml0eURlc2NyaXB0b3JTZGRsRm9ybSgkc2RkbCwgJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgU2V0LUFjbCAtUGF0aCAkRHN0IC1BY2xPYmplY3QgJGFjbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlbmFtZS1LZXlXaXRoQWNsKCRPbGQsICROZXcpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1EZXN0aW5hdGlvbiAkTmV3IC1SZWN1cnNlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdGhyb3cgXCJeXCJcIkZhaWxlZCB0byBjb3B5OiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1BY2wgLVNyYyAkT2xkIC1Ec3QgJE5ldycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkIHRvIGNvcHkgQUNMOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLUZvcmNlIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGwnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkTmV3IC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjbGVhbiB1cDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gcmVtb3ZlOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKyckcmF3UGF0aD0nJ0hLTE1cXFNvZnR3YXJlXFxDbGFzc2VzXFxBcHBJRFxce0E3OURCMzZELTYyMTgtNDhlNi05RUM5LURDQkE5QTM5QkYwRn0nJycrXCJeXCJcImByYG5cIl5cIlwiKyckc3VmZml4ID0nJy5PTEQnJycrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOmZhaWwgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyRnbG9iYWw6b2sgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIEdldC1SZWFsKCRzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB3aGlsZSAoJHMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkcyA9ICRzLlN1YnN0cmluZygwLCAkcy5MZW5ndGggLSAkc3VmZml4Lkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHJldHVybiAkcycrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtS2V5VHJlZSgkUGF0aCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGRlc3QgPSBHZXQtUmVhbCAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyYyA9ICRQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3Jpbmcga2V5OiAnJyRkZXN0JycgZnJvbSAnJyRzcmMnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90ICRzcmMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc3JjICs9ICRzdWZmaXgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc3JjKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGRhdGEuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZGVzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZyB0byBhdm9pZCBkYXRhIGxvc3MuIEtleSBhbHJlYWR5IGV4aXN0cy4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIk1hbnVhbCBpbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkIHRvIGZ1bGx5IHJlc3RvcmUgZnJvbSAnJyRzcmMnJy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1LZXlXaXRoQWNsIC1PbGQgJHNyYyAtTmV3ICRkZXN0IC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpvaysrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6ZmFpbCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtQ2hpbGRyZW4oJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZXMgaW4gJyckUGF0aCcnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJFBhdGgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBLZXkgZG9lcyBub3QgZXhpc3QuIE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICR2YWx1ZXMgPSAoIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFN0b3AgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBQcm9wZXJ0eSBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICApJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgkdmFsdWUgaW4gJHZhbHVlcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZSAnJyR2YWx1ZScnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmICgtTm90ICR2YWx1ZS5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHJlYWwgPSBHZXQtUmVhbCAkdmFsdWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZW5hbWluZyB0byAnJyRyZWFsJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1JdGVtUHJvcGVydHkgLUxpdGVyYWxQYXRoICRQYXRoIC1OYW1lICR2YWx1ZSAtTmV3TmFtZSAkcmVhbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRrZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJGtleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBSZXN0b3JlLUtleVRyZWUgJGtleS5QU1BhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgcmVnaXN0cnkga2V5ICcnJHJhd1BhdGgnJyByZWN1cnNpdmVseS5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyRoaXZlID0gJHJhd1BhdGguU3BsaXQoJydcXCcnKVswXScrXCJeXCJcImByYG5cIl5cIlwiKyckcGF0aCA9ICRoaXZlICsgJyc6JycgKyAkcmF3UGF0aC5TdWJzdHJpbmcoJGhpdmUuTGVuZ3RoKScrXCJeXCJcImByYG5cIl5cIlwiKydSZXN0b3JlLUtleVRyZWUgJHBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKCRnbG9iYWw6ZmFpbCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtRXJyb3IgJydGYWlsZWQgdG8gcmVzdG9yZScnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBFeGl0IDEnK1wiXlwiXCJgcmBuXCJeXCJcIisnfSc7IEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIgJGNtZFwiXG46OiBSZXN0b3JlIHJlZ2lzdHJ5IGtleTogSEtMTVxcU29mdHdhcmVcXENsYXNzZXNcXFR5cGVMaWJcXHs4QzM4OTc2NC1GMDM2LTQ4RjItOUFFMi04OEMyNjBEQ0Y0M0J9IGFzIFRydXN0ZWRJbnN0YWxsZXJcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCJmdW5jdGlvbiBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyKCRTY3JpcHQpIHsgJHByaW5jaXBhbFNpZCA9IFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLlNlY3VyaXR5SWRlbnRpZmllcl06Om5ldygnUy0xLTUtODAtOTU2MDA4ODg1LTM0MTg1MjI2NDktMTgzMTAzODA0NC0xODUzMjkyNjMxLTIyNzE0Nzg0NjQnKTsgJHByaW5jaXBhbE5hbWUgPSAkcHJpbmNpcGFsU2lkLlRyYW5zbGF0ZShbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5OVEFjY291bnRdKTsgJHN0cmVhbUZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgJHNjcmlwdEZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgdHJ5IHsgJHNjcmlwdEZpbGUgPSBSZW5hbWUtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdEZpbGUgLU5ld05hbWUgKCRzY3JpcHRGaWxlLkJhc2VOYW1lICsgJy5wczEnKSAtRm9yY2UgLVBhc3NUaHJ1OyAkU2NyaXB0IHwgT3V0LUZpbGUgJHNjcmlwdEZpbGUgLUVuY29kaW5nIFVURjg7ICR0YXNrTmFtZSA9IFwiXlwiXCJwcml2YWN5JChbY2hhcl0weDAwMkUpc2V4eSBpbnZva2VcIl5cIlwiOyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIDI+JjEgfCBPdXQtTnVsbDsgJGV4ZWN1dGlvbkNvbW1hbmQgPSBcIl5cIlwicG93ZXJzaGVsbC5leGUgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUZpbGUgJyRzY3JpcHRGaWxlJyAqPiYxIHwgT3V0LUZpbGUgLUZpbGVQYXRoICckc3RyZWFtRmlsZScgLUVuY29kaW5nIFVURjhcIl5cIlwiOyAkYWN0aW9uID0gTmV3LVNjaGVkdWxlZFRhc2tBY3Rpb24gLUV4ZWN1dGUgJ3Bvd2Vyc2hlbGwuZXhlJyAtQXJndW1lbnQgXCJeXCJcIi1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1Db21tYW5kIGBcIl5cIlwiJGV4ZWN1dGlvbkNvbW1hbmRgXCJeXCJcIlwiXlwiXCI7ICRzZXR0aW5ncyA9IE5ldy1TY2hlZHVsZWRUYXNrU2V0dGluZ3NTZXQgLUFsbG93U3RhcnRJZk9uQmF0dGVyaWVzIC1Eb250U3RvcElmR29pbmdPbkJhdHRlcmllczsgUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtVGFza05hbWUgJHRhc2tOYW1lIC1BY3Rpb24gJGFjdGlvbiAtU2V0dGluZ3MgJHNldHRpbmdzIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsOyB0cnkgeyAoJHNjaGVkdWxlU2VydmljZSA9IE5ldy1PYmplY3QgLUNvbU9iamVjdCBTY2hlZHVsZS5TZXJ2aWNlKS5Db25uZWN0KCk7ICRzY2hlZHVsZVNlcnZpY2UuR2V0Rm9sZGVyKCdcXCcpLkdldFRhc2soJHRhc2tOYW1lKS5SdW5FeCgkbnVsbCwgMCwgMCwgJHByaW5jaXBhbE5hbWUpIHwgT3V0LU51bGw7ICR0aW1lb3V0ID0gKEdldC1EYXRlKS5BZGRNaW51dGVzKDUpOyBXcml0ZS1Ib3N0IFwiXlwiXCJSdW5uaW5nIGFzICRwcmluY2lwYWxOYW1lXCJeXCJcIjsgd2hpbGUgKChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCAtZXEgMjY3MDA5KSB7IFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjAwOyBpZiAoKEdldC1EYXRlKSAtZ3QgJHRpbWVvdXQpIHsgV3JpdGUtV2FybmluZyAnU2tpcHBpbmc6IFRpbWVvdXQnOyBicmVhazsgfTsgfTsgaWYgKCgkcmVzdWx0ID0gKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0KSAtbmUgMCkgeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkLCBkdWUgdG8gZXhpdCBjb2RlOiAkcmVzdWx0LlwiXlwiXCI7IH0gfSBmaW5hbGx5IHsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiB8IE91dC1OdWxsOyB9OyBHZXQtQ29udGVudCAkc3RyZWFtRmlsZSB9IGZpbmFsbHkgeyBSZW1vdmUtSXRlbSAkc3RyZWFtRmlsZSwgJHNjcmlwdEZpbGU7IH07IH07ICRjbWQgPSAnZnVuY3Rpb24gQ29weS1BY2woJFNyYywgJERzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyY0tleXMgPSBAKEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRTcmMgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRzcmNLZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJGRzdEtleSA9IEpvaW4tUGF0aCAkRHN0ICRrZXkuUFNDaGlsZE5hbWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUFjbCAtU3JjICRrZXkuUFNQYXRoIC1Ec3QgJGRzdEtleScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbCA9IEdldC1BY2wgLVBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNlY3Rpb25zID0gW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106OkFsbCAtYmFuZCAoLWJub3QgW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106Ok93bmVyKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNkZGwgPSAkYWNsLkdldFNlY3VyaXR5RGVzY3JpcHRvclNkZGxGb3JtKCRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRhY2wuU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNkZGwsICRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFNldC1BY2wgLVBhdGggJERzdCAtQWNsT2JqZWN0ICRhY2wgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZW5hbWUtS2V5V2l0aEFjbCgkT2xkLCAkTmV3KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJE9sZCAtRGVzdGluYXRpb24gJE5ldyAtUmVjdXJzZSAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gY29weTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJE9sZCAtRHN0ICROZXcnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjb3B5IEFDTDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE5ldyAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY2xlYW4gdXA6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHJhd1BhdGg9JydIS0xNXFxTb2Z0d2FyZVxcQ2xhc3Nlc1xcVHlwZUxpYlxcezhDMzg5NzY0LUYwMzYtNDhGMi05QUUyLTg4QzI2MERDRjQzQn0nJycrXCJeXCJcImByYG5cIl5cIlwiKyckc3VmZml4ID0nJy5PTEQnJycrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOmZhaWwgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyRnbG9iYWw6b2sgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIEdldC1SZWFsKCRzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB3aGlsZSAoJHMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkcyA9ICRzLlN1YnN0cmluZygwLCAkcy5MZW5ndGggLSAkc3VmZml4Lkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHJldHVybiAkcycrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtS2V5VHJlZSgkUGF0aCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGRlc3QgPSBHZXQtUmVhbCAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyYyA9ICRQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3Jpbmcga2V5OiAnJyRkZXN0JycgZnJvbSAnJyRzcmMnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90ICRzcmMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc3JjICs9ICRzdWZmaXgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc3JjKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGRhdGEuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZGVzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZyB0byBhdm9pZCBkYXRhIGxvc3MuIEtleSBhbHJlYWR5IGV4aXN0cy4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIk1hbnVhbCBpbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkIHRvIGZ1bGx5IHJlc3RvcmUgZnJvbSAnJyRzcmMnJy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1LZXlXaXRoQWNsIC1PbGQgJHNyYyAtTmV3ICRkZXN0IC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpvaysrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6ZmFpbCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtQ2hpbGRyZW4oJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZXMgaW4gJyckUGF0aCcnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJFBhdGgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBLZXkgZG9lcyBub3QgZXhpc3QuIE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICR2YWx1ZXMgPSAoIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFN0b3AgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBQcm9wZXJ0eSBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICApJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgkdmFsdWUgaW4gJHZhbHVlcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZSAnJyR2YWx1ZScnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmICgtTm90ICR2YWx1ZS5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHJlYWwgPSBHZXQtUmVhbCAkdmFsdWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZW5hbWluZyB0byAnJyRyZWFsJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1JdGVtUHJvcGVydHkgLUxpdGVyYWxQYXRoICRQYXRoIC1OYW1lICR2YWx1ZSAtTmV3TmFtZSAkcmVhbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRrZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJGtleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBSZXN0b3JlLUtleVRyZWUgJGtleS5QU1BhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgcmVnaXN0cnkga2V5ICcnJHJhd1BhdGgnJyByZWN1cnNpdmVseS5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyRoaXZlID0gJHJhd1BhdGguU3BsaXQoJydcXCcnKVswXScrXCJeXCJcImByYG5cIl5cIlwiKyckcGF0aCA9ICRoaXZlICsgJyc6JycgKyAkcmF3UGF0aC5TdWJzdHJpbmcoJGhpdmUuTGVuZ3RoKScrXCJeXCJcImByYG5cIl5cIlwiKydSZXN0b3JlLUtleVRyZWUgJHBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKCRnbG9iYWw6ZmFpbCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtRXJyb3IgJydGYWlsZWQgdG8gcmVzdG9yZScnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBFeGl0IDEnK1wiXlwiXCJgcmBuXCJeXCJcIisnfSc7IEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIgJGNtZFwiXG46OiBSZXN0b3JlIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm46IFwiJVBST0dSQU1GSUxFUyVcXFdpbmRvd3MgRGVmZW5kZXJcXE1zTXBDb20uZGxsXCIgIGFzIFRydXN0ZWRJbnN0YWxsZXJcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCJmdW5jdGlvbiBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyKCRTY3JpcHQpIHsgJHByaW5jaXBhbFNpZCA9IFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLlNlY3VyaXR5SWRlbnRpZmllcl06Om5ldygnUy0xLTUtODAtOTU2MDA4ODg1LTM0MTg1MjI2NDktMTgzMTAzODA0NC0xODUzMjkyNjMxLTIyNzE0Nzg0NjQnKTsgJHByaW5jaXBhbE5hbWUgPSAkcHJpbmNpcGFsU2lkLlRyYW5zbGF0ZShbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5OVEFjY291bnRdKTsgJHN0cmVhbUZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgJHNjcmlwdEZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgdHJ5IHsgJHNjcmlwdEZpbGUgPSBSZW5hbWUtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdEZpbGUgLU5ld05hbWUgKCRzY3JpcHRGaWxlLkJhc2VOYW1lICsgJy5wczEnKSAtRm9yY2UgLVBhc3NUaHJ1OyAkU2NyaXB0IHwgT3V0LUZpbGUgJHNjcmlwdEZpbGUgLUVuY29kaW5nIFVURjg7ICR0YXNrTmFtZSA9IFwiXlwiXCJwcml2YWN5JChbY2hhcl0weDAwMkUpc2V4eSBpbnZva2VcIl5cIlwiOyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIDI+JjEgfCBPdXQtTnVsbDsgJGV4ZWN1dGlvbkNvbW1hbmQgPSBcIl5cIlwicG93ZXJzaGVsbC5leGUgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUZpbGUgJyRzY3JpcHRGaWxlJyAqPiYxIHwgT3V0LUZpbGUgLUZpbGVQYXRoICckc3RyZWFtRmlsZScgLUVuY29kaW5nIFVURjhcIl5cIlwiOyAkYWN0aW9uID0gTmV3LVNjaGVkdWxlZFRhc2tBY3Rpb24gLUV4ZWN1dGUgJ3Bvd2Vyc2hlbGwuZXhlJyAtQXJndW1lbnQgXCJeXCJcIi1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1Db21tYW5kIGBcIl5cIlwiJGV4ZWN1dGlvbkNvbW1hbmRgXCJeXCJcIlwiXlwiXCI7ICRzZXR0aW5ncyA9IE5ldy1TY2hlZHVsZWRUYXNrU2V0dGluZ3NTZXQgLUFsbG93U3RhcnRJZk9uQmF0dGVyaWVzIC1Eb250U3RvcElmR29pbmdPbkJhdHRlcmllczsgUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtVGFza05hbWUgJHRhc2tOYW1lIC1BY3Rpb24gJGFjdGlvbiAtU2V0dGluZ3MgJHNldHRpbmdzIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsOyB0cnkgeyAoJHNjaGVkdWxlU2VydmljZSA9IE5ldy1PYmplY3QgLUNvbU9iamVjdCBTY2hlZHVsZS5TZXJ2aWNlKS5Db25uZWN0KCk7ICRzY2hlZHVsZVNlcnZpY2UuR2V0Rm9sZGVyKCdcXCcpLkdldFRhc2soJHRhc2tOYW1lKS5SdW5FeCgkbnVsbCwgMCwgMCwgJHByaW5jaXBhbE5hbWUpIHwgT3V0LU51bGw7ICR0aW1lb3V0ID0gKEdldC1EYXRlKS5BZGRNaW51dGVzKDUpOyBXcml0ZS1Ib3N0IFwiXlwiXCJSdW5uaW5nIGFzICRwcmluY2lwYWxOYW1lXCJeXCJcIjsgd2hpbGUgKChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCAtZXEgMjY3MDA5KSB7IFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjAwOyBpZiAoKEdldC1EYXRlKSAtZ3QgJHRpbWVvdXQpIHsgV3JpdGUtV2FybmluZyAnU2tpcHBpbmc6IFRpbWVvdXQnOyBicmVhazsgfTsgfTsgaWYgKCgkcmVzdWx0ID0gKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0KSAtbmUgMCkgeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkLCBkdWUgdG8gZXhpdCBjb2RlOiAkcmVzdWx0LlwiXlwiXCI7IH0gfSBmaW5hbGx5IHsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiB8IE91dC1OdWxsOyB9OyBHZXQtQ29udGVudCAkc3RyZWFtRmlsZSB9IGZpbmFsbHkgeyBSZW1vdmUtSXRlbSAkc3RyZWFtRmlsZSwgJHNjcmlwdEZpbGU7IH07IH07ICRjbWQgPSAnJHJldmVydCA9ICR0cnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkcGF0aEdsb2JQYXR0ZXJuID0gXCJeXCJcIiVQUk9HUkFNRklMRVMlXFxXaW5kb3dzIERlZmVuZGVyXFxNc01wQ29tLmRsbC5PTERcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkZXhwYW5kZWRQYXRoID0gW1N5c3RlbS5FbnZpcm9ubWVudF06OkV4cGFuZEVudmlyb25tZW50VmFyaWFibGVzKCRwYXRoR2xvYlBhdHRlcm4pJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJTZWFyY2hpbmcgZm9yIGl0ZW1zIG1hdGNoaW5nIHBhdHRlcm46IGBcIl5cIlwiJCgkZXhwYW5kZWRQYXRoKWBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICcrXCJeXCJcImByYG5cIl5cIlwiKyckcmVuYW1lZENvdW50ICAgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyRza2lwcGVkQ291bnQgICA9IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnJGZhaWxlZENvdW50ICAgID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRmb3VuZEFic29sdXRlUGF0aHMgPSBAKCknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkZm91bmRBYnNvbHV0ZVBhdGhzICs9IEAoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIEdldC1JdGVtIC1QYXRoICRleHBhbmRlZFBhdGggLUVycm9yQWN0aW9uIFN0b3AgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBGdWxsTmFtZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggW1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uSXRlbU5vdEZvdW5kRXhjZXB0aW9uXSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgPCMgU3dhbGxvdywgZG8gbm90IHJ1biBgVGVzdC1QYXRoYCBiZWZvcmUsIGl0JydzIHVucmVsaWFibGUgZm9yIGdsb2JzIHJlcXVpcmluZyBleHRyYSBwZXJtaXNzaW9ucyAjPicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGZvdW5kQWJzb2x1dGVQYXRocyA9ICRmb3VuZEFic29sdXRlUGF0aHMgICBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfCBTZWxlY3QtT2JqZWN0IC1VbmlxdWUgICAgICAgICAgICAgICAgIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSB7ICRfLkxlbmd0aCB9IC1EZXNjZW5kaW5nJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoISRmb3VuZEFic29sdXRlUGF0aHMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmcsIG5vIGl0ZW1zIGF2YWlsYWJsZS4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGV4aXQgMCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiSW5pdGlhdGluZyBwcm9jZXNzaW5nIG9mICQoJGZvdW5kQWJzb2x1dGVQYXRocy5Db3VudCkgaXRlbXMgZnJvbSBgXCJeXCJcIiRleHBhbmRlZFBhdGhgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgkcGF0aCBpbiAkZm91bmRBYnNvbHV0ZVBhdGhzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgaWYgKFRlc3QtUGF0aCAtUGF0aCAkcGF0aCAtUGF0aFR5cGUgQ29udGFpbmVyKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJTa2lwcGluZyBmb2xkZXIgKG5vdCBpdHMgY29udGVudHMpOiBgXCJeXCJcIiRwYXRoYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNraXBwZWRDb3VudCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBjb250aW51ZScrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmKCRyZXZlcnQgLWVxICR0cnVlKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoLW5vdCAkcGF0aC5FbmRzV2l0aCgnJy5PTEQnJykpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJTa2lwcGluZyBub24tYmFja3VwIGZpbGU6IGBcIl5cIlwiJHBhdGhgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHNraXBwZWRDb3VudCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfSBlbHNlIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgkcGF0aC5FbmRzV2l0aCgnJy5PTEQnJykpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJTa2lwcGluZyBiYWNrdXAgZmlsZTogYFwiXlwiXCIkcGF0aGBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc2tpcHBlZENvdW50KysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBjb250aW51ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJyRvcmlnaW5hbEZpbGVQYXRoID0gJHBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnV3JpdGUtSG9zdCBcIl5cIlwiUHJvY2Vzc2luZyBmaWxlOiBgXCJeXCJcIiRvcmlnaW5hbEZpbGVQYXRoYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKydpZiAoLU5vdCAoVGVzdC1QYXRoICRvcmlnaW5hbEZpbGVQYXRoKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiU2tpcHBpbmcsIGZpbGUgYFwiXlwiXCIkb3JpZ2luYWxGaWxlUGF0aGBcIl5cIlwiIG5vdCBmb3VuZC5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2tpcHBlZENvdW50KysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGV4aXQgMCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJycrXCJeXCJcImByYG5cIl5cIlwiKydpZiAoJHJldmVydCAtZXEgJHRydWUpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRuZXdGaWxlUGF0aCA9ICRvcmlnaW5hbEZpbGVQYXRoLlN1YnN0cmluZygwLCAkb3JpZ2luYWxGaWxlUGF0aC5MZW5ndGggLSA0KScrXCJeXCJcImByYG5cIl5cIlwiKyd9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJG5ld0ZpbGVQYXRoID0gXCJeXCJcIiQoJG9yaWdpbmFsRmlsZVBhdGgpLk9MRFwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKyd0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgTW92ZS1JdGVtIC1MaXRlcmFsUGF0aCBcIl5cIlwiJCgkb3JpZ2luYWxGaWxlUGF0aClcIl5cIlwiIC1EZXN0aW5hdGlvbiBcIl5cIlwiJG5ld0ZpbGVQYXRoXCJeXCJcIiAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYFwiXlwiXCIkb3JpZ2luYWxGaWxlUGF0aGBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRyZW5hbWVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJytcIl5cIlwiYHJgblwiXlwiXCIrJ30gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZW5hbWUgYFwiXlwiXCIkb3JpZ2luYWxGaWxlUGF0aGBcIl5cIlwiIHRvIGBcIl5cIlwiJG5ld0ZpbGVQYXRoYFwiXlwiXCI6ICQoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGZhaWxlZENvdW50KysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoKCRyZW5hbWVkQ291bnQgLWd0IDApIC1vciAoJHNraXBwZWRDb3VudCAtZ3QgMCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgJHJlbmFtZWRDb3VudCBpdGVtcyBhbmQgc2tpcHBlZCAkc2tpcHBlZENvdW50IGl0ZW1zLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydpZiAoJGZhaWxlZENvdW50IC1ndCAwKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gcHJvY2VzcyAkKCRmYWlsZWRDb3VudCkgaXRlbXMuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJyc7IEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIgJGNtZFwiXG46OiBSZXN0b3JlIHJlZ2lzdHJ5IGtleTogSEtMTVxcU09GVFdBUkVcXENsYXNzZXNcXEludGVyZmFjZVxce0FDMzBDMkJBLTAxMDktNDAzRC05RDhFLTE0MEJCNDcwMzc5Q30gYXMgVHJ1c3RlZEluc3RhbGxlclxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcImZ1bmN0aW9uIEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIoJFNjcmlwdCkgeyAkcHJpbmNpcGFsU2lkID0gW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuU2VjdXJpdHlJZGVudGlmaWVyXTo6bmV3KCdTLTEtNS04MC05NTYwMDg4ODUtMzQxODUyMjY0OS0xODMxMDM4MDQ0LTE4NTMyOTI2MzEtMjI3MTQ3ODQ2NCcpOyAkcHJpbmNpcGFsTmFtZSA9ICRwcmluY2lwYWxTaWQuVHJhbnNsYXRlKFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLk5UQWNjb3VudF0pOyAkc3RyZWFtRmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyAkc2NyaXB0RmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyB0cnkgeyAkc2NyaXB0RmlsZSA9IFJlbmFtZS1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0RmlsZSAtTmV3TmFtZSAoJHNjcmlwdEZpbGUuQmFzZU5hbWUgKyAnLnBzMScpIC1Gb3JjZSAtUGFzc1RocnU7ICRTY3JpcHQgfCBPdXQtRmlsZSAkc2NyaXB0RmlsZSAtRW5jb2RpbmcgVVRGODsgJHRhc2tOYW1lID0gXCJeXCJcInByaXZhY3kkKFtjaGFyXTB4MDAyRSlzZXh5IGludm9rZVwiXlwiXCI7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgMj4mMSB8IE91dC1OdWxsOyAkZXhlY3V0aW9uQ29tbWFuZCA9IFwiXlwiXCJwb3dlcnNoZWxsLmV4ZSAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtRmlsZSAnJHNjcmlwdEZpbGUnICo+JjEgfCBPdXQtRmlsZSAtRmlsZVBhdGggJyRzdHJlYW1GaWxlJyAtRW5jb2RpbmcgVVRGOFwiXlwiXCI7ICRhY3Rpb24gPSBOZXctU2NoZWR1bGVkVGFza0FjdGlvbiAtRXhlY3V0ZSAncG93ZXJzaGVsbC5leGUnIC1Bcmd1bWVudCBcIl5cIlwiLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUNvbW1hbmQgYFwiXlwiXCIkZXhlY3V0aW9uQ29tbWFuZGBcIl5cIlwiXCJeXCJcIjsgJHNldHRpbmdzID0gTmV3LVNjaGVkdWxlZFRhc2tTZXR0aW5nc1NldCAtQWxsb3dTdGFydElmT25CYXR0ZXJpZXMgLURvbnRTdG9wSWZHb2luZ09uQmF0dGVyaWVzOyBSZWdpc3Rlci1TY2hlZHVsZWRUYXNrIC1UYXNrTmFtZSAkdGFza05hbWUgLUFjdGlvbiAkYWN0aW9uIC1TZXR0aW5ncyAkc2V0dGluZ3MgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGw7IHRyeSB7ICgkc2NoZWR1bGVTZXJ2aWNlID0gTmV3LU9iamVjdCAtQ29tT2JqZWN0IFNjaGVkdWxlLlNlcnZpY2UpLkNvbm5lY3QoKTsgJHNjaGVkdWxlU2VydmljZS5HZXRGb2xkZXIoJ1xcJykuR2V0VGFzaygkdGFza05hbWUpLlJ1bkV4KCRudWxsLCAwLCAwLCAkcHJpbmNpcGFsTmFtZSkgfCBPdXQtTnVsbDsgJHRpbWVvdXQgPSAoR2V0LURhdGUpLkFkZE1pbnV0ZXMoNSk7IFdyaXRlLUhvc3QgXCJeXCJcIlJ1bm5pbmcgYXMgJHByaW5jaXBhbE5hbWVcIl5cIlwiOyB3aGlsZSAoKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0IC1lcSAyNjcwMDkpIHsgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAyMDA7IGlmICgoR2V0LURhdGUpIC1ndCAkdGltZW91dCkgeyBXcml0ZS1XYXJuaW5nICdTa2lwcGluZzogVGltZW91dCc7IGJyZWFrOyB9OyB9OyBpZiAoKCRyZXN1bHQgPSAoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQpIC1uZSAwKSB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQsIGR1ZSB0byBleGl0IGNvZGU6ICRyZXN1bHQuXCJeXCJcIjsgfSB9IGZpbmFsbHkgeyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIHwgT3V0LU51bGw7IH07IEdldC1Db250ZW50ICRzdHJlYW1GaWxlIH0gZmluYWxseSB7IFJlbW92ZS1JdGVtICRzdHJlYW1GaWxlLCAkc2NyaXB0RmlsZTsgfTsgfTsgJGNtZCA9ICdmdW5jdGlvbiBDb3B5LUFjbCgkU3JjLCAkRHN0KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc3JjS2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJHNyY0tleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkZHN0S2V5ID0gSm9pbi1QYXRoICREc3QgJGtleS5QU0NoaWxkTmFtZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJGtleS5QU1BhdGggLURzdCAkZHN0S2V5JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkYWNsID0gR2V0LUFjbCAtUGF0aCAkU3JjIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2VjdGlvbnMgPSBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6QWxsIC1iYW5kICgtYm5vdCBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6T3duZXIpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2RkbCA9ICRhY2wuR2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbC5TZXRTZWN1cml0eURlc2NyaXB0b3JTZGRsRm9ybSgkc2RkbCwgJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgU2V0LUFjbCAtUGF0aCAkRHN0IC1BY2xPYmplY3QgJGFjbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlbmFtZS1LZXlXaXRoQWNsKCRPbGQsICROZXcpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1EZXN0aW5hdGlvbiAkTmV3IC1SZWN1cnNlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdGhyb3cgXCJeXCJcIkZhaWxlZCB0byBjb3B5OiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1BY2wgLVNyYyAkT2xkIC1Ec3QgJE5ldycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkIHRvIGNvcHkgQUNMOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLUZvcmNlIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGwnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkTmV3IC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjbGVhbiB1cDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gcmVtb3ZlOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKyckcmF3UGF0aD0nJ0hLTE1cXFNPRlRXQVJFXFxDbGFzc2VzXFxJbnRlcmZhY2VcXHtBQzMwQzJCQS0wMTA5LTQwM0QtOUQ4RS0xNDBCQjQ3MDM3OUN9JycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJHN1ZmZpeCA9JycuT0xEJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJGdsb2JhbDpmYWlsID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOm9rID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBHZXQtUmVhbCgkcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgd2hpbGUgKCRzLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHMgPSAkcy5TdWJzdHJpbmcoMCwgJHMuTGVuZ3RoIC0gJHN1ZmZpeC5MZW5ndGgpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICByZXR1cm4gJHMnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUtleVRyZWUoJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRkZXN0ID0gR2V0LVJlYWwgJFBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzcmMgPSAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIGtleTogJyckZGVzdCcnIGZyb20gJyckc3JjJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoLU5vdCAkc3JjLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHNyYyArPSAkc3VmZml4JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyYykpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBkYXRhLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGRlc3QpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmcgdG8gYXZvaWQgZGF0YSBsb3NzLiBLZXkgYWxyZWFkeSBleGlzdHMuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJNYW51YWwgaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZCB0byBmdWxseSByZXN0b3JlIGZyb20gJyckc3JjJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBlbHNlIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtS2V5V2l0aEFjbCAtT2xkICRzcmMgLU5ldyAkZGVzdCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUNoaWxkcmVuKCRQYXRoKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWVzIGluICcnJFBhdGgnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRQYXRoKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogS2V5IGRvZXMgbm90IGV4aXN0LiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkdmFsdWVzID0gKCBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRQYXRoIC1FcnJvckFjdGlvbiBTdG9wIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgUHJvcGVydHkgYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJHZhbHVlIGluICR2YWx1ZXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWUgJyckdmFsdWUnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAkdmFsdWUuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRyZWFsID0gR2V0LVJlYWwgJHZhbHVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVuYW1pbmcgdG8gJyckcmVhbCcnLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtSXRlbVByb3BlcnR5IC1MaXRlcmFsUGF0aCAkUGF0aCAtTmFtZSAkdmFsdWUgLU5ld05hbWUgJHJlYWwgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1N1Y2Nlc3NmdWxseSByZXN0b3JlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOm9rKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpmYWlsKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAka2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRrZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVzdG9yZS1LZXlUcmVlICRrZXkuUFNQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHJlZ2lzdHJ5IGtleSAnJyRyYXdQYXRoJycgcmVjdXJzaXZlbHkuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyckaGl2ZSA9ICRyYXdQYXRoLlNwbGl0KCcnXFwnJylbMF0nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHBhdGggPSAkaGl2ZSArICcnOicnICsgJHJhd1BhdGguU3Vic3RyaW5nKCRoaXZlLkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnUmVzdG9yZS1LZXlUcmVlICRwYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkZ2xvYmFsOmZhaWwpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUVycm9yICcnRmFpbGVkIHRvIHJlc3RvcmUnJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgRXhpdCAxJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nOyBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyICRjbWRcIlxuOjogUmVzdG9yZSByZWdpc3RyeSBrZXk6IEhLTE1cXFNPRlRXQVJFXFxDbGFzc2VzXFxJbnRlcmZhY2VcXHtFMkQ3NDU1MC04RTQxLTQ2MEUtQkI1MS01MkUxRjk1MjIxMzR9IGFzIFRydXN0ZWRJbnN0YWxsZXJcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCJmdW5jdGlvbiBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyKCRTY3JpcHQpIHsgJHByaW5jaXBhbFNpZCA9IFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLlNlY3VyaXR5SWRlbnRpZmllcl06Om5ldygnUy0xLTUtODAtOTU2MDA4ODg1LTM0MTg1MjI2NDktMTgzMTAzODA0NC0xODUzMjkyNjMxLTIyNzE0Nzg0NjQnKTsgJHByaW5jaXBhbE5hbWUgPSAkcHJpbmNpcGFsU2lkLlRyYW5zbGF0ZShbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5OVEFjY291bnRdKTsgJHN0cmVhbUZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgJHNjcmlwdEZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgdHJ5IHsgJHNjcmlwdEZpbGUgPSBSZW5hbWUtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdEZpbGUgLU5ld05hbWUgKCRzY3JpcHRGaWxlLkJhc2VOYW1lICsgJy5wczEnKSAtRm9yY2UgLVBhc3NUaHJ1OyAkU2NyaXB0IHwgT3V0LUZpbGUgJHNjcmlwdEZpbGUgLUVuY29kaW5nIFVURjg7ICR0YXNrTmFtZSA9IFwiXlwiXCJwcml2YWN5JChbY2hhcl0weDAwMkUpc2V4eSBpbnZva2VcIl5cIlwiOyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIDI+JjEgfCBPdXQtTnVsbDsgJGV4ZWN1dGlvbkNvbW1hbmQgPSBcIl5cIlwicG93ZXJzaGVsbC5leGUgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUZpbGUgJyRzY3JpcHRGaWxlJyAqPiYxIHwgT3V0LUZpbGUgLUZpbGVQYXRoICckc3RyZWFtRmlsZScgLUVuY29kaW5nIFVURjhcIl5cIlwiOyAkYWN0aW9uID0gTmV3LVNjaGVkdWxlZFRhc2tBY3Rpb24gLUV4ZWN1dGUgJ3Bvd2Vyc2hlbGwuZXhlJyAtQXJndW1lbnQgXCJeXCJcIi1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1Db21tYW5kIGBcIl5cIlwiJGV4ZWN1dGlvbkNvbW1hbmRgXCJeXCJcIlwiXlwiXCI7ICRzZXR0aW5ncyA9IE5ldy1TY2hlZHVsZWRUYXNrU2V0dGluZ3NTZXQgLUFsbG93U3RhcnRJZk9uQmF0dGVyaWVzIC1Eb250U3RvcElmR29pbmdPbkJhdHRlcmllczsgUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtVGFza05hbWUgJHRhc2tOYW1lIC1BY3Rpb24gJGFjdGlvbiAtU2V0dGluZ3MgJHNldHRpbmdzIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsOyB0cnkgeyAoJHNjaGVkdWxlU2VydmljZSA9IE5ldy1PYmplY3QgLUNvbU9iamVjdCBTY2hlZHVsZS5TZXJ2aWNlKS5Db25uZWN0KCk7ICRzY2hlZHVsZVNlcnZpY2UuR2V0Rm9sZGVyKCdcXCcpLkdldFRhc2soJHRhc2tOYW1lKS5SdW5FeCgkbnVsbCwgMCwgMCwgJHByaW5jaXBhbE5hbWUpIHwgT3V0LU51bGw7ICR0aW1lb3V0ID0gKEdldC1EYXRlKS5BZGRNaW51dGVzKDUpOyBXcml0ZS1Ib3N0IFwiXlwiXCJSdW5uaW5nIGFzICRwcmluY2lwYWxOYW1lXCJeXCJcIjsgd2hpbGUgKChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCAtZXEgMjY3MDA5KSB7IFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjAwOyBpZiAoKEdldC1EYXRlKSAtZ3QgJHRpbWVvdXQpIHsgV3JpdGUtV2FybmluZyAnU2tpcHBpbmc6IFRpbWVvdXQnOyBicmVhazsgfTsgfTsgaWYgKCgkcmVzdWx0ID0gKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0KSAtbmUgMCkgeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkLCBkdWUgdG8gZXhpdCBjb2RlOiAkcmVzdWx0LlwiXlwiXCI7IH0gfSBmaW5hbGx5IHsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiB8IE91dC1OdWxsOyB9OyBHZXQtQ29udGVudCAkc3RyZWFtRmlsZSB9IGZpbmFsbHkgeyBSZW1vdmUtSXRlbSAkc3RyZWFtRmlsZSwgJHNjcmlwdEZpbGU7IH07IH07ICRjbWQgPSAnZnVuY3Rpb24gQ29weS1BY2woJFNyYywgJERzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyY0tleXMgPSBAKEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRTcmMgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRzcmNLZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJGRzdEtleSA9IEpvaW4tUGF0aCAkRHN0ICRrZXkuUFNDaGlsZE5hbWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUFjbCAtU3JjICRrZXkuUFNQYXRoIC1Ec3QgJGRzdEtleScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbCA9IEdldC1BY2wgLVBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNlY3Rpb25zID0gW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106OkFsbCAtYmFuZCAoLWJub3QgW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106Ok93bmVyKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNkZGwgPSAkYWNsLkdldFNlY3VyaXR5RGVzY3JpcHRvclNkZGxGb3JtKCRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRhY2wuU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNkZGwsICRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFNldC1BY2wgLVBhdGggJERzdCAtQWNsT2JqZWN0ICRhY2wgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZW5hbWUtS2V5V2l0aEFjbCgkT2xkLCAkTmV3KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJE9sZCAtRGVzdGluYXRpb24gJE5ldyAtUmVjdXJzZSAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gY29weTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJE9sZCAtRHN0ICROZXcnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjb3B5IEFDTDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE5ldyAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY2xlYW4gdXA6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHJhd1BhdGg9JydIS0xNXFxTT0ZUV0FSRVxcQ2xhc3Nlc1xcSW50ZXJmYWNlXFx7RTJENzQ1NTAtOEU0MS00NjBFLUJCNTEtNTJFMUY5NTIyMTM0fScnJytcIl5cIlwiYHJgblwiXlwiXCIrJyRzdWZmaXggPScnLk9MRCcnJytcIl5cIlwiYHJgblwiXlwiXCIrJyRnbG9iYWw6ZmFpbCA9IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnJGdsb2JhbDpvayA9IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnZnVuY3Rpb24gR2V0LVJlYWwoJHMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHdoaWxlICgkcy5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRzID0gJHMuU3Vic3RyaW5nKDAsICRzLkxlbmd0aCAtICRzdWZmaXguTGVuZ3RoKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgcmV0dXJuICRzJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnZnVuY3Rpb24gUmVzdG9yZS1LZXlUcmVlKCRQYXRoKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkZGVzdCA9IEdldC1SZWFsICRQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc3JjID0gJFBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyBrZXk6ICcnJGRlc3QnJyBmcm9tICcnJHNyYycnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1Ob3QgJHNyYy5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRzcmMgKz0gJHN1ZmZpeCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmICgtTm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRzcmMpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogTm8gZGF0YS4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZXN0b3JlLUNoaWxkcmVuICRkZXN0JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIHJldHVybicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRkZXN0KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nIHRvIGF2b2lkIGRhdGEgbG9zcy4gS2V5IGFscmVhZHkgZXhpc3RzLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiTWFudWFsIGludGVydmVudGlvbiBtYXkgYmUgcmVxdWlyZWQgdG8gZnVsbHkgcmVzdG9yZSBmcm9tICcnJHNyYycnLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gZWxzZSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVuYW1lLUtleVdpdGhBY2wgLU9sZCAkc3JjIC1OZXcgJGRlc3QgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1N1Y2Nlc3NmdWxseSByZXN0b3JlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOm9rKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpmYWlsKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBSZXN0b3JlLUNoaWxkcmVuICRkZXN0JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnZnVuY3Rpb24gUmVzdG9yZS1DaGlsZHJlbigkUGF0aCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHZhbHVlcyBpbiAnJyRQYXRoJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoLU5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkUGF0aCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IEtleSBkb2VzIG5vdCBleGlzdC4gTm8gYWN0aW9uIG5lZWRlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHJldHVybicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHZhbHVlcyA9ICggYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU3RvcCB8IFNlbGVjdC1PYmplY3QgLUV4cGFuZFByb3BlcnR5IFByb3BlcnR5IGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCR2YWx1ZSBpbiAkdmFsdWVzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHZhbHVlICcnJHZhbHVlJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgaWYgKC1Ob3QgJHZhbHVlLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogTm8gYWN0aW9uIG5lZWRlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBjb250aW51ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkcmVhbCA9IEdldC1SZWFsICR2YWx1ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlbmFtaW5nIHRvICcnJHJlYWwnJy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVuYW1lLUl0ZW1Qcm9wZXJ0eSAtTGl0ZXJhbFBhdGggJFBhdGggLU5hbWUgJHZhbHVlIC1OZXdOYW1lICRyZWFsIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpvaysrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6ZmFpbCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGtleXMgPSBAKEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRQYXRoIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJGtleSBpbiAka2V5cykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFJlc3RvcmUtS2V5VHJlZSAka2V5LlBTUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ1dyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyByZWdpc3RyeSBrZXkgJyckcmF3UGF0aCcnIHJlY3Vyc2l2ZWx5LlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnJGhpdmUgPSAkcmF3UGF0aC5TcGxpdCgnJ1xcJycpWzBdJytcIl5cIlwiYHJgblwiXlwiXCIrJyRwYXRoID0gJGhpdmUgKyAnJzonJyArICRyYXdQYXRoLlN1YnN0cmluZygkaGl2ZS5MZW5ndGgpJytcIl5cIlwiYHJgblwiXlwiXCIrJ1Jlc3RvcmUtS2V5VHJlZSAkcGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKydpZiAoJGdsb2JhbDpmYWlsKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1FcnJvciAnJ0ZhaWxlZCB0byByZXN0b3JlJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIEV4aXQgMScrXCJeXCJcImByYG5cIl5cIlwiKyd9JzsgSW52b2tlLUFzVHJ1c3RlZEluc3RhbGxlciAkY21kXCJcbjo6IFJlc3RvcmUgcmVnaXN0cnkga2V5OiBIS0xNXFxTT0ZUV0FSRVxcQ2xhc3Nlc1xcSW50ZXJmYWNlXFx7Q0RGRUQzOTktNzk5OS00MzA5LUIwNjQtMUVERTA0QkM1ODBEfSBhcyBUcnVzdGVkSW5zdGFsbGVyXG5Qb3dlclNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgVW5yZXN0cmljdGVkIC1Db21tYW5kIFwiZnVuY3Rpb24gSW52b2tlLUFzVHJ1c3RlZEluc3RhbGxlcigkU2NyaXB0KSB7ICRwcmluY2lwYWxTaWQgPSBbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5TZWN1cml0eUlkZW50aWZpZXJdOjpuZXcoJ1MtMS01LTgwLTk1NjAwODg4NS0zNDE4NTIyNjQ5LTE4MzEwMzgwNDQtMTg1MzI5MjYzMS0yMjcxNDc4NDY0Jyk7ICRwcmluY2lwYWxOYW1lID0gJHByaW5jaXBhbFNpZC5UcmFuc2xhdGUoW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuTlRBY2NvdW50XSk7ICRzdHJlYW1GaWxlID0gTmV3LVRlbXBvcmFyeUZpbGU7ICRzY3JpcHRGaWxlID0gTmV3LVRlbXBvcmFyeUZpbGU7IHRyeSB7ICRzY3JpcHRGaWxlID0gUmVuYW1lLUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JpcHRGaWxlIC1OZXdOYW1lICgkc2NyaXB0RmlsZS5CYXNlTmFtZSArICcucHMxJykgLUZvcmNlIC1QYXNzVGhydTsgJFNjcmlwdCB8IE91dC1GaWxlICRzY3JpcHRGaWxlIC1FbmNvZGluZyBVVEY4OyAkdGFza05hbWUgPSBcIl5cIlwicHJpdmFjeSQoW2NoYXJdMHgwMDJFKXNleHkgaW52b2tlXCJeXCJcIjsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiAyPiYxIHwgT3V0LU51bGw7ICRleGVjdXRpb25Db21tYW5kID0gXCJeXCJcInBvd2Vyc2hlbGwuZXhlIC1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1GaWxlICckc2NyaXB0RmlsZScgKj4mMSB8IE91dC1GaWxlIC1GaWxlUGF0aCAnJHN0cmVhbUZpbGUnIC1FbmNvZGluZyBVVEY4XCJeXCJcIjsgJGFjdGlvbiA9IE5ldy1TY2hlZHVsZWRUYXNrQWN0aW9uIC1FeGVjdXRlICdwb3dlcnNoZWxsLmV4ZScgLUFyZ3VtZW50IFwiXlwiXCItRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtQ29tbWFuZCBgXCJeXCJcIiRleGVjdXRpb25Db21tYW5kYFwiXlwiXCJcIl5cIlwiOyAkc2V0dGluZ3MgPSBOZXctU2NoZWR1bGVkVGFza1NldHRpbmdzU2V0IC1BbGxvd1N0YXJ0SWZPbkJhdHRlcmllcyAtRG9udFN0b3BJZkdvaW5nT25CYXR0ZXJpZXM7IFJlZ2lzdGVyLVNjaGVkdWxlZFRhc2sgLVRhc2tOYW1lICR0YXNrTmFtZSAtQWN0aW9uICRhY3Rpb24gLVNldHRpbmdzICRzZXR0aW5ncyAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbDsgdHJ5IHsgKCRzY2hlZHVsZVNlcnZpY2UgPSBOZXctT2JqZWN0IC1Db21PYmplY3QgU2NoZWR1bGUuU2VydmljZSkuQ29ubmVjdCgpOyAkc2NoZWR1bGVTZXJ2aWNlLkdldEZvbGRlcignXFwnKS5HZXRUYXNrKCR0YXNrTmFtZSkuUnVuRXgoJG51bGwsIDAsIDAsICRwcmluY2lwYWxOYW1lKSB8IE91dC1OdWxsOyAkdGltZW91dCA9IChHZXQtRGF0ZSkuQWRkTWludXRlcyg1KTsgV3JpdGUtSG9zdCBcIl5cIlwiUnVubmluZyBhcyAkcHJpbmNpcGFsTmFtZVwiXlwiXCI7IHdoaWxlICgoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQgLWVxIDI2NzAwOSkgeyBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDIwMDsgaWYgKChHZXQtRGF0ZSkgLWd0ICR0aW1lb3V0KSB7IFdyaXRlLVdhcm5pbmcgJ1NraXBwaW5nOiBUaW1lb3V0JzsgYnJlYWs7IH07IH07IGlmICgoJHJlc3VsdCA9IChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCkgLW5lIDApIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCwgZHVlIHRvIGV4aXQgY29kZTogJHJlc3VsdC5cIl5cIlwiOyB9IH0gZmluYWxseSB7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgfCBPdXQtTnVsbDsgfTsgR2V0LUNvbnRlbnQgJHN0cmVhbUZpbGUgfSBmaW5hbGx5IHsgUmVtb3ZlLUl0ZW0gJHN0cmVhbUZpbGUsICRzY3JpcHRGaWxlOyB9OyB9OyAkY21kID0gJ2Z1bmN0aW9uIENvcHktQWNsKCRTcmMsICREc3QpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzcmNLZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkU3JjIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJGtleSBpbiAkc3JjS2V5cykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRkc3RLZXkgPSBKb2luLVBhdGggJERzdCAka2V5LlBTQ2hpbGROYW1lJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1BY2wgLVNyYyAka2V5LlBTUGF0aCAtRHN0ICRkc3RLZXknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRhY2wgPSBHZXQtQWNsIC1QYXRoICRTcmMgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzZWN0aW9ucyA9IFtTeXN0ZW0uU2VjdXJpdHkuQWNjZXNzQ29udHJvbC5BY2Nlc3NDb250cm9sU2VjdGlvbnNdOjpBbGwgLWJhbmQgKC1ibm90IFtTeXN0ZW0uU2VjdXJpdHkuQWNjZXNzQ29udHJvbC5BY2Nlc3NDb250cm9sU2VjdGlvbnNdOjpPd25lciknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzZGRsID0gJGFjbC5HZXRTZWN1cml0eURlc2NyaXB0b3JTZGRsRm9ybSgkc2VjdGlvbnMpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkYWNsLlNldFNlY3VyaXR5RGVzY3JpcHRvclNkZGxGb3JtKCRzZGRsLCAkc2VjdGlvbnMpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBTZXQtQWNsIC1QYXRoICREc3QgLUFjbE9iamVjdCAkYWNsIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnZnVuY3Rpb24gUmVuYW1lLUtleVdpdGhBY2woJE9sZCwgJE5ldykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLURlc3RpbmF0aW9uICROZXcgLVJlY3Vyc2UgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIGNvcHk6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUFjbCAtU3JjICRPbGQgLURzdCAkTmV3JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY29weSBBQ0w6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE9sZCAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICROZXcgLUZvcmNlIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGwnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkIHRvIGNsZWFuIHVwOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdGhyb3cgXCJeXCJcIkZhaWxlZCB0byByZW1vdmU6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJyRyYXdQYXRoPScnSEtMTVxcU09GVFdBUkVcXENsYXNzZXNcXEludGVyZmFjZVxce0NERkVEMzk5LTc5OTktNDMwOS1CMDY0LTFFREUwNEJDNTgwRH0nJycrXCJeXCJcImByYG5cIl5cIlwiKyckc3VmZml4ID0nJy5PTEQnJycrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOmZhaWwgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyRnbG9iYWw6b2sgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIEdldC1SZWFsKCRzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB3aGlsZSAoJHMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkcyA9ICRzLlN1YnN0cmluZygwLCAkcy5MZW5ndGggLSAkc3VmZml4Lkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHJldHVybiAkcycrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtS2V5VHJlZSgkUGF0aCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGRlc3QgPSBHZXQtUmVhbCAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyYyA9ICRQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3Jpbmcga2V5OiAnJyRkZXN0JycgZnJvbSAnJyRzcmMnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90ICRzcmMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc3JjICs9ICRzdWZmaXgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc3JjKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGRhdGEuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZGVzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZyB0byBhdm9pZCBkYXRhIGxvc3MuIEtleSBhbHJlYWR5IGV4aXN0cy4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIk1hbnVhbCBpbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkIHRvIGZ1bGx5IHJlc3RvcmUgZnJvbSAnJyRzcmMnJy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1LZXlXaXRoQWNsIC1PbGQgJHNyYyAtTmV3ICRkZXN0IC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpvaysrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6ZmFpbCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtQ2hpbGRyZW4oJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZXMgaW4gJyckUGF0aCcnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJFBhdGgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBLZXkgZG9lcyBub3QgZXhpc3QuIE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICR2YWx1ZXMgPSAoIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFN0b3AgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBQcm9wZXJ0eSBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICApJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgkdmFsdWUgaW4gJHZhbHVlcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZSAnJyR2YWx1ZScnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmICgtTm90ICR2YWx1ZS5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHJlYWwgPSBHZXQtUmVhbCAkdmFsdWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZW5hbWluZyB0byAnJyRyZWFsJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1JdGVtUHJvcGVydHkgLUxpdGVyYWxQYXRoICRQYXRoIC1OYW1lICR2YWx1ZSAtTmV3TmFtZSAkcmVhbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRrZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJGtleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBSZXN0b3JlLUtleVRyZWUgJGtleS5QU1BhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgcmVnaXN0cnkga2V5ICcnJHJhd1BhdGgnJyByZWN1cnNpdmVseS5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyRoaXZlID0gJHJhd1BhdGguU3BsaXQoJydcXCcnKVswXScrXCJeXCJcImByYG5cIl5cIlwiKyckcGF0aCA9ICRoaXZlICsgJyc6JycgKyAkcmF3UGF0aC5TdWJzdHJpbmcoJGhpdmUuTGVuZ3RoKScrXCJeXCJcImByYG5cIl5cIlwiKydSZXN0b3JlLUtleVRyZWUgJHBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKCRnbG9iYWw6ZmFpbCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtRXJyb3IgJydGYWlsZWQgdG8gcmVzdG9yZScnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBFeGl0IDEnK1wiXlwiXCJgcmBuXCJeXCJcIisnfSc7IEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIgJGNtZFwiIg==
Help
How to apply or restore "Disable Defender Antivirus service communication with apps" using commands
- ≈ 2 min to complete
- Tools: Command Prompt
- Difficulty: Medium
- ≈ 3 instructions
- 1
Open Command Prompt
Open Command Prompt as Administrator. - 2
Copy code
Copy the code: - 3
Paste & run
Paste the commands into Command Prompt and press Enter to run.Some changes require a system restart to take effect
Similar Guides
Wider Goal
Guides below includes this guide to achieve a wider goal.See other more general settings that includes this one as one of its actions.These plans combine multiple privacy settings, including this one, for stronger protection.
- Disable Defender Antivirus service
- Disable Defender services and drivers
- Disable Defender Antivirus
- Disable Defender
- Privacy over security
This category disables the Defender Antivirus service and its related components. This service is also referred to as Microsoft Defender Antivirus Servic...
This category provides scripts to disable Defender Antivirus. Defender Antivirus, integrated into Windows, provides protection against viruses, ransomwar...
This category offers scripts to disable Windows security components related to Defender. Defender is also referred to as Microsoft Defender or Windows De...
Same Goal
Other guides in Disable Defender Antivirus service See settings that are in the same category as this guide.Using other actions in the same category may help you achieve your goal better.
See all 10 guides
About the Creators
These people have authored this documentation and written its scripts:
Reviewed By
This guide has undergone comprehensive auditing and peer review:Expert review by undergroundwires
- Verified technical accuracy and editorial standards
- Assessed system impact and user privacy risks
- Audited and verified using automated security tests
Public review by large community
- Privacy enthusiasts and professionals peer-reviewed
- Millions of end-users tested across different environments
- Audited and verified using third-party security software
History
We continually monitor our guides, their impact and other potential privacy options. We update our guides when new information becomes available. On every update, we publicly store who made the change, what has been changed, why the change was made and when the change was made.