Chocolatey - Manage Sources

Octopus.Script exported 2020-08-13 by pauby belongs to ‘Chocolatey’ category.

Allows managing Chocolatey Package sources.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

(Required) Source Name

ChocolateySourceName =

The name of the source to manage. Examples:

  • production-repo
  • my-smb-share

(Required) Source Action

ChocolateySourceAction = add

The action to perform on the source.

Note that you can use the ‘add’ action to change a source configuration. So you may not need to remove it and add it again.

(Required / Optional) Source Location

ChocolateySourceLocation =

This can be a folder / file share or an http / https location. If it is a URL, it will be a location you can go to in a browser and it returns OData with something that says ‘Packages’ in the browser, similar to what you see when you go to https://chocolatey.org/api/v2/.

Required with ‘add’ action. Optional with all other actions.

Examples:

(Optional) Source Priority

ChocolateySourcePriority =

The priority order of this source as compared to other sources, lower is better. Defaults to 0 (no priority).

All priorities above 0 will be evaluated first, then zero-based values will be evaluated in config file order.

Available in Chocolatey version 0.9.9.9 and later.

(Optional) Allow Self Service Source

ChocolateySourceAllowSelfService =

Should this source be allowed to be used with self-service? Defaults to false.

Available in Chocolatey For Business version 0.10.4 and later. Requires feature ‘useBackgroundServiceWithSelfServiceSourcesOnly’ to be enabled.

(Optional) Enable Admin Only Source

ChocolateySourceEnableAdminOnly =

Should this source be visible to non-administrators?

Requires Chocolatey For Business Extension version 1.12.2 or later and Chocolatey version 0.10.8 or later.

(Optional) Source Authentication Username

ChocolateySourceUsername =

Username to authenticate to the source with.

(Optional) Source Authentication Password

ChocolateySourcePassword =

Password to authenticate to the source with.

(Optional) Source Certificate Path

ChocolateySourceCertificatePath =

Path to the PFX client certificate used for an x509 authenticated source.

NOTE: The certificate path must exist and be local to the computer this step is running on. So you will need to add additional steps to ensure the certificate is available at the path.

Available in Chocolatey from version 0.9.10.

(Optional) Chocolatey Certificate Password

ChocolateySourceCertificatePassword =

The client certificate’s password to the source. Can only be used if a client certificate path has been provided.

Available in Chocolatey version 0.9.10 or later.

(Optional) Other Parameters

ChocolateySourceOtherParameters =

Add additional Chocolatey parameters here, separated by spaces, and they will be prefixed to the end of the Chocolatey command being executed.

Script body

Steps based on this template will execute the following PowerShell script.

