From 652a5b21c593cb4074c58eae7367211e170253af Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 5 Nov 2019 12:16:40 -0400 Subject: [PATCH] PMC-1312 Suggest fields on a grid form with MSSQL connection created in ProcessMaker2.x is displaying an alert in preview mode and when running cases in ProcessMaker 3.3.x. --- gulliver/methods/defaultAjax.php | 46 +--- phpunit.xml | 1 + tests/bootstrap.php | 2 + tests/resources/simpleClassicPostData.json | 8 + tests/resources/simpleClassicSessionData.json | 242 ++++++++++++++++++ tests/resources/simpleClassicXmlFormData.xml | 15 ++ .../unit/gulliver/methods/DefaultAjaxTest.php | 47 ++++ 7 files changed, 327 insertions(+), 34 deletions(-) create mode 100644 tests/resources/simpleClassicPostData.json create mode 100644 tests/resources/simpleClassicSessionData.json create mode 100755 tests/resources/simpleClassicXmlFormData.xml create mode 100644 tests/unit/gulliver/methods/DefaultAjaxTest.php diff --git a/gulliver/methods/defaultAjax.php b/gulliver/methods/defaultAjax.php index 1a89e359c..47ae8f0c7 100644 --- a/gulliver/methods/defaultAjax.php +++ b/gulliver/methods/defaultAjax.php @@ -1,28 +1,4 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ - -/*NEXT LINE: Runs any configuration defined to be executed before dependent fields recalc*/ use ProcessMaker\Plugins\PluginRegistry; @@ -30,8 +6,6 @@ if (isset($_SESSION['CURRENT_PAGE_INITILIZATION'])) { eval($_SESSION['CURRENT_PAGE_INITILIZATION']); } - -// $json=new Services_JSON(); if (!defined('XMLFORM_AJAX_PATH')) { define('XMLFORM_AJAX_PATH', PATH_XMLFORM); } @@ -63,11 +37,11 @@ $G_FORM->values = isset($_SESSION[$G_FORM->id]) ? $_SESSION[$G_FORM->id] : array $newValues = (Bootstrap::json_decode(urlDecode(stripslashes($_POST['fields'])))); if (isset($_POST['grid'])) { - $_POST['row'] = (int)$_POST['row']; + $_POST['row'] = (int) $_POST['row']; $aAux = array(); foreach ($newValues as $sKey => $newValue) { - $newValue = (array)$newValue; + $newValue = (array) $newValue; $aKeys = array_keys($newValue); if (count($aKeys) > 0) { $aValues = array(); @@ -88,7 +62,7 @@ if (count($newValues) > 1 && isset($_POST['grid'])) { for ($r2 = 1; $r2 <= $_POST['row']; $r2++) { foreach ($values as $class => $value) { if ($class == $_POST['grid']) { - $value = (array)$value; + $value = (array) $value; $arrayK = $value[$r2]; foreach ($arrayK as $key2 => $val) { $fieldBase[$r2][$key2] = is_array($val) ? $val[$key2] : $val; @@ -107,7 +81,7 @@ if (count($newValues) > 1 && isset($_POST['grid'])) { $dependentFields = array(); $aux = array(); for ($r = 0; $r < count($newValues); $r++) { - $newValues[$r] = (array)$newValues[$r]; + $newValues[$r] = (array) $newValues[$r]; $G_FORM->setValues($newValues[$r]); //Search dependent fields foreach ($newValues[$r] as $k => $v) { @@ -117,7 +91,11 @@ for ($r = 0; $r < count($newValues); $r++) { } else { foreach ($v[$_POST['row']] as $k1 => $v1) { $myDependentFields = subDependencies($k1, $G_FORM, $aux, $_POST['grid']); - $_SESSION[$G_FORM->id][$_POST['grid']][$_POST['row']][$k1] = $v1; + $_SESSION[$G_FORM->id][$_POST['grid']] = [ + $_POST['row'] => [ + $k1 => $v1 + ] + ]; $G_FORM->values[$_POST['grid']][$_POST['row']][$k1] = $v1; } } @@ -142,12 +120,12 @@ $G_FORM->values = $newForm; $arrayFieldSubDependent = array(); if (isset($_POST["grid"])) { - $arrayField = (array)(Bootstrap::json_decode(urlDecode(stripslashes($_POST["fields"])))); + $arrayField = (array) (Bootstrap::json_decode(urlDecode(stripslashes($_POST["fields"])))); $arrayDependentField = array(); $ereg = null; foreach ($arrayField as $fieldData) { - $arrayAux = (array)($fieldData); + $arrayAux = (array) ($fieldData); foreach ($arrayAux as $index => $value) { $ereg = $ereg . (($ereg != null) ? "|" : null) . $index; //Concatenate field @@ -185,7 +163,7 @@ if (isset($_POST["grid"])) { //Completed all fields of the grid if (isset($_POST["grid"]) && isset($_POST["gridField"])) { //Completed all fields of the grid - $arrayGridField = (array)(Bootstrap::json_decode(urldecode(stripslashes($_POST["gridField"])))); + $arrayGridField = (array) (Bootstrap::json_decode(urldecode(stripslashes($_POST["gridField"])))); foreach ($arrayGridField as $index => $value) { $G_FORM->values[$_POST["grid"]][$_POST["row"]][$index] = $value; diff --git a/phpunit.xml b/phpunit.xml index 118b4efec..43268ce99 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -28,6 +28,7 @@ + ./gulliver ./workflow/engine/classes ./workflow/engine/src diff --git a/tests/bootstrap.php b/tests/bootstrap.php index e84e1991b..c874bbc81 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -53,6 +53,8 @@ define('PATH_HTML', PATH_HOME . 'public_html/'); define('PATH_SMARTY_C', PATH_TRUNK . '/shared/compiled/smarty/c'); define('PATH_SMARTY_CACHE', PATH_TRUNK . '/shared/compiled/smarty/cache'); define('PATH_THIRDPARTY', PATH_TRUNK . '/thirdparty/'); +define("URL_KEY", 'c0l0s40pt1mu59r1m3'); +define("PATH_XMLFORM", PATH_CORE . "xmlform" . PATH_SEP); // Set Time Zone $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', 'workflow')) == 1; diff --git a/tests/resources/simpleClassicPostData.json b/tests/resources/simpleClassicPostData.json new file mode 100644 index 000000000..eb6998478 --- /dev/null +++ b/tests/resources/simpleClassicPostData.json @@ -0,0 +1,8 @@ +{ + "function": "reloadField", + "form": "Wlp0bHBXS2tiR2FtcVpXaHBwbHcxV09tWlpObHBXaWphV2locDJpbHEyWm9wV1dlWkpabG4yQ2phWlNrcFpXbTFteHNvcGJSbUp0Z29tQ21iR1drcTJmTTZhS3BvbMKwbG9NOA______", + "fields": "[%7B%22suggest2%22%3A%22C%22%7D]", + "grid": "Grid", + "gridField": "%7B%22suggest1%22%3A%22BO%22%7D", + "row": "1" +} diff --git a/tests/resources/simpleClassicSessionData.json b/tests/resources/simpleClassicSessionData.json new file mode 100644 index 000000000..288d50114 --- /dev/null +++ b/tests/resources/simpleClassicSessionData.json @@ -0,0 +1,242 @@ +{ + "__SYSTEM_UTC_TIME_ZONE__": true, + "__EE_INSTALLATION__": 242, + "__EE_SW_PMLICENSEMANAGER__": "1", + "phpLastFileFound": "\/sysworkflow\/en\/neoclassic\/gulliver\/defaultAjaxDynaform", + "USERNAME_PREVIOUS1": "", + "USERNAME_PREVIOUS2": "admin", + "WORKSPACE": "workflow", + "USER_LOGGED": "00000000000000000000000000000001", + "USR_USERNAME": "admin", + "USR_CSRF_TOKEN": "98ax3foN2t8ELKvtF1XTQ6soT0qGFiTPgS3DsvdF", + "USR_TIME_ZONE": "America\/La_Paz", + "USR_FULLNAME": "Administrator admin", + "user_experience": "NORMAL", + "CONDITION_DYN_UID": "3411353005d41d9a730ede8060385476", + "currentSkin": "neoclassic", + "currentSkinVariant": "extJs", + "PROCESS": "2859218665d41d7c2920598058137861", + "PROCESSMAP": "LEIMNUD", + "_DBArray": { + "fields": [{ + "XMLNODE_NAME": "char", + "TYPE": "char", + "UP": "char", + "DOWN": "char" + }, { + "XMLNODE_NAME": "BUG", + "TYPE": "title", + "UP": "", + "DOWN": "Down", + "row__": "1" + }] + }, + "bDl5ZXpaYmlwcDNqbzVYbTQ1YWY0YVBhcHNLRDFKwrBscUh6WjU2V2I3YUts": { + "DYN_UID": "", + "PRO_UID": "", + "DYN_TITLE": "", + "DYN_TYPE": "", + "EDIT": "", + "DELETE": "", + "GET_UID": "", + "SEARCH": "", + "PAGED_TABLE_ID": "", + "JSFILTER": "" + }, + "pagedTable[bDl5ZXpaYmlwcDNqbzVYbTQ1YWY0YVBhcHNLRDFKwrBscUh6WjU2V2I3YUts]": "TzoxMToiUHJvcGVsVGFibGUiOjYwOntzOjExOiJ4bWxGb3JtRmlsZSI7TjtzOjExOiJjdXJyZW50UGFnZSI7czoxOiIxIjtzOjc6Im9yZGVyQnkiO3M6MDoiIjtzOjY6ImZpbHRlciI7czowOiIiO3M6MTA6ImZpbHRlclR5cGUiO2E6MDp7fXM6ODoic2VhcmNoQnkiO3M6OToiRFlOX1RJVExFIjtzOjEwOiJmYXN0U2VhcmNoIjtzOjA6IiI7czo1OiJvcmRlciI7czowOiIiO3M6ODoidGVtcGxhdGUiO3M6MTE6InBhZ2VkLXRhYmxlIjtzOjU6InN0eWxlIjthOjEwOntzOjc6IkRZTl9VSUQiO2E6Mzg6e3M6MTE6InNob3dJblRhYmxlIjtzOjE6IjAiO3M6MTU6InRpdGxlVmlzaWJpbGl0eSI7czoxOiIxIjtzOjg6ImNvbFdpZHRoIjtpOjE0MDtzOjc6Im9uY2xpY2siO3M6MDoiIjtzOjU6ImV2ZW50IjtzOjA6IiI7czo0OiJkYXRhIjtzOjc6IkRZTl9VSUQiO3M6MTA6InRpdGxlQWxpZ24iO3M6MDoiIjtzOjU6ImFsaWduIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7aTowO3M6Mzoic3FsIjtzOjA6IiI7czo5OiJzcWxPcHRpb24iO2E6MDp7fXM6MTU6ImRlcGVuZGVudEZpZWxkcyI7czowOiIiO3M6MTM6ImdyaWRGaWVsZFR5cGUiO3M6NjoiaGlkZGVuIjtzOjQ6Im5hbWUiO3M6NzoiRFlOX1VJRCI7czo0OiJ0eXBlIjtzOjY6ImhpZGRlbiI7czo1OiJsYWJlbCI7TjtzOjc6InBtTGFiZWwiO047czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJlZGl0IjtzOjEyOiJkZWZhdWx0VmFsdWUiO047czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjEyOiJjb2xDbGFzc05hbWUiO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjc6IlBST19VSUQiO2E6Mzg6e3M6MTE6InNob3dJblRhYmxlIjtzOjE6IjAiO3M6MTU6InRpdGxlVmlzaWJpbGl0eSI7czoxOiIxIjtzOjg6ImNvbFdpZHRoIjtpOjE0MDtzOjc6Im9uY2xpY2siO3M6MDoiIjtzOjU6ImV2ZW50IjtzOjA6IiI7czo0OiJkYXRhIjtzOjc6IlBST19VSUQiO3M6MTA6InRpdGxlQWxpZ24iO3M6MDoiIjtzOjU6ImFsaWduIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7aTowO3M6Mzoic3FsIjtzOjA6IiI7czo5OiJzcWxPcHRpb24iO2E6MDp7fXM6MTU6ImRlcGVuZGVudEZpZWxkcyI7czowOiIiO3M6MTM6ImdyaWRGaWVsZFR5cGUiO3M6NjoiaGlkZGVuIjtzOjQ6Im5hbWUiO3M6NzoiUFJPX1VJRCI7czo0OiJ0eXBlIjtzOjY6ImhpZGRlbiI7czo1OiJsYWJlbCI7TjtzOjc6InBtTGFiZWwiO047czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJlZGl0IjtzOjEyOiJkZWZhdWx0VmFsdWUiO047czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjEyOiJjb2xDbGFzc05hbWUiO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjk6IkRZTl9USVRMRSI7YTo1NTp7czoxMToic2hvd0luVGFibGUiO3M6MDoiIjtzOjE1OiJ0aXRsZVZpc2liaWxpdHkiO3M6MToiMSI7czo4OiJjb2xXaWR0aCI7czozOiIzMDAiO3M6Nzoib25jbGljayI7czowOiIiO3M6NToiZXZlbnQiO3M6MDoiIjtzOjQ6ImRhdGEiO3M6OToiRFlOX1RJVExFIjtzOjEwOiJ0aXRsZUFsaWduIjtzOjQ6ImxlZnQiO3M6NToiYWxpZ24iO3M6NDoibGVmdCI7czo0OiJzaXplIjtpOjE1O3M6OToibWF4TGVuZ3RoIjtpOjY0O3M6ODoidmFsaWRhdGUiO3M6MzoiQW55IjtzOjQ6Im1hc2siO3M6MDoiIjtzOjEyOiJkZWZhdWx0VmFsdWUiO3M6MDoiIjtzOjg6InJlcXVpcmVkIjtiOjA7czoxNToiZGVwZW5kZW50RmllbGRzIjtzOjA6IiI7czo5OiJsaW5rRmllbGQiO3M6MDoiIjtzOjU6InN0clRvIjtzOjA6IiI7czo4OiJyZWFkT25seSI7YjowO3M6MTM6InNxbENvbm5lY3Rpb24iO2k6MDtzOjM6InNxbCI7czowOiIiO3M6OToic3FsT3B0aW9uIjthOjA6e31zOjEzOiJncmlkRmllbGRUeXBlIjtzOjQ6InRleHQiO3M6NzoiZm9ybXVsYSI7czowOiIiO3M6ODoiZnVuY3Rpb24iO3M6MDoiIjtzOjExOiJyZXBsYWNlVGFncyI7aTowO3M6MTA6InJlbmRlck1vZGUiO3M6MDoiIjtzOjE1OiJjb21tYV9zZXBhcmF0b3IiO3M6MToiLiI7czoxMjoiYXV0b2NvbXBsZXRlIjtzOjI6Im9uIjtzOjEwOiJvbmtleXByZXNzIjtzOjA6IiI7czo0OiJuYW1lIjtzOjk6IkRZTl9USVRMRSI7czo0OiJ0eXBlIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NToiVGl0bGUiO3M6NzoicG1MYWJlbCI7czo1OiJUaXRsZSI7czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJlZGl0IjtzOjk6ImdyaWRMYWJlbCI7czowOiIiO3M6NDoiaGludCI7czowOiIiO3M6MTA6ImVuYWJsZUh0bWwiO2I6MDtzOjU6InN0eWxlIjtzOjA6IiI7czoxMjoid2l0aG91dExhYmVsIjtiOjA7czo5OiJjbGFzc05hbWUiO3M6MDoiIjtzOjg6ImNvbEFsaWduIjtzOjQ6ImxlZnQiO3M6MTI6ImNvbENsYXNzTmFtZSI7czowOiIiO3M6MTY6ImRhdGFDb21wYXJlRmllbGQiO3M6OToiRFlOX1RJVExFIjtzOjE1OiJkYXRhQ29tcGFyZVR5cGUiO3M6ODoiY29udGFpbnMiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fXM6NDoiaHJlZiI7czoxMjoiamF2YXNjcmlwdDo7IjtzOjY6Im9uc29ydCI7czoxMDk6ImJEbDVaWHBhWW1sd2NETnFielZZYlRRMVlXWTBZVkJoY0hOTFJERkt3ckJzY1VoNldqVTJWMkkzWVV0cy5kb1NvcnQoIlpEZDRLM2swVXpocFNIa3giLCAiQVNDIik7IHJldHVybiBmYWxzZTsiO31zOjg6IkRZTl9UWVBFIjthOjQ4OntzOjExOiJzaG93SW5UYWJsZSI7czowOiIiO3M6MTU6InRpdGxlVmlzaWJpbGl0eSI7czoxOiIxIjtzOjg6ImNvbFdpZHRoIjtzOjI6IjUwIjtzOjc6Im9uY2xpY2siO3M6MDoiIjtzOjU6ImV2ZW50IjtzOjA6IiI7czo0OiJkYXRhIjtzOjg6IkRZTl9UWVBFIjtzOjEwOiJ0aXRsZUFsaWduIjtzOjY6ImNlbnRlciI7czo1OiJhbGlnbiI7czowOiIiO3M6MTI6ImRlZmF1bHRWYWx1ZSI7czowOiIiO3M6ODoicmVxdWlyZWQiO2I6MDtzOjE1OiJkZXBlbmRlbnRGaWVsZHMiO3M6MDoiIjtzOjg6InJlYWRvbmx5IjtiOjA7czo4OiJvcHRncm91cCI7aTowO3M6Njoib3B0aW9uIjthOjI6e3M6NzoieG1sZm9ybSI7czo2OiJOb3JtYWwiO3M6NDoiZ3JpZCI7czo0OiJHcmlkIjt9czoxMzoic3FsQ29ubmVjdGlvbiI7aTowO3M6Mzoic3FsIjtzOjA6IiI7czo5OiJzcWxPcHRpb24iO2E6MDp7fXM6OToic2F2ZUxhYmVsIjtpOjA7czoxMjoibW9kZUdyaWREcm9wIjtzOjA6IiI7czoxMDoicmVuZGVyTW9kZSI7czowOiIiO3M6MTM6InNlbGVjdGVkVmFsdWUiO3M6MDoiIjtzOjQ6Im5hbWUiO3M6ODoiRFlOX1RZUEUiO3M6NDoidHlwZSI7czo4OiJkcm9wZG93biI7czo1OiJsYWJlbCI7czo0OiJUeXBlIjtzOjc6InBtTGFiZWwiO3M6NDoiVHlwZSI7czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJlZGl0IjtzOjEzOiJncmlkRmllbGRUeXBlIjtzOjA6IiI7czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xBbGlnbiI7czo2OiJjZW50ZXIiO3M6MTI6ImNvbENsYXNzTmFtZSI7czowOiIiO3M6MTY6ImRhdGFDb21wYXJlRmllbGQiO3M6MDoiIjtzOjE1OiJkYXRhQ29tcGFyZVR5cGUiO3M6MToiPSI7czo3OiJwbXRhYmxlIjtzOjA6IiI7czo0OiJrZXlzIjtzOjA6IiI7czoxMjoicG1jb25uZWN0aW9uIjtzOjA6IiI7czo3OiJwbWZpZWxkIjtzOjA6IiI7czo4OiJtb2RlR3JpZCI7czowOiIiO3M6MTE6Im1vZGVGb3JHcmlkIjtzOjQ6ImVkaXQiO3M6Nzoib3B0aW9ucyI7YToyOntzOjc6InhtbGZvcm0iO3M6NjoiTm9ybWFsIjtzOjQ6ImdyaWQiO3M6NDoiR3JpZCI7fXM6NDoiaHJlZiI7czoxMjoiamF2YXNjcmlwdDo7IjtzOjY6Im9uc29ydCI7czoxMTE6ImJEbDVaWHBhWW1sd2NETnFielZZYlRRMVlXWTBZVkJoY0hOTFJERkt3ckJzY1VoNldqVTJWMkkzWVV0cy5kb1NvcnQoIlpEZDRLM2swVkUxb1NGVV9fXyIsICJBU0MiKTsgcmV0dXJuIGZhbHNlOyI7fXM6NDoiRURJVCI7YTo0MTp7czoxMToic2hvd0luVGFibGUiO3M6MDoiIjtzOjE1OiJ0aXRsZVZpc2liaWxpdHkiO3M6MToiMCI7czo4OiJjb2xXaWR0aCI7czoyOiI0MCI7czo3OiJvbmNsaWNrIjtzOjM3OiJkeW5hZm9ybUVkaXQoQFFEWU5fVUlEKTtyZXR1cm4gZmFsc2U7IjtzOjU6ImV2ZW50IjtzOjA6IiI7czo0OiJkYXRhIjtzOjQ6IkVESVQiO3M6MTA6InRpdGxlQWxpZ24iO3M6NDoibGVmdCI7czo1OiJhbGlnbiI7czowOiIiO3M6NDoibGluayI7czoxOiIjIjtzOjU6InZhbHVlIjtzOjI4OiJARzo6TG9hZFRyYW5zbGF0aW9uKElEX0VESVQpIjtzOjY6InRhcmdldCI7czowOiIiO3M6NToic3R5bGUiO3M6MDoiIjtzOjEyOiJjb2xDbGFzc05hbWUiO3M6NzoiUm93TGluayI7czoxMzoiZ3JpZEZpZWxkVHlwZSI7czo0OiJsaW5rIjtzOjQ6Im5hbWUiO3M6NDoiRURJVCI7czo0OiJ0eXBlIjtzOjQ6ImxpbmsiO3M6NToibGFiZWwiO047czo3OiJwbUxhYmVsIjtOO3M6ODoibGFuZ3VhZ2UiO3M6MjoiZW4iO3M6NToiZ3JvdXAiO2k6MDtzOjQ6Im1vZGUiO3M6NDoiZWRpdCI7czoxMjoiZGVmYXVsdFZhbHVlIjtOO3M6OToiZ3JpZExhYmVsIjtzOjA6IiI7czo0OiJoaW50IjtzOjA6IiI7czoxMDoiZW5hYmxlSHRtbCI7YjowO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fXM6NDoiaHJlZiI7czoxMjoiamF2YXNjcmlwdDo7IjtzOjY6Im9uc29ydCI7czoxMzoicmV0dXJuIGZhbHNlOyI7fXM6NjoiREVMRVRFIjthOjQxOntzOjExOiJzaG93SW5UYWJsZSI7czowOiIiO3M6MTU6InRpdGxlVmlzaWJpbGl0eSI7czoxOiIwIjtzOjg6ImNvbFdpZHRoIjtzOjI6IjQwIjtzOjc6Im9uY2xpY2siO3M6NDk6ImR5bmFmb3JtRGVsZXRlKEBRRFlOX1VJRCxAUVBST19VSUQpO3JldHVybiBmYWxzZTsiO3M6NToiZXZlbnQiO3M6MDoiIjtzOjQ6ImRhdGEiO3M6NjoiREVMRVRFIjtzOjEwOiJ0aXRsZUFsaWduIjtzOjA6IiI7czo1OiJhbGlnbiI7czowOiIiO3M6NDoibGluayI7czoxOiIjIjtzOjU6InZhbHVlIjtzOjMwOiJARzo6TG9hZFRyYW5zbGF0aW9uKElEX0RFTEVURSkiO3M6NjoidGFyZ2V0IjtzOjA6IiI7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6ImNvbENsYXNzTmFtZSI7czo3OiJSb3dMaW5rIjtzOjEzOiJncmlkRmllbGRUeXBlIjtzOjQ6ImxpbmsiO3M6NDoibmFtZSI7czo2OiJERUxFVEUiO3M6NDoidHlwZSI7czo0OiJsaW5rIjtzOjU6ImxhYmVsIjtzOjA6IiI7czo3OiJwbUxhYmVsIjtzOjA6IiI7czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJlZGl0IjtzOjEyOiJkZWZhdWx0VmFsdWUiO047czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czoxMjoid2l0aG91dExhYmVsIjtiOjA7czo5OiJjbGFzc05hbWUiO3M6MDoiIjtzOjg6ImNvbEFsaWduIjtzOjQ6ImxlZnQiO3M6MTY6ImRhdGFDb21wYXJlRmllbGQiO3M6MDoiIjtzOjE1OiJkYXRhQ29tcGFyZVR5cGUiO3M6MToiPSI7czozOiJzcWwiO3M6MDoiIjtzOjEzOiJzcWxDb25uZWN0aW9uIjtzOjA6IiI7czo3OiJwbXRhYmxlIjtzOjA6IiI7czo0OiJrZXlzIjtzOjA6IiI7czoxMjoicG1jb25uZWN0aW9uIjtzOjA6IiI7czo3OiJwbWZpZWxkIjtzOjA6IiI7czo4OiJtb2RlR3JpZCI7czowOiIiO3M6MTE6Im1vZGVGb3JHcmlkIjtzOjQ6ImVkaXQiO3M6Nzoib3B0aW9ucyI7YTowOnt9czo0OiJocmVmIjtzOjEyOiJqYXZhc2NyaXB0OjsiO3M6Njoib25zb3J0IjtzOjEzOiJyZXR1cm4gZmFsc2U7Ijt9czo3OiJHRVRfVUlEIjthOjQxOntzOjExOiJzaG93SW5UYWJsZSI7czowOiIiO3M6MTU6InRpdGxlVmlzaWJpbGl0eSI7czoxOiIwIjtzOjg6ImNvbFdpZHRoIjtzOjI6IjQwIjtzOjc6Im9uY2xpY2siO3M6NDc6Im1zZ0JveCgnVUlEOiAnK0BRRFlOX1VJRCwgJ2luZm8nKTtyZXR1cm4gZmFsc2U7IjtzOjU6ImV2ZW50IjtzOjA6IiI7czo0OiJkYXRhIjtzOjc6IkdFVF9VSUQiO3M6MTA6InRpdGxlQWxpZ24iO3M6MDoiIjtzOjU6ImFsaWduIjtzOjA6IiI7czo0OiJsaW5rIjtzOjE6IiMiO3M6NToidmFsdWUiO3M6MzoiVUlEIjtzOjY6InRhcmdldCI7czowOiIiO3M6NToic3R5bGUiO3M6MDoiIjtzOjEyOiJjb2xDbGFzc05hbWUiO3M6NzoiUm93TGluayI7czoxMzoiZ3JpZEZpZWxkVHlwZSI7czo0OiJsaW5rIjtzOjQ6Im5hbWUiO3M6NzoiR0VUX1VJRCI7czo0OiJ0eXBlIjtzOjQ6ImxpbmsiO3M6NToibGFiZWwiO047czo3OiJwbUxhYmVsIjtOO3M6ODoibGFuZ3VhZ2UiO3M6MjoiZW4iO3M6NToiZ3JvdXAiO2k6MDtzOjQ6Im1vZGUiO3M6NDoiZWRpdCI7czoxMjoiZGVmYXVsdFZhbHVlIjtOO3M6OToiZ3JpZExhYmVsIjtzOjA6IiI7czo0OiJoaW50IjtzOjA6IiI7czoxMDoiZW5hYmxlSHRtbCI7YjowO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fXM6NDoiaHJlZiI7czoxMjoiamF2YXNjcmlwdDo7IjtzOjY6Im9uc29ydCI7czoxMzoicmV0dXJuIGZhbHNlOyI7fXM6NjoiU0VBUkNIIjthOjM2OntzOjExOiJzaG93SW5UYWJsZSI7czoxOiIwIjtzOjE1OiJ0aXRsZVZpc2liaWxpdHkiO3M6MToiMCI7czo4OiJjb2xXaWR0aCI7aToxNDA7czo3OiJvbmNsaWNrIjtzOjMwOiJwYWdlZFRhYmxlRmlsdGVyKCB0aGlzLmZvcm0gKTsiO3M6NToiZXZlbnQiO3M6MDoiIjtzOjQ6ImRhdGEiO3M6MDoiIjtzOjEwOiJ0aXRsZUFsaWduIjtzOjA6IiI7czo1OiJhbGlnbiI7czo2OiJjZW50ZXIiO3M6NToic3R5bGUiO047czo0OiJuYW1lIjtzOjY6IlNFQVJDSCI7czo0OiJ0eXBlIjtzOjY6ImJ1dHRvbiI7czo1OiJsYWJlbCI7czoxMjoiQXBwbHkgRmlsdGVyIjtzOjc6InBtTGFiZWwiO3M6MTI6IkFwcGx5IEZpbHRlciI7czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJlZGl0IjtzOjEyOiJkZWZhdWx0VmFsdWUiO047czoxMzoiZ3JpZEZpZWxkVHlwZSI7czowOiIiO3M6OToiZ3JpZExhYmVsIjtzOjA6IiI7czo0OiJoaW50IjtzOjA6IiI7czoxMDoiZW5hYmxlSHRtbCI7YjowO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjEyOiJjb2xDbGFzc05hbWUiO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjE0OiJQQUdFRF9UQUJMRV9JRCI7YTozNjp7czoxMToic2hvd0luVGFibGUiO3M6MToiMCI7czoxNToidGl0bGVWaXNpYmlsaXR5IjtzOjE6IjEiO3M6ODoiY29sV2lkdGgiO2k6MTQwO3M6Nzoib25jbGljayI7czowOiIiO3M6NToiZXZlbnQiO3M6MDoiIjtzOjQ6ImRhdGEiO3M6MTQ6IlBBR0VEX1RBQkxFX0lEIjtzOjEwOiJ0aXRsZUFsaWduIjtzOjA6IiI7czo1OiJhbGlnbiI7czowOiIiO3M6NDoibmFtZSI7czoxNDoiUEFHRURfVEFCTEVfSUQiO3M6NDoidHlwZSI7czo3OiJwcml2YXRlIjtzOjU6ImxhYmVsIjtOO3M6NzoicG1MYWJlbCI7TjtzOjg6Imxhbmd1YWdlIjtzOjI6ImVuIjtzOjU6Imdyb3VwIjtpOjA7czo0OiJtb2RlIjtzOjQ6ImVkaXQiO3M6MTI6ImRlZmF1bHRWYWx1ZSI7TjtzOjEzOiJncmlkRmllbGRUeXBlIjtzOjA6IiI7czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjEyOiJjb2xDbGFzc05hbWUiO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjg6IkpTRklMVEVSIjthOjM3OntzOjExOiJzaG93SW5UYWJsZSI7czoxOiIwIjtzOjE1OiJ0aXRsZVZpc2liaWxpdHkiO3M6MToiMSI7czo4OiJjb2xXaWR0aCI7aToxNDA7czo3OiJvbmNsaWNrIjtzOjA6IiI7czo1OiJldmVudCI7czowOiIiO3M6NDoiZGF0YSI7czo4OiJKU0ZJTFRFUiI7czoxMDoidGl0bGVBbGlnbiI7czowOiIiO3M6NToiYWxpZ24iO3M6MDoiIjtzOjQ6ImNvZGUiO3M6NzY6IgpmdW5jdGlvbiBwYWdlZFRhYmxlRmlsdGVyKCBmb3JtICkgewogIEAjUEFHRURfVEFCTEVfSUQuZG9GaWx0ZXIoIGZvcm0gKTsKfQoiO3M6MTE6InJlcGxhY2VUYWdzIjtzOjE6IjEiO3M6NDoibmFtZSI7czo4OiJKU0ZJTFRFUiI7czo0OiJ0eXBlIjtzOjEwOiJqYXZhc2NyaXB0IjtzOjU6ImxhYmVsIjtzOjA6IiI7czo3OiJwbUxhYmVsIjtzOjA6IiI7czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czowOiIiO3M6MTI6ImRlZmF1bHRWYWx1ZSI7TjtzOjEzOiJncmlkRmllbGRUeXBlIjtzOjA6IiI7czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjEyOiJjb2xDbGFzc05hbWUiO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czowOiIiO319czoxMToicm93c1BlclBhZ2UiO2k6MTI7czo5OiJvd25lclBhZ2UiO3M6NTU6Ii9zeXN3b3JrZmxvdy9lbi9uZW9jbGFzc2ljL3Byb2Nlc3Nlcy9wcm9jZXNzZXNfQWpheC5waHAiO3M6OToicG9wdXBQYWdlIjtOO3M6MTE6InBvcHVwU3VibWl0IjtOO3M6MTA6InBvcHVwV2lkdGgiO2k6NDUwO3M6MTE6InBvcHVwSGVpZ2h0IjtpOjIwMDtzOjEwOiJhamF4U2VydmVyIjtzOjI3OiIuLi9ndWxsaXZlci9wcm9wZWxUYWJsZUFqYXgiO3M6NjoiZmllbGRzIjthOjEwOntzOjc6IkRZTl9VSUQiO2E6Mzp7czo0OiJOYW1lIjtzOjc6IkRZTl9VSUQiO3M6NDoiVHlwZSI7czo2OiJoaWRkZW4iO3M6NToiTGFiZWwiO047fXM6NzoiUFJPX1VJRCI7YTozOntzOjQ6Ik5hbWUiO3M6NzoiUFJPX1VJRCI7czo0OiJUeXBlIjtzOjY6ImhpZGRlbiI7czo1OiJMYWJlbCI7Tjt9czo5OiJEWU5fVElUTEUiO2E6NDp7czo0OiJOYW1lIjtzOjk6IkRZTl9USVRMRSI7czo0OiJUeXBlIjtzOjQ6InRleHQiO3M6NDoiU2l6ZSI7aToxNTtzOjU6IkxhYmVsIjtzOjU6IlRpdGxlIjt9czo4OiJEWU5fVFlQRSI7YTozOntzOjQ6Ik5hbWUiO3M6ODoiRFlOX1RZUEUiO3M6NDoiVHlwZSI7czo4OiJkcm9wZG93biI7czo1OiJMYWJlbCI7czo0OiJUeXBlIjt9czo0OiJFRElUIjthOjM6e3M6NDoiTmFtZSI7czo0OiJFRElUIjtzOjQ6IlR5cGUiO3M6NDoibGluayI7czo1OiJMYWJlbCI7Tjt9czo2OiJERUxFVEUiO2E6Mzp7czo0OiJOYW1lIjtzOjY6IkRFTEVURSI7czo0OiJUeXBlIjtzOjQ6ImxpbmsiO3M6NToiTGFiZWwiO3M6MDoiIjt9czo3OiJHRVRfVUlEIjthOjM6e3M6NDoiTmFtZSI7czo3OiJHRVRfVUlEIjtzOjQ6IlR5cGUiO3M6NDoibGluayI7czo1OiJMYWJlbCI7Tjt9czo2OiJTRUFSQ0giO2E6Mzp7czo0OiJOYW1lIjtzOjY6IlNFQVJDSCI7czo0OiJUeXBlIjtzOjY6ImJ1dHRvbiI7czo1OiJMYWJlbCI7czoxMjoiQXBwbHkgRmlsdGVyIjt9czoxNDoiUEFHRURfVEFCTEVfSUQiO2E6Mzp7czo0OiJOYW1lIjtzOjE0OiJQQUdFRF9UQUJMRV9JRCI7czo0OiJUeXBlIjtzOjc6InByaXZhdGUiO3M6NToiTGFiZWwiO047fXM6ODoiSlNGSUxURVIiO2E6Mzp7czo0OiJOYW1lIjtzOjg6IkpTRklMVEVSIjtzOjQ6IlR5cGUiO3M6MTA6ImphdmFzY3JpcHQiO3M6NToiTGFiZWwiO3M6MDoiIjt9fXM6NToicXVlcnkiO047czo4OiJ0b3RQYWdlcyI7ZDoxO3M6NzoidG90Um93cyI7aToyO3M6ODoic29ydGFibGUiO3M6MToiMSI7czo4OiJjcml0ZXJpYSI7Tzo4OiJDcml0ZXJpYSI6MTk6e3M6MjA6IgBDcml0ZXJpYQBpZ25vcmVDYXNlIjtiOjA7czoyMjoiAENyaXRlcmlhAHNpbmdsZVJlY29yZCI7YjowO3M6MjU6IgBDcml0ZXJpYQBzZWxlY3RNb2RpZmllcnMiO2E6MDp7fXM6MjM6IgBDcml0ZXJpYQBzZWxlY3RDb2x1bW5zIjthOjU6e2k6MDtzOjE2OiJEWU5BRk9STS5EWU5fVUlEIjtpOjE7czoxNjoiRFlOQUZPUk0uUFJPX1VJRCI7aToyO3M6MTc6IkRZTkFGT1JNLkRZTl9UWVBFIjtpOjM7czoxODoiRFlOQUZPUk0uRFlOX1RJVExFIjtpOjQ7czoyNDoiRFlOQUZPUk0uRFlOX0RFU0NSSVBUSU9OIjt9czoyNDoiAENyaXRlcmlhAG9yZGVyQnlDb2x1bW5zIjthOjE6e2k6MDtzOjIyOiJEWU5BRk9STS5EWU5fVElUTEUgQVNDIjt9czoyNDoiAENyaXRlcmlhAGdyb3VwQnlDb2x1bW5zIjthOjA6e31zOjE2OiIAQ3JpdGVyaWEAaGF2aW5nIjtOO3M6MTk6IgBDcml0ZXJpYQBhc0NvbHVtbnMiO2E6MDp7fXM6MTU6IgBDcml0ZXJpYQBqb2lucyI7YTowOnt9czoxNzoiAENyaXRlcmlhAGpvaW5zTUMiO2E6MDp7fXM6MTY6IgBDcml0ZXJpYQBkYk5hbWUiO3M6ODoid29ya2Zsb3ciO3M6MTI6ImRiQXJyYXlUYWJsZSI7TjtzOjI0OiIAQ3JpdGVyaWEAb3JpZ2luYWxEYk5hbWUiO3M6ODoid29ya2Zsb3ciO3M6MTU6IgBDcml0ZXJpYQBsaW1pdCI7aToxMjtzOjE2OiIAQ3JpdGVyaWEAb2Zmc2V0IjtpOjA7czoxODoiAENyaXRlcmlhAGJsb2JGbGFnIjtOO3M6MTc6IgBDcml0ZXJpYQBhbGlhc2VzIjthOjA6e31zOjI0OiIAQ3JpdGVyaWEAdXNlVHJhbnNhY3Rpb24iO2I6MDtzOjEzOiIAQ3JpdGVyaWEAbWFwIjthOjI6e3M6MTY6IkRZTkFGT1JNLlBST19VSUQiO086OToiQ3JpdGVyaW9uIjoxMDp7czoxNjoiAENyaXRlcmlvbgB2YWx1ZSI7czozMjoiMjg1OTIxODY2NWQ0MWQ3YzI5MjA1OTgwNTgxMzc4NjEiO3M6MTA6ImNvbXBhcmlzb24iO3M6MToiPSI7czo1OiJ0YWJsZSI7czo4OiJEWU5BRk9STSI7czoyMDoiAENyaXRlcmlvbgByZWFsdGFibGUiO3M6ODoiRFlOQUZPUk0iO3M6NjoiY29sdW1uIjtzOjc6IlBST19VSUQiO3M6Mjc6IgBDcml0ZXJpb24AaWdub3JlU3RyaW5nQ2FzZSI7YjowO3M6MTM6IgBDcml0ZXJpb24AZGIiO086NzoiREJNeVNRTCI6MDp7fXM6MTg6IgBDcml0ZXJpb24AY2xhdXNlcyI7YTowOnt9czoyMzoiAENyaXRlcmlvbgBjb25qdW5jdGlvbnMiO2E6MDp7fXM6MTc6IgBDcml0ZXJpb24AcGFyZW50IjtOO31zOjEwOiJEWU5BRk9STS4qIjtPOjk6IkNyaXRlcmlvbiI6MTA6e3M6MTY6IgBDcml0ZXJpb24AdmFsdWUiO3M6MjE6IihEWU5fVElUTEUgTElLRSAiJSUiKSI7czoxMDoiY29tcGFyaXNvbiI7czo2OiJDVVNUT00iO3M6NToidGFibGUiO3M6ODoiRFlOQUZPUk0iO3M6MjA6IgBDcml0ZXJpb24AcmVhbHRhYmxlIjtzOjg6IkRZTkFGT1JNIjtzOjY6ImNvbHVtbiI7czoxOiIqIjtzOjI3OiIAQ3JpdGVyaW9uAGlnbm9yZVN0cmluZ0Nhc2UiO2I6MDtzOjEzOiIAQ3JpdGVyaW9uAGRiIjtyOjUyMztzOjE4OiIAQ3JpdGVyaW9uAGNsYXVzZXMiO2E6MDp7fXM6MjM6IgBDcml0ZXJpb24AY29uanVuY3Rpb25zIjthOjA6e31zOjE3OiIAQ3JpdGVyaW9uAHBhcmVudCI7Tjt9fX1zOjM6InNxbCI7czowOiIiO3M6ODoic3FsV2hlcmUiO3M6MDoiIjtzOjEwOiJzcWxHcm91cEJ5IjtzOjA6IiI7czo5OiJzcWxTZWxlY3QiO3M6ODoiU0VMRUNUIDEiO3M6OToic3FsRGVsZXRlIjtzOjA6IiI7czo5OiJzcWxJbnNlcnQiO3M6MDoiIjtzOjk6InNxbFVwZGF0ZSI7czowOiIiO3M6MTM6ImZpZWxkRGF0YUxpc3QiO3M6MDoiIjtzOjg6InhtbFBvcHVwIjtzOjA6IiI7czo2OiJhZGRSb3ciO2I6MDtzOjk6ImRlbGV0ZVJvdyI7YjowO3M6NzoiZWRpdFJvdyI7YjowO3M6OToibm90RmllbGRzIjtzOjQzOiIgIHRpdGxlIGJ1dHRvbiBsaW5rbmV3IGJlZ2luZ3JpZDIgZW5kZ3JpZDIgIjtzOjEzOiJvblVwZGF0ZUZpZWxkIjtzOjA6IiI7czoxMzoib25EZWxldGVGaWVsZCI7czowOiIiO3M6MTY6ImFmdGVyRGVsZXRlRmllbGQiO3M6MDoiIjtzOjEzOiJvbkluc2VydEZpZWxkIjtzOjA6IiI7czo3OiJ4bWxGb3JtIjtPOjQ6IkZvcm0iOjM4OntzOjI6ImlkIjtzOjYwOiJiRGw1WlhwYVltbHdjRE5xYnpWWWJUUTFZV1kwWVZCaGNITkxSREZLd3JCc2NVaDZXalUyVjJJM1lVdHMiO3M6NToid2lkdGgiO3M6NDoiMTAwJSI7czo1OiJ0aXRsZSI7czowOiIiO3M6NjoiZmllbGRzIjthOjEwOntzOjc6IkRZTl9VSUQiO086MTg6IlhtbEZvcm1GaWVsZEhpZGRlbiI6MzY6e3M6MTM6InNxbENvbm5lY3Rpb24iO2k6MDtzOjM6InNxbCI7czowOiIiO3M6OToic3FsT3B0aW9uIjthOjA6e31zOjE1OiJkZXBlbmRlbnRGaWVsZHMiO3M6MDoiIjtzOjEzOiJncmlkRmllbGRUeXBlIjtzOjY6ImhpZGRlbiI7czo0OiJuYW1lIjtzOjc6IkRZTl9VSUQiO3M6NDoidHlwZSI7czo2OiJoaWRkZW4iO3M6NToibGFiZWwiO047czo3OiJwbUxhYmVsIjtOO3M6NToib3duZXIiO3I6NTU1O3M6ODoibGFuZ3VhZ2UiO3M6MjoiZW4iO3M6NToiZ3JvdXAiO2k6MDtzOjQ6Im1vZGUiO3M6NDoiZWRpdCI7czoxMjoiZGVmYXVsdFZhbHVlIjtOO3M6OToiZ3JpZExhYmVsIjtzOjA6IiI7czo0OiJoaW50IjtzOjA6IiI7czoxMDoiZW5hYmxlSHRtbCI7YjowO3M6NToic3R5bGUiO3M6MDoiIjtzOjEyOiJ3aXRob3V0TGFiZWwiO2I6MDtzOjk6ImNsYXNzTmFtZSI7czowOiIiO3M6ODoiY29sV2lkdGgiO2k6MTQwO3M6ODoiY29sQWxpZ24iO3M6NDoibGVmdCI7czoxMjoiY29sQ2xhc3NOYW1lIjtzOjA6IiI7czoxMDoidGl0bGVBbGlnbiI7czowOiIiO3M6NToiYWxpZ24iO3M6MDoiIjtzOjExOiJzaG93SW5UYWJsZSI7czoxOiIwIjtzOjc6Im9uY2xpY2siO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjc6IlBST19VSUQiO086MTg6IlhtbEZvcm1GaWVsZEhpZGRlbiI6MzY6e3M6MTM6InNxbENvbm5lY3Rpb24iO2k6MDtzOjM6InNxbCI7czowOiIiO3M6OToic3FsT3B0aW9uIjthOjA6e31zOjE1OiJkZXBlbmRlbnRGaWVsZHMiO3M6MDoiIjtzOjEzOiJncmlkRmllbGRUeXBlIjtzOjY6ImhpZGRlbiI7czo0OiJuYW1lIjtzOjc6IlBST19VSUQiO3M6NDoidHlwZSI7czo2OiJoaWRkZW4iO3M6NToibGFiZWwiO047czo3OiJwbUxhYmVsIjtOO3M6NToib3duZXIiO3I6NTU1O3M6ODoibGFuZ3VhZ2UiO3M6MjoiZW4iO3M6NToiZ3JvdXAiO2k6MDtzOjQ6Im1vZGUiO3M6NDoiZWRpdCI7czoxMjoiZGVmYXVsdFZhbHVlIjtOO3M6OToiZ3JpZExhYmVsIjtzOjA6IiI7czo0OiJoaW50IjtzOjA6IiI7czoxMDoiZW5hYmxlSHRtbCI7YjowO3M6NToic3R5bGUiO3M6MDoiIjtzOjEyOiJ3aXRob3V0TGFiZWwiO2I6MDtzOjk6ImNsYXNzTmFtZSI7czowOiIiO3M6ODoiY29sV2lkdGgiO2k6MTQwO3M6ODoiY29sQWxpZ24iO3M6NDoibGVmdCI7czoxMjoiY29sQ2xhc3NOYW1lIjtzOjA6IiI7czoxMDoidGl0bGVBbGlnbiI7czowOiIiO3M6NToiYWxpZ24iO3M6MDoiIjtzOjExOiJzaG93SW5UYWJsZSI7czoxOiIxIjtzOjc6Im9uY2xpY2siO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjk6IkRZTl9USVRMRSI7TzoxNjoiWG1sRm9ybUZpZWxkVGV4dCI6NTE6e3M6NDoic2l6ZSI7aToxNTtzOjk6Im1heExlbmd0aCI7aTo2NDtzOjg6InZhbGlkYXRlIjtzOjM6IkFueSI7czo0OiJtYXNrIjtzOjA6IiI7czoxMjoiZGVmYXVsdFZhbHVlIjtzOjA6IiI7czo4OiJyZXF1aXJlZCI7YjowO3M6MTU6ImRlcGVuZGVudEZpZWxkcyI7czowOiIiO3M6OToibGlua0ZpZWxkIjtzOjA6IiI7czo1OiJzdHJUbyI7czowOiIiO3M6ODoicmVhZE9ubHkiO2I6MDtzOjEzOiJzcWxDb25uZWN0aW9uIjtpOjA7czozOiJzcWwiO3M6MDoiIjtzOjk6InNxbE9wdGlvbiI7YTowOnt9czoxMzoiZ3JpZEZpZWxkVHlwZSI7czo0OiJ0ZXh0IjtzOjc6ImZvcm11bGEiO3M6MDoiIjtzOjg6ImZ1bmN0aW9uIjtzOjA6IiI7czoxMToicmVwbGFjZVRhZ3MiO2k6MDtzOjEwOiJyZW5kZXJNb2RlIjtzOjA6IiI7czoxNToiY29tbWFfc2VwYXJhdG9yIjtzOjE6Ii4iO3M6MTI6ImF1dG9jb21wbGV0ZSI7czoyOiJvbiI7czoxMDoib25rZXlwcmVzcyI7czowOiIiO3M6NDoibmFtZSI7czo5OiJEWU5fVElUTEUiO3M6NDoidHlwZSI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjU6IlRpdGxlIjtzOjc6InBtTGFiZWwiO3M6NToiVGl0bGUiO3M6NToib3duZXIiO3I6NTU1O3M6ODoibGFuZ3VhZ2UiO3M6MjoiZW4iO3M6NToiZ3JvdXAiO2k6MDtzOjQ6Im1vZGUiO3M6NDoidmlldyI7czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xXaWR0aCI7czozOiIzMDAiO3M6ODoiY29sQWxpZ24iO3M6NDoibGVmdCI7czoxMjoiY29sQ2xhc3NOYW1lIjtzOjA6IiI7czoxMDoidGl0bGVBbGlnbiI7czo0OiJsZWZ0IjtzOjU6ImFsaWduIjtzOjQ6ImxlZnQiO3M6MTE6InNob3dJblRhYmxlIjtzOjA6IiI7czo3OiJvbmNsaWNrIjtzOjA6IiI7czoxNjoiZGF0YUNvbXBhcmVGaWVsZCI7czo5OiJEWU5fVElUTEUiO3M6MTU6ImRhdGFDb21wYXJlVHlwZSI7czo4OiJjb250YWlucyI7czo3OiJwbXRhYmxlIjtzOjA6IiI7czo0OiJrZXlzIjtzOjA6IiI7czoxMjoicG1jb25uZWN0aW9uIjtzOjA6IiI7czo3OiJwbWZpZWxkIjtzOjA6IiI7czo4OiJtb2RlR3JpZCI7czowOiIiO3M6MTE6Im1vZGVGb3JHcmlkIjtzOjQ6ImVkaXQiO3M6Nzoib3B0aW9ucyI7YTowOnt9fXM6ODoiRFlOX1RZUEUiO086MjA6IlhtbEZvcm1GaWVsZERyb3Bkb3duIjo0NDp7czoxMjoiZGVmYXVsdFZhbHVlIjtzOjA6IiI7czo4OiJyZXF1aXJlZCI7YjowO3M6MTU6ImRlcGVuZGVudEZpZWxkcyI7czowOiIiO3M6ODoicmVhZG9ubHkiO2I6MDtzOjg6Im9wdGdyb3VwIjtpOjA7czo2OiJvcHRpb24iO2E6Mjp7czo3OiJ4bWxmb3JtIjtzOjY6Ik5vcm1hbCI7czo0OiJncmlkIjtzOjQ6IkdyaWQiO31zOjEzOiJzcWxDb25uZWN0aW9uIjtpOjA7czozOiJzcWwiO3M6MDoiIjtzOjk6InNxbE9wdGlvbiI7YTowOnt9czo5OiJzYXZlTGFiZWwiO2k6MDtzOjEyOiJtb2RlR3JpZERyb3AiO3M6MDoiIjtzOjEwOiJyZW5kZXJNb2RlIjtzOjQ6InZpZXciO3M6MTM6InNlbGVjdGVkVmFsdWUiO3M6MDoiIjtzOjQ6Im5hbWUiO3M6ODoiRFlOX1RZUEUiO3M6NDoidHlwZSI7czo4OiJkcm9wZG93biI7czo1OiJsYWJlbCI7czo0OiJUeXBlIjtzOjc6InBtTGFiZWwiO3M6NDoiVHlwZSI7czo1OiJvd25lciI7cjo1NTU7czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJ2aWV3IjtzOjEzOiJncmlkRmllbGRUeXBlIjtzOjA6IiI7czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xXaWR0aCI7czoyOiI1MCI7czo4OiJjb2xBbGlnbiI7czo2OiJjZW50ZXIiO3M6MTI6ImNvbENsYXNzTmFtZSI7czowOiIiO3M6MTA6InRpdGxlQWxpZ24iO3M6NjoiY2VudGVyIjtzOjU6ImFsaWduIjtzOjA6IiI7czoxMToic2hvd0luVGFibGUiO3M6MDoiIjtzOjc6Im9uY2xpY2siO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6Mjp7czo3OiJ4bWxmb3JtIjtzOjY6Ik5vcm1hbCI7czo0OiJncmlkIjtzOjQ6IkdyaWQiO319czo0OiJFRElUIjtPOjE2OiJYbWxGb3JtRmllbGRMaW5rIjozNzp7czo0OiJsaW5rIjtzOjE6IiMiO3M6NToidmFsdWUiO3M6NDoiRWRpdCI7czo2OiJ0YXJnZXQiO3M6MDoiIjtzOjU6InN0eWxlIjtzOjA6IiI7czoxMjoiY29sQ2xhc3NOYW1lIjtzOjc6IlJvd0xpbmsiO3M6MTM6ImdyaWRGaWVsZFR5cGUiO3M6NDoibGluayI7czo0OiJuYW1lIjtzOjQ6IkVESVQiO3M6NDoidHlwZSI7czo0OiJsaW5rIjtzOjU6ImxhYmVsIjtOO3M6NzoicG1MYWJlbCI7TjtzOjU6Im93bmVyIjtyOjU1NTtzOjg6Imxhbmd1YWdlIjtzOjI6ImVuIjtzOjU6Imdyb3VwIjtpOjA7czo0OiJtb2RlIjtzOjQ6InZpZXciO3M6MTI6ImRlZmF1bHRWYWx1ZSI7TjtzOjk6ImdyaWRMYWJlbCI7czowOiIiO3M6NDoiaGludCI7czowOiIiO3M6MTA6ImVuYWJsZUh0bWwiO2I6MDtzOjEyOiJ3aXRob3V0TGFiZWwiO2I6MDtzOjk6ImNsYXNzTmFtZSI7czowOiIiO3M6ODoiY29sV2lkdGgiO3M6MjoiNDAiO3M6ODoiY29sQWxpZ24iO3M6NDoibGVmdCI7czoxMDoidGl0bGVBbGlnbiI7czo0OiJsZWZ0IjtzOjU6ImFsaWduIjtzOjA6IiI7czoxMToic2hvd0luVGFibGUiO3M6MDoiIjtzOjc6Im9uY2xpY2siO3M6Mzc6ImR5bmFmb3JtRWRpdChAUURZTl9VSUQpO3JldHVybiBmYWxzZTsiO3M6MTY6ImRhdGFDb21wYXJlRmllbGQiO3M6MDoiIjtzOjE1OiJkYXRhQ29tcGFyZVR5cGUiO3M6MToiPSI7czozOiJzcWwiO3M6MDoiIjtzOjEzOiJzcWxDb25uZWN0aW9uIjtzOjA6IiI7czo3OiJwbXRhYmxlIjtzOjA6IiI7czo0OiJrZXlzIjtzOjA6IiI7czoxMjoicG1jb25uZWN0aW9uIjtzOjA6IiI7czo3OiJwbWZpZWxkIjtzOjA6IiI7czo4OiJtb2RlR3JpZCI7czowOiIiO3M6MTE6Im1vZGVGb3JHcmlkIjtzOjQ6ImVkaXQiO3M6Nzoib3B0aW9ucyI7YTowOnt9fXM6NjoiREVMRVRFIjtPOjE2OiJYbWxGb3JtRmllbGRMaW5rIjozNzp7czo0OiJsaW5rIjtzOjE6IiMiO3M6NToidmFsdWUiO3M6NjoiRGVsZXRlIjtzOjY6InRhcmdldCI7czowOiIiO3M6NToic3R5bGUiO3M6MDoiIjtzOjEyOiJjb2xDbGFzc05hbWUiO3M6NzoiUm93TGluayI7czoxMzoiZ3JpZEZpZWxkVHlwZSI7czo0OiJsaW5rIjtzOjQ6Im5hbWUiO3M6NjoiREVMRVRFIjtzOjQ6InR5cGUiO3M6NDoibGluayI7czo1OiJsYWJlbCI7czowOiIiO3M6NzoicG1MYWJlbCI7czowOiIiO3M6NToib3duZXIiO3I6NTU1O3M6ODoibGFuZ3VhZ2UiO3M6MjoiZW4iO3M6NToiZ3JvdXAiO2k6MDtzOjQ6Im1vZGUiO3M6NDoidmlldyI7czoxMjoiZGVmYXVsdFZhbHVlIjtOO3M6OToiZ3JpZExhYmVsIjtzOjA6IiI7czo0OiJoaW50IjtzOjA6IiI7czoxMDoiZW5hYmxlSHRtbCI7YjowO3M6MTI6IndpdGhvdXRMYWJlbCI7YjowO3M6OToiY2xhc3NOYW1lIjtzOjA6IiI7czo4OiJjb2xXaWR0aCI7czoyOiI0MCI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjEwOiJ0aXRsZUFsaWduIjtzOjA6IiI7czo1OiJhbGlnbiI7czowOiIiO3M6MTE6InNob3dJblRhYmxlIjtzOjA6IiI7czo3OiJvbmNsaWNrIjtzOjQ5OiJkeW5hZm9ybURlbGV0ZShAUURZTl9VSUQsQFFQUk9fVUlEKTtyZXR1cm4gZmFsc2U7IjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjc6IkdFVF9VSUQiO086MTY6IlhtbEZvcm1GaWVsZExpbmsiOjM3OntzOjQ6ImxpbmsiO3M6MToiIyI7czo1OiJ2YWx1ZSI7czozOiJVSUQiO3M6NjoidGFyZ2V0IjtzOjA6IiI7czo1OiJzdHlsZSI7czowOiIiO3M6MTI6ImNvbENsYXNzTmFtZSI7czo3OiJSb3dMaW5rIjtzOjEzOiJncmlkRmllbGRUeXBlIjtzOjQ6ImxpbmsiO3M6NDoibmFtZSI7czo3OiJHRVRfVUlEIjtzOjQ6InR5cGUiO3M6NDoibGluayI7czo1OiJsYWJlbCI7TjtzOjc6InBtTGFiZWwiO047czo1OiJvd25lciI7cjo1NTU7czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJ2aWV3IjtzOjEyOiJkZWZhdWx0VmFsdWUiO047czo5OiJncmlkTGFiZWwiO3M6MDoiIjtzOjQ6ImhpbnQiO3M6MDoiIjtzOjEwOiJlbmFibGVIdG1sIjtiOjA7czoxMjoid2l0aG91dExhYmVsIjtiOjA7czo5OiJjbGFzc05hbWUiO3M6MDoiIjtzOjg6ImNvbFdpZHRoIjtzOjI6IjQwIjtzOjg6ImNvbEFsaWduIjtzOjQ6ImxlZnQiO3M6MTA6InRpdGxlQWxpZ24iO3M6MDoiIjtzOjU6ImFsaWduIjtzOjA6IiI7czoxMToic2hvd0luVGFibGUiO3M6MDoiIjtzOjc6Im9uY2xpY2siO3M6NDc6Im1zZ0JveCgnVUlEOiAnK0BRRFlOX1VJRCwgJ2luZm8nKTtyZXR1cm4gZmFsc2U7IjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjY6IlNFQVJDSCI7TzoxODoiWG1sRm9ybUZpZWxkQnV0dG9uIjozNDp7czo3OiJvbmNsaWNrIjtzOjMwOiJwYWdlZFRhYmxlRmlsdGVyKCB0aGlzLmZvcm0gKTsiO3M6NToiYWxpZ24iO3M6NjoiY2VudGVyIjtzOjU6InN0eWxlIjtOO3M6NDoibmFtZSI7czo2OiJTRUFSQ0giO3M6NDoidHlwZSI7czo2OiJidXR0b24iO3M6NToibGFiZWwiO3M6MTI6IkFwcGx5IEZpbHRlciI7czo3OiJwbUxhYmVsIjtzOjEyOiJBcHBseSBGaWx0ZXIiO3M6NToib3duZXIiO3I6NTU1O3M6ODoibGFuZ3VhZ2UiO3M6MjoiZW4iO3M6NToiZ3JvdXAiO2k6MDtzOjQ6Im1vZGUiO3M6NDoiZWRpdCI7czoxMjoiZGVmYXVsdFZhbHVlIjtOO3M6MTM6ImdyaWRGaWVsZFR5cGUiO3M6MDoiIjtzOjk6ImdyaWRMYWJlbCI7czowOiIiO3M6NDoiaGludCI7czowOiIiO3M6MTA6ImVuYWJsZUh0bWwiO2I6MDtzOjEyOiJ3aXRob3V0TGFiZWwiO2I6MDtzOjk6ImNsYXNzTmFtZSI7czowOiIiO3M6ODoiY29sV2lkdGgiO2k6MTQwO3M6ODoiY29sQWxpZ24iO3M6NDoibGVmdCI7czoxMjoiY29sQ2xhc3NOYW1lIjtzOjA6IiI7czoxMDoidGl0bGVBbGlnbiI7czowOiIiO3M6MTE6InNob3dJblRhYmxlIjtzOjE6IjAiO3M6MTY6ImRhdGFDb21wYXJlRmllbGQiO3M6MDoiIjtzOjE1OiJkYXRhQ29tcGFyZVR5cGUiO3M6MToiPSI7czozOiJzcWwiO3M6MDoiIjtzOjEzOiJzcWxDb25uZWN0aW9uIjtzOjA6IiI7czo3OiJwbXRhYmxlIjtzOjA6IiI7czo0OiJrZXlzIjtzOjA6IiI7czoxMjoicG1jb25uZWN0aW9uIjtzOjA6IiI7czo3OiJwbWZpZWxkIjtzOjA6IiI7czo4OiJtb2RlR3JpZCI7czowOiIiO3M6MTE6Im1vZGVGb3JHcmlkIjtzOjQ6ImVkaXQiO3M6Nzoib3B0aW9ucyI7YTowOnt9fXM6MTQ6IlBBR0VEX1RBQkxFX0lEIjtPOjEyOiJYbWxGb3JtRmllbGQiOjM0OntzOjQ6Im5hbWUiO3M6MTQ6IlBBR0VEX1RBQkxFX0lEIjtzOjQ6InR5cGUiO3M6NzoicHJpdmF0ZSI7czo1OiJsYWJlbCI7TjtzOjc6InBtTGFiZWwiO047czo1OiJvd25lciI7cjo1NTU7czo4OiJsYW5ndWFnZSI7czoyOiJlbiI7czo1OiJncm91cCI7aTowO3M6NDoibW9kZSI7czo0OiJlZGl0IjtzOjEyOiJkZWZhdWx0VmFsdWUiO047czoxMzoiZ3JpZEZpZWxkVHlwZSI7czowOiIiO3M6OToiZ3JpZExhYmVsIjtzOjA6IiI7czo0OiJoaW50IjtzOjA6IiI7czoxMDoiZW5hYmxlSHRtbCI7YjowO3M6NToic3R5bGUiO3M6MDoiIjtzOjEyOiJ3aXRob3V0TGFiZWwiO2I6MDtzOjk6ImNsYXNzTmFtZSI7czowOiIiO3M6ODoiY29sV2lkdGgiO2k6MTQwO3M6ODoiY29sQWxpZ24iO3M6NDoibGVmdCI7czoxMjoiY29sQ2xhc3NOYW1lIjtzOjA6IiI7czoxMDoidGl0bGVBbGlnbiI7czowOiIiO3M6NToiYWxpZ24iO3M6MDoiIjtzOjExOiJzaG93SW5UYWJsZSI7czoxOiIwIjtzOjc6Im9uY2xpY2siO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czo0OiJlZGl0IjtzOjc6Im9wdGlvbnMiO2E6MDp7fX1zOjg6IkpTRklMVEVSIjtPOjIyOiJYbWxGb3JtRmllbGRKYXZhU2NyaXB0IjozNTp7czo0OiJjb2RlIjtzOjc2OiIKZnVuY3Rpb24gcGFnZWRUYWJsZUZpbHRlciggZm9ybSApIHsKICBAI1BBR0VEX1RBQkxFX0lELmRvRmlsdGVyKCBmb3JtICk7Cn0KIjtzOjExOiJyZXBsYWNlVGFncyI7czoxOiIxIjtzOjQ6Im5hbWUiO3M6ODoiSlNGSUxURVIiO3M6NDoidHlwZSI7czoxMDoiamF2YXNjcmlwdCI7czo1OiJsYWJlbCI7czowOiIiO3M6NzoicG1MYWJlbCI7czowOiIiO3M6NToib3duZXIiO3I6NTU1O3M6ODoibGFuZ3VhZ2UiO3M6MjoiZW4iO3M6NToiZ3JvdXAiO2k6MDtzOjQ6Im1vZGUiO3M6MDoiIjtzOjEyOiJkZWZhdWx0VmFsdWUiO047czoxMzoiZ3JpZEZpZWxkVHlwZSI7czowOiIiO3M6OToiZ3JpZExhYmVsIjtzOjA6IiI7czo0OiJoaW50IjtzOjA6IiI7czoxMDoiZW5hYmxlSHRtbCI7YjowO3M6NToic3R5bGUiO3M6MDoiIjtzOjEyOiJ3aXRob3V0TGFiZWwiO2I6MDtzOjk6ImNsYXNzTmFtZSI7czowOiIiO3M6ODoiY29sV2lkdGgiO2k6MTQwO3M6ODoiY29sQWxpZ24iO3M6NDoibGVmdCI7czoxMjoiY29sQ2xhc3NOYW1lIjtzOjA6IiI7czoxMDoidGl0bGVBbGlnbiI7czowOiIiO3M6NToiYWxpZ24iO3M6MDoiIjtzOjExOiJzaG93SW5UYWJsZSI7czoxOiIwIjtzOjc6Im9uY2xpY2siO3M6MDoiIjtzOjE2OiJkYXRhQ29tcGFyZUZpZWxkIjtzOjA6IiI7czoxNToiZGF0YUNvbXBhcmVUeXBlIjtzOjE6Ij0iO3M6Mzoic3FsIjtzOjA6IiI7czoxMzoic3FsQ29ubmVjdGlvbiI7czowOiIiO3M6NzoicG10YWJsZSI7czowOiIiO3M6NDoia2V5cyI7czowOiIiO3M6MTI6InBtY29ubmVjdGlvbiI7czowOiIiO3M6NzoicG1maWVsZCI7czowOiIiO3M6ODoibW9kZUdyaWQiO3M6MDoiIjtzOjExOiJtb2RlRm9yR3JpZCI7czowOiIiO319czo2OiJ2YWx1ZXMiO2E6NTQ6e3M6NzoiRFlOX1VJRCI7czozMjoiNDkyMzgwMDE1NWRhNzFhNzMyYTQyMDcwMzE3Njg0MjQiO3M6NzoiUFJPX1VJRCI7czozMjoiMjg1OTIxODY2NWQ0MWQ3YzI5MjA1OTgwNTgxMzc4NjEiO3M6OToiRFlOX1RJVExFIjtzOjQ6IkdyaWQiO3M6ODoiRFlOX1RZUEUiO3M6NDoiZ3JpZCI7czo0OiJFRElUIjtzOjA6IiI7czo2OiJERUxFVEUiO3M6MDoiIjtzOjc6IkdFVF9VSUQiO3M6MDoiIjtzOjY6IlNFQVJDSCI7czowOiIiO3M6MTQ6IlBBR0VEX1RBQkxFX0lEIjtzOjA6IiI7czo4OiJKU0ZJTFRFUiI7czowOiIiO3M6NjoiUFJPX0lEIjtpOjE7czo5OiJQUk9fVElUTEUiO3M6Nzoic3VnZ2VzdCI7czoxNToiUFJPX0RFU0NSSVBUSU9OIjtzOjA6IiI7czoxMDoiUFJPX1BBUkVOVCI7czozMjoiMjg1OTIxODY2NWQ0MWQ3YzI5MjA1OTgwNTgxMzc4NjEiO3M6ODoiUFJPX1RJTUUiO2Q6MTtzOjEyOiJQUk9fVElNRVVOSVQiO3M6NDoiREFZUyI7czoxMDoiUFJPX1NUQVRVUyI7czo2OiJBQ1RJVkUiO3M6MTM6IlBST19TVEFUVVNfSUQiO2k6MTtzOjEyOiJQUk9fVFlQRV9EQVkiO3M6MDoiIjtzOjg6IlBST19UWVBFIjtzOjY6Ik5PUk1BTCI7czoxNDoiUFJPX0FTU0lHTk1FTlQiO3M6NToiRkFMU0UiO3M6MTI6IlBST19TSE9XX01BUCI7aTowO3M6MTY6IlBST19TSE9XX01FU1NBR0UiO2k6MDtzOjE0OiJQUk9fU1VCUFJPQ0VTUyI7aTowO3M6MTQ6IlBST19UUklfQ1JFQVRFIjtzOjA6IiI7czoxMjoiUFJPX1RSSV9PUEVOIjtzOjA6IiI7czoxNToiUFJPX1RSSV9ERUxFVEVEIjtzOjA6IiI7czoxNjoiUFJPX1RSSV9DQU5DRUxFRCI7czowOiIiO3M6MTQ6IlBST19UUklfUEFVU0VEIjtzOjA6IiI7czoxODoiUFJPX1RSSV9SRUFTU0lHTkVEIjtzOjA6IiI7czoxNjoiUFJPX1RSSV9VTlBBVVNFRCI7czowOiIiO3M6MTY6IlBST19UWVBFX1BST0NFU1MiO3M6NjoiUFVCTElDIjtzOjE3OiJQUk9fU0hPV19ERUxFR0FURSI7aTowO3M6MTc6IlBST19TSE9XX0RZTkFGT1JNIjtpOjA7czoxMjoiUFJPX0NBVEVHT1JZIjtzOjA6IiI7czoxNjoiUFJPX1NVQl9DQVRFR09SWSI7czowOiIiO3M6MTI6IlBST19JTkRVU1RSWSI7aTowO3M6MTU6IlBST19VUERBVEVfREFURSI7czoxOToiMjAxOS0xMS0wNSAxMzo0NjoxNCI7czoxNToiUFJPX0NSRUFURV9EQVRFIjtzOjE5OiIyMDE5LTA3LTMxIDE0OjAyOjQyIjtzOjE1OiJQUk9fQ1JFQVRFX1VTRVIiO3M6MzI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIjtzOjEwOiJQUk9fSEVJR0hUIjtpOjUwMDA7czo5OiJQUk9fV0lEVEgiO2k6MTAwMDA7czoxMToiUFJPX1RJVExFX1giO2k6MDtzOjExOiJQUk9fVElUTEVfWSI7aTowO3M6OToiUFJPX0RFQlVHIjtpOjA7czoxMzoiUFJPX0RZTkFGT1JNUyI7YjowO3M6MjU6IlBST19ERVJJVkFUSU9OX1NDUkVFTl9UUEwiO3M6MDoiIjtzOjg6IlBST19DT1NUIjtkOjA7czoxMzoiUFJPX1VOSVRfQ09TVCI7czowOiIiO3M6ODoiUFJPX0lURUUiO2k6MDtzOjE1OiJQUk9fQUNUSU9OX0RPTkUiO047czoxMToiQ0FURUdPUllfSUQiO2k6MDtzOjE4OiJQUk9fQ0FURUdPUllfTEFCRUwiO3M6MTE6Ik5vIENhdGVnb3J5IjtzOjg6IlBST19CUE1OIjtpOjA7fXM6NjoiYWN0aW9uIjtzOjA6IiI7czoxMDoiYWpheFNlcnZlciI7czowOiIiO3M6MTQ6ImVuYWJsZVRlbXBsYXRlIjtiOjA7czoxMDoiYWpheFN1Ym1pdCI7YjowO3M6ODoiY2FsbGJhY2siO3M6MTI6ImZ1bmN0aW9uKCl7fSI7czoxMToiaW5fcHJvZ3Jlc3MiO3M6MTI6ImZ1bmN0aW9uKCl7fSI7czo4OiJ0ZW1wbGF0ZSI7czo2MDoiL3Zhci93d3cvcHJvY2Vzc21ha2VyL3dvcmtmbG93L2VuZ2luZS90ZW1wbGF0ZXMveG1sZm9ybS5odG1sIjtzOjk6ImNsYXNzTmFtZSI7czoxMToiZm9ybURlZmF1bHQiO3M6MjA6Im9iamVjdFJlcXVpcmVkRmllbGRzIjtzOjI6IltdIjtzOjEyOiJuZXh0c3RlcHNhdmUiO3M6MDoiIjtzOjEzOiJwcmludGR5bmFmb3JtIjtzOjA6IiI7czoxNjoiYWRqdXN0Z3JpZHN3aWR0aCI7czoxOiIwIjtzOjE1OiJ2aXN1YWxfZnJvbnRlbmQiO047czo0OiJ0cmVlIjtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6ODoiZHluYUZvcm0iO3M6NDoidHlwZSI7czo0OiJvcGVuIjtzOjU6InZhbHVlIjtzOjM6IgogICI7czoxMDoiYXR0cmlidXRlcyI7YTo0OntzOjQ6Im1lbnUiO3M6Mjc6ImR5bmFmb3Jtcy9keW5hZm9ybXNfT3B0aW9ucyI7czo1OiJ3aWR0aCI7czo0OiIxMDAlIjtzOjExOiJyb3dzUGVyUGFnZSI7czoyOiIxMiI7czo4OiJzZWFyY2hCeSI7czo5OiJEWU5fVElUTEUiO31zOjg6ImNoaWxkcmVuIjthOjIwOntpOjA7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjc6IkRZTl9VSUQiO3M6NDoidHlwZSI7czo4OiJjb21wbGV0ZSI7czo1OiJ2YWx1ZSI7czowOiIiO3M6MTA6ImF0dHJpYnV0ZXMiO2E6Mjp7czo0OiJ0eXBlIjtzOjY6ImhpZGRlbiI7czoxMToic2hvd0luVGFibGUiO3M6MToiMCI7fXM6ODoiY2hpbGRyZW4iO2E6MDp7fX1pOjE7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjU6ImNkYXRhIjtzOjU6InZhbHVlIjtzOjM6IgogICI7czoxMDoiYXR0cmlidXRlcyI7YTowOnt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6MjtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6NzoiUFJPX1VJRCI7czo0OiJ0eXBlIjtzOjg6ImNvbXBsZXRlIjtzOjU6InZhbHVlIjtzOjA6IiI7czoxMDoiYXR0cmlidXRlcyI7YToyOntzOjQ6InR5cGUiO3M6NjoiaGlkZGVuIjtzOjExOiJzaG93SW5UYWJsZSI7czoxOiIxIjt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6MztPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6MDoiIjtzOjQ6InR5cGUiO3M6NToiY2RhdGEiO3M6NToidmFsdWUiO3M6MzoiCiAgIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjA6e31zOjg6ImNoaWxkcmVuIjthOjA6e319aTo0O086ODoiWG1sX05vZGUiOjU6e3M6NDoibmFtZSI7czo5OiJEWU5fVElUTEUiO3M6NDoidHlwZSI7czo0OiJvcGVuIjtzOjU6InZhbHVlIjtzOjU6IgogICAgIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjY6e3M6NDoidHlwZSI7czo0OiJ0ZXh0IjtzOjg6ImNvbFdpZHRoIjtzOjM6IjMwMCI7czoxMDoidGl0bGVBbGlnbiI7czo0OiJsZWZ0IjtzOjU6ImFsaWduIjtzOjQ6ImxlZnQiO3M6MTY6ImRhdGFDb21wYXJlRmllbGQiO3M6OToiRFlOX1RJVExFIjtzOjE1OiJkYXRhQ29tcGFyZVR5cGUiO3M6ODoiY29udGFpbnMiO31zOjg6ImNoaWxkcmVuIjthOjI6e2k6MDtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6MjoiZW4iO3M6NDoidHlwZSI7czo4OiJjb21wbGV0ZSI7czo1OiJ2YWx1ZSI7czo1OiJUaXRsZSI7czoxMDoiYXR0cmlidXRlcyI7YTowOnt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6MTtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6MDoiIjtzOjQ6InR5cGUiO3M6NToiY2RhdGEiO3M6NToidmFsdWUiO3M6MzoiCiAgIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjA6e31zOjg6ImNoaWxkcmVuIjthOjA6e319fX1pOjU7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjU6ImNkYXRhIjtzOjU6InZhbHVlIjtzOjM6IgogICI7czoxMDoiYXR0cmlidXRlcyI7YTowOnt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6NjtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6ODoiRFlOX1RZUEUiO3M6NDoidHlwZSI7czo0OiJvcGVuIjtzOjU6InZhbHVlIjtzOjU6IgogICAgIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjQ6e3M6NDoidHlwZSI7czo4OiJkcm9wZG93biI7czo4OiJjb2xXaWR0aCI7czoyOiI1MCI7czo4OiJjb2xBbGlnbiI7czo2OiJjZW50ZXIiO3M6MTA6InRpdGxlQWxpZ24iO3M6NjoiY2VudGVyIjt9czo4OiJjaGlsZHJlbiI7YToyOntpOjA7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjI6ImVuIjtzOjQ6InR5cGUiO3M6NDoib3BlbiI7czo1OiJ2YWx1ZSI7czo0OiJUeXBlIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjA6e31zOjg6ImNoaWxkcmVuIjthOjI6e2k6MDtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6Njoib3B0aW9uIjtzOjQ6InR5cGUiO3M6ODoiY29tcGxldGUiO3M6NToidmFsdWUiO3M6NjoiTm9ybWFsIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjE6e3M6NDoibmFtZSI7czo3OiJ4bWxmb3JtIjt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6MTtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6Njoib3B0aW9uIjtzOjQ6InR5cGUiO3M6ODoiY29tcGxldGUiO3M6NToidmFsdWUiO3M6NDoiR3JpZCI7czoxMDoiYXR0cmlidXRlcyI7YToxOntzOjQ6Im5hbWUiO3M6NDoiZ3JpZCI7fXM6ODoiY2hpbGRyZW4iO2E6MDp7fX19fWk6MTtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6MDoiIjtzOjQ6InR5cGUiO3M6NToiY2RhdGEiO3M6NToidmFsdWUiO3M6MzoiCiAgIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjA6e31zOjg6ImNoaWxkcmVuIjthOjA6e319fX1pOjc7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjU6ImNkYXRhIjtzOjU6InZhbHVlIjtzOjM6IgogICI7czoxMDoiYXR0cmlidXRlcyI7YTowOnt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6ODtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6NDoiRURJVCI7czo0OiJ0eXBlIjtzOjg6ImNvbXBsZXRlIjtzOjU6InZhbHVlIjtzOjA6IiI7czoxMDoiYXR0cmlidXRlcyI7YTo3OntzOjQ6InR5cGUiO3M6NDoibGluayI7czo4OiJjb2xXaWR0aCI7czoyOiI0MCI7czo4OiJjb2xBbGlnbiI7czo0OiJsZWZ0IjtzOjEwOiJ0aXRsZUFsaWduIjtzOjQ6ImxlZnQiO3M6NToidmFsdWUiO3M6Mjg6IkBHOjpMb2FkVHJhbnNsYXRpb24oSURfRURJVCkiO3M6NDoibGluayI7czoxOiIjIjtzOjc6Im9uY2xpY2siO3M6Mzc6ImR5bmFmb3JtRWRpdChAUURZTl9VSUQpO3JldHVybiBmYWxzZTsiO31zOjg6ImNoaWxkcmVuIjthOjA6e319aTo5O086ODoiWG1sX05vZGUiOjU6e3M6NDoibmFtZSI7czowOiIiO3M6NDoidHlwZSI7czo1OiJjZGF0YSI7czo1OiJ2YWx1ZSI7czozOiIKICAiO3M6MTA6ImF0dHJpYnV0ZXMiO2E6MDp7fXM6ODoiY2hpbGRyZW4iO2E6MDp7fX1pOjEwO086ODoiWG1sX05vZGUiOjU6e3M6NDoibmFtZSI7czo2OiJERUxFVEUiO3M6NDoidHlwZSI7czo0OiJvcGVuIjtzOjU6InZhbHVlIjtzOjU6IgogICAgIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjU6e3M6NDoidHlwZSI7czo0OiJsaW5rIjtzOjg6ImNvbFdpZHRoIjtzOjI6IjQwIjtzOjU6InZhbHVlIjtzOjMwOiJARzo6TG9hZFRyYW5zbGF0aW9uKElEX0RFTEVURSkiO3M6NDoibGluayI7czoxOiIjIjtzOjc6Im9uY2xpY2siO3M6NDk6ImR5bmFmb3JtRGVsZXRlKEBRRFlOX1VJRCxAUVBST19VSUQpO3JldHVybiBmYWxzZTsiO31zOjg6ImNoaWxkcmVuIjthOjI6e2k6MDtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6MjoiZW4iO3M6NDoidHlwZSI7czo4OiJjb21wbGV0ZSI7czo1OiJ2YWx1ZSI7czowOiIiO3M6MTA6ImF0dHJpYnV0ZXMiO2E6MDp7fXM6ODoiY2hpbGRyZW4iO2E6MDp7fX1pOjE7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjU6ImNkYXRhIjtzOjU6InZhbHVlIjtzOjM6IgogICI7czoxMDoiYXR0cmlidXRlcyI7YTowOnt9czo4OiJjaGlsZHJlbiI7YTowOnt9fX19aToxMTtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6MDoiIjtzOjQ6InR5cGUiO3M6NToiY2RhdGEiO3M6NToidmFsdWUiO3M6MzoiCiAgIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjA6e31zOjg6ImNoaWxkcmVuIjthOjA6e319aToxMjtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6NzoiR0VUX1VJRCI7czo0OiJ0eXBlIjtzOjg6ImNvbXBsZXRlIjtzOjU6InZhbHVlIjtzOjA6IiI7czoxMDoiYXR0cmlidXRlcyI7YTo1OntzOjQ6InR5cGUiO3M6NDoibGluayI7czo4OiJjb2xXaWR0aCI7czoyOiI0MCI7czo1OiJ2YWx1ZSI7czozOiJVSUQiO3M6NDoibGluayI7czoxOiIjIjtzOjc6Im9uY2xpY2siO3M6NDc6Im1zZ0JveCgnVUlEOiAnK0BRRFlOX1VJRCwgJ2luZm8nKTtyZXR1cm4gZmFsc2U7Ijt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6MTM7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjU6ImNkYXRhIjtzOjU6InZhbHVlIjtzOjM6IgogICI7czoxMDoiYXR0cmlidXRlcyI7YTowOnt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6MTQ7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjY6IlNFQVJDSCI7czo0OiJ0eXBlIjtzOjQ6Im9wZW4iO3M6NToidmFsdWUiO3M6NToiCiAgICAiO3M6MTA6ImF0dHJpYnV0ZXMiO2E6Mzp7czo0OiJ0eXBlIjtzOjY6ImJ1dHRvbiI7czo3OiJvbmNsaWNrIjtzOjMwOiJwYWdlZFRhYmxlRmlsdGVyKCB0aGlzLmZvcm0gKTsiO3M6MTE6InNob3dJblRhYmxlIjtzOjE6IjAiO31zOjg6ImNoaWxkcmVuIjthOjI6e2k6MDtPOjg6IlhtbF9Ob2RlIjo1OntzOjQ6Im5hbWUiO3M6MjoiZW4iO3M6NDoidHlwZSI7czo4OiJjb21wbGV0ZSI7czo1OiJ2YWx1ZSI7czoxMjoiQXBwbHkgRmlsdGVyIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjA6e31zOjg6ImNoaWxkcmVuIjthOjA6e319aToxO086ODoiWG1sX05vZGUiOjU6e3M6NDoibmFtZSI7czowOiIiO3M6NDoidHlwZSI7czo1OiJjZGF0YSI7czo1OiJ2YWx1ZSI7czozOiIKICAiO3M6MTA6ImF0dHJpYnV0ZXMiO2E6MDp7fXM6ODoiY2hpbGRyZW4iO2E6MDp7fX19fWk6MTU7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjU6ImNkYXRhIjtzOjU6InZhbHVlIjtzOjM6IgogICI7czoxMDoiYXR0cmlidXRlcyI7YTowOnt9czo4OiJjaGlsZHJlbiI7YTowOnt9fWk6MTY7Tzo4OiJYbWxfTm9kZSI6NTp7czo0OiJuYW1lIjtzOjE0OiJQQUdFRF9UQUJMRV9JRCI7czo0OiJ0eXBlIjtzOjg6ImNvbXBsZXRlIjtzOjU6InZhbHVlIjtzOjA6IiI7czoxMDoiYXR0cmlidXRlcyI7YToyOntzOjQ6InR5cGUiO3M6NzoicHJpdmF0ZSI7czoxMToic2hvd0luVGFibGUiO3M6MToiMCI7fXM6ODoiY2hpbGRyZW4iO2E6MDp7fX1pOjE3O086ODoiWG1sX05vZGUiOjU6e3M6NDoibmFtZSI7czowOiIiO3M6NDoidHlwZSI7czo1OiJjZGF0YSI7czo1OiJ2YWx1ZSI7czozOiIKICAiO3M6MTA6ImF0dHJpYnV0ZXMiO2E6MDp7fXM6ODoiY2hpbGRyZW4iO2E6MDp7fX1pOjE4O086ODoiWG1sX05vZGUiOjU6e3M6NDoibmFtZSI7czo4OiJKU0ZJTFRFUiI7czo0OiJ0eXBlIjtzOjg6ImNvbXBsZXRlIjtzOjU6InZhbHVlIjtzOjc2OiIKZnVuY3Rpb24gcGFnZWRUYWJsZUZpbHRlciggZm9ybSApIHsKICBAI1BBR0VEX1RBQkxFX0lELmRvRmlsdGVyKCBmb3JtICk7Cn0KIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjM6e3M6NDoidHlwZSI7czoxMDoiamF2YXNjcmlwdCI7czoxMToicmVwbGFjZVRhZ3MiO3M6MToiMSI7czoxMToic2hvd0luVGFibGUiO3M6MToiMCI7fXM6ODoiY2hpbGRyZW4iO2E6MDp7fX1pOjE5O086ODoiWG1sX05vZGUiOjU6e3M6NDoibmFtZSI7czowOiIiO3M6NDoidHlwZSI7czo1OiJjZGF0YSI7czo1OiJ2YWx1ZSI7czoxOiIKIjtzOjEwOiJhdHRyaWJ1dGVzIjthOjA6e31zOjg6ImNoaWxkcmVuIjthOjA6e319fX1zOjQ6Im5hbWUiO3M6MDoiIjtzOjg6Imxhbmd1YWdlIjtzOjI6ImVuIjtzOjc6InZlcnNpb24iO3M6MzoiMC4zIjtzOjQ6ImhvbWUiO3M6NDY6Ii92YXIvd3d3L3Byb2Nlc3NtYWtlci93b3JrZmxvdy9lbmdpbmUveG1sZm9ybS8iO3M6MTA6InBhcnNlZEZpbGUiO3M6Nzg6Ii92YXIvd3d3L3Byb2Nlc3NtYWtlci93b3JrZmxvdy9lbmdpbmUveG1sZm9ybS9keW5hZm9ybXMvZHluYWZvcm1zX1Nob3J0TGlzdC5lbiI7czo0OiJ0eXBlIjtzOjc6InhtbGZvcm0iO3M6ODoiZmlsZU5hbWUiO3M6Nzk6Ii92YXIvd3d3L3Byb2Nlc3NtYWtlci93b3JrZmxvdy9lbmdpbmUveG1sZm9ybS9keW5hZm9ybXMvZHluYWZvcm1zX1Nob3J0TGlzdC54bWwiO3M6MTA6InNjcmlwdEZpbGUiO3M6OTg6Ii92YXIvd3d3L3NoYXJlZC9jb21waWxlZC94bWxmb3JtL2R5bmFmb3Jtcy9keW5hZm9ybXNfU2hvcnRMaXN0LjhhYjk3YTZkMTU2MjIxZjQxYjRlYWFkMWVjNjZjNTE3LmpzIjtzOjk6InNjcmlwdFVSTCI7czo3MzoiL2pzZm9ybS9keW5hZm9ybXMvZHluYWZvcm1zX1Nob3J0TGlzdC44YWI5N2E2ZDE1NjIyMWY0MWI0ZWFhZDFlYzY2YzUxNy5qcyI7czozOiJzcWwiO047czoxMzoic3FsQ29ubmVjdGlvbiI7TjtzOjY6ImhlaWdodCI7czo0OiIxMDAlIjtzOjY6ImJvcmRlciI7aToxO3M6NDoibW9kZSI7czowOiIiO3M6MTA6ImxhYmVsV2lkdGgiO3M6MzoiNDAlIjtzOjg6Im9uc3VibWl0IjtzOjA6IiI7czoxNDoicmVxdWlyZWRGaWVsZHMiO2E6MDp7fXM6MTc6ImZpZWxkQ29udGVudFdpZHRoIjtpOjYxNTtzOjc6InhtbGZvcm0iO086ODoic3RkQ2xhc3MiOjM6e3M6NzoiZmlsZVhtbCI7czo3OToiL3Zhci93d3cvcHJvY2Vzc21ha2VyL3dvcmtmbG93L2VuZ2luZS94bWxmb3JtL2R5bmFmb3Jtcy9keW5hZm9ybXNfU2hvcnRMaXN0LnhtbCI7czo0OiJob21lIjtzOjQ2OiIvdmFyL3d3dy9wcm9jZXNzbWFrZXIvd29ya2Zsb3cvZW5naW5lL3htbGZvcm0vIjtzOjQ6InRyZWUiO086ODoic3RkQ2xhc3MiOjE6e3M6OToiYXR0cmlidXRlIjthOjQ6e3M6NDoibWVudSI7czoyNzoiZHluYWZvcm1zL2R5bmFmb3Jtc19PcHRpb25zIjtzOjU6IndpZHRoIjtzOjQ6IjEwMCUiO3M6MTE6InJvd3NQZXJQYWdlIjtzOjI6IjEyIjtzOjg6InNlYXJjaEJ5IjtzOjk6IkRZTl9USVRMRSI7fX19fXM6NDoibWVudSI7czoyNzoiZHluYWZvcm1zL2R5bmFmb3Jtc19PcHRpb25zIjtzOjEwOiJmaWx0ZXJGb3JtIjtzOjA6IiI7czoxMzoiZmlsdGVyRm9ybV9JZCI7czowOiIiO3M6NDoibmFtZSI7czowOiIiO3M6MjoiaWQiO3M6NjA6ImJEbDVaWHBhWW1sd2NETnFielZZYlRRMVlXWTBZVkJoY0hOTFJERkt3ckJzY1VoNldqVTJWMkkzWVV0cyI7czoxMzoiZGlzYWJsZUZvb3RlciI7YjowO3M6NzoidGRTdHlsZSI7czowOiIiO3M6NzoidGRDbGFzcyI7czowOiIiO3M6MTU6Il9fQ29uZmlndXJhdGlvbiI7czo0NToib3JkZXJCeSxmaWx0ZXIsZmFzdFNlYXJjaCxzdHlsZS8qL3Nob3dJblRhYmxlIjtzOjEyOiJtYXN0ZXJkZXRhaWwiO2E6MDp7fXM6NToidGl0bGUiO3M6MDoiIjtzOjk6ImdyaWRXaWR0aCI7czoyMDoiLDE0MCwzMDAsNTAsNDAsNDAsNDAiO3M6MTA6ImdyaWRGaWVsZHMiO3M6OTU6IiwiZm9ybVtQUk9fVUlEXSIsImZvcm1bRFlOX1RJVExFXSIsImZvcm1bRFlOX1RZUEVdIiwiZm9ybVtFRElUXSIsImZvcm1bREVMRVRFXSIsImZvcm1bR0VUX1VJRF0iIjtzOjEwOiJmaWVsZHNUeXBlIjthOjA6e31zOjEwOiJ0b3RhbFdpZHRoIjtpOjYxMDtzOjk6Il9fT0JKX1VJRCI7czoyOToiZHluYWZvcm1zL2R5bmFmb3Jtc19TaG9ydExpc3QiO3M6NjoiYU9yZGVyIjthOjA6e31zOjg6ImNvbENvdW50IjtpOjEwO3M6MTE6InNob3duRmllbGRzIjtzOjUwOiJbIkRZTl9USVRMRSIsIkRZTl9UWVBFIiwiRURJVCIsIkRFTEVURSIsIkdFVF9VSUQiXSI7fQ==", + "dynaform_editor": "processmap", + "Current_Dynafom": { + "Parameters": { + "SYS_LANG": "en", + "URL": "ZZtlpWKkbGamqZWhpplw1WOmZZNlpWijaWihp2ilq2ZopWWeZJZln2CjaZSkpZWm1mxsopbRmJtgomCmbGWkq2fM6aKpog", + "DYN_UID": "3411353005d41d9a730ede8060385476", + "PRO_UID": "2859218665d41d7c2920598058137861", + "DYNAFORM_NAME": "BUG", + "FILE": "2859218665d41d7c2920598058137861\/3411353005d41d9a730ede8060385476_tmp0", + "DYN_EDITOR": "processmap" + } + }, + "bDl5ZXpaYmlwcDNqbzVmVzJxR2Q1WkRCb3RLY3pwSGxZcWpkNEE___": { + "PRO_UID": "2859218665d41d7c2920598058137861", + "DYN_UID": "3411353005d41d9a730ede8060385476", + "saveDyna": "", + "saveasDyna": "", + "separator2": "", + "text": "", + "currency": "", + "percentage": "", + "password": "", + "suggest": "", + "textarea": "", + "separator3": "", + "title": "", + "subtitle": "", + "separator4": "", + "button": "", + "submit": "", + "reset": "", + "separator5": "", + "dropdown": "", + "yesno": "", + "listbox": "", + "separator6": "", + "checkbox": "", + "checkgroup": "", + "radiogroup": "", + "separator7": "", + "date": "", + "hidden": "", + "link": "", + "file": "", + "separator8": "", + "javascript": "", + "separator9": "", + "grid": "", + "separator10": "", + "dynaforms": "" + }, + "bDl5ZXpaYmlwcDNqbzVYbTQ1YWY0YVBhcHNKMTBKbm5vNktlN0o3Wg______": { + "__DYNAFORM_OPTIONS": [], + "toolbar": "", + "URL": "ZZtlpWKkbGamqZWhpplw1WOmZZNlpWijaWihp2ilq2ZopWWeZJZln2CjaZSkpZWm1mxsopbRmJtgomCmbGWkq2fM6aKpog", + "DYN_UID": "3411353005d41d9a730ede8060385476", + "PRO_UID": "2859218665d41d7c2920598058137861", + "DYN_EDITOR": "processmap", + "DYNAFORM_NAME": "BUG", + "title": "", + "dynaforms_Preview": "..\/dynaforms\/dynaforms_Preview", + "dynaforms_Ajax": "..\/dynaforms\/dynaforms_Ajax", + "processMap": "..\/processes\/processes_Map", + "processMap3": "..\/designer", + "processBpmnMap": "..\/bpmn\/processmap", + "SCRIPT": "" + }, + "bDl5ZXpaYmlwcDNqbzVYbTQ1YWY0YVBhcHNLSTJaeTRtSm5rNDZPYjdhS2w___": { + "__DYNAFORM_OPTIONS": [], + "URL": "ZZtlpWKkbGamqZWhpplw1WOmZZNlpWijaWihp2ilq2ZopWWeZJZln2CjaZSkpZWm1mxsopbRmJtgomCmbGWkq2fM6aKpog", + "XML": "", + "PME_RESIZE_JS": "" + }, + "bDl5ZXpaYmlwcDNqbzVYbTQ1YWY0YVBhcHNKNnYzWFhuYVRmNWzCsGw0cUU___": { + "__DYNAFORM_OPTIONS": [], + "JS_TITLE": "", + "JS_LIST": "", + "JS": "", + "PME_RESIZE_JS": "" + }, + "bDl5ZXpaYmlwcDNqbzVYbTQ1YWY0YVBhcHNLQTNwwrBqbWFMazNaYmdvNjJtM2c___": { + "__DYNAFORM_OPTIONS": [], + "PME_PROPERTIES_TITLE": "", + "DYN_UID": "3411353005d41d9a730ede8060385476", + "PRO_UID": "2859218665d41d7c2920598058137861", + "DYN_TYPE_PREVIOUS": "", + "A": "ZZtlpWKkbGamqZWhpplw1WOmZZNlpWijaWihp2ilq2ZopWWeZJZln2CjaZSkpZWm1mxsopbRmJtgomCmbGWkq2fM6aKpog", + "DYN_TITLE": "BUG", + "DYN_TYPE": "xmlform", + "DYN_DESCRIPTION": "", + "SUBTITLE": "", + "WIDTH": "500", + "MODE": "", + "NEXTSTEPSAVE": "prompt", + "PRINTDYNAFORM": "", + "ADJUSTGRIDSWIDTH": "", + "PME_PROP_APPLY": "", + "PME_PROP_REVERT": "", + "sdfsdf": "" + }, + "Wlp0bHBXS2tiR2FtcVpXaHBwbHcxV09tWlpObHBXaWphV2locDJpbHEyWm9wV1dlWkpabG4yQ2phWlNrcFpXbTFteHNvcGJSbUp0Z29tQ21iR1drcTJmTTZhS3BvbMKwbG9NOA______": { + "BUG": "", + "TEST": "", + "SUGGEST": "", + "SUBMIT": "", + "Grid": { + "1": { + "suggest1": "BO" + } + }, + "__DYNAFORM_OPTIONS": { + "PREVIOUS_STEP": "#", + "NEXT_STEP": "#", + "NEXT_STEP_LABEL": "Next Step", + "PREVIOUS_ACTION": "return false;", + "NEXT_ACTION": "return false;" + } + }, + "bDl5ZXpaYmlwcDNqbzVmVzJxR2Q1WkRCb3RLY3pwSGxlNkxaMkbCsGw0cUU___": { + "PRO_UID": "2859218665d41d7c2920598058137861", + "DYN_UID": "4923800155da71a732a4207031768424", + "saveDyna": "", + "saveasDyna": "", + "separator3": "", + "text": "", + "currency": "", + "percentage": "", + "suggest": "", + "textarea": "", + "separator5": "", + "dropdown": "", + "yesno": "", + "checkbox": "", + "separator7": "", + "date": "", + "hidden": "", + "link": "", + "file": "", + "separator10": "", + "dynaforms": "" + }, + "Wlp0bHBXS2tiR2FtcVpXaHBwbHcxV09tWlpObHBXaWphV2locDJpbHEyWm9wbXFmWnB0Z25HR29hWlRScTJMT3JHaHIwMldmWTVwZ24yR3FhbWlrcG1YTTZhS3BvbMKwbG9NOA______": { + "suggest1": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "suggest2": { + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + } + }, + "bDl5ZXpaYmlwcDNqbzVmVzJxR2Q1V0RncU1xWDBhUG5ZcWpkNEE___": { + "__DYNAFORM_OPTIONS": [], + "PME_A": "ZZtlpWKkbGamqZWhpplw1WOmZZNlpWijaWihp2ilq2ZopmqfZptgnGGoaZTRq2LOrGhr02WfY5pgn2GqamikpmXM6aKpog", + "PME_TYPE": "suggest", + "PME_PRO_UID": "2859218665d41d7c2920598058137861", + "PME_DYN_TYPE": "grid", + "PME_TITLE": "", + "PME_XMLNODE_NAME": "suggest1", + "PME_XMLNODE_NAME_OLD": "suggest1", + "PME_VALIDATE_NAME": "", + "PME_LABEL": "suggest1", + "PME_SUBTITLE3": "", + "PME_REQUIRED": "", + "PME_DEPENDENTFIELDS": "__NULL__", + "PME_HINT": "", + "PME_SUBTITLE": "", + "PME_SIZE": "15", + "PME_MODE": "edit", + "PME_SUBTITLE2": "", + "PME_SQLCONNECTION": "4898432885d41d9921cea61001765691", + "PME_XMLNODE_VALUE": "\nSELECT IC_UID, IC_NAME\nFROM ISO_COUNTRY\n", + "PME_MAXRESULTS": "6", + "PME_SHOWNORESULTS": "", + "PME_SAVELABEL": "1", + "PME_STORE_NEW_ENTRY": "", + "PME_SEARCHTYPE": "*searchtype*", + "PME_TABLE_DATA": "", + "PME_TABLE": "", + "PME_PRIMARY_KEY_DATA": "", + "PME_PRIMARY_KEY": "", + "PME_FIELD": "", + "PME_PRIMARY_KEY_TYPE_DATA": "", + "PME_PRIMARY_KEY_TYPE": "", + "PME_CALLBACK": "", + "BTN_CANCEL": "", + "PME_ACCEPT": "", + "PME_JS": "" + } +} \ No newline at end of file diff --git a/tests/resources/simpleClassicXmlFormData.xml b/tests/resources/simpleClassicXmlFormData.xml new file mode 100755 index 000000000..8807097aa --- /dev/null +++ b/tests/resources/simpleClassicXmlFormData.xml @@ -0,0 +1,15 @@ + + + + BUG + + + TEST + + SUGGEST + + SUBMIT + + + diff --git a/tests/unit/gulliver/methods/DefaultAjaxTest.php b/tests/unit/gulliver/methods/DefaultAjaxTest.php new file mode 100644 index 000000000..67a261a78 --- /dev/null +++ b/tests/unit/gulliver/methods/DefaultAjaxTest.php @@ -0,0 +1,47 @@ +getDataFromFile("simpleClassicPostData.json"); + $_SESSION = $this->getDataFromFile("simpleClassicSessionData.json"); + $_SESSION["CURRENT_PAGE_INITILIZATION"] = ""; + + $pathName = PATH_XMLFORM . "2859218665d41d7c2920598058137861"; + $pathFileName = "{$pathName}/3411353005d41d9a730ede8060385476_tmp0.xml"; + if (!is_dir($pathName)) { + mkdir($pathName); + } + $data = file_get_contents(PATH_TRUNK . "/tests/resources/simpleClassicXmlFormData.xml"); + file_put_contents($pathFileName, $data); + + require_once PATH_TRUNK . '/gulliver/methods/defaultAjax.php'; + $this->expectOutputString('[]'); + + unlink($pathFileName); + rmdir($pathName); + } +}