{
    "exportFormatVersion": 2,
    "exportTime": "2025-09-11 21:02:28",
    "containerVersion": {
        "path": "accounts/58687/containers/229129557/versions/0",
        "accountId": "58687",
        "containerId": "229129557",
        "containerVersionId": "0",
        "container": {
            "path": "accounts/58687/containers/229129557",
            "accountId": "58687",
            "containerId": "229129557",
            "name": "MeasureCamp Czechia 2025",
            "publicId": "GTM-WC8Q2269",
            "usageContext": [
                "WEB"
            ],
            "fingerprint": "1757077444205",
            "tagManagerUrl": "https://tagmanager.google.com/#/container/accounts/58687/containers/229129557/workspaces?apiLink=container",
            "features": {
                "supportUserPermissions": true,
                "supportEnvironments": true,
                "supportWorkspaces": true,
                "supportGtagConfigs": false,
                "supportBuiltInVariables": true,
                "supportClients": false,
                "supportFolders": true,
                "supportTags": true,
                "supportTemplates": true,
                "supportTriggers": true,
                "supportVariables": true,
                "supportVersions": true,
                "supportZones": true,
                "supportTransformations": false
            },
            "tagIds": [
                "GTM-WC8Q2269"
            ]
        },
        "tag": [
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "3",
                "name": "1 - Custom Script - v0",
                "type": "html",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script>\n  !function(f,b,e,v,n,t,s)\n  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n  n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n  n.queue=[];t=b.createElement(e);t.async=!0;\n  t.src=v;s=b.getElementsByTagName(e)[0];\n  s.parentNode.insertBefore(t,s)}(window, document,'script',\n  'https://connect.facebook.net/en_US/fbevents.js');\n  \n  window.bug.is.HERE;\n  \n  fbq('init', '{your-pixel-id-goes-here}');\n  fbq('track', 'PageView');\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1757078784160",
                "firingTriggerId": [
                    "2147479553"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "paused": true,
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "4",
                "name": "1 - Custom Script - v1",
                "type": "html",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script>\ntry {\n  !function(f,b,e,v,n,t,s)\n  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n  n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n  n.queue=[];t=b.createElement(e);t.async=!0;\n  t.src=v;s=b.getElementsByTagName(e)[0];\n  s.parentNode.insertBefore(t,s)}(window, document,'script',\n  'https://connect.facebook.net/en_US/fbevents.js');\n  \n  window.bug.is.HERE;\n  \n  fbq('init', '{your-pixel-id-goes-here}');\n  fbq('track', 'PageView');\n\n} catch (e) {\n  \n}\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1757078784161",
                "firingTriggerId": [
                    "2147479553"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "paused": true,
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "7",
                "name": "2 - Custom Script - v2",
                "type": "html",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script>\ntry {\n  !function(f,b,e,v,n,t,s)\n  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n  n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n  n.queue=[];t=b.createElement(e);t.async=!0;\n  t.src=v;s=b.getElementsByTagName(e)[0];\n  s.parentNode.insertBefore(t,s)}(window, document,'script',\n  'https://connect.facebook.net/en_US/fbevents.js');\n  \n  window.bug.is.HERE;\n  \n  fbq('init', '{your-pixel-id-goes-here}');\n  fbq('track', 'PageView');\n\n} catch (e) {\n  {{Util - Log Error}}('Custom Script - v2', 'JS Error', e);\n}\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1757082378089",
                "firingTriggerId": [
                    "2147479553"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "paused": true,
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "monitoringMetadataTagNameKey": "name",
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "10",
                "name": "3 - Tag From Template",
                "type": "cvt_5NG3N",
                "parameter": [
                    {
                        "type": "BOOLEAN",
                        "key": "disableUpdateListener",
                        "value": "false"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "consent_handling",
                        "value": "consent_mode"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "consent_name_remarketing",
                        "value": "ad_storage"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "codetype",
                        "value": "retargeting"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "model",
                        "value": "vars"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "id",
                        "value": "12345"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "consent_name_user_data",
                        "value": "ad_user_data"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "url"
                    }
                ],
                "fingerprint": "1757151301061",
                "firingTriggerId": [
                    "2147479553"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "monitoringMetadataTagNameKey": "name",
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "12",
                "name": "3 - Tag Monitor",
                "type": "cvt_229129557_11",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "containerVersion",
                        "value": "{{Container Version}}"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "containerId",
                        "value": "{{Container ID}}"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "errorExecutionTime",
                        "value": "1000"
                    }
                ],
                "fingerprint": "1757151301062",
                "firingTriggerId": [
                    "13"
                ],
                "blockingTriggerId": [
                    "2147479572",
                    "2147479573"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "monitoringMetadataTagNameKey": "name",
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "14",
                "name": "3b - Custom Script - v2",
                "type": "html",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script>\ntry {\n  !function(f,b,e,v,n,t,s)\n  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n  n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n  n.queue=[];t=b.createElement(e);t.async=!0;\n  t.src=v;s=b.getElementsByTagName(e)[0];\n  s.parentNode.insertBefore(t,s)}(window, document,'script',\n  'https://connect.facebook.net/en_US/fbevents.js');\n  \n  window.bug.is.HERE;\n  \n  fbq('init', '{your-pixel-id-goes-here}');\n  fbq('track', 'PageView');\n\n  {{GTM}}.onHtmlSuccess({{HTML ID}});\n} catch (e) {\n  {{Util - Log Error}}('Custom Script - v2', 'JS Error', e);\n  {{GTM}}.onHtmlFailure({{HTML ID}});\n}\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1757148964541",
                "firingTriggerId": [
                    "2147479553"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "paused": true,
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "17",
                "name": "4 - Check Sum Validator",
                "type": "html",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script>\n(function() {\n\n  var order = {{Order}};\n  var cart = {{Cart}};\n  \n  \n  var productValue = 0\n  cart.forEach(function(p) {\n    productValue = p.price * p.quantity;\n  });\n  \n  \n  // example\n  if (order.revenue != productValue - order.discountValue - order.voucherValue) {\n    {{Util - Log Error}}('Custom Script - v2', 'JS Error');\n  }\n  \n\n})();\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1757148964542",
                "firingTriggerId": [
                    "16"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "paused": true,
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "21",
                "name": "0 - GA4 - JS Error",
                "type": "gaawe",
                "parameter": [
                    {
                        "type": "BOOLEAN",
                        "key": "sendEcommerceData",
                        "value": "false"
                    },
                    {
                        "type": "LIST",
                        "key": "eventSettingsTable",
                        "list": [
                            {
                                "type": "MAP",
                                "map": [
                                    {
                                        "type": "TEMPLATE",
                                        "key": "parameter",
                                        "value": "error_message"
                                    },
                                    {
                                        "type": "TEMPLATE",
                                        "key": "parameterValue",
                                        "value": "{{Error Message}}"
                                    }
                                ]
                            },
                            {
                                "type": "MAP",
                                "map": [
                                    {
                                        "type": "TEMPLATE",
                                        "key": "parameter",
                                        "value": "error_line"
                                    },
                                    {
                                        "type": "TEMPLATE",
                                        "key": "parameterValue",
                                        "value": "{{Error Line}}"
                                    }
                                ]
                            },
                            {
                                "type": "MAP",
                                "map": [
                                    {
                                        "type": "TEMPLATE",
                                        "key": "parameter",
                                        "value": "error_url"
                                    },
                                    {
                                        "type": "TEMPLATE",
                                        "key": "parameterValue",
                                        "value": "{{Error Message}}"
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "eventName",
                        "value": "exception"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "measurementIdOverride",
                        "value": "G-1111111111"
                    }
                ],
                "fingerprint": "1757150997896",
                "firingTriggerId": [
                    "20"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "paused": true,
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "tagId": "23",
                "name": "0 - error",
                "type": "html",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script>\n  window.foo.bar;\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1757150997930",
                "firingTriggerId": [
                    "22"
                ],
                "tagFiringOption": "ONCE_PER_EVENT",
                "paused": true,
                "monitoringMetadata": {
                    "type": "MAP"
                },
                "consentSettings": {
                    "consentStatus": "NOT_SET"
                }
            }
        ],
        "trigger": [
            {
                "accountId": "58687",
                "containerId": "229129557",
                "triggerId": "13",
                "name": "All Events",
                "type": "CUSTOM_EVENT",
                "customEventFilter": [
                    {
                        "type": "MATCH_REGEX",
                        "parameter": [
                            {
                                "type": "TEMPLATE",
                                "key": "arg0",
                                "value": "{{_event}}"
                            },
                            {
                                "type": "TEMPLATE",
                                "key": "arg1",
                                "value": "."
                            }
                        ]
                    }
                ],
                "fingerprint": "1757082700692"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "triggerId": "16",
                "name": "Purchase - DOM Ready",
                "type": "DOM_READY",
                "filter": [
                    {
                        "type": "EQUALS",
                        "parameter": [
                            {
                                "type": "TEMPLATE",
                                "key": "arg0",
                                "value": "{{Page Path}}"
                            },
                            {
                                "type": "TEMPLATE",
                                "key": "arg1",
                                "value": "/eshop/dokonceno"
                            }
                        ]
                    }
                ],
                "fingerprint": "1757084280670"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "triggerId": "20",
                "name": "JS Error",
                "type": "JS_ERROR",
                "fingerprint": "1757148624130"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "triggerId": "22",
                "name": "DOM Ready",
                "type": "DOM_READY",
                "fingerprint": "1757149036232"
            }
        ],
        "variable": [
            {
                "accountId": "58687",
                "containerId": "229129557",
                "variableId": "6",
                "name": "Util - Log Error",
                "type": "jsm",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function() {\n  return function(location, category, e) {\n    window.dataLayer.push({\n      'event': 'exception',\n      'exception': {\n        'location': location,\n        'category': category,\n        'type': e.name,\n        'message': e.message,\n        'fileName': e.fileName,\n        'line': e.lineNumber\n      }\n    });\n  }\n}"
                    }
                ],
                "fingerprint": "1757078765863",
                "formatValue": {}
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "variableId": "15",
                "name": "GTM",
                "type": "jsm",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "/**\n * Returns object of current GTM container\n *\n * @version 2016-10-03\n */\nfunction aac_gtm() {\n  return window.google_tag_manager[{{Container ID}}];\n}"
                    }
                ],
                "fingerprint": "1757083795155",
                "formatValue": {}
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "variableId": "18",
                "name": "Order",
                "type": "v",
                "parameter": [
                    {
                        "type": "INTEGER",
                        "key": "dataLayerVersion",
                        "value": "2"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "setDefaultValue",
                        "value": "false"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "name",
                        "value": "order"
                    }
                ],
                "fingerprint": "1757084349282",
                "formatValue": {}
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "variableId": "19",
                "name": "Cart",
                "type": "v",
                "parameter": [
                    {
                        "type": "INTEGER",
                        "key": "dataLayerVersion",
                        "value": "2"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "setDefaultValue",
                        "value": "false"
                    },
                    {
                        "type": "TEMPLATE",
                        "key": "name",
                        "value": "cart"
                    }
                ],
                "fingerprint": "1757084363016",
                "formatValue": {}
            }
        ],
        "builtInVariable": [
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "PAGE_URL",
                "name": "Page URL"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "PAGE_HOSTNAME",
                "name": "Page Hostname"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "PAGE_PATH",
                "name": "Page Path"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "REFERRER",
                "name": "Referrer"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "EVENT",
                "name": "Event"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "ERROR_MESSAGE",
                "name": "Error Message"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "ERROR_URL",
                "name": "Error URL"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "ERROR_LINE",
                "name": "Error Line"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "CONTAINER_VERSION",
                "name": "Container Version"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "CONTAINER_ID",
                "name": "Container ID"
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "type": "HTML_ID",
                "name": "HTML ID"
            }
        ],
        "fingerprint": "1757624547813",
        "tagManagerUrl": "https://tagmanager.google.com/#/versions/accounts/58687/containers/229129557/versions/0?apiLink=version",
        "customTemplate": [
            {
                "accountId": "58687",
                "containerId": "229129557",
                "templateId": "9",
                "name": "Sklik",
                "fingerprint": "1757079226708",
                "templateData": "___TERMS_OF_SERVICE___\n\nBy creating or modifying this file you agree to Google Tag Manager's Community\nTemplate Gallery Developer Terms of Service available at\nhttps://developers.google.com/tag-manager/gallery-tos (or such other URL as\nGoogle may provide), as modified from time to time.\n\n\n___INFO___\n\n{\n  \"displayName\": \"Sklik\",\n  \"categories\": [\n    \"REMARKETING\",\n    \"ANALYTICS\",\n    \"ADVERTISING\"\n  ],\n  \"description\": \"Conversion \\u0026 remarketing code for Sklik \\u0026 Zbozi.\\n\\n@author Pavel Sabatka\\n@version 2024-03-08\",\n  \"id\": \"cvt_5NG3N\",\n  \"type\": \"TAG\",\n  \"version\": 1,\n  \"brand\": {\n    \"thumbnail\": \"data:image/png;base64,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\\u003d\",\n    \"displayName\": \"pavelsabatka\",\n    \"id\": \"github.com_pavelsabatka\"\n  },\n  \"containerContexts\": [\n    \"WEB\"\n  ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n  {\n    \"macrosInSelect\": false,\n    \"selectItems\": [\n      {\n        \"displayValue\": \"Conversion\",\n        \"value\": \"conversion\"\n      },\n      {\n        \"value\": \"retargeting\",\n        \"displayValue\": \"Retargeting\"\n      },\n      {\n        \"value\": \"clear_user_identities\",\n        \"displayValue\": \"Clear User Identity\"\n      }\n    ],\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\"\n      }\n    ],\n    \"displayName\": \"Code Type *\",\n    \"simpleValueType\": true,\n    \"name\": \"codetype\",\n    \"type\": \"SELECT\"\n  },\n  {\n    \"clearOnCopy\": true,\n    \"alwaysInSummary\": true,\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\"\n      },\n      {\n        \"type\": \"POSITIVE_NUMBER\"\n      }\n    ],\n    \"displayName\": \"ID *\",\n    \"simpleValueType\": true,\n    \"name\": \"id\",\n    \"type\": \"TEXT\",\n    \"help\": \"Remarketing or conversion ID given from Sklik administration\",\n    \"valueHint\": \"12345\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"codetype\",\n        \"paramValue\": \"clear_user_identities\",\n        \"type\": \"NOT_EQUALS\"\n      }\n    ]\n  },\n  {\n    \"clearOnCopy\": false,\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\"\n      }\n    ],\n    \"displayName\": \"Model type\",\n    \"defaultValue\": \"vars\",\n    \"simpleValueType\": true,\n    \"name\": \"model\",\n    \"type\": \"RADIO\",\n    \"radioItems\": [\n      {\n        \"displayValue\": \"Measurement Hub\",\n        \"value\": \"mh\"\n      },\n      {\n        \"displayValue\": \"Standard Variables\",\n        \"value\": \"vars\"\n      }\n    ],\n    \"help\": \"Measuremet Hub is object oriented standard of dataLayer. Standard variables means separated values for each Sklik parameter.\",\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"codetype\",\n        \"paramValue\": \"clear_user_identities\",\n        \"type\": \"NOT_EQUALS\"\n      }\n    ]\n  },\n  {\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"codetype\",\n        \"type\": \"EQUALS\",\n        \"paramValue\": \"conversion\"\n      }\n    ],\n    \"displayName\": \"Conversion\",\n    \"name\": \"conversion\",\n    \"groupStyle\": \"NO_ZIPPY\",\n    \"type\": \"GROUP\",\n    \"subParams\": [\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"orderId\",\n        \"displayName\": \"Order ID\",\n        \"simpleValueType\": true,\n        \"canBeEmptyString\": false,\n        \"valueHint\": \"\",\n        \"help\": \"Unique transaction ID\",\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      },\n      {\n        \"clearOnCopy\": false,\n        \"displayName\": \"Revenue\",\n        \"simpleValueType\": true,\n        \"name\": \"revenue\",\n        \"type\": \"TEXT\",\n        \"help\": \"Total revenue of transaction\",\n        \"valueHint\": \"12345.12\",\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      },\n      {\n        \"type\": \"SELECT\",\n        \"name\": \"order\",\n        \"displayName\": \"{{aac.order}}\",\n        \"macrosInSelect\": true,\n        \"selectItems\": [],\n        \"simpleValueType\": true,\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"mh\",\n            \"type\": \"EQUALS\"\n          }\n        ],\n        \"help\": \"Object of order\",\n        \"notSetText\": \"Not set\"\n      },\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"zboziId\",\n        \"displayName\": \"Zbozi.cz shop ID\",\n        \"simpleValueType\": true,\n        \"valueValidators\": [\n          {\n            \"type\": \"REGEX\",\n            \"args\": [\n              \"^(|[0-9]{4,10})$\"\n            ],\n            \"enablingConditions\": [],\n            \"errorMessage\": \"Value must be empty or must be numeric\"\n          }\n        ]\n      },\n      {\n        \"type\": \"SELECT\",\n        \"name\": \"zboziType\",\n        \"displayName\": \"Zbozi.cz conversion type\",\n        \"macrosInSelect\": false,\n        \"selectItems\": [\n          {\n            \"value\": \"standard\",\n            \"displayValue\": \"Standard\"\n          },\n          {\n            \"value\": \"limited\",\n            \"displayValue\": \"Limited\"\n          },\n          {\n            \"value\": \"sandbox\",\n            \"displayValue\": \"Sandbox\"\n          }\n        ],\n        \"simpleValueType\": true,\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"zboziId\",\n            \"paramValue\": \"\",\n            \"type\": \"PRESENT\"\n          }\n        ],\n        \"defaultValue\": \"standard\"\n      }\n    ]\n  },\n  {\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"codetype\",\n        \"type\": \"EQUALS\",\n        \"paramValue\": \"retargeting\"\n      }\n    ],\n    \"displayName\": \"Retargeting\",\n    \"name\": \"remarketing\",\n    \"groupStyle\": \"NO_ZIPPY\",\n    \"type\": \"GROUP\",\n    \"subParams\": [\n      {\n        \"notSetText\": \"Not set\",\n        \"clearOnCopy\": false,\n        \"macrosInSelect\": true,\n        \"selectItems\": [],\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"type\": \"EQUALS\",\n            \"paramValue\": \"mh\"\n          }\n        ],\n        \"displayName\": \"{{aac.page}}\",\n        \"simpleValueType\": true,\n        \"name\": \"page\",\n        \"type\": \"SELECT\"\n      },\n      {\n        \"notSetText\": \"Not set\",\n        \"clearOnCopy\": false,\n        \"macrosInSelect\": true,\n        \"selectItems\": [],\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"type\": \"EQUALS\",\n            \"paramValue\": \"mh\"\n          }\n        ],\n        \"displayName\": \"{{aac.products}}\",\n        \"simpleValueType\": true,\n        \"name\": \"products\",\n        \"type\": \"SELECT\"\n      },\n      {\n        \"help\": \"Category will use {{aac.page}}[KEY] value. If not set, standard category value will be used.\",\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"page\",\n            \"type\": \"PRESENT\",\n            \"paramValue\": \"\"\n          }\n        ],\n        \"displayName\": \"Category Key\",\n        \"simpleValueType\": true,\n        \"name\": \"categorySeznamKey\",\n        \"type\": \"TEXT\",\n        \"canBeEmptyString\": true\n      },\n      {\n        \"notSetText\": \"Not set\",\n        \"macrosInSelect\": true,\n        \"selectItems\": [\n          {\n            \"displayValue\": \"Category\",\n            \"value\": \"category\"\n          },\n          {\n            \"displayValue\": \"Offer detail\",\n            \"value\": \"offerdetail\"\n          }\n        ],\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"type\": \"EQUALS\",\n            \"paramValue\": \"vars\"\n          }\n        ],\n        \"displayName\": \"Page type\",\n        \"simpleValueType\": true,\n        \"name\": \"pagetype\",\n        \"type\": \"SELECT\",\n        \"help\": \"Type of page. Expected values are product.detail, detail, offerdetail (for product detail page) or category (for product category page)\"\n      },\n      {\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ],\n        \"displayName\": \"Item ID\",\n        \"simpleValueType\": true,\n        \"name\": \"itemId\",\n        \"type\": \"TEXT\",\n        \"canBeEmptyString\": false,\n        \"alwaysInSummary\": true,\n        \"help\": \"ID of product on product detail page\"\n      },\n      {\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ],\n        \"displayName\": \"Category\",\n        \"simpleValueType\": true,\n        \"name\": \"category\",\n        \"type\": \"TEXT\",\n        \"canBeEmptyString\": false,\n        \"alwaysInSummary\": true,\n        \"help\": \"Category name\"\n      },\n      {\n        \"displayName\": \"Custom URL\",\n        \"simpleValueType\": true,\n        \"name\": \"url\",\n        \"type\": \"TEXT\",\n        \"canBeEmptyString\": true,\n        \"help\": \"Custom params can be put into URL here. Hostname and pathname of Custom URL must be same as real URL! Otherwise Sklik will not accept this parameter.\\nYou can use it e.g. for scroll tracking or targeting to JS executed actions on page.\"\n      }\n    ]\n  },\n  {\n    \"type\": \"GROUP\",\n    \"name\": \"identity\",\n    \"displayName\": \"User Identity\",\n    \"groupStyle\": \"ZIPPY_OPEN_ON_PARAM\",\n    \"subParams\": [\n      {\n        \"type\": \"SELECT\",\n        \"name\": \"user\",\n        \"displayName\": \"{{aac.user}}\",\n        \"macrosInSelect\": true,\n        \"selectItems\": [],\n        \"simpleValueType\": true,\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"mh\",\n            \"type\": \"EQUALS\"\n          }\n        ],\n        \"alwaysInSummary\": true,\n        \"help\": \"\"\n      },\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"userEmail\",\n        \"displayName\": \"Email Hash (recommended) or Email\",\n        \"simpleValueType\": true,\n        \"alwaysInSummary\": true,\n        \"help\": \"Email hash or Email, recommended.\\nIf you enter a non-hashed email, it will be encoded automatically and only the encoded value will be passed to the remarketing code. We recommend passing the email hash directly using the sha256 function, some browsers may not support the hashing function.\",\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      },\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"userPhone\",\n        \"displayName\": \"Phone\",\n        \"simpleValueType\": true,\n        \"alwaysInSummary\": true,\n        \"help\": \"Optional. Phone number in format +420777123456\",\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      },\n      {\n        \"type\": \"GROUP\",\n        \"name\": \"userAddress\",\n        \"displayName\": \"Address\",\n        \"groupStyle\": \"NO_ZIPPY\",\n        \"subParams\": [\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"country\",\n            \"displayName\": \"Country\",\n            \"simpleValueType\": true,\n            \"alwaysInSummary\": false,\n            \"help\": \"Optional. It is possible to submit any format, Seznam use the advanced matching algorithm.\",\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"model\",\n                \"paramValue\": \"vars\",\n                \"type\": \"EQUALS\"\n              }\n            ]\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"city\",\n            \"displayName\": \"City\",\n            \"simpleValueType\": true,\n            \"alwaysInSummary\": false,\n            \"help\": \"Optional. It is possible to submit any format, Seznam use the advanced matching algorithm.\",\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"model\",\n                \"paramValue\": \"vars\",\n                \"type\": \"EQUALS\"\n              }\n            ]\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"street\",\n            \"displayName\": \"Street\",\n            \"simpleValueType\": true,\n            \"alwaysInSummary\": false,\n            \"help\": \"Optional. It is possible to submit any format, Seznam use the advanced matching algorithm.\",\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"model\",\n                \"paramValue\": \"vars\",\n                \"type\": \"EQUALS\"\n              }\n            ]\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"streetNumber\",\n            \"displayName\": \"Number\",\n            \"simpleValueType\": true,\n            \"alwaysInSummary\": false,\n            \"help\": \"Optional. It is possible to submit any format, Seznam use the advanced matching algorithm.\",\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"model\",\n                \"paramValue\": \"vars\",\n                \"type\": \"EQUALS\"\n              }\n            ]\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"postalCode\",\n            \"displayName\": \"Postal Code\",\n            \"simpleValueType\": true,\n            \"alwaysInSummary\": false,\n            \"help\": \"Optional. It is possible to submit any format, Seznam use the advanced matching algorithm.\",\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"model\",\n                \"paramValue\": \"vars\",\n                \"type\": \"EQUALS\"\n              }\n            ]\n          }\n        ],\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"codetype\",\n        \"paramValue\": \"clear_user_identities\",\n        \"type\": \"NOT_EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"GROUP\",\n    \"name\": \"identityAdvanced\",\n    \"displayName\": \"Advanced User Identity\",\n    \"groupStyle\": \"ZIPPY_OPEN_ON_PARAM\",\n    \"subParams\": [\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"userSeznamAdId\",\n        \"displayName\": \"Seznam Ad ID\",\n        \"simpleValueType\": true,\n        \"alwaysInSummary\": true,\n        \"help\": \"If user is logged on your site with Seznam Identity, you can use advert_user_id. More information is available on https://vyvojari.seznam.cz/identita/said\",\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      },\n      {\n        \"type\": \"TEXT\",\n        \"name\": \"userCzechAdId\",\n        \"displayName\": \"Czech Ad ID\",\n        \"simpleValueType\": true,\n        \"alwaysInSummary\": true,\n        \"help\": \"More information is available on https://vyvojari.seznam.cz/identita/secid\",\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"model\",\n            \"paramValue\": \"vars\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"codetype\",\n        \"paramValue\": \"clear_user_identities\",\n        \"type\": \"NOT_EQUALS\"\n      }\n    ]\n  },\n  {\n    \"type\": \"GROUP\",\n    \"name\": \"consent\",\n    \"displayName\": \"Consent\",\n    \"groupStyle\": \"ZIPPY_OPEN_ON_PARAM\",\n    \"subParams\": [\n      {\n        \"type\": \"SELECT\",\n        \"name\": \"consent_handling\",\n        \"displayName\": \"How consent status is loaded\",\n        \"macrosInSelect\": false,\n        \"selectItems\": [\n          {\n            \"value\": \"consent_mode\",\n            \"displayValue\": \"Use GTM consent mode\"\n          },\n          {\n            \"value\": \"consent_variable\",\n            \"displayValue\": \"Load consent status from variable\"\n          }\n        ],\n        \"simpleValueType\": true,\n        \"defaultValue\": \"consent_mode\",\n        \"alwaysInSummary\": false,\n        \"help\": \"See documentation for more information.\"\n      },\n      {\n        \"type\": \"GROUP\",\n        \"name\": \"consent_mode_config\",\n        \"displayName\": \"Consent Mode Configuration\",\n        \"groupStyle\": \"NO_ZIPPY\",\n        \"subParams\": [\n          {\n            \"type\": \"SELECT\",\n            \"name\": \"consent_name_remarketing\",\n            \"displayName\": \"Consent Type for Retargeting\",\n            \"macrosInSelect\": false,\n            \"selectItems\": [\n              {\n                \"value\": \"ad_storage\",\n                \"displayValue\": \"ad_storage\"\n              },\n              {\n                \"value\": \"analytics_storage\",\n                \"displayValue\": \"analytics_storage\"\n              },\n              {\n                \"value\": \"ad_user_data\",\n                \"displayValue\": \"ad_user_data\"\n              },\n              {\n                \"value\": \"ad_personalization\",\n                \"displayValue\": \"ad_personalization\"\n              }\n            ],\n            \"simpleValueType\": true,\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"codetype\",\n                \"paramValue\": \"retargeting\",\n                \"type\": \"EQUALS\"\n              }\n            ],\n            \"defaultValue\": \"ad_storage\",\n            \"help\": \"\",\n            \"valueValidators\": [\n              {\n                \"type\": \"NON_EMPTY\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SELECT\",\n            \"name\": \"consent_name_conversion\",\n            \"displayName\": \"Consent Type for Conversion Tracking\",\n            \"macrosInSelect\": false,\n            \"selectItems\": [\n              {\n                \"value\": \"ad_storage\",\n                \"displayValue\": \"ad_storage\"\n              },\n              {\n                \"value\": \"analytics_storage\",\n                \"displayValue\": \"analytics_storage\"\n              },\n              {\n                \"value\": \"ad_user_data\",\n                \"displayValue\": \"ad_user_data\"\n              },\n              {\n                \"value\": \"ad_personalization\",\n                \"displayValue\": \"ad_personalization\"\n              }\n            ],\n            \"simpleValueType\": true,\n            \"defaultValue\": \"ad_storage\",\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"codetype\",\n                \"paramValue\": \"conversion\",\n                \"type\": \"EQUALS\"\n              }\n            ],\n            \"help\": \"\",\n            \"valueValidators\": [\n              {\n                \"type\": \"NON_EMPTY\"\n              }\n            ]\n          },\n          {\n            \"type\": \"SELECT\",\n            \"name\": \"consent_name_user_data\",\n            \"displayName\": \"Consent Type for Personal Data Tracking\",\n            \"macrosInSelect\": false,\n            \"selectItems\": [\n              {\n                \"value\": \"ad_storage\",\n                \"displayValue\": \"ad_storage\"\n              },\n              {\n                \"value\": \"analytics_storage\",\n                \"displayValue\": \"analytics_storage\"\n              },\n              {\n                \"value\": \"ad_user_data\",\n                \"displayValue\": \"ad_user_data\"\n              },\n              {\n                \"value\": \"ad_personalization\",\n                \"displayValue\": \"ad_personalization\"\n              }\n            ],\n            \"simpleValueType\": true,\n            \"defaultValue\": \"ad_user_data\",\n            \"help\": \"\",\n            \"valueValidators\": [\n              {\n                \"type\": \"NON_EMPTY\"\n              }\n            ],\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"consent_handling\",\n                \"paramValue\": \"no_consent\",\n                \"type\": \"NOT_EQUALS\"\n              }\n            ]\n          },\n          {\n            \"type\": \"CHECKBOX\",\n            \"name\": \"disableUpdateListener\",\n            \"checkboxText\": \"Disable Consent Update Listener\",\n            \"simpleValueType\": true,\n            \"defaultValue\": false,\n            \"help\": \"If enabled, the request is automatically sent after consent is granted. Otherwise, you need to run the tags again to send the data.\"\n          }\n        ],\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"consent_handling\",\n            \"paramValue\": \"consent_mode\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      },\n      {\n        \"type\": \"GROUP\",\n        \"name\": \"consent_variable_config\",\n        \"displayName\": \"Consent Configuration\",\n        \"groupStyle\": \"NO_ZIPPY\",\n        \"subParams\": [\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"consent_variable_remarketing\",\n            \"displayName\": \"Consent Status For Remarketing\",\n            \"simpleValueType\": true,\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"codetype\",\n                \"paramValue\": \"retargeting\",\n                \"type\": \"EQUALS\"\n              }\n            ],\n            \"help\": \"Accept values true/false, 1/0, granted/denied\"\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"consent_variable_conversion\",\n            \"displayName\": \"Consent Status For Conversion Tracking\",\n            \"simpleValueType\": true,\n            \"enablingConditions\": [\n              {\n                \"paramName\": \"codetype\",\n                \"paramValue\": \"conversion\",\n                \"type\": \"EQUALS\"\n              }\n            ],\n            \"help\": \"Accept values true/false, 1/0, granted/denied\"\n          },\n          {\n            \"type\": \"TEXT\",\n            \"name\": \"consent_variable_user_data\",\n            \"displayName\": \"Consent Status For Transfer of Personal Data\",\n            \"simpleValueType\": true,\n            \"help\": \"Accept values true/false, 1/0, granted/denied\"\n          }\n        ],\n        \"enablingConditions\": [\n          {\n            \"paramName\": \"consent_handling\",\n            \"paramValue\": \"consent_variable\",\n            \"type\": \"EQUALS\"\n          }\n        ]\n      }\n    ],\n    \"enablingConditions\": [\n      {\n        \"paramName\": \"codetype\",\n        \"paramValue\": \"clear_user_identities\",\n        \"type\": \"NOT_EQUALS\"\n      }\n    ]\n  }\n]\n\n\n___SANDBOXED_JS_FOR_WEB_TEMPLATE___\n\n/**\n * Documentation\n * @see https://vyvojari.seznam.cz/identita/inzerent\n */\nconst log = require('logToConsole');\nconst callInWindow = require('callInWindow');\nconst injectScript = require('injectScript');\nconst queryPermission = require('queryPermission');\nconst Math = require('Math');\nconst makeInteger = require('makeInteger');\nconst isConsentGranted = require('isConsentGranted');\nconst addConsentListener = require('addConsentListener');\nconst templateStorage = require('templateStorage');\nconst Object = require('Object');\n\n\n// Set default values (due to compatibility with previous versions)\ndata.model = data.model || 'vars';\ndata.consent_handling = data.consent_handling || 'consent_mode';\ndata.consent_name_remarketing = data.consent_name_remarketing || 'ad_storage';\ndata.consent_name_conversion = data.consent_name_conversion || 'analytics_storage';\ndata.consent_name_user_data = data.consent_name_user_data || 'ad_user_data';\n\n\n\n\n/**\n * Evaluates status of a consent\n * Possible return values:\n *\n *   0     consent denied (or not granted)\n *   1     consent granted\n *\n * @param consent_type\n * @return integer\n */\nconst getConsentState = function(consentType) {\n  if (consentType === 'retargeting') consentType = 'remarketing';\n  if (consentType === 'ad_user_data') consentType = 'user_data';\n    \n  if (data.consent_handling === 'consent_mode') {\n    return makeInteger(isConsentGranted(data['consent_name_'+consentType]));\n\n  } else if (data.consent_handling === 'consent_variable') {\n    let consent = data['consent_variable_'+consentType];\n    if (consent === 'granted' || consent === 'true' || consent == true) return 1;\n    else if (consent === 'denied' || consent === 'false' || consent == false) return 0;\n    else return makeInteger(consent);\n  }\n  return 0;\n};\n\n\n\n\n/**\n * Checks if string contains at least one digit\n * @param str\n * @return boolean\n */\nconst containsAnyNumber = function(str) {\n  str = ''+str;\n  const nums = '0123456789';\n  for (let i = 0; i < str.length; i++) {\n    if (nums.indexOf(str[i]) > -1) return true;\n  }\n  return false;\n};\n\n\n\n/**\n * Set obj[key] proper value has value (is not null or undefied)\n *\n * @param object obj\n * @param string key\n * @param string|number mh\n * @param string|number vals\n * @return object\n */\nconst addParamIfSet = function(obj, key, mh, vals) {\n  if (data.model === 'mh' && mh) obj[key] = mh;\n  else if (vals) obj[key] = vals;\n  return obj;\n};\n\n\n/**\n * Parses string in param. If last part contains a digit, uses that part as street number\n *\n * @param string\n * @return array[street, number]\n */\nconst parseStreetNo = function(street) {\n  let parts = street.split(' ');\n  let no = null;\n  if (parts.length > 1 && containsAnyNumber(parts[parts.length - 1])) {\n    no = parts[parts.length - 1];\n    street = parts.slice(0, -1).join(' ');\n  } else {\n    no = '';\n  }\n  return [street, no];\n};\n\n\n\n/**\n * Evaluates user data. If some is available, it will be passed to Sklik script\n *\n * @param function callback\n * @return void\n */\nconst addUserData = function(onSuccess) {\n  if (!getConsentState(data.consent_name_user_data)) {\n    return onSuccess();\n  } else if (data.consent_handling === 'consent_mode') {\n    addConsentListener(data.consent_name_user_data, (consentType, granted) => {\n      if (consentType === data.consent_name_user_data && !granted) {\n        log('SKLIK: clearing user identity');\n        callInWindow('sznIVA.IS.clearIdentities', ['said', 'secid', 'eid', 'aid', 'tid']);\n      }\n    });\n  }\n  \n  let user = data.user || {};\n  let address = {};\n  let userData = {};\n  const callback = function() {\n    log('SKLIK: adding user data', userData);\n    return onSuccess();\n  };\n  \n  \n  \n  address = addParamIfSet(address, 'a1', user.country, data.country);\n  address = addParamIfSet(address, 'a2', user.city, data.city);\n  address = addParamIfSet(address, 'a3', user.street, data.street);\n  address = addParamIfSet(address, 'a4', null, data.streetNumber);\n  address = addParamIfSet(address, 'a5', user.postalCode, data.postalCode);\n  \n  if (address.a3 && !address.a4) {\n    let s = parseStreetNo(address.a3);\n    address.a3 = s[0];\n    address.a4 = s[1];\n  }\n  \n  userData = addParamIfSet(userData, 'eid', user.email, data.userEmail);\n  userData = addParamIfSet(userData, 'tid', user.phone, data.userPhone);\n  userData = addParamIfSet(userData, 'secid', user.secid, data.userCzechAdId);\n  userData = addParamIfSet(userData, 'said', user.said, data.userSeznamAdId);\n  if (Object.keys(address).length) {\n    userData.aid = address;\n  }\n  \n  if (Object.keys(userData).length === 0) {\n    return callback();\n  }\n  \n  \n  // encode user email if needed\n  if (userData.eid && (userData.eid.length != 64 || userData.eid.indexOf('@') > -1)) {\n    let digest = callInWindow('_gtm_mh.sha256', userData.eid); // try to call MH hash\n    if (digest) {\n      userData.eid = digest;\n    } else {\n      const sha256 = require('sha256');\n      sha256(userData.eid, (digest) => {\n        userData.eid = digest;\n        callInWindow('sznIVA.IS.updateIdentities', userData);\n        return callback();\n      }, (value) => { // failure\n        log('SKLIK RETARGETING: EID evaluation failed -> removing value', value);\n        userData.eid = undefined;\n        callInWindow('sznIVA.IS.updateIdentities', userData);\n        return callback();\n      }, {outputEncoding: 'hex'});\n      return;\n    }\n  }\n  \n  \n  callInWindow('sznIVA.IS.updateIdentities', userData);\n  return callback();\n};\n\n\n\n\n/**\n * Loads Sklik library and calls a callback\n *\n * @param function success callback\n * @param function error callback\n * @return void\n */\nconst loadLibrary = function(onSuccess, onError) {\n  if (templateStorage.getItem('isScriptLoaded')) {\n    return onSuccess();\n  }\n  \n  const url = 'https://c.seznam.cz/js/rc.js';\n  if (!queryPermission('inject_script', url)) {\n    log('SKLIK: loading script failed due to missing permissions');\n    return onError();\n  }\n  \n  injectScript(url, () => {\n    templateStorage.setItem('isScriptLoaded', true);\n    onSuccess();\n  }, () => {\n    log('SKLIK: loading script failure');\n    onError();\n  });\n};\n\n\n\n/**\n * Calls a Sklik function for sending request\n * \n * @param object parameters\n * @return void\n */\nconst sendRequest = function(params) {\n  log('SKLIK: sending '+data.codetype+' request with params', params);\n  const method = 'rc.'+data.codetype+'Hit';\n  callInWindow(method, params);\n  return data.gtmOnSuccess();\n};\n\n\n\n/**\n * Declare dummy function, it is rewritten below\n */\nlet prepareParams = function(consent) { return {}; };\n\n\n/**\n * Resolves dependency of functions (like loading library, adding used data etc.) while sending hit\n *\n * @param int consent\n * @return void\n */\nconst prepareAndSendHit = function(consent) {\n  let params = prepareParams(consent);\n  loadLibrary(function() {\n    addUserData(function() {\n      sendRequest(params);\n    });\n  }, data.gtmOnFailure);\n};\n\n\n\n/**\n * Resolves all things accoring a consent configuration\n * If consent mode is used, adds a consent listener if consent is not granted\n * \n * @param string consentType\n * @param function callback\n * @return void\n */\nconst resolveConsent = function(consentType, callback) {\n  let consent = getConsentState(consentType);\n  let consentName = data['consent_name_'+consentType];\n  \n  log('SKLIK consent for '+consentName+': ', consent, ', consent hadnling:', data.consent_handling, ', disableUpdateListener:', data.disableUpdateListener);\n  \n  if (consent === 0 && !data.disableUpdateListener && data.consent_handling === 'consent_mode') {\n    addConsentListener(consentName, (consentType, granted) => {\n\t  log('SKLIK '+data.codetype+': callback called, consent:', granted);\n      if (consentType === consentName && granted) {\n\t    callback(makeInteger(granted));\n\t  }\n    });\n    log('SKLIK '+data.codetype+': callback inited, consent:', consent);\n    data.gtmOnSuccess();\n  }\n  callback(consent);\n};\n\n\n\nif (data.codetype === 'retargeting') {\n\n  prepareParams = function(consent) {\n    log('SKLIK RETARGETING: preparing request', data, consent);\n    let params = {\n      'rtgId': data.id\n    };\n    \n    if (consent > -1) params.consent = consent;\n    if (data.url) params.rtgUrl = data.url;\n    \n\n    if (data.model === 'mh') {\n      if (data.page && data.page.type) {\n        if (data.page.type.indexOf('detail') > -1) {\n          params.pageType = 'offerdetail';\n        } else if (data.page.type.indexOf('category') > -1) {\n          params.pageType = 'category';\n        }\n      }\n      if (data.products && data.products.length) {\n        params.itemId = data.products[0].id || '';\n      }\n      if (data.page) {\n        let category = data.categorySeznamKey ? data.page[data.categorySeznamKey] : data.page.category;\n        if (category) {\n          params.category = category.split('/').join(' | ');\n        }\n      }\n\n    } else { // model vars\n      if (data.pagetype && ['category', 'offerdetail'].indexOf(data.pagetype) > -1) params.pageType = data.pagetype || '';\n      if (data.itemId) params.itemId = data.itemId || '';\n      if (data.category) params.category = (data.category || '').split('/').join(' | ');\n    }\n    \n    return params;\n  };\n \n  resolveConsent('remarketing', prepareAndSendHit);\n\n  \n\n} else if (data.codetype === 'conversion') {\n\n  prepareParams = function(consent) {\n    log('SKLIK CONVERSION: preparing request', data);\n    \n    let params = {\n      'id': data.id\n    };\n    \n    params = addParamIfSet(params, 'orderId', data.order ? data.order.id : null, data.orderId);\n    params = addParamIfSet(params, 'value', data.order ? data.order.revenue : null, data.revenue);\n    if (params.value) params.value = (Math.round(params.value * 100) / 100);\n    \n\n    if (data.zboziType) params.zboziType = data.zboziType;\n    if (data.zboziId) params.zboziId = data.zboziId;\n    \n    if (consent > -1) params.consent = consent;\n    \n    return params;\n  };\n\n  resolveConsent('conversion', prepareAndSendHit);  \n\n  \n  \n} else if (data.codetype === 'clear_user_identities') {\n  log('SKLIK CLEARING USER IDENTITY');\n  if (templateStorage.getItem('isScriptLoaded')) {\n    callInWindow('sznIVA.IS.clearIdentities', ['said', 'secid', 'eid', 'aid', 'tid']);\n  }\n  \n  \n} else {\n  log('Unknown codetype ' + data.codetype);\n  data.gtmOnFailure();\n}\n\n\n___WEB_PERMISSIONS___\n\n[\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"logging\",\n        \"versionId\": \"1\"\n      },\n      \"param\": [\n        {\n          \"key\": \"environments\",\n          \"value\": {\n            \"type\": 1,\n            \"string\": \"debug\"\n          }\n        }\n      ]\n    },\n    \"clientAnnotations\": {\n      \"isEditedByUser\": true\n    },\n    \"isRequired\": true\n  },\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"access_globals\",\n        \"versionId\": \"1\"\n      },\n      \"param\": [\n        {\n          \"key\": \"keys\",\n          \"value\": {\n            \"type\": 2,\n            \"listItem\": [\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"key\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"execute\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"rc\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  }\n                ]\n              },\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"key\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"execute\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"rc.retargetingHit\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  }\n                ]\n              },\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"key\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"execute\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"rc.conversionHit\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  }\n                ]\n              },\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"key\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"execute\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"_gtm_mh.sha256\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  }\n                ]\n              },\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"key\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"execute\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"sznIVA.IS.updateIdentities\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  }\n                ]\n              },\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"key\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"execute\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"sznIVA.IS.clearIdentities\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  }\n                ]\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"clientAnnotations\": {\n      \"isEditedByUser\": true\n    },\n    \"isRequired\": true\n  },\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"inject_script\",\n        \"versionId\": \"1\"\n      },\n      \"param\": [\n        {\n          \"key\": \"urls\",\n          \"value\": {\n            \"type\": 2,\n            \"listItem\": [\n              {\n                \"type\": 1,\n                \"string\": \"https://c.seznam.cz/\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"clientAnnotations\": {\n      \"isEditedByUser\": true\n    },\n    \"isRequired\": true\n  },\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"access_consent\",\n        \"versionId\": \"1\"\n      },\n      \"param\": [\n        {\n          \"key\": \"consentTypes\",\n          \"value\": {\n            \"type\": 2,\n            \"listItem\": [\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"consentType\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"ad_storage\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  }\n                ]\n              },\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"consentType\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"analytics_storage\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  }\n                ]\n              },\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"consentType\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"ad_user_data\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  }\n                ]\n              },\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"consentType\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"ad_personalization\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": false\n                  }\n                ]\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"clientAnnotations\": {\n      \"isEditedByUser\": true\n    },\n    \"isRequired\": true\n  },\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"access_template_storage\",\n        \"versionId\": \"1\"\n      },\n      \"param\": []\n    },\n    \"isRequired\": true\n  }\n]\n\n\n___TESTS___\n\nscenarios:\n- name: Template - script was injected\n  code: |-\n    runCode(retargetingData);\n    assertApi('injectScript').wasCalled();\n    assertApi('gtmOnSuccess').wasCalled();\n- name: Conversion - request was sent\n  code: |-\n    conversionData.zboziType = 'standard';\n    conversionData.zboziId = '54321';\n\n    const expected = {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'zboziType': 'standard',\n      'zboziId': '54321',\n      'consent': 1\n    };\n\n    runCode(conversionData);\n\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', expected);\n- name: Conversion - zbozi_cz\n  code: |-\n    conversionData.zboziType = 'standard';\n    conversionData.zboziId = '54321';\n\n    const expected = {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'zboziType': 'standard',\n      'zboziId': '54321',\n      'consent': 1\n    };\n\n    runCode(conversionData);\n\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', expected);\n- name: Conversion - models - mh - no data\n  code: |-\n    const mockData = {\n      'codetype': 'conversion',\n      'model': 'mh',\n      'id': 'ID123'\n    };\n\n    const expected = {\n      'id': 'ID123',\n      'consent': 1\n    };\n\n    // Call runCode to run the template's code.\n    runCode(mockData);\n\n    // Verify that the tag finished successfully.\n    assertApi('gtmOnSuccess').wasCalled();\n- name: Conversion - consent mode - approved\n  code: |-\n    let expected = {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'consent': 1\n    };\n\n    runCode(conversionData);\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', expected);\n- name: Conversion - consent mode - undefined\n  code: |-\n    let expected = {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'consent': 1\n    };\n\n    runCode(conversionData);\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', expected);\n- name: Conversion - consent mode - rejected\n  code: |-\n    consent = {\n      'ad_storage': false,\n      'ad_personalization': false,\n      'ad_user_data': false,\n      'analytics_storage': false,\n    };\n\n    let expected = {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'consent': 0\n    };\n\n    runCode(conversionData);\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', expected);\n- name: Conversion - consent from variable - approved\n  code: |-\n    conversionData.consent_handling = 'consent_variable';\n    conversionData.consent_variable_conversion = true;\n    conversionData.consent_variable_user_data = true;\n\n    let expected = {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'consent': 1\n    };\n\n    runCode(conversionData);\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', expected);\n    assertApi('addConsentListener').wasNotCalled();\n- name: Conversion - consent from variable - rejected\n  code: |-\n    conversionData.consent_handling = 'consent_variable';\n    conversionData.consent_variable_conversion = false;\n    conversionData.consent_variable_user_data = false;\n\n    let expected = {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'consent': 0\n    };\n\n    runCode(conversionData);\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', expected);\n    assertApi('addConsentListener').wasNotCalled();\n- name: Conversion - consent mode - rejected - listener was added\n  code: |-\n    consent.analytics_storage = false;\n    consent.ad_user_data = false;\n\n    runCode(conversionData);\n\n    let expected = {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'consent': 0\n    };\n\n    runCode(conversionData);\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', expected);\n    assertApi('addConsentListener').wasCalled();\n- name: Retargeting - basic retargeting\n  code: |-\n    mock('injectScript', function(url, onSuccess, onFailure) {\n      onSuccess();\n    });\n    mock('copyFromWindow', (name) => {\n      if (name === 'rc.retargetingHit') return function() {};\n    });\n\n\n    let expected = {\n      'rtgId': 'ID123',\n      'consent': 1\n    };\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', expected);\n- name: Retargeting - category page - standard\n  code: |-\n    retargetingData.model = 'vars';\n    retargetingData.pagetype = 'category';\n    retargetingData.category = 'Jidlo/Pecivo/Bile pecivo/Rohliky';\n\n    let expected = {\n      'rtgId': 'ID123',\n      'pageType': 'category',\n      'category': 'Jidlo | Pecivo | Bile pecivo | Rohliky',\n      'consent': 1\n    };\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', expected);\n- name: Retargeting - category page - with category\n  code: |-\n    retargetingData = {\n      'id': 'ID123',\n      'model': 'mh',\n      'codetype': 'retargeting',\n      'multipleHitsPerPage': false,\n      'consent_handling': 'consent_mode',\n      'consent_name_remarketing': 'ad_storage',\n      'consent_name_conversion': 'analytics_storage',\n      'consent_name_user_data': 'ad_user_data',\n      'disableUpdateListener': false,\n      'page': {\n        'type': 'category',\n        'category': 'A/B/C'\n      }\n    };\n\n    // Call runCode to run the template's code.\n    runCode(retargetingData);\n\n\n\n    let expected = {\n      \"rtgId\": \"ID123\",\n      \"consent\": 1,\n      \"pageType\": \"category\",\n      \"category\": \"A | B | C\"\n    };\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', expected);\n- name: Retargeting - offerdetail page - standard\n  code: |-\n    retargetingData.model = 'vars';\n    retargetingData.pagetype = 'offerdetail';\n    retargetingData.itemId = 'ITEM_123/4';\n\n    let expected = {\n      'rtgId': 'ID123',\n      'pageType': 'offerdetail',\n      'itemId': 'ITEM_123/4',\n      'consent': 1\n    };\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', expected);\n- name: Retargeting - invalid page type is ignored\n  code: |-\n    retargetingData.model = 'vars';\n    retargetingData.pagetype = 'NOT_VALID_PAGE_TYPE';\n    retargetingData.itemId = 'ITEM_123/4';\n\n    let expected = {\n      'rtgId': 'ID123',\n      'itemId': 'ITEM_123/4',\n      'consent': 1\n    };\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', expected);\n- name: Retargeting - custom URL\n  code: |-\n    retargetingData.url = 'https://example.com/foo?bar=1';\n\n    let expected = {\n      'rtgId': 'ID123',\n      'rtgUrl': 'https://example.com/foo?bar=1',\n      'consent': 1\n    };\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', expected);\n- name: Retargeting - added update listener\n  code: |-\n    retargetingData.consent_handling = 'consent_mode';\n    retargetingData.disableUpdateListener = false;\n    mock('isConsentGranted', function(consentType) {\n      return false;\n    });\n\n    runCode(retargetingData);\n\n    assertApi('addConsentListener').wasCalled();\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', {\"rtgId\":\"ID123\",\"consent\":0});\n- name: Retargeting - consent from variable - approved\n  code: |-\n    retargetingData.consent_handling = 'consent_variable';\n    retargetingData.consent_variable_remarketing = 1;\n\n    runCode(retargetingData);\n\n    let expected = {\n      'rtgId': 'ID123',\n      'consent': 1\n    };\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', expected);\n    assertApi('addConsentListener').wasNotCalled();\n- name: Retargeting - consent from variable - rejected\n  code: |-\n    retargetingData.consent_handling = 'consent_variable';\n    retargetingData.consent_variable_remarketing = 0;\n\n    runCode(retargetingData);\n\n    assertApi('isConsentGranted').wasNotCalled();\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', {\"rtgId\":\"ID123\",\"consent\":0});\n    assertApi('addConsentListener').wasNotCalled();\n- name: User Data - Retargeting - data from MH\n  code: |-\n    runCode(retargetingDataMH);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', {\n      'rtgId': 'ID123',\n      'pageType': 'offerdetail',\n      'itemId': 'ITEM_123/4',\n      'consent': 1\n    });\n    assertApi('callInWindow').wasCalledWith('sznIVA.IS.updateIdentities', {\n      'eid': '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f',\n      'tid': '+420777123456'\n    });\n- name: User Data -Retargeting- data from vars\n  code: |-\n    retargetingData.model = 'vars';\n    retargetingData.pagetype = 'category';\n    retargetingData.category = 'Jidlo/Pecivo/Bile pecivo/Rohliky';\n    retargetingData.userEmail = 'john.doe@example.com';\n    retargetingData.userPhone = '+420777123456';\n    retargetingData.country = 'Czechia';\n    retargetingData.city = 'Brno';\n    retargetingData.street = 'Veveří';\n    retargetingData.streetNumber = '123';\n    retargetingData.postalCode = '60200';\n\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', {\n      'rtgId': 'ID123',\n      'pageType': 'category',\n      'category': 'Jidlo | Pecivo | Bile pecivo | Rohliky',\n      'consent': 1\n    });\n    assertApi('callInWindow').wasCalledWith('sznIVA.IS.updateIdentities', {\n      'eid': '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f',\n      'tid': '+420777123456',\n      'aid': {\n        'a1': 'Czechia',\n        'a2': 'Brno',\n        'a3': 'Veveří',\n        'a4': '123',\n        'a5': '60200',\n      }\n    });\n- name: User Data - Retargeting - email hash from vars\n  code: |-\n    retargetingData.model = 'vars';\n    retargetingData.pagetype = 'category';\n    retargetingData.category = 'Jidlo/Pecivo/Bile pecivo/Rohliky';\n    retargetingData.userEmail = '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f';\n    retargetingData.userPhone = '+420777123456';\n    retargetingData.country = 'Czechia';\n    retargetingData.city = 'Brno';\n    retargetingData.street = 'Veveří';\n    retargetingData.streetNumber = '123';\n    retargetingData.postalCode = '60200';\n\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', {\n      'rtgId': 'ID123',\n      'pageType': 'category',\n      'category': 'Jidlo | Pecivo | Bile pecivo | Rohliky',\n      'consent': 1\n    });\n    assertApi('callInWindow').wasCalledWith('sznIVA.IS.updateIdentities', {\n      'eid': '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f',\n      'tid': '+420777123456',\n      'aid': {\n        'a1': 'Czechia',\n        'a2': 'Brno',\n        'a3': 'Veveří',\n        'a4': '123',\n        'a5': '60200',\n      }\n    });\n- name: User Data - Retargeting - consent denied\n  code: |-\n    retargetingData.consent_handling = 'consent_mode';\n    retargetingData.model = 'vars';\n    retargetingData.pagetype = 'category';\n    retargetingData.category = 'Jidlo/Pecivo/Bile pecivo/Rohliky';\n    retargetingData.userEmail = '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f';\n    retargetingData.userPhone = '+420777123456';\n    retargetingData.country = 'Czechia';\n    retargetingData.city = 'Brno';\n    retargetingData.street = 'Veveří';\n    retargetingData.streetNumber = '123';\n    retargetingData.postalCode = '60200';\n\n    mock('isConsentGranted', function(consentType) {\n      if (consentType === 'ad_user_data') return false;\n      return true;\n    });\n\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', {\n      'rtgId': 'ID123',\n      'pageType': 'category',\n      'category': 'Jidlo | Pecivo | Bile pecivo | Rohliky',\n      'consent': 1\n    });\n    assertApi('callInWindow').wasNotCalledWith('sznIVA.IS.updateIdentities', {\n      'eid': '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f',\n      'tid': '+420777123456',\n      'aid': {\n        'a1': 'Czechia',\n        'a2': 'Brno',\n        'a3': 'Veveří',\n        'a4': '123',\n        'a5': '60200',\n      }\n    });\n- name: User Data - Retargeting - consent denied from vars\n  code: |-\n    retargetingData.consent_handling = 'consent_variable';\n    retargetingData.consent_variable_remarketing = 1;\n    retargetingData.consent_variable_user_data = 0;\n    retargetingData.model = 'vars';\n    retargetingData.pagetype = 'category';\n    retargetingData.category = 'Jidlo/Pecivo/Bile pecivo/Rohliky';\n    retargetingData.userEmail = '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f';\n    retargetingData.userPhone = '+420777123456';\n    retargetingData.country = 'Czechia';\n    retargetingData.city = 'Brno';\n    retargetingData.street = 'Veveří';\n    retargetingData.streetNumber = '123';\n    retargetingData.postalCode = '60200';\n\n    mock('isConsentGranted', function(consentType) {\n      if (consentType === 'ad_user_data') return false;\n      return true;\n    });\n\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', {\n      'rtgId': 'ID123',\n      'pageType': 'category',\n      'category': 'Jidlo | Pecivo | Bile pecivo | Rohliky',\n      'consent': 1\n    });\n    assertApi('callInWindow').wasNotCalledWith('sznIVA.IS.updateIdentities', {\n      'eid': '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f',\n      'tid': '+420777123456',\n      'aid': {\n        'a1': 'Czechia',\n        'a2': 'Brno',\n        'a3': 'Veveří',\n        'a4': '123',\n        'a5': '60200',\n      }\n    });\n- name: User Data - Conversion - data with consent\n  code: |-\n    conversionData.model = 'mh';\n\n    conversionData.order = {\n      'id': 'T_112233',\n      'revenue': 99.10\n    };\n\n    conversionData.user = {\n      'email': 'john.doe@example.com',\n      'phone': '+420777123456',\n      'country': 'Czechia',\n      'city': 'Praha',\n      'street': 'Václavské náměstí 18',\n      'postalCode' : '16000'\n    };\n\n    runCode(conversionData);\n\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'consent': 1\n    });\n    assertApi('callInWindow').wasCalledWith('sznIVA.IS.updateIdentities', {\n      'eid': '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f',\n      'tid': '+420777123456',\n      'aid': {\n        'a1': 'Czechia',\n        'a2': 'Praha',\n        'a3': 'Václavské náměstí',\n        'a4': '18',\n        'a5': '16000',\n      }\n    });\n- name: User Data - Conversion - not provided street number\n  code: |-\n    conversionData.model = 'mh';\n\n    conversionData.order = {\n      'id': 'T_112233',\n      'revenue': 99.10\n    };\n\n    conversionData.user = {\n      'email': 'john.doe@example.com',\n      'phone': '+420777123456',\n      'country': 'Czechia',\n      'city': 'Praha',\n      'street': 'Václavské náměstí',\n      'postalCode' : '16000'\n    };\n\n    runCode(conversionData);\n\n    assertApi('callInWindow').wasCalledWith('rc.conversionHit', {\n      'id': 'ID123',\n      'value': 99.10,\n      'orderId': 'T_112233',\n      'consent': 1\n    });\n    assertApi('callInWindow').wasCalledWith('sznIVA.IS.updateIdentities', {\n      'eid': '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f',\n      'tid': '+420777123456',\n      'aid': {\n        'a1': 'Czechia',\n        'a2': 'Praha',\n        'a3': 'Václavské náměstí',\n        'a4': '',\n        'a5': '16000',\n      }\n    });\n- name: Clear User Identity - Function\n  code: |\n    const templateStorage = require('templateStorage');\n    templateStorage.setItem('isScriptLoaded', true);\n    runCode(clearIdentityData);\n    assertApi('callInWindow').wasCalledWith('sznIVA.IS.clearIdentities', ['said', 'secid', 'eid', 'aid', 'tid']);\n- name: Clear User Identity - From Listener\n  code: |-\n    retargetingData.model = 'vars';\n    retargetingData.pagetype = 'category';\n    retargetingData.category = 'Jidlo/Pecivo/Bile pecivo/Rohliky';\n    retargetingData.userEmail = '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f';\n\n    let removeConsentListener;\n\n    let listenerAdded = false;\n    let listenerCallback = function(consentStatus, listener) {\n      assertThat(consentStatus).isEqualTo('ad_user_data');\n      listenerAdded = true;\n      removeConsentListener = listener;\n    };\n\n\n    mock('addConsentListener', listenerCallback);\n    /**/\n\n\n    runCode(retargetingData);\n\n    assertApi('callInWindow').wasCalledWith('rc.retargetingHit', {\n      'rtgId': 'ID123',\n      'pageType': 'category',\n      'category': 'Jidlo | Pecivo | Bile pecivo | Rohliky',\n      'consent': 1\n    });\n    assertApi('callInWindow').wasCalledWith('sznIVA.IS.updateIdentities', {\n      'eid': '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f'\n    });\n\n\n    assertThat(listenerAdded).isTrue();\n\n\n    removeConsentListener('ad_user_data', false);\n\n    assertApi('callInWindow').wasCalledWith('sznIVA.IS.clearIdentities', ['said', 'secid', 'eid', 'aid', 'tid']);\nsetup: |-\n  let conversionData = {\n    'codetype': 'conversion',\n    'model': 'vars',\n    'id': 'ID123',\n    'revenue': 99.10,\n    'orderId': 'T_112233',\n    'consent_handling': 'consent_mode',\n    'consent_name_remarketing': 'ad_storage',\n    'consent_name_conversion': 'analytics_storage',\n    'consent_name_user_data': 'ad_user_data',\n    'disableUpdateListener': false\n  };\n\n\n  let retargetingData = {\n    'id': 'ID123',\n    'codetype': 'retargeting',\n    'multipleHitsPerPage': false,\n    'consent_handling': 'consent_mode',\n    'consent_name_remarketing': 'ad_storage',\n    'consent_name_conversion': 'analytics_storage',\n    'consent_name_user_data': 'ad_user_data',\n    'disableUpdateListener': false\n  };\n\n\n\n  let clearIdentityData = {\n    'id': 'ID123',\n    'codetype': 'clear_user_identities'\n  };\n\n\n\n  let retargetingDataMH = {\n    'id': 'ID123',\n    'codetype': 'retargeting',\n    'multipleHitsPerPage': false,\n    'consent_handling': 'consent_mode',\n    'consent_name_remarketing': 'ad_storage',\n    'consent_name_conversion': 'analytics_storage',\n    'consent_name_user_data': 'ad_user_data',\n    'disableUpdateListener': false,\n    'model': 'mh',\n    'page': {\n      'type': 'detail'\n    },\n    'products': [{\n      'id': 'ITEM_123/4'\n    }],\n    'user': {\n      'email': 'john.doe@example.com',\n      'phone': '+420777123456'\n    }\n  };\n\n\n  mock('injectScript', function(url, onSuccess, onFailure) {\n    onSuccess();\n  });\n\n  mock('sha256', function(inputString, onSuccess, onFailure, options) {\n    if (inputString === 'john.doe@example.com') {\n      return onSuccess('836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f');\n    }\n    onFailure();\n  });\n\n  let consent = {\n    'ad_storage': true,\n    'ad_personalization': true,\n    'ad_user_data': true,\n    'analytics_storage': true,\n  };\n\n  mock('isConsentGranted', function(consentType) {\n    switch (consentType) {\n      case 'ad_storage':\n        return consent.ad_storage;\n      case 'ad_personalization':\n        return consent.ad_personalization;\n      case 'ad_user_data':\n        return consent.ad_user_data;\n      case 'analytics_storage':\n        return consent.analytics_storage;\n    }\n    return false;\n  });\n\n\n___NOTES___\n\nCreated on 17. 5. 2020 0:30:14\n\n\n",
                "galleryReference": {
                    "host": "github.com",
                    "owner": "pavelsabatka",
                    "repository": "gtm-sklik",
                    "version": "03185286dda5218a05737782c900df52b555f7db",
                    "signature": "7d9c51d4f7bf0690ffc35cf424ea424ab52cfd24af2ca6d8e2c32793cf4eaf17",
                    "galleryTemplateId": "5NG3N"
                }
            },
            {
                "accountId": "58687",
                "containerId": "229129557",
                "templateId": "11",
                "name": "Template Monitor",
                "fingerprint": "1757082283547",
                "templateData": "___INFO___\n\n{\n  \"displayName\": \"Template Monitor\",\n  \"description\": \"A template for setting up tag monitoring in Google Tag Manager.\\nFor this tag to work, you need to allow name metadata for tags as [name].\\n\\n@version 2025-04-25\",\n  \"securityGroups\": [],\n  \"id\": \"cvt_temp_public_id\",\n  \"categories\": [\n    \"TAG_MANAGEMENT\",\n    \"UTILITY\"\n  ],\n  \"type\": \"TAG\",\n  \"version\": 1,\n  \"brand\": {\n    \"displayName\": \"\",\n    \"id\": \"github.com_gtm-templates-simo-ahava\"\n  },\n  \"containerContexts\": [\n    \"WEB\"\n  ]\n}\n\n\n___TEMPLATE_PARAMETERS___\n\n[\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"containerId\",\n    \"displayName\": \"Container ID\",\n    \"simpleValueType\": true,\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\"\n      }\n    ],\n    \"valueHint\": \"Use the built-in variable {{Container ID}}\"\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"containerVersion\",\n    \"displayName\": \"Container Version\",\n    \"simpleValueType\": true,\n    \"valueValidators\": [\n      {\n        \"type\": \"NON_EMPTY\"\n      }\n    ],\n    \"valueHint\": \"Use the built-in variable {{Container Version}}\"\n  },\n  {\n    \"type\": \"TEXT\",\n    \"name\": \"errorExecutionTime\",\n    \"displayName\": \"Minimal execution time tracked as error\",\n    \"simpleValueType\": true,\n    \"alwaysInSummary\": false,\n    \"canBeEmptyString\": true,\n    \"help\": \"If an execution time of tag is greater than this value, error will be tracked\",\n    \"valueValidators\": [\n      {\n        \"type\": \"REGEX\",\n        \"args\": [\n          \"^(|[0-9]+)$\"\n        ],\n        \"errorMessage\": \"Value must be empty or a number (integer; e.g. 123)\"\n      }\n    ]\n  }\n]\n\n\n___SANDBOXED_JS_FOR_WEB_TEMPLATE___\n\nconst log = require('logToConsole');\nconst addEventCallback = require('addEventCallback');\nconst readFromDataLayer = require('copyFromDataLayer');\nconst getTimestamp = require('getTimestamp');\nconst createQueue = require('createQueue');\nconst dataLayerPush = createQueue('dataLayer');\nconst templateStorage = require('templateStorage');\n\n\n// Get the dataLayer event that triggered the tag\nconst event = readFromDataLayer('event');\nconst eventTimestamp = getTimestamp();\n\n\n\nfunction checkTagStatus(tagid, tag) {\n  \n  if (tag.status !== 'success') {\n    templateStorage.setItem(tagid, true);\n    const info = {\n      'event': 'error',\n      'error': {\n        'type': 'tag_'+tag.status,\n        'category': 'Error in tracking/tag '+tag.status+'/'+tagid,\n        'message': 'Fired on event '+event+', container '+data.containerId+' of version ' +data.containerVersion+', execution time '+tag.executionTime+' ms',\n        'fatal': true\n      }\n    };\n    dataLayerPush(info);\n    log(\"TAG MONITOR: tag\", tagid, 'failed with status', tag.status, info);\n  }\n\n  if (data.errorExecutionTime && tag.executionTime > data.errorExecutionTime) {\n    templateStorage.setItem(tagid, true);\n    let info = {\n      'event': 'error',\n      'error': {\n        'type': 'tag_slow_execution',\n        'category': 'Slow tag execution time/'+tagid,\n        'message': 'Fired on event '+event+', container '+data.containerId+' of version ' +data.containerVersion+', execution time '+tag.executionTime+' ms, status '+tag.status,\n        'fatal': false\n      }\n    };\n    dataLayerPush(info);\n    log(\"TAG MONITOR: too long tag execution\", tagid, info);\n  }\n}\n\n\n\naddEventCallback((ctid, eventData) => {\n  log('EVENT STATUS', ctid, eventData);\n\n  const tags = eventData.tags.filter(t => t.disableErrorMonitoring !== 'true');   //Any object key can be defined in tags metadata settings.\n  const batches = [tags];\n  \n  batches.forEach(tags => {\n    tags.forEach((tag, idx) => {\n      let tagid = tag.name || ('ID '+tag.id);\n      if (!templateStorage.getItem(tagid)) {\n        checkTagStatus(tagid, tag);\n      }\n    });\n  });\n});\n\ndata.gtmOnSuccess();\n\n\n___WEB_PERMISSIONS___\n\n[\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"read_data_layer\",\n        \"versionId\": \"1\"\n      },\n      \"param\": [\n        {\n          \"key\": \"allowedKeys\",\n          \"value\": {\n            \"type\": 1,\n            \"string\": \"specific\"\n          }\n        },\n        {\n          \"key\": \"keyPatterns\",\n          \"value\": {\n            \"type\": 2,\n            \"listItem\": [\n              {\n                \"type\": 1,\n                \"string\": \"event\"\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"clientAnnotations\": {\n      \"isEditedByUser\": true\n    },\n    \"isRequired\": true\n  },\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"read_event_metadata\",\n        \"versionId\": \"1\"\n      },\n      \"param\": []\n    },\n    \"isRequired\": true\n  },\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"logging\",\n        \"versionId\": \"1\"\n      },\n      \"param\": [\n        {\n          \"key\": \"environments\",\n          \"value\": {\n            \"type\": 1,\n            \"string\": \"all\"\n          }\n        }\n      ]\n    },\n    \"clientAnnotations\": {\n      \"isEditedByUser\": true\n    },\n    \"isRequired\": true\n  },\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"access_globals\",\n        \"versionId\": \"1\"\n      },\n      \"param\": [\n        {\n          \"key\": \"keys\",\n          \"value\": {\n            \"type\": 2,\n            \"listItem\": [\n              {\n                \"type\": 3,\n                \"mapKey\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"key\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"read\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"write\"\n                  },\n                  {\n                    \"type\": 1,\n                    \"string\": \"execute\"\n                  }\n                ],\n                \"mapValue\": [\n                  {\n                    \"type\": 1,\n                    \"string\": \"dataLayer\"\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  },\n                  {\n                    \"type\": 8,\n                    \"boolean\": true\n                  }\n                ]\n              }\n            ]\n          }\n        }\n      ]\n    },\n    \"clientAnnotations\": {\n      \"isEditedByUser\": true\n    },\n    \"isRequired\": true\n  },\n  {\n    \"instance\": {\n      \"key\": {\n        \"publicId\": \"access_template_storage\",\n        \"versionId\": \"1\"\n      },\n      \"param\": []\n    },\n    \"isRequired\": true\n  }\n]\n\n\n___TESTS___\n\nscenarios: []\n\n\n___NOTES___\n\nCreated on 11/07/2019, 09:11:59\n\n\n"
            }
        ]
    }
}