[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
$chocolateyBin = [Environment]::GetEnvironmentVariable("ChocolateyInstall", "Machine") + "\bin"
if(-not (Test-Path $chocolateyBin)) {
    Write-Host "Environment variable 'ChocolateyInstall' was not found in the system variables. Attempting to find it in the user variables..."
    $chocolateyBin = [Environment]::GetEnvironmentVariable("ChocolateyInstall", "User") + "\bin"
}

$choco = "$chocolateyBin\choco.exe"

if (-not (Test-Path $choco)) {
    throw "Chocolatey was not found at $chocolateyBin."
}

# Report the actual version here
$chocoVersion = & $choco --version
Write-Host "Running Chocolatey version $chocoVersion"

# You cannot use [version] with SemVer 2 versions
# this allows pre-release versions to still work by stripping everything after the '-' as we could have
# 0.10.15-beta-20200101. We are only interested in the major.minor.build version
$chocoVersion = ($chocoVersion -split '-')[0].ToString()

# default args
$chocoArgs = @('source', $ChocolateySourceAction, '--yes')

# we need a source name
if ([string]::IsNullOrEmpty($ChocolateySourceName)) {
    throw "To manage a source you need to provide a source name."
}
else {
	$chocoArgs += "--name=""'$ChocolateySourceName'"""
}

# we are adding a source - check all of the parameters
if ($ChocolateySourceAction -eq 'add') {
	if ([string]::IsNullOrEmpty($ChocolateySourceLocation)) {
		throw 'To add a source you need to provide a source location.'
	}
    else {
    	$chocoArgs += "--source=""'$ChocolateySourceLocation'"""
    }

    # source priority
    if (-not [string]::IsNullOrEmpty($ChocolateySourcePriority)) {
    	if ([version]$chocoVersion -ge [version]'0.9.9.9') {
    		$chocoArgs += "--priority=""'$ChocolateySourcePriority'"""
        }
        else {
        	Write-Warning 'To use a source priority you must have Chocolatey version 0.9.9.9 or later. Ignoring source priority.'
        }
    }

    # allow self service
    if ($ChocolateySourceAllowSelfService) {
    	$edition = & $choco
    	if ($edition -like '*Business*' -and [version]$chocoVersion -ge [version]'0.10.4') {
        	$chocoArgs += '--allow-self-service'
        }
        else {
        	Write-Warning 'To allow self service on a source you must have Chocolatey For Business version 0.10.4 or later. Ignoring allowing self service.'
        }
    }

    # allow admin only
    if ($ChocolateySourceEnableAdminOnly) {
        # we are not going to check for the Business Edition but the chocolatey.extension version need to check we have the chocolatey.extension installed
        $licensedExtension = & $choco list chocolatey.extension --exact --limit-output --local-only | ConvertFrom-Csv -Delimiter '|' -Header 'Name', 'Version'

        # lets get the major.minor.build licensed extension version by stripping any pre-release
        $licensedExtensionVersion = ($licensedExtension.Version -split '-')[0].ToString()
        if ((-not [string]::IsNullOrEmpty($licensedExtensionVersion)) -and ([version]$chocoVersion -ge [version]'0.10.8' -and [version]$licensedExtensionVersion -ge [version]'1.12.2')) {
        	$chocoArgs += '--enable-admin-only'
        }
        else {
        	Write-Warning 'To enable admin only on a source you must have Chocolatey For Business Licensed Extension (chocolatey.extension package) version 1.12.2 or later and Chocolatey version 0.10.8 or later. Ignoring admin only enablement.'
        }
	}

    # we need both a username and a password - if one is used without the other then throw
    if (($ChocolateySourceUsername -and -not $ChocolateySourcePassword) -or ($ChocolateySourcePassword -and -not $ChocolateySourceUsername)) {
    	throw 'If you are using an authenticated source you must provide both a username AND a password.'
    }
    elseif ($ChocolateySourceUsername -and $ChocolateySourcePassword) {
		$chocoArgs += @("--user=""'$ChocolateySourceUsername'""", "--password=""'$ChocolateySourcePassword'""")
    }

    # check if we have a certificate path
    if (-not [string]::IsNullOrEmpty($ChocolateySourceCertificatePath)) {
    	if (-not (Test-Path -Path $ChocolateySourceCertificatePath)) {
        	throw "The certificate at '$ChocolateySourceCertificatePath' does not exist. Please make sure the certificate exists on the target at the provided path."
        }

        $chocoArgs += "--cert=""'$ChocolateySourceCertificatePath'"""

        # if we have a password it can only be used with a certificate path
        if (-not [string]::IsNullOrEmpty($ChocolateySourceCertificatePassword)) {
			$chocoArgs += "--certpassword=""'$ChocolateySourceCertificatePassword'"""
        }
    }
    elseif (-not [string]::IsNullOrEmpty($ChocolateySourceCertificatePassword)) {
    	Write-Warning 'You have provided a client certificate password but no client certificate path. Ignoring client certificate password.'
    }
}

# finally add any other parameters
if (-not [string]::IsNullOrEmpty($ChocolateySourceOtherParameters)) {
	$chocoArgs += $ChocolateySourceOtherParameters -split ' '
}

# execute the command line
Write-Host "Running the command: $choco $chocoArgs"
& $choco $chocoArgs

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "131ba9b0-c95e-464f-a2ff-aacedbcd29a1",
  "Name": "Chocolatey - Manage Sources",
  "Description": "Allows managing Chocolatey Package sources.",
  "Version": 1,
  "ExportedAt": "2020-08-13T13:35:57.400Z",
  "ActionType": "Octopus.Script",
  "Author": "pauby",
  "Packages": [],
  "Parameters": [
    {
      "Id": "86c495d0-0098-4af0-bf10-cde87bfbc348",
      "Name": "ChocolateySourceName",
      "Label": "(Required) Source Name",
      "HelpText": "The name of the source to manage. Examples: \n\n* _production-repo_\n* _my-smb-share_",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "f2b13125-1328-48b5-b341-3c5a78869a8c",
      "Name": "ChocolateySourceAction",
      "Label": "(Required) Source Action",
      "HelpText": "The action to perform on the source.\n\nNote that you can use the 'add' action to change a source configuration. So you may not need to remove it and add it again.",
      "DefaultValue": "add",
      "DisplaySettings": {
        "Octopus.ControlType": "Select",
        "Octopus.SelectOptions": "add|Add a source\nremove|Remove a source\nenable|Enable a source\ndisable|Disable a source"
      }
    },
    {
      "Id": "80507f89-d52e-43d7-b857-9697e9f837fa",
      "Name": "ChocolateySourceLocation",
      "Label": "(Required / Optional) Source Location",
      "HelpText": "This can be a folder / file share or an http / https location. If it is a URL, it will be a location you can go to in a browser and it returns OData with something that says 'Packages' in the browser, similar to what you see when you go to https://chocolatey.org/api/v2/.\n\n**Required with 'add' action. Optional with all other actions.**\n\nExamples:\n\n* _c:\\local-packages_\n* _\\\\\\\\my-server\\packages_\n* _https://internalserver.local/packages/_ (note the trailing slash)",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "7580abfd-89ae-4bc0-af86-cbe58b9d8074",
      "Name": "ChocolateySourcePriority",
      "Label": "(Optional) Source Priority",
      "HelpText": "The priority order of this source as compared to other sources, lower is better. Defaults to 0 (no priority). \n\nAll priorities above 0 will be evaluated first, then zero-based values will be evaluated in config file order.\n\n_Available in Chocolatey version 0.9.9.9 and later._",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "8517408c-5812-448b-986a-7fabc970039f",
      "Name": "ChocolateySourceAllowSelfService",
      "Label": "(Optional) Allow Self Service Source",
      "HelpText": "Should this source be allowed to be used with self-service? Defaults to false. \n\n_Available in Chocolatey For Business version 0.10.4 and later. Requires feature 'useBackgroundServiceWithSelfServiceSourcesOnly' to be enabled._",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "6e12a4e6-eae4-4ce9-b759-76f4a9b4b0c5",
      "Name": "ChocolateySourceEnableAdminOnly",
      "Label": "(Optional) Enable Admin Only Source",
      "HelpText": "Should this source be visible to non-administrators?\n\n_Requires Chocolatey For Business Extension version 1.12.2 or later and Chocolatey version 0.10.8 or later._",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "b3e074ba-ba3a-43dc-8e23-7e92647cb246",
      "Name": "ChocolateySourceUsername",
      "Label": "(Optional) Source Authentication Username",
      "HelpText": "Username to authenticate to the source with.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "3af96a08-19ba-43a3-893d-6afe929eba0a",
      "Name": "ChocolateySourcePassword",
      "Label": "(Optional) Source Authentication Password",
      "HelpText": "Password to authenticate to the source with.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Id": "53457094-5867-4bde-95c0-7f7100e7b561",
      "Name": "ChocolateySourceCertificatePath",
      "Label": "(Optional) Source Certificate Path",
      "HelpText": "Path to the PFX client certificate used for an x509 authenticated source.\n\n_NOTE: The certificate path must exist and be local to the computer this step is running on. So you will need to add additional steps to ensure the certificate is available at the path._\n\n_Available in Chocolatey from version 0.9.10._",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "8e431f4f-8c24-4aa0-b7ba-2045d4efab3a",
      "Name": "ChocolateySourceCertificatePassword",
      "Label": "(Optional) Chocolatey Certificate Password",
      "HelpText": "The client certificate's password to the source. Can only be used if a client certificate path has been provided.\n\n_Available in Chocolatey version 0.9.10 or later._",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Id": "67ab1c30-a3e6-4ca8-a3a1-802702e34019",
      "Name": "ChocolateySourceOtherParameters",
      "Label": "(Optional) Other Parameters",
      "HelpText": "Add additional Chocolatey parameters here, separated by spaces, and they will be prefixed to the end of the Chocolatey command being executed. ",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptBody": "[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12\n$chocolateyBin = [Environment]::GetEnvironmentVariable(\"ChocolateyInstall\", \"Machine\") + \"\\bin\"\nif(-not (Test-Path $chocolateyBin)) {\n    Write-Host \"Environment variable 'ChocolateyInstall' was not found in the system variables. Attempting to find it in the user variables...\"\n    $chocolateyBin = [Environment]::GetEnvironmentVariable(\"ChocolateyInstall\", \"User\") + \"\\bin\"\n}\n\n$choco = \"$chocolateyBin\\choco.exe\"\n\nif (-not (Test-Path $choco)) {\n    throw \"Chocolatey was not found at $chocolateyBin.\"\n}\n\n# Report the actual version here\n$chocoVersion = & $choco --version\nWrite-Host \"Running Chocolatey version $chocoVersion\"\n\n# You cannot use [version] with SemVer 2 versions\n# this allows pre-release versions to still work by stripping everything after the '-' as we could have\n# 0.10.15-beta-20200101. We are only interested in the major.minor.build version\n$chocoVersion = ($chocoVersion -split '-')[0].ToString()\n\n# default args\n$chocoArgs = @('source', $ChocolateySourceAction, '--yes')\n\n# we need a source name\nif ([string]::IsNullOrEmpty($ChocolateySourceName)) {\n    throw \"To manage a source you need to provide a source name.\"\n}\nelse {\n\t$chocoArgs += \"--name=\"\"'$ChocolateySourceName'\"\"\"\n}\n\n# we are adding a source - check all of the parameters\nif ($ChocolateySourceAction -eq 'add') {\n\tif ([string]::IsNullOrEmpty($ChocolateySourceLocation)) {\n\t\tthrow 'To add a source you need to provide a source location.'\n\t}\n    else {\n    \t$chocoArgs += \"--source=\"\"'$ChocolateySourceLocation'\"\"\"\n    }\n\n    # source priority\n    if (-not [string]::IsNullOrEmpty($ChocolateySourcePriority)) {\n    \tif ([version]$chocoVersion -ge [version]'0.9.9.9') {\n    \t\t$chocoArgs += \"--priority=\"\"'$ChocolateySourcePriority'\"\"\"\n        }\n        else {\n        \tWrite-Warning 'To use a source priority you must have Chocolatey version 0.9.9.9 or later. Ignoring source priority.'\n        }\n    }\n\n    # allow self service\n    if ($ChocolateySourceAllowSelfService) {\n    \t$edition = & $choco\n    \tif ($edition -like '*Business*' -and [version]$chocoVersion -ge [version]'0.10.4') {\n        \t$chocoArgs += '--allow-self-service'\n        }\n        else {\n        \tWrite-Warning 'To allow self service on a source you must have Chocolatey For Business version 0.10.4 or later. Ignoring allowing self service.'\n        }\n    }\n\n    # allow admin only\n    if ($ChocolateySourceEnableAdminOnly) {\n        # we are not going to check for the Business Edition but the chocolatey.extension version need to check we have the chocolatey.extension installed\n        $licensedExtension = & $choco list chocolatey.extension --exact --limit-output --local-only | ConvertFrom-Csv -Delimiter '|' -Header 'Name', 'Version'\n\n        # lets get the major.minor.build licensed extension version by stripping any pre-release\n        $licensedExtensionVersion = ($licensedExtension.Version -split '-')[0].ToString()\n        if ((-not [string]::IsNullOrEmpty($licensedExtensionVersion)) -and ([version]$chocoVersion -ge [version]'0.10.8' -and [version]$licensedExtensionVersion -ge [version]'1.12.2')) {\n        \t$chocoArgs += '--enable-admin-only'\n        }\n        else {\n        \tWrite-Warning 'To enable admin only on a source you must have Chocolatey For Business Licensed Extension (chocolatey.extension package) version 1.12.2 or later and Chocolatey version 0.10.8 or later. Ignoring admin only enablement.'\n        }\n\t}\n\n    # we need both a username and a password - if one is used without the other then throw\n    if (($ChocolateySourceUsername -and -not $ChocolateySourcePassword) -or ($ChocolateySourcePassword -and -not $ChocolateySourceUsername)) {\n    \tthrow 'If you are using an authenticated source you must provide both a username AND a password.'\n    }\n    elseif ($ChocolateySourceUsername -and $ChocolateySourcePassword) {\n\t\t$chocoArgs += @(\"--user=\"\"'$ChocolateySourceUsername'\"\"\", \"--password=\"\"'$ChocolateySourcePassword'\"\"\")\n    }\n\n    # check if we have a certificate path\n    if (-not [string]::IsNullOrEmpty($ChocolateySourceCertificatePath)) {\n    \tif (-not (Test-Path -Path $ChocolateySourceCertificatePath)) {\n        \tthrow \"The certificate at '$ChocolateySourceCertificatePath' does not exist. Please make sure the certificate exists on the target at the provided path.\"\n        }\n\n        $chocoArgs += \"--cert=\"\"'$ChocolateySourceCertificatePath'\"\"\"\n\n        # if we have a password it can only be used with a certificate path\n        if (-not [string]::IsNullOrEmpty($ChocolateySourceCertificatePassword)) {\n\t\t\t$chocoArgs += \"--certpassword=\"\"'$ChocolateySourceCertificatePassword'\"\"\"\n        }\n    }\n    elseif (-not [string]::IsNullOrEmpty($ChocolateySourceCertificatePassword)) {\n    \tWrite-Warning 'You have provided a client certificate password but no client certificate path. Ignoring client certificate password.'\n    }\n}\n\n# finally add any other parameters\nif (-not [string]::IsNullOrEmpty($ChocolateySourceOtherParameters)) {\n\t$chocoArgs += $ChocolateySourceOtherParameters -split ' '\n}\n\n# execute the command line\nWrite-Host \"Running the command: $choco $chocoArgs\"\n& $choco $chocoArgs",
    "Octopus.Action.EnabledFeatures": ""
  },
  "Category": "Chocolatey",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/chocolatey-manage-sources.json",
  "Website": "/step-templates/131ba9b0-c95e-464f-a2ff-aacedbcd29a1",
  "Logo": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZhQTFRF////gLXjiEsuoG9YJCxcmcTpapS4cD8nuJOCoMjqlF1DrIFteqzbaZPBKjVkO05+k8DocJzDUnGgR1+PMD1tXoKwb5vKNUZ1daTSQVeGTGiXY4q5WHmodkIplWtXd0o0o3RdgkgsmmZOkVk+ga7YiFI5g5SqhmxnhmZbh1hFg42fhXNyj6/KhIeUs9PvgajMgpu2hXl9h19QhICJgqHBdEQtlGZQm2tVeUs1rYNvqXxosYl2roNwnW1WcEQwsId0mWpUm6m8onJbao+vmb/gkaK3oHRhs5SFfUw0nYF3fE44i6jGdkgygKfMkGJMiF5JbHSCnZSXcUYzqHtmdUYwa4Sdfpi0mrTOpXdhpHRec0Mrnm5XeYGRfqbMck4/noR8blpUhq/UbWpwhVdBhFZAcUEpr4ZylmxYnGlRs5WHek04lLXSjV9JfEoyfZ/An39zm3NgiLbVmZihrIp6uZaFq39qiFpEb09CnJ+qqn5pa4mmmH10nWtTilxGsYh1rtDuroRxbkk5jllAl2lTjY2VeWVfdGVka3mKgG9D1QAACAFJREFUeNrsmoV/20YUx2tLm7vmYBVZtHYQzrIkTbO2o65rx8zMzMzM//bu3juBKZUcqYnX9/t8+mliS9Z9H9/Fhw6RSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUiky0k3Gn141QHSrzcZ1QC50uho5wDp6iuMCIRACIRACIRACIRACIRACIRACIRACIRALgsQztn/AcQRtm3Hsw/i2iB31kFi24jPNgjPOMa6hEuZzgiItG2BwSVH3/T16/sIEiaOk1TjCBVHgOE1ChLqKiD2DYShgfuDFfXz8Rentp2Y+JLjvAVv7w9I4JmY96t4pA/rD/T1ztj0ifYr2Vk/S16nAgdDi8OSg+LlRDoMHSIY26VZtgkS2XVAOKaABvEGA86OMHHkbk5pEaSopnaVdHdwlc4wdyrsKh/UIkhkC87QK2EFkAjXH+kY0mUqdRzsi8zPUk0GbOIo1h5ICA16QhEa20U4ZooGYrEpErHkGKOxwxkWwQjNwoJLBOJDqCQVilYIVhYA4oNDdJnoKz8IxZNqk0Cvz4pHHyqisC8RiAsB7Qzl7mixgoFXsg5OWJ5euVqxZxyhrRGbaMuLIHJge0x5SyA8zEMlNA/3K5RoEQBICnHoYgtNbCQQmP7aJq4v4Ap9W4xFLWoBJIwhLSNYORiOTXJIwHnGIWLtFKFBMLBSM/5y3JskxiEe/OZB6eqbCqImF9k4CMuncB0pCOKPL5nQ8rXV1S0ug3zS5nZh2gqy6dDHgd7FDAmAx4Fgc7MJObKbBwkxSDzpYWTDauTkSVaHXGjWw20HX/MCtDZc5iFIH4OT60/1gd/Nun9iNw8SQN8SvmnGgYrsEOpNsUkKXdxSBNARPBX4LgaNcoyj1itkyjAVVMKbgTPRFoHPUCBuXHB42TPdZkGYKI25sBKpFhGXHeJnvdmDAirtlJu3ASpCKGVkiDspsp2JafU4KLiGQ7+RiNL40xAIFp9sXIePd9U/UXII12kdKUsm+GLg68DzzFY91X50wcixU5pJ7IjrfuIzHItdxrMiLPsD2+KGQCDPBcvnWAWR2tIvO8TTiawYVU0QxTyoLvL7EIo6DD2F5LEggxCJPU6Cl38LmwThA0cGWKrUNOvp10LHTfBFDs7iEluzySo739tK/DHIDyGUgyF6cNQSrjljkWEnRyq2v42AMHhUXN7NMfCLWqBvFudB52IAAlbkahVR+diEF3swHksZJ+bALtADJDTwwIliJ8iPjTwuCpc3AuKUAwtiJMqqp2/WmWA/Ub/q2u85KTSO0HCgDRLP9qrt71nqRI4PyRg3CMLEwOZJmiaoe4gO974GcdHqaojq5Lkswo4PZwrpHs6P/AZBBh2SNynlkVDqUtRXoSSgJkGTztwAa9BRU2W3wlMVbVpOwgZKDGsQRJQzBFKYGzycnaSN07wr8a24xokEVo9ooGq5LC+Exd63ARDfLp0XwBQVZwdRHkSccpCbt4XMkv3Kx6KJN1x/Tb9Ky9ZoAATMpVtDJJNYZBsfmZf5EDujXQ5AHlZ2R24DF9ADv28KvTaV1+DGiuWNwCtGXwgsA8XtREUW7J/6Ye2EdkYPtrk+IMJhwm8QJMlBIKw8Pwu3WGItS+1U1dVO4Lr+FJVJTDjX5mLwMGDvIE6xj4bulXEIOEEJzAV8ygqbN3Fv4PQkcAcqZSMgJhnY0KGaGgMdjOHETPfTKZ9jRAxnFIxzJxJme9xpAaQ4VMOzrD64wt3LnwUHc2REXtBpAySrv3gqArHkVzsrrVq1hhSxTjsgtq4locGAVsJhp9fcH+TKkrzxk8bSc4rOBakZuGGnCXE5HFRx0MKRqT/OYLzTqMI0UmOW2tRL6TpJ2M7ZLxvD4XQuuRoYUUazMZrNr3CEE2a62fsuSnoAOJrZ6rq71PfZ+nZQ8eexPQwjB+JrTszp4yEV68w2CH3xbF9Bzv9fQL794QCDnKsB0rvj37ogr9/91yeXAuTC41YdkF7vjTogi1v3z80d673y0sNtgzz7qVUTpPfa+WogG+tL3W73Wg3S6123vDo/esn82omTU6x8fnN+GOQ7y6oN0vv96YuDLK6tdEEZiPpxbXHook19zdZ8XY7FhW53ZXl7cSMHufCqNQ1I747Hjl7cFd0REPX4rZID5rfwipXNeu4oPnxheWtVfeDV5+6xpgPp9f5ZnRQSm1snumUNgCidWDceOLmSX7M00Smbq9vzo+4Y1PKPljU1yDXKHEvbw6acX10becwwiF73qrp2u3zRwuoIwsvPbC+BSZYmuKPQ9XsDQWtsLWYWO7l+YsxDxoGoha8NX7u8Uaz2wbu/+PuJ/BHdteKd9YVuSyAQ42vrm3luVwMZo4VtnV2Lyg03zM3NHS8/InPXxvL4W5sC2V1VQXQhwv9HQLqLu7jjAIJkGgVZODnZHTMF0l3YmOiO2QLZXQRCIARCIARCIARCIKj7jlTVkwjyR+UbjryHIB9XvuGn6UFOn7Kq6gyAPPRi5Rusu24FkI+s2qoNUoPDev4dDfJNnfXcpkF2bm8fpA6HZZ1VIC/cWeeOW84okLes1kF2aq3K+l6BPFBvQb/MHX/75tZBdmo+4q5bj/UeqXeL8shpq22Qndqmuu3YUzXj/bnfjv/cNkh9DuuWd9+se8vZD061DLIzTeh+9mfdO75+1GoZ5MvDU+j92nd8de80zzl8iEQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIl1O+k+AAQDVNykpMZlchAAAAABJRU5ErkJggg==",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Thursday, August 13, 2020