Favicon

You are here: Home > Device Management > macOS > Automated deployment of Check Point Endpoint Security on macOS

Automated deployment of Check Point Endpoint Security on macOS

Learn how to automate the installation and initial configuration of Check Point Endpoint Security client on macOS devices using a script.

Deploying security software across a fleet of macOS devices can be time-consuming and error-prone when done manually. To address this, we’ve created a script that automates the installation and initial configuration of the Check Point Endpoint Security client for macOS.

This approach ensures a faster, more reliable rollout while maintaining consistency in how each device is configured. By embedding essential settings—such as server addresses, certificates, and policy configurations—the script enables each Mac to securely connect to your Check Point management infrastructure immediately after installation.

Purpose

This script is designed to streamline the deployment of the Check Point Endpoint Security client across macOS devices by automating both installation and initial configuration. It aims to:

  • Automate deployment: Eliminate manual steps by automating the distribution and installation of the security client on multiple Macs, reducing the likelihood of user error and saving valuable IT resources.

  • Enable pre-configuration: Embed all necessary configuration data—including certificates, server addresses, and policy settings—so that the client is immediately ready to connect to your Check Point management infrastructure after installation.

  • Ensure consistency: Guarantee that every endpoint receives the same configuration and security policies, enhancing uniformity and compliance across the organization.

General workflow

The script follows a structured workflow to ensure reliable and consistent deployment:

1
Preparation

Key system utilities such as base64, curl, and unzip are defined and validated at the beginning of the script to ensure compatibility and avoid execution errors.

2
Embedding configuration data

The script contains a large block of configuration information encoded in Base64 format, typically exported from the Check Point management portal. This block includes required elements like certificates, server URLs, and policy settings.

3
Decoding and applying configuration

The Base64-encoded configuration is decoded and saved to a temporary or predefined location where the Check Point client expects to find its configuration files.

4
Installer download

Using curl or a similar utility, the script retrieves the Check Point Endpoint Security installer—usually packaged as a ZIP file—from a trusted internal or external repository.

5
Installation process

The downloaded installer is extracted, and the installation is executed using macOS-native tools such as the installer command or by launching the included .app. Administrative privileges may be required.

6
Cleanup and post-install validation

After installation, the script removes any temporary files and optionally performs a validation step, such as checking for the presence of the installed application or verifying its operational status.

script
#!/bin/sh -x
set -e

BASE64=/usr/bin/base64
UNZIP=/usr/bin/unzip
CURL=/usr/bin/curl
INSTALLER=/usr/sbin/installer
ECHO=/bin/echo
RM=/bin/rm
PKGUTIL=/usr/sbin/pkgutil

