1789595936
c05b9b66eacc8e11cfd97f370d355f8b-phpdoc%3A3682b8d35152650308c657ffe3efe911-c02230c1e59de57473dd207766c538e8
s:84796:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjc6ImFwaS5waHAiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YTowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6Mzp7czoxNToiXGpzb25SZXNwb25zZSgpIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXyI6OTp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6NDoiZGF0YSI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo2OiJzdGF0dXMiO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbiI6Mjp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbgBleHByZXNzaW9uIjtzOjM6IjIwMCI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRXhwcmVzc2lvbgBwYXJ0cyI7YTowOnt9fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToyNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMyO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTmV2ZXJfIjowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6MTU6Ilxqc29uUmVzcG9uc2UoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJqc29uUmVzcG9uc2UiO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AZG9jQmxvY2siO047czo2MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGhhc1JldHVybkJ5UmVmZXJlbmNlIjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAG1ldGFkYXRhIjthOjA6e31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AYXR0cmlidXRlcyI7YTowOnt9fXM6MTc6IlxyZXF1aXJlQXV0aEFwaSgpIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXyI6OTp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGFyZ3VtZW50cyI7YTowOnt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjU4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwByZXR1cm5UeXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoxNzoiXHJlcXVpcmVBdXRoQXBpKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNDoicmVxdWlyZUF1dGhBcGkiO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjM4OiJWYWxpZGEgc2VzacOzbiBhY3RpdmEgKyBiaW5kaW5nIElQL1VBLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyNTg6IkFib3J0YSBjb24gNDAxIHNpIG5vIHN1cGVyYSBsYSBjb21wcm9iYWNpw7NuLgoKUmVub21icmFkYSByZXNwZWN0byBhIGF1dGhfZ3VhcmQ6OnJlcXVpcmVBdXRoUGFnZSBwYXJhIGRpZmVyZW5jaWFyOgogLSByZXF1aXJlQXV0aEFwaSgpICDihpIgZW5kcG9pbnRzIChlc3RlIGFyY2hpdm8pIOKGkiByZXNwb25kZSBKU09OIDQwMQogLSByZXF1aXJlQXV0aFBhZ2UoKSDihpIgcMOhZ2luYXMgLnBocCAgICAgICAgICAgICDihpIgcmVkaXJpZ2UgYSBsb2dpbiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0IjoyOntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlIjtzOjA6IiI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6MDp7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NjA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBoYXNSZXR1cm5CeVJlZmVyZW5jZSI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBtZXRhZGF0YSI7YTowOnt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGF0dHJpYnV0ZXMiO2E6MDp7fX1zOjE4OiJccmVxdWlyZVBlcm1pc29zKCkiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fIjo5OntzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AYXJndW1lbnRzIjthOjA6e31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjY4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Nzk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjE4OiJccmVxdWlyZVBlcm1pc29zKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToicmVxdWlyZVBlcm1pc29zIjt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRnVuY3Rpb25fAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxMTU6IlZhbGlkYSBxdWUgZWwgdXN1YXJpbyB0aWVuZSBwZXJtaXNvIHBhcmEgdW5hIHDDoWdpbmEgc29icmUgVE9EQVMgbGFzCmNvbmV4aW9uZXMgcmVjaWJpZGFzLiBBYm9ydGEgY29uIDQwMyBzaSBmYWxsYS4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NTU6IkxlZSBgcGFnaW5hX2lkYCB5IGBjb25leGlvbl9pZHNgIChKU09OIGFycmF5KSBkZWwgUE9TVC4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjc6IgAqAHR5cGUiO086NDc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQc2V1ZG9UeXBlc1xBcnJheVNoYXBlIjoxOntzOjU0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBzZXVkb1R5cGVzXEFycmF5U2hhcGUAaXRlbXMiO2E6Mjp7aTowO086NTE6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQc2V1ZG9UeXBlc1xBcnJheVNoYXBlSXRlbSI6Mzp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQc2V1ZG9UeXBlc1xTaGFwZUl0ZW0Aa2V5IjtzOjg6InBhZ2luYUlkIjtzOjUzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBzZXVkb1R5cGVzXFNoYXBlSXRlbQB2YWx1ZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBzZXVkb1R5cGVzXFNoYXBlSXRlbQBvcHRpb25hbCI7YjowO31pOjE7Tzo1MToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBzZXVkb1R5cGVzXEFycmF5U2hhcGVJdGVtIjozOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBzZXVkb1R5cGVzXFNoYXBlSXRlbQBrZXkiO3M6MTE6ImNvbmV4aW9uSWRzIjtzOjUzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBzZXVkb1R5cGVzXFNoYXBlSXRlbQB2YWx1ZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUHNldWRvVHlwZXNcU2hhcGVJdGVtAG9wdGlvbmFsIjtiOjA7fX19fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NTQ7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjYwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGdW5jdGlvbl8AbWV0YWRhdGEiO2E6MDp7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZ1bmN0aW9uXwBhdHRyaWJ1dGVzIjthOjA6e319fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fXM6NDA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZW51bXMiO2E6MDp7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiYzAyMjMwYzFlNTlkZTU3NDczZGQyMDc3NjZjNTM4ZTgiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czoxNToiYmFja2VuZC9hcGkucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czo1MjUxMjoiPD9waHAKLyoqCiAqIEVucnV0YWRvciBwcmluY2lwYWwgZGUgbGEgQVBJIChGcm9udCAuLi8uLi9iYWNrZW5kL2NvbnRyb2xhZG9yZXMpLgogKgogKiDDmm5pY28gcHVudG8gZGUgZW50cmFkYSBwYXJhIHRvZGFzIGxhcyBwZXRpY2lvbmVzIEFKQVggZGVsIGZyb250ZW5kLgogKiBDb252ZW5jacOzbiBkZSBjdWVycG86CiAqCiAqICAgLSBUb2RvcyBsb3MgZW5kcG9pbnRzIHNvbiBQT1NULgogKiAgIC0gRWwgY2xpZW50ZSBlc3BlY2lmaWNhIGBhY3Rpb25gLgogKiAgIC0gUGFyYSBlbmRwb2ludHMgcXVlIG9wZXJhbiBzb2JyZSBCRHMgdHJhY2tpbmcsIGRlYmUgZW52aWFyOgogKiAgICAgICAgIHBhZ2luYV9pZCAgIDogaWQgZGUgbGEgcMOhZ2luYSBvcmlnZW4gZGUgbGEgcGV0aWNpw7NuCiAqICAgICAgICAgY29uZXhpb25faWRzOiBKU09OIGNvbiBsYSBsaXN0YSBkZSBjb25leGlvbl9pZHMgZWxlZ2lkb3MKICogICAgICAgICAgICAgICAgICAgICAgICh1bm8gc29sbyBwYXJhIGVzY3JpdHVyYXMsIHZhcmlvcyBwYXJhIGxlY3R1cmFzKQogKgogKiBAcGFja2FnZSB0cmFja2luZ1xiYWNrZW5kCiAqIEBkZXByZWNhdGVkIGNhbWJpYWRvIGEgYXBpL3YyLy4gU2UgbWFudGllbmUgZWwgYXJjaGl2byBlbiBjYXNvIGRlIGZhbGxvcwogKgogKi8KCnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9ib290c3RyYXAucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3V0aWxzL2F1dGhfZ3VhcmQucGhwJzsKLy8g4pSA4pSAIEhlbHBlcnMgSFRUUCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmZ1bmN0aW9uIGpzb25SZXNwb25zZShtaXhlZCAkZGF0YSwgaW50ICRzdGF0dXMgPSAyMDApOiBuZXZlcgp7CiAgICBlY2hvICRkYXRhOwogICAgb2JfZW5kX2NsZWFuKCk7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoJHN0YXR1cyk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwogICAgZWNobyBqc29uX2VuY29kZSgkZGF0YSwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSB8IEpTT05fVU5FU0NBUEVEX1NMQVNIRVMpOwogICAgZXhpdCgpOwp9CgovKioKICogVmFsaWRhIHNlc2nDs24gYWN0aXZhICsgYmluZGluZyBJUC9VQS4KICogQWJvcnRhIGNvbiA0MDEgc2kgbm8gc3VwZXJhIGxhIGNvbXByb2JhY2nDs24uCiAqCiAqIFJlbm9tYnJhZGEgcmVzcGVjdG8gYSBhdXRoX2d1YXJkOjpyZXF1aXJlQXV0aFBhZ2UgcGFyYSBkaWZlcmVuY2lhcjoKICogIC0gcmVxdWlyZUF1dGhBcGkoKSAg4oaSIGVuZHBvaW50cyAoZXN0ZSBhcmNoaXZvKSDihpIgcmVzcG9uZGUgSlNPTiA0MDEKICogIC0gcmVxdWlyZUF1dGhQYWdlKCkg4oaSIHDDoWdpbmFzIC5waHAgICAgICAgICAgICAg4oaSIHJlZGlyaWdlIGEgbG9naW4KICovCmZ1bmN0aW9uIHJlcXVpcmVBdXRoQXBpKCk6IHZvaWQKewogICAgaWYgKCFpc3NldCgkX1NFU1NJT05bJ3VzZXJfaWQnXSkgfHwgZW1wdHkoJF9TRVNTSU9OWydfX2lwJ10pIHx8IGVtcHR5KCRfU0VTU0lPTlsnX191YSddKSkgewogICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTm8gYXV0ZW50aWNhZG8uJ10sIDQwMSk7CiAgICB9CgogICAgaWYgKCRfU0VTU0lPTlsnX19pcCddICE9PSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSB8fCAkX1NFU1NJT05bJ19fdWEnXSAhPT0gKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSA/PyAnJykpIHsKICAgICAgICBzZXNzaW9uX2Rlc3Ryb3koKTsKICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ1Nlc2nDs24gaW52w6FsaWRhLiddLCA0MDEpOwogICAgfQoKICAgIGlmIChzZXNpb25FeHBpcmFkYVBvckluYWN0aXZpZGFkKCkpIHsKICAgICAgICBzZXNzaW9uX3Vuc2V0KCk7CiAgICAgICAgc2Vzc2lvbl9kZXN0cm95KCk7CiAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdTZXNpw7NuIGV4cGlyYWRhLicsICdleHBpcmVkJyA9PiB0cnVlXSwgNDAxKTsKICAgIH0KfQoKLyoqCiAqIFZhbGlkYSBxdWUgZWwgdXN1YXJpbyB0aWVuZSBwZXJtaXNvIHBhcmEgdW5hIHDDoWdpbmEgc29icmUgVE9EQVMgbGFzCiAqIGNvbmV4aW9uZXMgcmVjaWJpZGFzLiBBYm9ydGEgY29uIDQwMyBzaSBmYWxsYS4KICoKICogTGVlIGBwYWdpbmFfaWRgIHkgYGNvbmV4aW9uX2lkc2AgKEpTT04gYXJyYXkpIGRlbCBQT1NULgogKgogKiBAcmV0dXJuIGFycmF5e3BhZ2luYUlkOmludCwgY29uZXhpb25JZHM6aW50W119CiAqLwpmdW5jdGlvbiByZXF1aXJlUGVybWlzb3MoKTogYXJyYXkKewogICAgcmVxdWlyZUF1dGhBcGkoKTsKCiAgICAkcmF3ID0gJF9QT1NUWydjb25leGlvbl9pZHMnXSA/PyAnW10nOwogICAgJGlkcyA9IGpzb25fZGVjb2RlKCRyYXcsIHRydWUpOwogICAgaWYgKCFpc19hcnJheSgkaWRzKSB8fCBlbXB0eSgkaWRzKSkgewogICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnRmFsdGEgY29uZXhpb25faWRzIG8gZXN0w6EgdmFjw61vLiddLCA0MDApOwogICAgfQoKICAgIHJldHVybiBbJ2NvbmV4aW9uSWRzJyA9PiBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKGFycmF5X21hcCgnaW50dmFsJywgJGlkcykpKV07Cn0KCi8vIOKUgOKUgCBTb2xvIFBPU1Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gIT09ICdQT1NUJykgewogICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdNw6l0b2RvIG5vIHBlcm1pdGlkby4gU2UgcmVxdWllcmUgUE9TVC4nXSwgNDA1KTsKfQoKJGFjY2lvbiA9ICRfUE9TVFsnYWN0aW9uJ10gPz8gJF9HRVRbJ2FjdGlvbiddID8/ICcnOwoKdHJ5IHsKICAgIHN3aXRjaCAoJGFjY2lvbikgewoKICAgICAgICAvLyDigJTigJQgU0VTScOTTiDigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJQKCiAgICAgICAgY2FzZSAnbG9naW4nOgogICAgICAgICAgICAkbG9naW4gPSB0cmltKCRfUE9TVFsnbG9naW4nXSA/PyAnJyk7CiAgICAgICAgICAgICRwYXNzd29yZCA9ICRfUE9TVFsncGFzc3dvcmQnXSA/PyAnJzsKCiAgICAgICAgICAgIGlmICghJGxvZ2luIHx8ICEkcGFzc3dvcmQpIHsKICAgICAgICAgICAgICAgIHVzbGVlcChyYW5kb21faW50KDEwMDAwMCwgMzAwMDAwKSk7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhbiBjcmVkZW5jaWFsZXMuJ10sIDQwMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIOKUgOKUgCBJbnRlcmNlcGNpw7NuIFNVUEVSQUNDRVNTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKAlAogICAgICAgICAgICAkc3VwZXJVc2VyID0gJF9FTlZbJ1NVUEVSX1VTRVInXSA/PyBudWxsOwogICAgICAgICAgICAkc3VwZXJTZWNyZXQgPSAkX0VOVlsnU1VQRVJfU0VDUkVUJ10gPz8gbnVsbDsKCiAgICAgICAgICAgIGlmICgkc3VwZXJVc2VyICYmICRsb2dpbiA9PT0gJHN1cGVyVXNlcikgewogICAgICAgICAgICAgICAgJHBhc3N3b3JkSGFzaGVhZGEgPSBoYXNoX2htYWMoJ3NoYTI1NicsICdzdXBlcmFjY2VzcycsICRwYXNzd29yZCk7CgogICAgICAgICAgICAgICAgaWYgKGhhc2hfZXF1YWxzKCRzdXBlclNlY3JldCwgJHBhc3N3b3JkSGFzaGVhZGEpKSB7CiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9yZWdlbmVyYXRlX2lkKHRydWUpOwogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsndXNlcl9pZCddID0gLTE7CiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydub21icmUnXSA9ICdTdXBlciBBZG1pbic7CiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydyb2wnXSA9IDI7CiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydfX2lwJ10gPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ19fdWEnXSA9ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSA/PyAnJzsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2xvZ2dlZF9pbiddID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgZXJyb3JfbG9nKCdbU1VQRVJBQ0NFU1NdIEFjY2VzbyBleGl0b3NvIHwgSVA6ICcgLiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSk7CiAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IHRydWUsICdub21icmUnID0+ICdTdXBlciBBZG1pbiddKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdXNsZWVwKHJhbmRvbV9pbnQoMTAwMDAwMCwgMjAwMDAwMCkpOwogICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZygnW1NVUEVSQUNDRVNTXSBJbnRlbnRvIGZhbGxpZG8gfCBJUDogJyAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddKTsKICAgICAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0NyZWRlbmNpYWxlcyBpbmNvcnJlY3Rhcy4nXSwgNDAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNlc2lvbiA9IENvbnRyb2xhZG9yVXNlcnM6OmxvZ2luVXN1YXJpb1dlYigkbG9naW4sICRwYXNzd29yZCk7CgogICAgICAgICAgICBpZiAoZW1wdHkoJHNlc2lvbikpIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTG9naW4gaW5jb3JyZWN0byddLCA0MDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzZXNzaW9uX3JlZ2VuZXJhdGVfaWQodHJ1ZSk7CiAgICAgICAgICAgICRfU0VTU0lPTlsndXNlcl9pZCddID0gJHNlc2lvblsndXNlcl9pZCddOwogICAgICAgICAgICAkX1NFU1NJT05bJ25vbWJyZSddID0gJHNlc2lvblsnbm9tYnJlJ107CiAgICAgICAgICAgICRfU0VTU0lPTlsncm9sJ10gPSAkc2VzaW9uWyd0aXBvJ107CiAgICAgICAgICAgICRfU0VTU0lPTlsnX19pcCddID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CiAgICAgICAgICAgICRfU0VTU0lPTlsnX191YSddID0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddID8/ICcnOwogICAgICAgICAgICAkX1NFU1NJT05bJ2xvZ2dlZF9pbiddID0gdHJ1ZTsKCiAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiB0cnVlLCAnbm9tYnJlJyA9PiAkc2VzaW9uWydub21icmUnXV0pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnbG9nb3V0JzoKICAgICAgICAgICAgJF9TRVNTSU9OID0gW107CiAgICAgICAgICAgIGlmIChpbmlfZ2V0KCdzZXNzaW9uLnVzZV9jb29raWVzJykpIHsKICAgICAgICAgICAgICAgICRwID0gc2Vzc2lvbl9nZXRfY29va2llX3BhcmFtcygpOwogICAgICAgICAgICAgICAgc2V0Y29va2llKAogICAgICAgICAgICAgICAgICAgIHNlc3Npb25fbmFtZSgpLAogICAgICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICAgIHRpbWUoKSAtIDQyMDAwLAogICAgICAgICAgICAgICAgICAgICRwWydwYXRoJ10sCiAgICAgICAgICAgICAgICAgICAgJHBbJ2RvbWFpbiddLAogICAgICAgICAgICAgICAgICAgICRwWydzZWN1cmUnXSwKICAgICAgICAgICAgICAgICAgICAkcFsnaHR0cG9ubHknXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZXNzaW9uX2Rlc3Ryb3koKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IHRydWVdKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2NoZWNrX3Nlc3Npb24nOgogICAgICAgICAgICBpZiAoZW1wdHkoJF9TRVNTSU9OWyd1c2VyX2lkJ10pKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2VdLCA0MDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2VzaW9uRXhwaXJhZGFQb3JJbmFjdGl2aWRhZChmYWxzZSkpIHsKICAgICAgICAgICAgICAgIHNlc3Npb25fdW5zZXQoKTsKICAgICAgICAgICAgICAgIHNlc3Npb25fZGVzdHJveSgpOwogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXhwaXJlZCcgPT4gdHJ1ZV0sIDQwMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAganNvblJlc3BvbnNlKFsKICAgICAgICAgICAgICAgICdvaycgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICdub21icmUnID0+ICRfU0VTU0lPTlsnbm9tYnJlJ10gPz8gJycsCiAgICAgICAgICAgICAgICAncm9sJyA9PiAkX1NFU1NJT05bJ3JvbCddID8/IDAsCiAgICAgICAgICAgICAgICAncmVtYWluaW5nJyA9PiBtYXgoMCwgU0VTU0lPTl9USU1FT1VUX1NFQ09ORFMgLSAodGltZSgpIC0gKGludCkoJF9TRVNTSU9OWydsYXN0X2FjdGl2aXR5J10gPz8gdGltZSgpKSkpLAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3Nlc3Npb25fa2VlcGFsaXZlJzoKICAgICAgICAgICAgaWYgKGVtcHR5KCRfU0VTU0lPTlsndXNlcl9pZCddKSkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlXSwgNDAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBSZW51ZXZhIHNpIG5vIGhhIGV4cGlyYWRvIHlhCiAgICAgICAgICAgIGlmIChzZXNpb25FeHBpcmFkYVBvckluYWN0aXZpZGFkKHRydWUpKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uX3Vuc2V0KCk7CiAgICAgICAgICAgICAgICBzZXNzaW9uX2Rlc3Ryb3koKTsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2V4cGlyZWQnID0+IHRydWVdLCA0MDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGpzb25SZXNwb25zZShbCiAgICAgICAgICAgICAgICAnb2snID0+IHRydWUsCiAgICAgICAgICAgICAgICAncmVtYWluaW5nJyA9PiBTRVNTSU9OX1RJTUVPVVRfU0VDT05EUywKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAvLyDigJTigJQgQ0FNUEHDkUFzIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICdsb2FkX2NhbXBhbmlhcyc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICR1c2VySWQgPSAoaW50KSRfU0VTU0lPTlsndXNlcl9pZCddOwogICAgICAgICAgICAkcm9sID0gKGludCkoJF9TRVNTSU9OWydyb2wnXSA/PyAwKTsKCiAgICAgICAgICAgICRjb25leGlvbklkID0gKCRyb2wgPT09IDIpCiAgICAgICAgICAgICAgICA/IENvbmV4aW9uQ29uZmlnRGFvOjpnZXRGaXJzdEhhYmlsaXRhZGEoKQogICAgICAgICAgICAgICAgOiBDb25leGlvbkNvbmZpZ0Rhbzo6Z2V0Rmlyc3RGb3JVc2VyKCR1c2VySWQpOwoKICAgICAgICAgICAgaWYgKCRjb25leGlvbklkID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gdHJ1ZSwgJ3N0YXR1cycgPT4gMjAwLCAnZGF0YScgPT4gW11dKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yQ2FtcGFuaWFzOjpnZXRBbGwoJGNvbmV4aW9uSWQpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZ2V0X2NhbXBhbmlhX2FjdGl2YSc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy8gWWEgY2FjaGVhZGE6IGRldm9sdmVyIGRpcmVjdGFtZW50ZSBzaW4gdG9jYXIgQkQKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJF9TRVNTSU9OWydjYW1wYW5pYSddKSkgewogICAgICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiB0cnVlLCAnY2FtcGFuaWEnID0+IChpbnQpJF9TRVNTSU9OWydjYW1wYW5pYSddLCAnc3RhdHVzJyA9PiAyMDBdLCAyMDApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFJlc29sdmVyIGRlc2RlIGxhIHByaW1lcmEgY29uZXhpw7NuIGhhYmlsaXRhZGEKICAgICAgICAgICAgICAgICRjb25leGlvbmVzID0gQ29uZXhpb25Db25maWdEYW86OmdldEFsbCgpOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRjb25leGlvbmVzKSkgewogICAgICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiB0cnVlLCAnY2FtcGFuaWEnID0+IDAsICdzdGF0dXMnID0+IDIwMF0sIDIwMCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHByaW1lcmFJZCA9ICRjb25leGlvbmVzWzBdLT50b1B1YmxpY0FycmF5KClbJ2lkJ107CiAgICAgICAgICAgICAgICAkZGIgPSBDb25leGlvbjo6Z2V0RGJGb3IoKGludCkkcHJpbWVyYUlkKTsKICAgICAgICAgICAgICAgICRjYW1wYW5pYSA9IEJkRGVzdGlub0hlbHBlcjo6Z2V0Q2FtcGFuaWFBY3RpdmEoJGRiKTsKCiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gdHJ1ZSwgJ2NhbXBhbmlhJyA9PiAkY2FtcGFuaWEsICdzdGF0dXMnID0+IDIwMF0sIDIwMCk7CgogICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgIGVycm9yX2xvZygnW2FwaTpnZXRfY2FtcGFuaWFfYWN0aXZhXSAnIC4gJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gdHJ1ZSwgJ2NhbXBhbmlhJyA9PiAwLCAnc3RhdHVzJyA9PiAyMDBdLCAyMDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdjYW1iaWFyX2NhbXBhbmlhJyA6CiAgICAgICAgICAgIGlmICghaXNzZXQoJF9QT1NUWydpZF9zZWxlY2Npb25hZG8nXSkgfHwgIWlzc2V0KCRfUE9TVFsnZmVjaGFfc2VsZWNjaW9uYWRhJ10pKSB7CiAgICAgICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdGYWx0YW4gcGFyw6FtZXRyb3MgcmVxdWVyaWRvcy4nXSk7CiAgICAgICAgICAgICAgICBleGl0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBBY3R1YWxpemFtb3MgbGFzIHZhcmlhYmxlcyBlbiBsYSBzZXNpw7NuIGFjdHVhbAogICAgICAgICAgICAkX1NFU1NJT05bJ2NhbXBhbmlhX2lkJ10gPSAkX1BPU1RbJ2lkX3NlbGVjY2lvbmFkbyddOwogICAgICAgICAgICAkX1NFU1NJT05bJ2NhbXBhbmlhJ10gPSAkX1BPU1RbJ2ZlY2hhX3NlbGVjY2lvbmFkYSddOwoKICAgICAgICAgICAgZWNobyBqc29uX2VuY29kZShbJ29rJyA9PiB0cnVlXSk7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAvLyDigJTigJQgTkFWRUdBQ0nDk04g4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2xpc3RfbXlfcGFnZXMnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkcGFnaW5hcyA9IENvbnRyb2xhZG9yUGVybWlzb3M6OmdldE1pc1BhZ2luYXNQYXJhU2lkZWJhcigKICAgICAgICAgICAgICAgIChpbnQpJF9TRVNTSU9OWyd1c2VyX2lkJ10sCiAgICAgICAgICAgICAgICAoaW50KSgkX1NFU1NJT05bJ3JvbCddID8/IDApCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiB0cnVlLCAnZGF0YScgPT4gJHBhZ2luYXNdKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2xvYWRfcGVybWlzb3NfcHJpbmNpcGFsJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGhBcGkoKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGVybWlzb3M6OmdldFBhZ2luYVByaW5jaXBhbCgkX1NFU1NJT05bJ3VzZXJfaWQnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAvLyDigJTigJQgUEFORUwgQURNSU4g4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2xvYWRfdXNlcnMnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gJF9TRVNTSU9OWydyb2wnXSA9PSAwID8gWydvaycgPT4gZmFsc2UsICdzdGF0dXMnID0+IDQwMywgJ2Vycm9yJyA9PiAnTm8gYXV0b3JpemFkbyddIDoKICAgICAgICAgICAgICAgIFsnb2snID0+IHRydWUsICdzdGF0dXMnID0+IDIwMCwKICAgICAgICAgICAgICAgICAgICAnZGF0YScgPT4gQ29udHJvbGFkb3JQZXJtaXNvczo6Z2V0VXN1YXJpb3NFbkFtYml0bygKICAgICAgICAgICAgICAgICAgICAgICAgKGludCkkX1NFU1NJT05bJ3VzZXJfaWQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoJF9TRVNTSU9OWydyb2wnXSA/PyAwKQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAndXBkYXRlX3VzZXInOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JVc2Vyczo6dXBkYXRlVXNlcigkX1BPU1RbJ2RhdGEnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSA/PyAyMDApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAndXBkYXRlX3VzZXJfcGFzc3dvcmQnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JVc2Vyczo6dXBkYXRlVXNlclBhc3N3b3JkKCRfUE9TVFsnZGF0YSddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddID8/IDIwMCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkZWxldGVfdXNlcic6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICRoYXJkID0gJF9QT1NUWydoYXJkJ10gPz8gZmFsc2U7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSAkaGFyZCA9PT0gJ2hhcmQnCiAgICAgICAgICAgICAgICA/IENvbnRyb2xhZG9yVXNlcnM6OmRlbGV0ZVVzZXIoJF9QT1NUWydkYXRhJ10pCiAgICAgICAgICAgICAgICA6IENvbnRyb2xhZG9yVXNlcnM6OmRlbGV0ZUxvZ2ljVXN1YXJpbygkX1BPU1RbJ2RhdGEnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdjcmVhdGVfdXNlcic6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICRkYXRhID0gaXNzZXQoJF9QT1NUWydkYXRhJ10pID8ganNvbl9kZWNvZGUoJF9QT1NUWydkYXRhJ10sIHRydWUpIDogW107CgogICAgICAgICAgICBpZiAoaXNzZXQoJGRhdGFbJ3RpcG8nXSkgJiYgJGRhdGFbJ3RpcG8nXSA+ICRfU0VTU0lPTlsncm9sJ10pIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTm8gc2UgcHVlZGUgY3JlYXIgdW4gdXN1YXJpbyBkZSByb2wgc3VwZXJpb3InXSwgc3RhdHVzOiA0MDMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydwZXJtaXNvcyddKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yVXNlcnM6OmNyZWF0ZVVzdWFyaW9Db25QZXJtaXNvcygKICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ2RhdGEnXSwKICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3Blcm1pc29zJ10KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JVc2Vyczo6Y3JlYXRlVXN1YXJpb1dlYigkX1BPU1RbJ2RhdGEnXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2dldF91c2VyX21vZGFsX2RhdGEnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkdGFyZ2V0SWQgPSAoaW50KSgkX1BPU1RbJ2lkJ10gPz8gMCk7CiAgICAgICAgICAgIGlmICgkdGFyZ2V0SWQgPD0gMCkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdGYWx0YSBpZC4nXSwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZGF0b3MgPSBDb250cm9sYWRvclBlcm1pc29zOjpnZXREYXRvc01vZGFsVXN1YXJpbygKICAgICAgICAgICAgICAgIChpbnQpJF9TRVNTSU9OWyd1c2VyX2lkJ10sCiAgICAgICAgICAgICAgICAoaW50KSgkX1NFU1NJT05bJ3JvbCddID8/IDApLAogICAgICAgICAgICAgICAgJHRhcmdldElkCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiB0cnVlLCAnZGF0YScgPT4gJGRhdG9zXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICd1cGRhdGVfdXNlcl9wZXJtaXNvcyc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICR0YXJnZXRJZCA9IChpbnQpKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICAgICAgICAgJG51ZXZvcyA9IGpzb25fZGVjb2RlKCRfUE9TVFsncGVybWlzb3MnXSA/PyAne30nLCB0cnVlKTsKICAgICAgICAgICAgaWYgKCR0YXJnZXRJZCA8PSAwKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhIGlkLiddLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBlcm1pc29zOjpndWFyZGFyUGVybWlzb3NVc3VhcmlvKAogICAgICAgICAgICAgICAgKGludCkkX1NFU1NJT05bJ3VzZXJfaWQnXSwKICAgICAgICAgICAgICAgIChpbnQpKCRfU0VTU0lPTlsncm9sJ10gPz8gMCksCiAgICAgICAgICAgICAgICAkdGFyZ2V0SWQsCiAgICAgICAgICAgICAgICBpc19hcnJheSgkbnVldm9zKSA/ICRudWV2b3MgOiBbXQogICAgICAgICAgICApOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnbGlzdF9hZG1pbl9jZW50cm9zJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGhBcGkoKTsKICAgICAgICAgICAgJGNlbnRyb3MgPSBDb250cm9sYWRvclBlcm1pc29zOjpnZXRDZW50cm9zRWRpdGFibGVzRGVsQWRtaW4oCiAgICAgICAgICAgICAgICAoaW50KSRfU0VTU0lPTlsndXNlcl9pZCddLAogICAgICAgICAgICAgICAgKGludCkoJF9TRVNTSU9OWydyb2wnXSA/PyAwKQogICAgICAgICAgICApOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gdHJ1ZSwgJ2RhdGEnID0+ICRjZW50cm9zXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdsaXN0X2NhdGFsb2dvX3BhZ2luYXMnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gdHJ1ZSwgJ2RhdGEnID0+IFBlcm1pc29zRGFvOjpnZXRDYXRhbG9nb1BhZ2luYXMoKSxdKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIC8vIOKAlOKAlCBQQU5FTCBDRU5UUk9TIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICdsb2FkX2NvbmV4aW9uZXMnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JDb25leGlvbmVzOjpnZXRBbGwoKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2xvYWRfY29uZXhpb25lc19kaXNwb25pYmxlcyc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckNvbmV4aW9uZXM6OmdldE9uZVBhZ2UoJF9TRVNTSU9OWyd1c2VyX2lkJ10sICRfUE9TVFsncGFnaW5hJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnY3JlYXRlX2NvbmV4aW9uJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGhBcGkoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yQ29uZXhpb25lczo6Y3JlYXRlKCRkYXRhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3VwZGF0ZV9jb25leGlvbic6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydkYXRhJ10gPz8gJ3t9JywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckNvbmV4aW9uZXM6OnVwZGF0ZSgkZGF0YSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkZWxldGVfY29uZXhpb24nOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JDb25leGlvbmVzOjpkZWxldGUoJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnc2V0X2NvbmV4aW9uX2hhYmlsaXRhZGEnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JDb25leGlvbmVzOjpzZXRIYWJpbGl0YWRhKCRkYXRhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3Rlc3RfY29uZXhpb24nOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JDb25leGlvbmVzOjp0ZXN0KCRkYXRhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIC8vIOKAlOKAlCBQQU5FTCBQQUdJTkFTIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICdnZXRfcGFnaW5hcyc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgIGlmICgoJF9TRVNTSU9OWydyb2wnXSA/PyAtMSkgPCAxKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0FjY2VzbyBkZW5lZ2Fkby4nXSwgNDAzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhZ2luYXM6OmdldEFsbFBhZ2luYXMoKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2luc2VydF9wYWdpbmEnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICBpZiAoKCRfU0VTU0lPTlsncm9sJ10gPz8gLTEpIDwgMSkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdBY2Nlc28gZGVuZWdhZG8uJ10sIDQwMyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZGF0b3MgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/PyBbXTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRkYXRvcykpIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnRGF0b3MgdmFjw61vcy4nXSwgNDAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhZ2luYXM6Omluc2VydFBhZ2luYSgkZGF0b3MpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAndXBkYXRlX3BhZ2luYSc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgIGlmICgoJF9TRVNTSU9OWydyb2wnXSA/PyAtMSkgPCAxKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0FjY2VzbyBkZW5lZ2Fkby4nXSwgNDAzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkYXRvcyA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID8/IFtdOwogICAgICAgICAgICBpZiAoZW1wdHkoJGRhdG9zWydpZCddKSkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdGYWx0YSBpZC4nXSwgNDAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhZ2luYXM6OnVwZGF0ZVBhZ2luYSgkZGF0b3MpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGVsZXRlX3BhZ2luYSc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgIGlmICgoJF9TRVNTSU9OWydyb2wnXSA/PyAtMSkgPCAyKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ1NvbG8gZWwgc3VwZXIgcHVlZGUgZWxpbWluYXIgcMOhZ2luYXMuJ10sIDQwMyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaWQgPSAoaW50KSgkX1BPU1RbJ2lkJ10gPz8gMCk7CiAgICAgICAgICAgICRtb2RvID0gdHJpbSgkX1BPU1RbJ21vZG8nXSA/PyAnc29mdCcpOyAgLy8gJ2hhcmQnIHwgJ3NvZnQnCiAgICAgICAgICAgIGlmICghJGlkKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhIGlkLiddLCA0MDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFnaW5hczo6ZGVsZXRlUGFnaW5hKCRpZCwgJG1vZG8pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIFBBTkVMIENPTkZJR1VSQUNJT04g4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2dldF9jb25maWcnOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICBpZiAoKGludCkoJF9TRVNTSU9OWydyb2wnXSA/PyAtMSkgPCAxKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0FjY2VzbyBkZW5lZ2Fkby4nLCAnc3RhdHVzJyA9PiA0MDNdLCA0MDMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckNvbmZpZzo6Z2V0Q29uZmlndXJhY2lvbigpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnc2V0X2NvbmZpZyc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgIGlmICgoaW50KSgkX1NFU1NJT05bJ3JvbCddID8/IC0xKSA8IDEpIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnQWNjZXNvIGRlbmVnYWRvLicsICdzdGF0dXMnID0+IDQwM10sIDQwMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNsYXZlID0gKHN0cmluZykoJF9QT1NUWydjbGF2ZSddID8/ICcnKTsKICAgICAgICAgICAgJHZhbG9yID0gJF9QT1NUWyd2YWxvciddID8/IG51bGw7CiAgICAgICAgICAgIGlmICgkY2xhdmUgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhbiBwYXLDoW1ldHJvcy4nLCAnc3RhdHVzJyA9PiA0MDBdLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckNvbmZpZzo6Z3VhcmRhckNvbmZpZ3VyYWNpb24oJGNsYXZlLCAkdmFsb3IpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIFJFTkRJTUlFTlRPIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICdwYXJzZWFyX2ZpY2hlcm8nOgogICAgICAgICAgICByZXF1aXJlQXV0aEFwaSgpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JSZW5kaW1pZW50bzo6cGFyc2VhckZpY2hlcm8oJF9GSUxFUywgJF9QT1NUKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N1Y2Nlc3MnXSA/IDIwMCA6IDQwMCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhbmFkaXJfcmVuZGltaWVudG8nOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRvcyA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICdbXScsIHRydWUpOwogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRkYXRvcykgfHwgZW1wdHkoJGRhdG9zKSkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdObyBzZSBoYW4gcmVjaWJpZG8gZGF0b3MuJ10sIDQwMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUmVuZGltaWVudG86OmFuYWRpclJlbmRpbWllbnRvTXVsdGlwbGUoCiAgICAgICAgICAgICAgICAkY3R4Wydjb25leGlvbklkcyddLAogICAgICAgICAgICAgICAgJGRhdG9zCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdWNjZXNzJ10gPyAyMDAgOiA0MDApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIFBFU0FEQSDigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJQKCiAgICAgICAgY2FzZSAnbG9hZF9wZXNhZGFzJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkZGVzZGUgPSAkX1BPU1RbJ2Rlc2RlJ10gPz8gJyc7CiAgICAgICAgICAgICRoYXN0YSA9ICRfUE9TVFsnaGFzdGEnXSA/PyAnJzsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGVzYWRhOjpnZXRMaXN0YWRvKCRjdHhbJ2NvbmV4aW9uSWRzJ10sICRkZXNkZSwgJGhhc3RhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2dldF9yYW5nb19mZWNoYXNfcGVzYWRhJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGhBcGkoKTsKICAgICAgICAgICAgJHJhdyA9ICRfUE9TVFsnY29uZXhpb25faWRzJ10gPz8gJ1tdJzsKICAgICAgICAgICAgJGlkcyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoYXJyYXlfbWFwKCdpbnR2YWwnLCBqc29uX2RlY29kZSgkcmF3LCB0cnVlKSA/OiBbXSkpKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGVzYWRhOjpnZXRGZWNoYVJhbmdvKCRpZHMpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZ2V0X2ZpbHRyb3NfcGVzYWRhJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGhBcGkoKTsKICAgICAgICAgICAgJHJhdyA9ICRfUE9TVFsnY29uZXhpb25faWRzJ10gPz8gJ1tdJzsKICAgICAgICAgICAgJGlkcyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoYXJyYXlfbWFwKCdpbnR2YWwnLCBqc29uX2RlY29kZSgkcmF3LCB0cnVlKSA/OiBbXSkpKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGVzYWRhOjpnZXRGaWx0cm9zKCRpZHMpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZ2V0X3JlbmRpbWllbnRvX3Blc2FkYSc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICRjaWQgPSAoaW50KSgkX1BPU1RbJ2NvbmV4aW9uX2lkJ10gPz8gMCk7CiAgICAgICAgICAgICR0aWNrZXQgPSAoaW50KSgkX1BPU1RbJ2lkJ10gPz8gMCk7CiAgICAgICAgICAgIGlmICghJGNpZCB8fCAhJHRpY2tldCkganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdGYWx0YW4gcGFyw6FtZXRyb3MuJ10sIDQwMCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBlc2FkYTo6Z2V0UmVuZGltaWVudG8oJGNpZCwgJHRpY2tldCk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdpbnRyb2R1Y2lyX3JlbmRpbWllbnRvX3Blc2FkYSc6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICRjaWQgPSAoaW50KSgkX1BPU1RbJ2NvbmV4aW9uX2lkJ10gPz8gMCk7CiAgICAgICAgICAgICRpZCA9IChpbnQpKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICAgICAgICAgJHRpcG8xID0ganNvbl9kZWNvZGUoJF9QT1NUWyd0aXBvMSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkdGlwbzIgPSBqc29uX2RlY29kZSgkX1BPU1RbJ3RpcG8yJ10gPz8gJ3t9JywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgIGlmICghJGNpZCB8fCAhJGlkKSBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhbiBwYXLDoW1ldHJvcy4nXSwgNDAwKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGVzYWRhOjppbnRyb2R1Y2lyUmVuZGltaWVudG8oJGNpZCwgJGlkLCAkdGlwbzEsICR0aXBvMik7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhY2Npb25fcGVzYWRhJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGhBcGkoKTsKICAgICAgICAgICAgJGNpZCA9IChpbnQpKCRfUE9TVFsnY29uZXhpb25faWQnXSA/PyAwKTsKICAgICAgICAgICAgJGlkID0gKGludCkoJF9QT1NUWydpZCddID8/IDApOwogICAgICAgICAgICAkYWNjaW9uID0gJF9QT1NUWydhY2Npb24nXSA/PyAnJzsKICAgICAgICAgICAgJHZhbG9yID0gJF9QT1NUWyd2YWxvciddID8/IG51bGw7CiAgICAgICAgICAgIGlmICghJGNpZCB8fCAhJGlkIHx8ICEkYWNjaW9uKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhbiBwYXLDoW1ldHJvcy4nXSwgNDAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRhY2Npb24gPT09ICdHZW5lcmFyRUFOJykgewogICAgICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGVzYWRhOjpnZW5lcmFyRUFOKCRjaWQsICRpZCk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkYWNjaW9uID09PSAnRWxpbWluYXJSZW5kaW1pZW50bycpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBlc2FkYTo6ZWxpbWluYXJSZW5kaW1pZW50bygkY2lkLCAkaWQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGVzYWRhOjphY2Npb25QZXNhZGEoJGNpZCwgJGlkLCAkYWNjaW9uLCAkdmFsb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdlZGl0YXJfcGVzYWRhJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGhBcGkoKTsKICAgICAgICAgICAgJGNpZCA9IChpbnQpKCRfUE9TVFsnY29uZXhpb25faWQnXSA/PyAwKTsKICAgICAgICAgICAgJGlkID0gKGludCkoJF9QT1NUWydpZCddID8/IDApOwogICAgICAgICAgICAkY2FsaWRhZCA9IChpbnQpKCRfUE9TVFsnY2FsaWRhZF9pZCddID8/IDApOwogICAgICAgICAgICAkdmFyaWVkYWQgPSAoaW50KSgkX1BPU1RbJ3ZhcmllZGFkX2lkJ10gPz8gMCk7CiAgICAgICAgICAgICRraWxvcyA9IChmbG9hdCkoJF9QT1NUWydraWxvcyddID8/IDApOwogICAgICAgICAgICAkdG9sdmEgPSAoc3RyaW5nKSgkX1BPU1RbJ3RvbHZhJ10gPz8gJycpOwogICAgICAgICAgICBpZiAoISRjaWQgfHwgISRpZCkganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdGYWx0YW4gcGFyw6FtZXRyb3MuJ10sIDQwMCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBlc2FkYTo6ZWRpdGFyUGVzYWRhKCRjaWQsICRpZCwgJGNhbGlkYWQsICR2YXJpZWRhZCwgJGtpbG9zLCAkdG9sdmEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIERFUE9TSVRPIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICdhanVzdGFyRGVwb3NpdG8nOgogICAgICAgICAgICAkY29uZXhpb25faWQgPSAoaW50KSRfUE9TVFsnY29uZXhpb25faWQnXTsKICAgICAgICAgICAgJHN1YnRpcG9wcmltYXJpbyA9IChpbnQpJF9QT1NUWydpZCddID8/IDA7CiAgICAgICAgICAgICR0aXBvID0gJF9QT1NUWyd0aXBvJ10gPz8gMDsKICAgICAgICAgICAgJHZhbG9yID0gJF9QT1NUWyd2YWxvciddID8/ICcnOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JEZXBvc2l0bzo6YWp1c3RhckRlcG9zaXRvKCRjb25leGlvbl9pZCwgJHN1YnRpcG9wcmltYXJpbywKICAgICAgICAgICAgICAgICR0aXBvLCAkdmFsb3IpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10gPyAyMDAgOiA0MDApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnYW5hZGlyQW5hbGlzaXMnOgogICAgICAgICAgICAkY29uZXhpb25faWQgPSAoaW50KSRfUE9TVFsnY29uZXhpb25faWQnXTsKICAgICAgICAgICAgJGlkRGVwb3NpdG8gPSAoaW50KSRfUE9TVFsnaWREZXBvc2l0byddID8/IDA7CgogICAgICAgICAgICBpZiAoJGlkRGVwb3NpdG8gPT09IDApIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZSgiIiwgNDAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHVzZXJmaWxlID0gJF9GSUxFU1sndXNlcmZpbGUnXSA/PyAnJzsKCiAgICAgICAgICAgIGlmICgkdXNlcmZpbGUgPT09IDApIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZSgiIiwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JEZXBvc2l0bzo6YW5hZGlyQW5hbGlzaXMoJGNvbmV4aW9uX2lkLCAkaWREZXBvc2l0bywgJHVzZXJmaWxlKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddID8gMjAwIDogNDAwKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2FuYWRpck9ic2VydmFjaW9uZXMnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgIGlmIChlbXB0eSgkX1BPU1RbJ2RlcG9zaXRvJ10pIHx8IGVtcHR5KCRfUE9TVFsnb2JzZXJ2YWNpb25lcyddKSkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdmYWx0YW4gZGF0b3MnXSwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZGVwb3NpdG8gPSAoaW50KSRfUE9TVFsnZGVwb3NpdG8nXTsKICAgICAgICAgICAgJG9ic2VydmFjaW9uZXMgPSAoc3RyaW5nKSRfUE9TVFsnb2JzZXJ2YWNpb25lcyddOwoKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yRGVwb3NpdG86Omluc2VydE9ic2VydmFjaW9uZXMoJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJGRlcG9zaXRvLCAkb2JzZXJ2YWNpb25lcyk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSA/IDIwMCA6IDQwMCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkZXRhbGxlRGVwb3NpdG8nOgogICAgICAgICAgICAkY29uZXhpb25faWQgPSAoaW50KSRfUE9TVFsnY29uZXhpb25faWQnXTsKICAgICAgICAgICAgJHN1YnRpcG9wcmltYXJpbyA9IChpbnQpJF9QT1NUWydzdWJ0aXBvcHJpbWFyaW8nXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yRGVwb3NpdG86OmRldGFsbGVEZXBvc2l0bygkY29uZXhpb25faWQsICRzdWJ0aXBvcHJpbWFyaW8pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkb1siZGF0YSJdLCAkcmVzdWx0YWRvWydzdGF0dXMnXSA/IDIwMCA6IDQwMCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdvYnRlbmVyQm9kZWdhQWNvcmRlb24nOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7IC8vIHlhIHZhbGlkYSBxdWUgY29uZXhpb25JZHMgbm8gZXN0w6kgdmFjw61vCiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckRlcG9zaXRvOjpvYnRlbmVyQm9kZWdhQWNvcmRlb24oJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvWyJkYXRhIl0sICRyZXN1bHRhZG9bJ3N0YXR1cyddID8gMjAwIDogNDAwKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ29idGVuZXJGaWx0cmFkb0RlcG9zaXRvJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOyAvLyB5YSB2YWxpZGEgcXVlIGNvbmV4aW9uSWRzIG5vIGVzdMOpIHZhY8OtbwogICAgICAgICAgICAkbm9tYnJlYm9kZWdhID0gKHN0cmluZykkX1BPU1RbJ25vbWJyZWJvZGVnYSddOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JEZXBvc2l0bzo6dmVyRmlsdHJhZG9zKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0sICRub21icmVib2RlZ2EpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10gPyAyMDAgOiA0MDApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZ2V0X2RlcG9zaXRvcyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yRGVwb3NpdG86OmdldExpc3RhZG8oJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdvYnRlbmVyU2FsaWRhc011ZXN0cmFEZXBvc2l0byc6CiAgICAgICAgICAgICRjb25leGlvbl9pZCA9IChpbnQpJF9QT1NUWydjb25leGlvbl9pZCddOwogICAgICAgICAgICAkc3VidGlwb3ByaW1hcmlvID0gKGludCkkX1BPU1RbJ3N1YnRpcG9wcmltYXJpbyddOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JEZXBvc2l0bzo6b2J0ZW5lclNhbGlkYXNNdWVzdHJhRGVwb3NpdG8oJGNvbmV4aW9uX2lkLCAkc3VidGlwb3ByaW1hcmlvKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG9bImRhdGEiXSwgJHJlc3VsdGFkb1snc3RhdHVzJ10gPyAyMDAgOiA0MDApOwoKICAgICAgICBjYXNlICd2ZXJBbmFsaXNpcyc6CiAgICAgICAgICAgICRjb25leGlvbl9pZCA9IChpbnQpJF9QT1NUWydjb25leGlvbl9pZCddOwogICAgICAgICAgICAkaWQgPSAoaW50KSRfUE9TVFsnaWQnXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yRGVwb3NpdG86OnZlckFuYWxpc2lzKCRjb25leGlvbl9pZCwgJGlkKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddID8gMjAwIDogNDAwKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2FuYWRpckxvdGVBY3R1YWwnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkZXBvc2l0byA9IChzdHJpbmcpJF9QT1NUWydkZXBvc2l0byddOwogICAgICAgICAgICAkbG90ZWFjdHVhbCA9IChzdHJpbmcpJF9QT1NUWydsb3RlYWN0dWFsJ107CiAgICAgICAgICAgICRyZXMgPSBDb250cm9sYWRvckRlcG9zaXRvOjppbnNlcnRMb3RlQWN0dWFsKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0sICRkZXBvc2l0bywgJGxvdGVhY3R1YWwpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlcywgJHJlc1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIEFDRUlURSDigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJQKCiAgICAgICAgY2FzZSAnYW5hZGlyTXVlc3RyYUFjZWl0ZSc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJHJlcyA9IENvbnRyb2xhZG9yQWNlaXRlOjppbnNlcnRBY2VpdGUoJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJF9QT1NUWydkYXRvcyddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXMsICRyZXNbJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIC8vIOKAlOKAlCBCT0RFR0Eg4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2dldF9saXN0YWRvX2JvZGVnYXMnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckJvZGVnYTo6Z2V0TGlzdGFkbygkY3R4Wydjb25leGlvbklkcyddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2dldF9kZXBvc2l0b3NfYm9kZWdhJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkaWRCb2RlZ2EgPSAoaW50KSgkX1BPU1RbJ2lkQm9kZWdhJ10gPz8gMCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckJvZGVnYTo6Z2V0RGVwb3NpdG9zQnlCb2RlZ2EoJGlkQm9kZWdhLCAkY3R4Wydjb25leGlvbklkcyddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2dldF9kZXBvc2l0b3NfcGFyYV9hc2lnbmFyJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkbW9kbyA9IChpbnQpKCRfUE9TVFsnbW9kbyddID8/IDEpOyAgLy8gMD10b2RvcyB8IDE9bm8gYXNpZ25hZG9zCiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckJvZGVnYTo6Z2V0RGVwb3NpdG9zUGFyYUFzaWduYXIoJG1vZG8sICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnaW5zZXJ0X2JvZGVnYSc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJG5vbWJyZSA9IHRyaW0oJF9QT1NUWydub21icmUnXSA/PyAnJyk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckJvZGVnYTo6aW5zZXJ0Qm9kZWdhKCRub21icmUsICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAndXBkYXRlX25vbWJyZV9ib2RlZ2EnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRpZCA9IChpbnQpKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICAgICAgICAgJG5vbWJyZSA9IHRyaW0oKHN0cmluZykoJF9QT1NUWydub21icmUnXSA/PyAnJykpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JCb2RlZ2E6OnVwZGF0ZU5vbWJyZUJvZGVnYSgkaWQsICRub21icmUsICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnaW5zZXJ0X2RlcG9zaXRvJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkbm9tYnJlID0gdHJpbSgkX1BPU1RbJ25vbWJyZSddID8/ICcnKTsKICAgICAgICAgICAgJGlkQm9kZWdhID0gKGludCkoJF9QT1NUWydpZEJvZGVnYSddID8/IDApOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JCb2RlZ2E6Omluc2VydERlcG9zaXRvKCRub21icmUsICRpZEJvZGVnYSwgJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhc2lnbmFyX2RlcG9zaXRvc19ib2RlZ2EnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRpZEJvZGVnYSA9IChpbnQpKCRfUE9TVFsnaWRCb2RlZ2EnXSA/PyAwKTsKICAgICAgICAgICAgJGRlcG9zaXRvcyA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGVwb3NpdG9zJ10gPz8gJ1tdJywgdHJ1ZSkgPz8gW107CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckJvZGVnYTo6YXNpZ25hckRlcG9zaXRvcygkaWRCb2RlZ2EsICRkZXBvc2l0b3MsICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIENMSUVOVEVTIOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlOKAlAoKICAgICAgICBjYXNlICdnZXRfY2F0YWxvZ29zX2NsaWVudGVzJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JDbGllbnRlOjpnZXRDYXRhbG9nb3MoJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdnZXRfY2xpZW50ZXMnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckNsaWVudGU6OmdldENsaWVudGVzKCRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZ2V0X2NsaWVudGVzX3NhbGlkYXMnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclNhbGlkYXM6OmdldENsaWVudGVzKCRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnY3JlYXJfY2xpZW50ZSc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRkYXRhKSkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdObyBzZSByZWNpYmllcm9uIGRhdG9zLiddLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckNsaWVudGU6OmNyZWFyKCRjdHhbJ2NvbmV4aW9uSWRzJ10sICRkYXRhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKCiAgICAgICAgY2FzZSAnYWN0dWFsaXphcl9jbGllbnRlJzoKICAgICAgICAgICAgcmVxdWlyZUF1dGhBcGkoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRkYXRhKSkgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdObyBzZSByZWNpYmllcm9uIGRhdG9zLiddLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckNsaWVudGU6OmFjdHVhbGl6YXIoJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwoKICAgICAgICAvLyDigJTigJQgTUFUUklDVUxBIENMSUVOVEUKCiAgICAgICAgY2FzZSAnZ2V0X21hdHJpY3VsYXNfY2xpZW50ZSc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGlkQ2xpZW50ZSA9IChpbnQpKCRfUE9TVFsnaWRDbGllbnRlJ10gPz8gMCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclNhbGlkYXM6OmdldE1hdHJpY3VsYXNDbGllbnRlKCRpZENsaWVudGUsICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnYWRkX21hdHJpY3VsYV9jbGllbnRlJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkaWRDbGllbnRlID0gKGludCkoJF9QT1NUWydpZENsaWVudGUnXSA/PyAwKTsKICAgICAgICAgICAgJG1hdHJpY3VsYSA9IHRyaW0oKHN0cmluZykoJF9QT1NUWyduTWF0cmljdWxhJ10gPz8gJycpKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yU2FsaWRhczo6YWRkTWF0cmljdWxhQ2xpZW50ZSgkaWRDbGllbnRlLCAkbWF0cmljdWxhLCAkY3R4Wydjb25leGlvbklkcyddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIC8vIOKAlOKAlCBQUk9WRUVET1JFUyDigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJQKCiAgICAgICAgY2FzZSAnZ2V0X2NhdGFsb2dvc19wcm92ZWVkb3Jlcyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUHJvdmVlZG9yOjpnZXRDYXRhbG9nb3MoJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdnZXRfcHJvdmVlZG9yZXNfZW50cmFkYXMnOgogICAgICAgIGNhc2UgJ2dldF9wcm92ZWVkb3Jlcyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUHJvdmVlZG9yOjpnZXRMaXN0YWRvKCRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnY3JlYXJfcHJvdmVlZG9yJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkZGF0b3MgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/PyBbXTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRkYXRvcykpIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnRGF0b3MgdmFjw61vcy4nXSwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JQcm92ZWVkb3I6OmNyZWFyKCRkYXRvcywgJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhY3R1YWxpemFyX3Byb3ZlZWRvcic6CiAgICAgICAgICAgIHJlcXVpcmVBdXRoQXBpKCk7CiAgICAgICAgICAgICRkYXRvcyA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID8/IFtdOwogICAgICAgICAgICBpZiAoZW1wdHkoJGRhdG9zWydpZCddKSB8fCBlbXB0eSgkZGF0b3NbJ2NvbmV4aW9uX2lkJ10pKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhbiBpZCBvIGNvbmV4aW9uX2lkLiddLCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclByb3ZlZWRvcjo6YWN0dWFsaXphcigkZGF0b3MpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4pSA4pSAIE1BVFJJQ1VMQSBQUk9WRUVET1Ig4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgogICAgICAgIGNhc2UgJ2dldF9tYXRyaWN1bGFzX3Byb3ZlZWRvcic6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGlkUHJvdmVlZG9yID0gKGludCkoJF9QT1NUWydpZFByb3ZlZWRvciddID8/IDApOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JNYXRyaWN1bGFQcm92ZWVkb3I6OmdldEJ5UHJvdmVlZG9yKCRpZFByb3ZlZWRvciwgJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhZGRfbWF0cmljdWxhX3Byb3ZlZWRvcic6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGlkUHJvdmVlZG9yID0gKGludCkoJF9QT1NUWydpZFByb3ZlZWRvciddID8/IDApOwogICAgICAgICAgICAkbWF0cmljdWxhID0gdHJpbSgoc3RyaW5nKSgkX1BPU1RbJ25NYXRyaWN1bGEnXSA/PyAnJykpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JNYXRyaWN1bGFQcm92ZWVkb3I6Omluc2VydCgkaWRQcm92ZWVkb3IsICRtYXRyaWN1bGEsICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4pSA4pSAIEVOVFJBREFTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKICAgICAgICBjYXNlICdnZXRfbGlzdGFkb19lbnRyYWRhcyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNFU1Q6OmdldExpc3RhZG9FbnRyYWRhcygkY3R4Wydjb25leGlvbklkcyddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2dldF9kZXRhbGxlX2VudHJhZGEnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRpZCA9IChpbnQpKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNFU1Q6OmdldERldGFsbGVFbnRyYWRhKCRpZCwgJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdjcmVhcl9lbnRyYWRhJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkZGF0b3MgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdG9zJ10gPz8gJ3t9JywgdHJ1ZSkgPz8gW107CiAgICAgICAgICAgIGlmIChlbXB0eSgkZGF0b3MpKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0RhdG9zIHZhY8Otb3MuJ10sIDQwMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JFbnRyYWRhczo6Y3JlYXJFbnRyYWRhKCRkYXRvcywgJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAvLyDilIDilIAgU0FMSURBUyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCiAgICAgICAgY2FzZSAnZ2V0X2xpc3RhZG9fc2FsaWRhcyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNFU1Q6OmdldExpc3RhZG9TYWxpZGFzKCRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZ2V0X2RldGFsbGVfc2FsaWRhJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkaWQgPSAoaW50KSgkX1BPU1RbJ2lkJ10gPz8gMCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhcnRpZGFzRVNUOjpnZXREZXRhbGxlU2FsaWRhKCRpZCwgJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdjcmVhcl9zYWxpZGEnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRvcyA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0b3MnXSA/PyAne30nLCB0cnVlKSA/PyBbXTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRkYXRvcykpIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnRGF0b3MgdmFjw61vcy4nXSwgNDAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclNhbGlkYXM6OmNyZWFyU2FsaWRhKCRkYXRvcywgJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAvLyDilIDilIAgVFJBU0lFR09TIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKICAgICAgICBjYXNlICdnZXRfbGlzdGFkb190cmFzaWVnb3MnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhcnRpZGFzRVNUOjpnZXRMaXN0YWRvVHJhc2llZ29zKCRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnY3JlYXJfdHJhc2llZ28nOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRvcyA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0b3MnXSA/PyAne30nLCB0cnVlKSA/PyBbXTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRkYXRvcykpIHsKICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnRGF0b3MgdmFjw61vcy4nXSwgNDAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclRyYXNpZWdvczo6Y3JlYXJUcmFzaWVnbygkZGF0b3MsICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIEZJTFRSQURPUyDigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJQKCiAgICAgICAgY2FzZSAnb2J0ZW5lckZpbHRyYWRvc1RpcG8nOgogICAgICAgIGNhc2UgJ2dldF9maWx0cmFkb3MnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckZpbHRyYWRvczo6Z2V0QWxsRmlsdHJhZG9zKCRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnaW5zZXJ0X2ZpbHRyYWRvJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkbm9tYnJlID0gdHJpbSgkX1BPU1RbJ25vbWJyZSddID8/ICcnKTsKICAgICAgICAgICAgaWYgKCRub21icmUgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0VsIG5vbWJyZSBlcyBvYmxpZ2F0b3Jpby4nXSwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JGaWx0cmFkb3M6Omluc2VydEZpbHRyYWRvcygkbm9tYnJlLCAkY3R4Wydjb25leGlvbklkcyddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2FzaWduYXJGaWx0cmFkbyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGRlcG9zaXRvID0gKHN0cmluZykkX1BPU1RbJ2RlcG9zaXRvJ10gPz8gMDsKICAgICAgICAgICAgJHRpcG8gPSAoc3RyaW5nKSRfUE9TVFsndGlwbyddID8/ICcnOwogICAgICAgICAgICAkbG90ZSA9IChzdHJpbmcpJF9QT1NUWydsb3RlJ10gPz8gJyc7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvckRlcG9zaXRvOjphc2lnbmFyRmlsdHJhZG9UaXBvKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0sICRkZXBvc2l0bywgJHRpcG8sICRsb3RlKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2FzaWduYXJWT3JnYW5vJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkaWRWT3JnYW5vID0gKGludCkkX1BPU1RbJ2lkVk9yZ2FubyddID8/IDA7CiAgICAgICAgICAgICRpZERlcG9zaXRvID0gKGludCkkX1BPU1RbJ2lkRGVwb3NpdG8nXSA/PyAwOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JEZXBvc2l0bzo6YXNpZ25hclZPcmdhbmljbygkY3R4Wydjb25leGlvbklkcyddWzBdLCAkaWRWT3JnYW5vLCAkaWREZXBvc2l0byk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICd1cGRhdGVfZmlsdHJhZG8nOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRpZCA9IChpbnQpKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICAgICAgICAgJG5vbWJyZSA9IHRyaW0oJF9QT1NUWydub21icmUnXSA/PyAnJyk7CiAgICAgICAgICAgIGlmICghJGlkIHx8ICRub21icmUgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhbiBpZCBvIG5vbWJyZS4nXSwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JGaWx0cmFkb3M6OnVwZGF0ZUZpbHRyYWRvcygkaWQsICRub21icmUsICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIFZPUkdBTklDTyDigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJQKCiAgICAgICAgY2FzZSAnZ2V0X3Zvcmdhbmljbyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yVk9yZ2FuaWNvOjpnZXRWT3JnYW5vKCRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnaW5zZXJ0X3Zvcmdhbmljbyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJG5vbWJyZSA9IHRyaW0oJF9QT1NUWydub21icmUnXSA/PyAnJyk7CiAgICAgICAgICAgIGlmICgkbm9tYnJlID09PSAnJykgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdFbCBub21icmUgZXMgb2JsaWdhdG9yaW8uJ10sIDQwMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yVk9yZ2FuaWNvOjppbnNlcnRWT3JnYW5vKCRub21icmUsICRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIENBVEVHT1JJQVMg4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2dldF9jYXRlZ29yaWFzJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JDYXRlZ29yaWFzOjpnZXRBbGxDYXRlZ29yaWFzKCRjdHhbJ2NvbmV4aW9uSWRzJ10pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnaW5zZXJ0X2NhdGVnb3JpYSc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJG5vbWJyZSA9IHRyaW0oJF9QT1NUWydub21icmUnXSA/PyAnJyk7CiAgICAgICAgICAgIGlmICgkbm9tYnJlID09PSAnJykgewogICAgICAgICAgICAgICAganNvblJlc3BvbnNlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdFbCBub21icmUgZXMgb2JsaWdhdG9yaW8uJ10sIDQwMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yQ2F0ZWdvcmlhczo6aW5zZXJ0Q2F0ZWdvcmlhcygkbm9tYnJlLCAkY3R4Wydjb25leGlvbklkcyddKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3VwZGF0ZV9jYXRlZ29yaWEnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRpZCA9IChpbnQpKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICAgICAgICAgJG5vbWJyZSA9IHRyaW0oJF9QT1NUWydub21icmUnXSA/PyAnJyk7CiAgICAgICAgICAgIGlmICghJGlkIHx8ICRub21icmUgPT09ICcnKSB7CiAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZhbHRhbiBpZCBvIG5vbWJyZS4nXSwgNDAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JDYXRlZ29yaWFzOjp1cGRhdGVDYXRlZ29yaWFzKCRpZCwgJG5vbWJyZSwgJGN0eFsnY29uZXhpb25JZHMnXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAvLyDigJTigJQgTElTVEFETyBQQVJUSURBUyDigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJTigJQKCiAgICAgICAgY2FzZSAnZ2V0X3JhbmdvX2ZlY2hhc19wYXJ0aWRhJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JQYXJ0aWRhc1Byb2M6OmdldFJhbmdvRmVjaGFzUGFydGlkYSgkY3R4Wydjb25leGlvbklkcyddWzBdKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddID8/IDIwMCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdnZXRfZmlsdHJvc19wYXJ0aWRhJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JQYXJ0aWRhc1Byb2M6OmdldEZpbHRyb3MoJGN0eFsnY29uZXhpb25JZHMnXVswXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSA/PyAyMDApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnbG9hZF9wYXJ0aWRhcyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNQcm9jOjpnZXRQYXJ0aWRhcygkY3R4Wydjb25leGlvbklkcyddWzBdLCAkZGF0YSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSA/PyAyMDApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnbG9hZF9wYXJ0aWRhX2J5SWQnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydkYXRhJ10gPz8gJ3t9JywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhcnRpZGFzUHJvYzo6Z2V0UGFydGlkYUJ5SWQoJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10gPz8gMjAwKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2xvYWRfcGFydGlkYXNfZGVzaGFiaWxpdGFkYXMnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydkYXRhJ10gPz8gJ3t9JywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhcnRpZGFzUHJvYzo6Z2V0UGFydGlkYXNEZXNoYWJpbGl0YWRhcygkY3R4Wydjb25leGlvbklkcyddWzBdLCAkZGF0YSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSA/PyAyMDApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnbG9hZF9mZF9wYXJ0aWRhUHJvY19jYW1pbm9zJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JQYXJ0aWRhc1Byb2M6OmdldEZlY2hhRGVmYXVsdENhbWlub3MoJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10gPz8gMjAwKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2FqdXN0ZV9raWxvc19wYXJ0aWRhcyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNQcm9jOjphY3R1YWxpemFyS2lsb3NBanVzdGUoJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnY2FtYmlvX2ZlY2hhX3BhcnRpZGEnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydkYXRhJ10gPz8gJ3t9JywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhcnRpZGFzUHJvYzo6YWN0dWFsaXphckZlY2hhSW5pRmluKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0sICRkYXRhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2NhbWJpb19ub21icmVfcGFydGlkYSc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNQcm9jOjphY3R1YWxpemFyTm9tYnJlUGFydGlkYSgkY3R4Wydjb25leGlvbklkcyddWzBdLCAkZGF0YSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICd2ZXJfY2FtaW5vc19wYXJ0aWRhJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JQYXJ0aWRhc1Byb2M6Om9idGVuZXJEZXRhbGxlQ2FtaW5vcygkY3R4Wydjb25leGlvbklkcyddWzBdLCAkZGF0YSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdtb2RpZmljYXJfY2FtaW5vaG1pJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JQYXJ0aWRhc1Byb2M6OmFjdHVhbGl6YXJjYW1pbm8oJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwoKICAgICAgICBjYXNlICdvYnRlbmVyX2RldGFsbGVzX3Blc2FkYVBhcnRpZGEnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydkYXRhJ10gPz8gJ3t9JywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhcnRpZGFzUHJvYzo6b2J0ZW5lckRldGFsbGVQZXNhZGFzKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0sICRkYXRhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKCiAgICAgICAgY2FzZSAnZGVzaGFiaWxpdGFyX3BhcnRpZGEnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydkYXRhJ10gPz8gJ3t9JywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhcnRpZGFzUHJvYzo6ZGVzaGFiaWxpdGFyUGFydGlkYSgkY3R4Wydjb25leGlvbklkcyddWzBdLCAkZGF0YSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CgogICAgICAgIGNhc2UgJ2hhYmlsaXRhcl9wYXJ0aWRhJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JQYXJ0aWRhc1Byb2M6OmhhYmlsaXRhclBhcnRpZGEoJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwoKICAgICAgICBjYXNlICdhbmFkaXJfY2FtaW5vaG1pJzoKICAgICAgICAgICAgJGN0eCA9IHJlcXVpcmVQZXJtaXNvcygpOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnZGF0YSddID8/ICd7fScsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcmVzdWx0YWRvID0gQ29udHJvbGFkb3JQYXJ0aWRhc1Byb2M6Omluc2VydGFyQ2FtaW5vaG1pKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0sICRkYXRhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2VsaW1pbmFyX2NhbWlub2htaSc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNQcm9jOjpkZWxldGVDYW1pbm9obWkoJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAncmVhanVzdGFyX3Blc2FkYXMnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJF9QT1NUWydkYXRhJ10gPz8gJ3t9JywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclBhcnRpZGFzUHJvYzo6cmVhanVzdGFyUGVzYWRhcygkY3R4Wydjb25leGlvbklkcyddWzBdLCAkZGF0YSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdwZXNhZGFzX2Fjb3BsYWRhcyc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNQcm9jOjpwZXNhZGFzQWNvcGxhZGFzKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0sICRkYXRhKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ29idGVuZXJfc2VjdW5kYXJpb3NfcGFydGlkYSc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2RhdGEnXSA/PyAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yUGFydGlkYXNQcm9jOjpvYnRlbmVyRGV0YWxsZVNlY3VuZGFyaW8oJGN0eFsnY29uZXhpb25JZHMnXVswXSwgJGRhdGEpOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIEdFTkVSQUwg4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCgogICAgICAgIGNhc2UgJ2dldF9zdWJ0aXBvcHJpbWFyaW9zX2NvbWInOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclN1YnRpcG9QcmltYXJpbzo6b2J0ZW5lckZpbHRyb3NDb21ib2JveCgkY3R4Wydjb25leGlvbklkcyddWzBdKTsKICAgICAgICAgICAganNvblJlc3BvbnNlKCRyZXN1bHRhZG8sICRyZXN1bHRhZG9bJ3N0YXR1cyddKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2dldF9zdWJ0aXBvcHJpbWFyaW9zX2NvbWJfZmluYWwnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclN1YnRpcG9QcmltYXJpbzo6b2J0ZW5lckZpbHRyb3NDb21ib2JveEZpbmFsKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZ2V0X3N1YnRpcG9wcmltYXJpb3NfY29tYl9ub1QnOgogICAgICAgICAgICAkY3R4ID0gcmVxdWlyZVBlcm1pc29zKCk7CiAgICAgICAgICAgICRyZXN1bHRhZG8gPSBDb250cm9sYWRvclN1YnRpcG9QcmltYXJpbzo6b2J0ZW5lckZpbHRyb3NDb21ib2JveE5vVG9sdmEoJGN0eFsnY29uZXhpb25JZHMnXVswXSk7CiAgICAgICAgICAgIGpzb25SZXNwb25zZSgkcmVzdWx0YWRvLCAkcmVzdWx0YWRvWydzdGF0dXMnXSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdnZXRfc3VidGlwb3ByaW1hcmlvc19maWx0ZXJlZCc6CiAgICAgICAgICAgICRjdHggPSByZXF1aXJlUGVybWlzb3MoKTsKICAgICAgICAgICAgJHJlc3VsdGFkbyA9IENvbnRyb2xhZG9yU3VidGlwb1ByaW1hcmlvOjpvYnRlbmVyRmlsdHJvc0ZpbHRlcmVkKCRjdHhbJ2NvbmV4aW9uSWRzJ11bMF0pOwogICAgICAgICAgICBqc29uUmVzcG9uc2UoJHJlc3VsdGFkbywgJHJlc3VsdGFkb1snc3RhdHVzJ10pOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgLy8g4oCU4oCUIERFRkFVTFQg4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCUCiAgICAgICAgY2FzZSAnJzoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBqc29uUmVzcG9uc2UoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gIkFjY2nDs24gwqt7JGFjY2lvbn3CuyBubyByZWNvbm9jaWRhLiJdLCA0MDApOwogICAgfQp9IGNhdGNoIChUaHJvd2FibGUgJGUpIHsKICAgIG9iX2VuZF9jbGVhbigpOwogICAgZXJyb3JfbG9nKCdbYXBpLnBocF0gJyAuICRlLT5nZXRNZXNzYWdlKCkpOwogICAganNvblJlc3BvbnNlKFsKICAgICAgICAnb2snID0+IGZhbHNlLAogICAgICAgICdlcnJvcicgPT4gJGUtPmdldE1lc3NhZ2UoKSwKICAgICAgICAnYXJjaGl2bycgPT4gYmFzZW5hbWUoJGUtPmdldEZpbGUoKSksCiAgICAgICAgJ2xpbmVhJyA9PiAkZS0+Z2V0TGluZSgpLAogICAgXSwgNTAwKTsKfQoKIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo2NjoiRW5ydXRhZG9yIHByaW5jaXBhbCBkZSBsYSBBUEkgKEZyb250IC4uLy4uL2JhY2tlbmQvY29udHJvbGFkb3JlcykuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjQyMzoiw5puaWNvIHB1bnRvIGRlIGVudHJhZGEgcGFyYSB0b2RhcyBsYXMgcGV0aWNpb25lcyBBSkFYIGRlbCBmcm9udGVuZC4KQ29udmVuY2nDs24gZGUgY3VlcnBvOgoKICAtIFRvZG9zIGxvcyBlbmRwb2ludHMgc29uIFBPU1QuCiAgLSBFbCBjbGllbnRlIGVzcGVjaWZpY2EgYGFjdGlvbmAuCiAgLSBQYXJhIGVuZHBvaW50cyBxdWUgb3BlcmFuIHNvYnJlIEJEcyB0cmFja2luZywgZGViZSBlbnZpYXI6CiAgICAgICAgcGFnaW5hX2lkICAgOiBpZCBkZSBsYSBww6FnaW5hIG9yaWdlbiBkZSBsYSBwZXRpY2nDs24KICAgICAgICBjb25leGlvbl9pZHM6IEpTT04gY29uIGxhIGxpc3RhIGRlIGNvbmV4aW9uX2lkcyBlbGVnaWRvcwogICAgICAgICAgICAgICAgICAgICAgKHVubyBzb2xvIHBhcmEgZXNjcml0dXJhcywgdmFyaW9zIHBhcmEgbGVjdHVyYXMpIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJwYWNrYWdlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNjoidHJhY2tpbmdcYmFja2VuZCI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xEZXByZWNhdGVkIjozOntzOjc6IgAqAG5hbWUiO3M6MTA6ImRlcHJlY2F0ZWQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjYwOiJjYW1iaWFkbyBhIGFwaS92Mi8uIFNlIG1hbnRpZW5lIGVsIGFyY2hpdm8gZW4gY2FzbyBkZSBmYWxsb3MiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xEZXByZWNhdGVkAHZlcnNpb24iO047fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NTQ7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG1ldGFkYXRhIjthOjA6e319";