CONFIG_DAT_B64=PERBX0NPTkZJRz48QUxMT1dfTk9OX1RSVVNURURfQ0E+MTwvQUxMT1dfTk9OX1RSVVNURURfQ0E+PEFMTE9XX0lOVkFMSURfQ0VSVF9EQVRFPjE8L0FMTE9XX0lOVkFMSURfQ0VSVF9EQVRFPjxBTExPV19JTlZBTElEX1NJVEVfTkFNRT4xPC9BTExPV19JTlZBTElEX1NJVEVfTkFNRT48Q0hFQ0tfRk9SX1JFVk9DQVRJT04+MDwvQ0hFQ0tfRk9SX1JFVk9DQVRJT04+PFZEU19MT0NBVElPTj48L1ZEU19MT0NBVElPTj48SEVBREVSPlgtQ1BFUFA6dllvaWdkR0Zubm9RYzc8L0hFQURFUj48VkVSSUZfS0VZPk1JR0pBb0dCQUkxdU9RQml6NzRsdVYzV1BpZERCZStKSW5QQzRmUm8vUHkvNTNLRGtZNlJaQnhRdG5xZmkydFZFS29kQmhGK0dsa0lTM09Oc2R3eC9ZN05GdDhrSk9OZXdlN3hsZktVc2xrL0ViZGVTSERSQzNKMCs1VDZaVUszSXViU0JRYnEzeWExRUI3SmpFU3hITDF0RXIxR3FjaUZ3RnFZN0IvdmV2Q3VneE9OZzdDTEFnTUJBQUU9PC9WRVJJRl9LRVk+PExPQ1BPTEw+NjA8L0xPQ1BPTEw+PENBX0NFUlQ+LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUwRENDQTdpZ0F3SUJBZ0lCQnpBTkJna3Foa2lHOXcwQkFRc0ZBRENCZ3pFTE1Ba0dBMVVFQmhNQ1ZWTXgKRURBT0JnTlZCQWdUQjBGeWFYcHZibUV4RXpBUkJnTlZCQWNUQ2xOamIzUjBjMlJoYkdVeEdqQVlCZ05WQkFvVApFVWR2UkdGa1pIa3VZMjl0TENCSmJtTXVNVEV3THdZRFZRUURFeWhIYnlCRVlXUmtlU0JTYjI5MElFTmxjblJwClptbGpZWFJsSUVGMWRHaHZjbWwwZVNBdElFY3lNQjRYRFRFeE1EVXdNekEzTURBd01Gb1hEVE14TURVd016QTMKTURBd01Gb3dnYlF4Q3pBSkJnTlZCQVlUQWxWVE1SQXdEZ1lEVlFRSUV3ZEJjbWw2YjI1aE1STXdFUVlEVlFRSApFd3BUWTI5MGRITmtZV3hsTVJvd0dBWURWUVFLRXhGSGIwUmhaR1I1TG1OdmJTd2dTVzVqTGpFdE1Dc0dBMVVFCkN4TWthSFIwY0RvdkwyTmxjblJ6TG1kdlpHRmtaSGt1WTI5dEwzSmxjRzl6YVhSdmNua3ZNVE13TVFZRFZRUUQKRXlwSGJ5QkVZV1JrZVNCVFpXTjFjbVVnUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNUlDMGdSekl3Z2dFaQpNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUM1NE1zUTFLOTJ2ZFNUWXVzd1pMaUJDR3pECkJObGlGNDR2L3o1bHo0L09ZdVk4VWh6YUZrVkxWYXQ0YTJPRFlwRE9EMmxzbWNnYUZJdE16RVV6Nm9qY25xT3YKSy82QVlaMTVWOFRQTHZRL01EeGRSL3lhRnJ6RE41WkJVWTRSUzFUNEtMN1FqTDd3TURnZTg3QW0rR1pIWTIzZQpjU1pIanpoSFU5RkdIYlRqM0FEcVJheTl2SEhacW04QTI5dk5NRHA1VDE5TVIvZ2Q3MXZDeEoxZ083R3lRNUhZCnBETk82clBXSjArdEpZcWx4dlRWMEthdWRBVmtWNGkxUkZYVUxTbzZQdmk0dmVreUNnS1VaTVFXT2xEeFNxN24KZVRPdkRDQUhmK2pmQkRuQ2FRSnNZMUw2ZDhFYnlIU0h5TG1UR0ZCVU5VdHBUcnc3MDBrdUg5ekIwbEw3QWdNQgpBQUdqZ2dFYU1JSUJGakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQTRHQTFVZER3RUIvd1FFQXdJQkJqQWRCZ05WCkhRNEVGZ1FVUU1LOUo0N01OSU13b2pQWCsyeXo4TFFzZ000d0h3WURWUjBqQkJnd0ZvQVVPcHFGQnhCbktMYnYKOXIwRlFXNGd3WlRhRDk0d05BWUlLd1lCQlFVSEFRRUVLREFtTUNRR0NDc0dBUVVGQnpBQmhoaG9kSFJ3T2k4dgpiMk56Y0M1bmIyUmhaR1I1TG1OdmJTOHdOUVlEVlIwZkJDNHdMREFxb0NpZ0pvWWthSFIwY0RvdkwyTnliQzVuCmIyUmhaR1I1TG1OdmJTOW5aSEp2YjNRdFp6SXVZM0pzTUVZR0ExVWRJQVEvTUQwd093WUVWUjBnQURBek1ERUcKQ0NzR0FRVUZCd0lCRmlWb2RIUndjem92TDJObGNuUnpMbWR2WkdGa1pIa3VZMjl0TDNKbGNHOXphWFJ2Y25rdgpNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUFJZm15VEVNZzR1SmFwa0V2L29WOVBCTzlzUHB5SUJzbFFqNlp6CjkxY3hHNzY4NUMvYitMclRXK0MwNStaNVlnNE1vdGRxWTNNeHRmV29TS1E3Q0MyaVhaRFh0SHdsVHhGV01NUzIKUkoxN0xKM2xYdWJ2REdHcXYrUXFHKzZFbnJpRGZjRkR6a1NuRTNBTmtSLzB5Qk90ZzJEWjJIS29jeVFldGF3aQpEc29YaVdKWVJCdXJpU1VCQUEvTnhCdGkyMUcwMHc5UktwdjB2SFA4ZHM0MnBNM1oyQ3pxcnB2MUtyS1EwVTExCkdJby9pa0dRSTMxYlMvNmtBMWliUnJMRFlHQ0QrSDFRUWM3Q29aRER1KzhDTDlJVlZPNUVGZGtLcnFlS00rMngKTFhZMkp0d0U2NS8zWVI4VjNJZHY3a2FXS0syaEpuMEtDYWN1QktPTnZQaThCREFCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVmVENDQTJXZ0F3SUJBZ0lERytjVk1BMEdDU3FHU0liM0RRRUJDd1VBTUdNeEN6QUpCZ05WQkFZVEFsVlQKTVNFd0h3WURWUVFLRXhoVWFHVWdSMjhnUkdGa1pIa2dSM0p2ZFhBc0lFbHVZeTR4TVRBdkJnTlZCQXNUS0VkdgpJRVJoWkdSNUlFTnNZWE56SURJZ1EyVnlkR2xtYVdOaGRHbHZiaUJCZFhSb2IzSnBkSGt3SGhjTk1UUXdNVEF4Ck1EY3dNREF3V2hjTk16RXdOVE13TURjd01EQXdXakNCZ3pFTE1Ba0dBMVVFQmhNQ1ZWTXhFREFPQmdOVkJBZ1QKQjBGeWFYcHZibUV4RXpBUkJnTlZCQWNUQ2xOamIzUjBjMlJoYkdVeEdqQVlCZ05WQkFvVEVVZHZSR0ZrWkhrdQpZMjl0TENCSmJtTXVNVEV3THdZRFZRUURFeWhIYnlCRVlXUmtlU0JTYjI5MElFTmxjblJwWm1sallYUmxJRUYxCmRHaHZjbWwwZVNBdElFY3lNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXYzRmkKQ1BINldUVDNHOGtZby9lQVNWanBJb01UcHNVZ1F3RTdoUEhtaFVtZkorcjJoQnRPb0xUYmNKakhNZ0d4QlQ0SApUdTcwK2s4dldUQWk1NnNaVm12aWdBZjg4eFoxZ0RsUmUrWDVOYlowVHFtTmdoUGt0aitwQTRQNm9yNktGV3AvCjNndkR0aGtVQmNycXc2Z0VsRHRHZkRJTjh3Qm1Jc2lOYVcwMmpCRVl0OU95SEdDME9Qb0NqTTdUM1VZSDNnbysKNjExOHlIejdzQ3RUcEpKaWFWRWxCV0VhUklHTUxLbERsaVBmckRxQm1nNHB4UnlwNlYwZXRwNmVNQW81enZHSQpnUHRMWGN3eTdJVmlReVUwQWxZbkFaRzBPM0FxUDI2eDZKeUlBWDJmMVBuYlUyMWduYjhzNTFpcnVGOUcvTTdFCkd3TThDZXRKTVZ4cFJyUGdSd0lEQVFBQm80SUJGekNDQVJNd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlYKSFE4QkFmOEVCQU1DQVFZd0hRWURWUjBPQkJZRUZEcWFoUWNRWnlpMjcvYTlCVUZ1SU1HVTJnL2VNQjhHQTFVZApJd1FZTUJhQUZOTEVzTktSMUV3UmNiTmh5ejJoL3Qyb2F0VGpNRFFHQ0NzR0FRVUZCd0VCQkNnd0pqQWtCZ2dyCkJnRUZCUWN3QVlZWWFIUjBjRG92TDI5amMzQXVaMjlrWVdSa2VTNWpiMjB2TURJR0ExVWRId1FyTUNrd0o2QWwKb0NPR0lXaDBkSEE2THk5amNtd3VaMjlrWVdSa2VTNWpiMjB2WjJSeWIyOTBMbU55YkRCR0JnTlZIU0FFUHpBOQpNRHNHQkZVZElBQXdNekF4QmdnckJnRUZCUWNDQVJZbGFIUjBjSE02THk5alpYSjBjeTVuYjJSaFpHUjVMbU52CmJTOXlaWEJ2YzJsMGIzSjVMekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBV1F0VHZaS0dFYWNrZSsxYk1jOGQKSDJ4d3hiaHV2azY3OXI2WFVPRXdmN29vWEdLVXd1TitNL2Y3UW5hRjI1VWNqQ0pZZFFrTWlHVm5PUW9XQ2NXZwpPSmVreFNPVFA3UVlwZ0VHUkpIanAya250Rm9sZnpxM01zM2RoUDhxT0NrenBOMW5zb1grb1lnZ0hGQ0p5TndxCjlrSUROMHptaU4vVnJ5VHlzY1BmekxYczRKbGV0MGxVSUR5VUdBekhIRklZU2FSdDRiTllDOG5ZN05tdUhES08KS0hBTjR2Nm1GNTZFRDcxWGNMTmE2UitnaGxPNzczei9hUXZnU01PM2t3dklDbFRFckYwVVp6ZHN5cVV2TVFnMwpxbTV2akx5YjRsZGRKSUd2bDVlY2hLMXNyRGRNWnZOaGtSRWc1TDR3bjNxa0tRbXc0VFJmWkhjWVFGSGZqRENtCnJ3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRUFEQ0NBdWlnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFVRkFEQmpNUXN3Q1FZRFZRUUdFd0pWVXpFaApNQjhHQTFVRUNoTVlWR2hsSUVkdklFUmhaR1I1SUVkeWIzVndMQ0JKYm1NdU1URXdMd1lEVlFRTEV5aEhieUJFCllXUmtlU0JEYkdGemN5QXlJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNU1CNFhEVEEwTURZeU9URTMKTURZeU1Gb1hEVE0wTURZeU9URTNNRFl5TUZvd1l6RUxNQWtHQTFVRUJoTUNWVk14SVRBZkJnTlZCQW9UR0ZSbwpaU0JIYnlCRVlXUmtlU0JIY205MWNDd2dTVzVqTGpFeE1DOEdBMVVFQ3hNb1IyOGdSR0ZrWkhrZ1EyeGhjM01nCk1pQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRDQ0FTQXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRU4KQURDQ0FRZ0NnZ0VCQU42ZDErcFhHRW1oVyt2WFgwaUc2cjdkLytUdlp4ejBaV2l6VjNHZ1huZTc3WnRKNlhDQQpQVllZWXdodjJ2TE0wRDkvQWxRaVZCRFlzb0hVd0hVOVMzL0hkOE0rZUtzYUE3VWdheTlxSzdIRmlIN0V1eDZ3CndkaEZKMitxTjFqM2h5YlgyQzMycVJlM0gzSTJUcVlYUDJXWWt0c3FibDJpL29qZ0M5NS81WTBWNGV2TE90WGkKRXFJVExkaU9yMThTUGFBSUJRaTJYS1ZsT0FSRm1SNmpZR0IweFVHbGNtSWJZc1VmYjE4YVFyNENVV1dvcmlNWQphdng0QTZsTmY0REQrcXRhL0tGQXBNb1pGdjZ5eU85ZWN3M3VkNzJhOW5tWXZMRUhaNklWRGQyZ1dNWkVld28rCllpaGZ1a0VIVTFqUEVYNDRkTVg0LzdWcGtJK0VkT3FYRzY4Q0FRT2pnY0F3Z2Iwd0hRWURWUjBPQkJZRUZOTEUKc05LUjFFd1JjYk5oeXoyaC90Mm9hdFRqTUlHTkJnTlZIU01FZ1lVd2dZS0FGTkxFc05LUjFFd1JjYk5oeXoyaAovdDJvYXRUam9XZWtaVEJqTVFzd0NRWURWUVFHRXdKVlV6RWhNQjhHQTFVRUNoTVlWR2hsSUVkdklFUmhaR1I1CklFZHliM1Z3TENCSmJtTXVNVEV3THdZRFZRUUxFeWhIYnlCRVlXUmtlU0JEYkdGemN5QXlJRU5sY25ScFptbGoKWVhScGIyNGdRWFYwYUc5eWFYUjVnZ0VBTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRApnZ0VCQURKTDg3TEtQcEg4RXNhaEI0eU9kNkF6QmhSY2tCNFk5d2ltUFFvWitZZUFFVzVwNUpZWE1QODBrV055Ck9PN01IQUdqSFpRb3BESDJlc1JVMS9ibE1WZ0Rvc3pPWXR1VVJYTzF2MFhKSkxYVmdnS3RJM2xwamJpMlRjN1AKVE1vekkrZ2NpS3FkaTBGdUZza2c1WW1lelR2YWNQZCttU1lnRkZRbHEyNXpoZWFiSVowS2JJSU9xUGpDRFBvUQpIbXlXNzRjTnhBOWhpNjN1Z3l1VitJNlNoSEk1NnlEcWcrMkR6WmR1Q0x6clRpYTJjeXZrMC9aTS9pWng0bUVSCmRFci9WeHFIRDNWSUxzOVJhUmVnQWhKaGxkWFJRTElRVE83RXJCQkRwcVdlQ3RXVllwb056NGlDeFRJTTVDdWYKUmVZTm55aWNzYmtxV2xldE53K3ZIWC9idlo4PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCjwvQ0FfQ0VSVD48Q1BFUFNOZXR3b3JrIHhtbG5zPSJodHRwOi8vc2NoZW1hLmNoZWNrcG9pbnQuY29tL25ldHdvcmsvY3Blc25ldHdvcmsvdjEvIj4KICAgIDxwcm94aW1pdHlUaW1lb3V0PjEyMDwvcHJveGltaXR5VGltZW91dD4KICAgIDxvcEdyb3Vwcz4KICAgICAgICA8b3BHcm91cCBuYW1lPSJkZWZhdWx0Ij4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvZmlsZXNGb3JEeW5hbWljUGFja2FnZSIgYXV0aGVudGljYXRpb25UeXBlPSJERVZJQ0UiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iRklMRVNfRk9SX0RZTkFNSUNfUEFDS0FHRSIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9nZXRGREVDcmVkIiBhdXRoZW50aWNhdGlvblR5cGU9IkJPVEgiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iR0VUX0ZERV9DUkVERU5USUFMUyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9kZWNyeXB0RkRFIiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQUyIgdHlwZT0iREVDUllQVF9GREUiIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvc2V0RkRFUmVjRmlsZSIgYXV0aGVudGljYXRpb25UeXBlPSJERVZJQ0UiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iU0VUX0ZERV9SRUNPVkVSWV9GSUxFIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvZmlsZSIgYXV0aGVudGljYXRpb25UeXBlPSJOT05FIiBwcm90bz0iSFRUUFMiIHR5cGU9IlBPTElDWSIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9Ta2VsZXRvbl9wYXlsb2FkVHlwZTEiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJTS0VMRVRPTl9QQVlMT0FEMSIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC90b2tlbiIgYXV0aGVudGljYXRpb25UeXBlPSJOT05FIiBwcm90bz0iSFRUUFMiIHR5cGU9IkdFVF9UT0tFTiIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9nZXRlcGxpY2Vuc2VpbmZvIiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iR0VUX0VQX0xJQ0VOU0VfSU5GTyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9zZXRNRURldkluZm8iIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJTRVRfTUVfREVWSUNFX0lORk8iIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvc3luY3JlcSIgYXV0aGVudGljYXRpb25UeXBlPSJOT05FIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IlNZTkNfUkVRVUVTVCIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9sb2d1cGxvYWQiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJMT0dfVVBMT0FEIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L3JlZ2VwIiBhdXRoZW50aWNhdGlvblR5cGU9IkRFVklDRSIgcHJvdG89IkhUVFBTIiB0eXBlPSJSRUdJU1RFUl9FTkRQT0lOVCIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9zZXRGREVDcmVkIiBhdXRoZW50aWNhdGlvblR5cGU9IkJPVEgiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iU0VUX0ZERV9DUkVERU5USUFMUyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9yZW1vdGVIZWxwRkRFIiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQUyIgdHlwZT0iUkVNT1RFX0hFTFBfRkRFIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L2NoZWNrTG9nU2NoZW1hIiBhdXRoZW50aWNhdGlvblR5cGU9IkRFVklDRSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJDSEVDS19MT0dfU0NIRU1BIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvZXBzL3NiYTRiL3JlZ2lzdGVyIiBhdXRoZW50aWNhdGlvblR5cGU9IkRFVklDRSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJTQkE0Ql9SRUdJU1RFUiIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9nZXRVbmluc3RhbGxBdXRoSW5mbyIgYXV0aGVudGljYXRpb25UeXBlPSJCT1RIIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IkdFVF9VTklOU1RBTExfQVVUSF9JTkZPIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L2VuY3J5cHRSTU0iIGF1dGhlbnRpY2F0aW9uVHlwZT0iVVNFUiIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJFTkNSWVBUX1JNTSIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2Vwcy9zYmE0Yi9wb2xpY3kiIGF1dGhlbnRpY2F0aW9uVHlwZT0iREVWSUNFIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IlNCQTRCX1BPTElDWSIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC90cmRSZXBvcnRJbmZvIiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iVFJEX1JFUE9SVF9JTkZPIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L2dldER5bmFtaWNQYWNrYWdlTG9jYXRpb24iIGF1dGhlbnRpY2F0aW9uVHlwZT0iREVWSUNFIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IkdFVF9EWU5BTUlDX1BBQ0tBR0VfTE9DQVRJT04iIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvZ2VuZXJpY1BheWxvYWQiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJHRU5FUklDX1BBWUxPQUQiIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvbmV3a2V5IiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQUyIgdHlwZT0iTkVXX1pQRE9DX0tFWSIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2Vwcy9zYmE0Yi9sb2d1cGxvYWQiIGF1dGhlbnRpY2F0aW9uVHlwZT0iREVWSUNFIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IlNCQTRCX0xPR1VQTE9BRCIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC91cGxvYWRMb2dTY2hlbWEiIGF1dGhlbnRpY2F0aW9uVHlwZT0iREVWSUNFIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IlVQTE9BRF9MT0dfU0NIRU1BIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvZmlsZSIgYXV0aGVudGljYXRpb25UeXBlPSJOT05FIiBwcm90bz0iSFRUUFMiIHR5cGU9IlNFUlZFUkxJU1QiIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvdXNlckNoZWNrSW5mbyIgYXV0aGVudGljYXRpb25UeXBlPSJOT05FIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IlVTRVJfQ0hFQ0tfSU5GTyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2ZpbGUiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTIiB0eXBlPSJEU01fU1NMX0RPV05MT0FEIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L2dldEZERURldkluZm8iIGF1dGhlbnRpY2F0aW9uVHlwZT0iREVWSUNFIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IkdFVF9GREVfREVWSUNFX0lORk8iIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvYWJCb3RzSW5mbyIgYXV0aGVudGljYXRpb25UeXBlPSJOT05FIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IkFCX0JPVFNfSU5GTyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9zZXRBY3Rpb25TdGF0dXMiIGF1dGhlbnRpY2F0aW9uVHlwZT0iREVWSUNFIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IlNFVF9BQ1RJT05fU1RBVFVTIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvYXNrIiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQUyIgdHlwZT0iQVNLIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIva2F2OHVwZGF0ZS9wcm9kdWN0aW9uIiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQUyIgdHlwZT0iQVZfUFJPRCIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2F2c2lnbmF0dXJlcy9hdjMiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTIiB0eXBlPSJBVl9TT1BIT1NfUFJPRCIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC91bnJlZ2VwIiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iVU5SRUdJU1RFUl9FTkRQT0lOVCIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9nZXRGREVOb2RlSW5mbyIgYXV0aGVudGljYXRpb25UeXBlPSJERVZJQ0UiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iR0VUX0ZERV9OT0RFX0lORk8iIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvc2V0RkRFRGV2SW5mbyIgYXV0aGVudGljYXRpb25UeXBlPSJERVZJQ0UiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iU0VUX0ZERV9ERVZJQ0VfSU5GTyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2FzdXBkYXRlL3Byb2R1Y3Rpb24iIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTIiB0eXBlPSJBU19QUk9EIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L211bHRpUGF5bG9hZHMiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJNVUxUSV9QQVlMT0FEUyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC90ZWxlbWV0cnkiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJURUxFTUVUUlkiIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9maWxlIiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQUyIgdHlwZT0iUEFSIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L2dldEZERVVzZXJJbmZvIiBhdXRoZW50aWNhdGlvblR5cGU9IkRFVklDRSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJHRVRfRkRFX1VTRVJfSU5GTyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9nZXRBY3Rpb25zIiBhdXRoZW50aWNhdGlvblR5cGU9IkRFVklDRSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJHRVRfQUNUSU9OUyIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2ZpbGUiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTIiB0eXBlPSJEU01fRE9XTkxPQUQiIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvdXBkYXRlRFNJbnN0YW5jZSIgYXV0aGVudGljYXRpb25UeXBlPSJERVZJQ0UiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iVVBEQVRFX0RTX0lOU1RBTkNFIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L2luY2lkZW50cmVwb3J0IiBhdXRoZW50aWNhdGlvblR5cGU9Ik5PTkUiIHByb3RvPSJIVFRQU0VTUCIgdHlwZT0iSU5DSURFTlRfUkVQT1JUIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L3VwZGF0ZURpcmVjdG9yeUluZm8iIGF1dGhlbnRpY2F0aW9uVHlwZT0iREVWSUNFIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IlVQREFURV9ESVJFQ1RPUllfSU5GTyIgcG9ydD0iNDQzIj4KICAgICAgICAgICAgICAgIDxhdHRyIG5hbWU9IkRJX1JFU1RSSUNUIiB2YWx1ZT0iKiI+PC9hdHRyPgogICAgICAgICAgICAgICAgPGF0dHIgbmFtZT0iRElfSU5URVJWQUwiIHZhbHVlPSI3MjAwIj48L2F0dHI+CiAgICAgICAgICAgICAgICA8YXR0ciBuYW1lPSJESV9QUk9QRVJUSUVTIiB2YWx1ZT0ib2JqZWN0Q2F0ZWdvcnksb2JqZWN0Q2xhc3Msb2JqZWN0R1VJRCxuYW1lLGRpc3BsYXlOYW1lLGRpc3Rpbmd1aXNoZWROYW1lLGNhbm9uaWNhbE5hbWUsZG9tYWluTmFtZSxkZXNjcmlwdGlvbixvYmplY3RTaWQsc0FNQWNjb3VudE5hbWUsb3BlcmF0aW5nU3lzdGVtLG9wZXJhdGluZ1N5c3RlbVZlcnNpb24sbGFzdExvZ29uVGltZXN0YW1wLHVzZXJBY2NvdW50Q29udHJvbCxhY2NvdW50RXhwaXJlcyxsb2Nrb3V0VGltZSx1c2VyUHJpbmNpcGFsTmFtZSxtYWlsLHRlbGVwaG9uZU51bWJlcixtb2JpbGUsdXNlckNlcnRpZmljYXRlLGdyb3VwVHlwZSxtZW1iZXJPZix1U05DaGFuZ2VkLGlzRGVsZXRlZCI+PC9hdHRyPgogICAgICAgICAgICA8L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2NwL2Nvbm5lY3Rpb25Qb2ludC9zZXRGREVVc2VySW5mbyIgYXV0aGVudGljYXRpb25UeXBlPSJVU0VSIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IlNFVF9GREVfVVNFUl9JTkZPIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L2dldERTQ29uZmlnIiBhdXRoZW50aWNhdGlvblR5cGU9IkRFVklDRSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJHRVRfRFNfQ09ORklHIiBwb3J0PSI0NDMiPgogICAgICAgICAgICAgICAgPGF0dHIgbmFtZT0iRFNfTEFTVFVQREFURUQiIHZhbHVlPSIwIj48L2F0dHI+CiAgICAgICAgICAgIDwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L2FtSW5mZWN0aW9uc0luZm8iIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJBTV9JTkZFQ1RJT05TX0lORk8iIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvZWZySW5jaWRlbnRSZXBvcnQiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJFRlJfSU5DSURFTlRfUkVQT1JUIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvYXN1cGRhdGUvc3RhZ2luZyIgYXV0aGVudGljYXRpb25UeXBlPSJOT05FIiBwcm90bz0iSFRUUFMiIHR5cGU9IkFTX1NUQUciIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvaGIiIGF1dGhlbnRpY2F0aW9uVHlwZT0iTk9ORSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJIQiIgcG9ydD0iNDQzIj4KICAgICAgICAgICAgICAgIDxhdHRyIG5hbWU9IkhCX1JFU1RSSUNUIiB2YWx1ZT0iNSI+PC9hdHRyPgogICAgICAgICAgICAgICAgPGF0dHIgbmFtZT0iSEJfVEVSTUlOQVRFIiB2YWx1ZT0iLTEiPjwvYXR0cj4KICAgICAgICAgICAgICAgIDxhdHRyIG5hbWU9IkhCX0lOVEVSVkFMIiB2YWx1ZT0iOTAiPjwvYXR0cj4KICAgICAgICAgICAgPC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvZGVjcnlwdFJNTSIgYXV0aGVudGljYXRpb25UeXBlPSJVU0VSIiBwcm90bz0iSFRUUFNFU1AiIHR5cGU9IkRFQ1JZUFRfUk1NIiBwb3J0PSI0NDMiPjwvb3A+CiAgICAgICAgICAgIDxvcCBwYXRoPSIvY3AvY29ubmVjdGlvblBvaW50L3VwcmVnIiBhdXRoZW50aWNhdGlvblR5cGU9IkRFVklDRSIgcHJvdG89IkhUVFBTIiB0eXBlPSJVUERBVEVfUkVHSVNURVIiIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICAgICAgPG9wIHBhdGg9Ii9jcC9jb25uZWN0aW9uUG9pbnQvU2V0VW5pbnN0YWxsS2V5IiBhdXRoZW50aWNhdGlvblR5cGU9IkRFVklDRSIgcHJvdG89IkhUVFBTRVNQIiB0eXBlPSJTRVRfVU5JTlNUQUxMX0tFWSIgcG9ydD0iNDQzIj48L29wPgogICAgICAgICAgICA8b3AgcGF0aD0iL2thdjh1cGRhdGUvc3RhZ2luZyIgYXV0aGVudGljYXRpb25UeXBlPSJOT05FIiBwcm90bz0iSFRUUFMiIHR5cGU9IkFWX1NUQUciIHBvcnQ9IjQ0MyI+PC9vcD4KICAgICAgICA8L29wR3JvdXA+CiAgICA8L29wR3JvdXBzPgogICAgPHNlcnZlcnM+CiAgICAgICAgPHNlcnZlciB0eXBlPSJFUFMiIGFjY2VwdHNDbGllbnRzPSJ0cnVlIiBhZGRyPSIiIGZxZG49IldhbGxib3gtZmE2ZDgwYjAtaGFwMi5lcG1nbXQuY2hlY2twb2ludC5jb20iIG9wR3JvdXA9ImRlZmF1bHQiIGFkZHI2PSIiIGRuPSJDTj0qLmVwbWdtdC5jaGVja3BvaW50LmNvbSI+CiAgICAgICAgICAgIDxncm91cCBuYW1lPSJkZWZhdWx0Ij48L2dyb3VwPgogICAgICAgIDwvc2VydmVyPgogICAgPHNlcnZlciB0eXBlPSJFUFMiIHhtbG5zPSIiIGFjY2VwdHNDbGllbnRzPSJ0cnVlIiBhZGRyPSIiIGZxZG49IldhbGxib3gtZmE2ZDgwYjAtaGFwMjEuZXBtZ210LmNoZWNrcG9pbnQuY29tIiBvcEdyb3VwPSJkZWZhdWx0IiBhZGRyNj0iIiBkbj0iQ049Ki5lcG1nbXQuY2hlY2twb2ludC5jb20iPjxncm91cCBuYW1lPSJkZWZhdWx0Ij48L2dyb3VwPjwvc2VydmVyPjwvc2VydmVycz4KICAgIDxhdXRoUHJpbmNpcGFscz48L2F1dGhQcmluY2lwYWxzPgogICAgPG9wZXJhdGlvbk1vZGU+CiAgICAgICAgPGF1dGhlbnRpY2F0ZUVuZHBvaW50cz5mYWxzZTwvYXV0aGVudGljYXRlRW5kcG9pbnRzPgogICAgPC9vcGVyYXRpb25Nb2RlPgogICAgPHN1cHBvcnRlZEZlYXR1cmVzPgogICAgICAgIDxmZWF0dXJlIG5hbWU9IkNvbW1vbiBDcml0ZXJpYSIgdmVyc2lvbj0iMiI+PC9mZWF0dXJlPgogICAgICAgIDxmZWF0dXJlIG5hbWU9Ik1FUFBfU1RPUkVfREVWSUNFSU5GTyIgdmVyc2lvbj0iMSI+PC9mZWF0dXJlPgogICAgICAgIDxmZWF0dXJlIG5hbWU9IkZJTEVWQVVMVF9SRUNPVkVSWSIgdmVyc2lvbj0iMSI+PC9mZWF0dXJlPgogICAgICAgIDxmZWF0dXJlIG5hbWU9IkZERV9BVVRIRU5USUNBVElPTl9USU1FU1RBTVAiIHZlcnNpb249IjEiPjwvZmVhdHVyZT4KICAgICAgICA8ZmVhdHVyZSBuYW1lPSJBWlVSRV9BRF9TVVBQT1JUIiB2ZXJzaW9uPSIxIj48L2ZlYXR1cmU+CiAgICA8L3N1cHBvcnRlZEZlYXR1cmVzPgo8L0NQRVBTTmV0d29yaz48L0RBX0NPTkZJRz4=
MANIFEST_B64=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj48cGxpc3QgdmVyc2lvbj0iMS4wIj48ZGljdD48a2V5PkJsYWRlczwva2V5PjxkaWN0IC8+PGtleT5Db25maWc8L2tleT48ZGljdD48a2V5PmNvbmZpZy5kYXQ8L2tleT48c3RyaW5nPi5jb25maWdfZGF0PC9zdHJpbmc+PC9kaWN0PjxrZXk+RmVhdHVyZXM8L2tleT48ZGljdD48a2V5PlN1cGVyTm9kZTwva2V5Pjx0cnVlIC8+PGtleT5GaXJld2FsbElQVjY8L2tleT48dHJ1ZSAvPjxrZXk+UG9ydFByb3RlY3Rpb248L2tleT48dHJ1ZSAvPjxrZXk+UHVzaE9wZXJhdGlvbnM8L2tleT48dHJ1ZSAvPjxrZXk+VGVsZW1ldHJ5PC9rZXk+PHRydWUgLz48a2V5PldlYkd1aTwva2V5Pjx0cnVlIC8+PC9kaWN0PjwvZGljdD48L3BsaXN0Pgo=
URL="https://ep-client-installers-prd-public.s3.amazonaws.com/eps-clients/mac/88.40.5927/EPS_E88.40_ONLY_DA.zip"
CURL_SWITCH=

CURL_SWITCH="$CURL_SWITCH --connect-timeout 10 -f"

read_server_from_config_dat ()
{
    local IFS=\>
    read -d \< ENTITY CONTENT
    local ret=$?
    TAG_NAME=${ENTITY%% *}
    ATTRIBUTES=${ENTITY#* }
    return $ret
}

try_download_from_server ()
{
    if [[ $TAG_NAME = "server" ]] ; then
        eval local $ATTRIBUTES
        HOST=$fqdn
        if [ -z $HOST ]; then
            HOST=$addr
        fi
        SERVER_URL=$(echo $URL | sed -e "s|https://[^/]*|https://$HOST|")
        if [ $URL = $SERVER_URL ]; then
            $ECHO "Skipping download from $SERVER_URL, has already been tried ($URL)"
            return 1
        fi
        $ECHO -n "Trying download from $SERVER_URL..."
        $CURL $CURL_SWITCH $SERVER_URL -o $EPS_ZIP >/dev/null 2>&1
        RET=$?
        if [ $RET -ne 0 ]; then
            $ECHO "failed with curl error $RET"
            $RM -rf $EPS_ZIP
            return $RET
        fi
        $ECHO "succeeded"
        return 0
    fi
    return 1
}

set +e
$PKGUTIL --pkg-info com.checkpoint.pkg.eps.core
if [ $? -eq 0 ]; then
    echo "Endpoint Security for macOS already deployed (core receipt exists)"
    exit 0
fi
set -e
if [ -d "/Applications/Check Point/Agents/cpdaApp.app" ]; then
    echo "Endpoint Security for macOS already deployed (device agent is installed)"
    exit 0
fi

EPS_ZIP=EPS_ONLY_DA.zip
TMP_DIR="$(mktemp -d /tmp/endpoint_security_installer.XXXXXX)"
cd $TMP_DIR

echo $CONFIG_DAT_B64 | $BASE64 --decode -o .config_dat
echo $MANIFEST_B64 | $BASE64 --decode -o .InstallationManifest.plist

set +e
$CURL $CURL_SWITCH $URL -o $EPS_ZIP >/dev/null 2>&1
if [ $? -ne 0 ]; then
    while read_server_from_config_dat; do
        try_download_from_server
        if [ $? -eq 0 ]; then
            break
        fi
    done < .config_dat
fi
set -e

if [ ! -f $EPS_ZIP ]; then
    echo "Download of Endpoint Security initial client failed."
    exit 1
fi

$UNZIP $EPS_ZIP

PKG_DIR="$TMP_DIR/Endpoint Security Installer.app/Contents/Resources/Configurations"

cd "$PKG_DIR"

PKG_NAME="$(ls "$PKG_DIR" | grep *.pkg)"
PKG_PATH="$PKG_DIR/$PKG_NAME"

$INSTALLER -pkg "$PKG_PATH" -target /

exit 0