1778692641
441d63ebbc39eba359c9061ece8482bd-phpdoc%3Af87aa757214ae2926d90d9644b097969-6a12c63942c1ca60abda1a1c8353a3f6
s:11728:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjE2OiJSZWxheTExVHJhaXQucGhwIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czozNzoiXFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0c1xSZWxheSI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjM3OiJcU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzXFJlbGF5IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NToiUmVsYXkiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MTp7czo1MDoiXFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0c1xSZWxheVxSZWxheTExVHJhaXQiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfIjoxMDp7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAHByb3BlcnRpZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBtZXRob2RzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMjk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxMzE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTA6IlxTeW1mb255XENvbXBvbmVudFxDYWNoZVxUcmFpdHNcUmVsYXlcUmVsYXkxMVRyYWl0IjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTI6IlJlbGF5MTFUcmFpdCI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFRyYWl0XwBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MDoiIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjE6e2k6MDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6ODoiaW50ZXJuYWwiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO319czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czozNjoiU3ltZm9ueVxDb21wb25lbnRcQ2FjaGVcVHJhaXRzXFJlbGF5IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVHJhaXRfAG1ldGFkYXRhIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxUcmFpdF8AYXR0cmlidXRlcyI7YTowOnt9fX1zOjQwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGVudW1zIjthOjA6e31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6IjZhMTJjNjM5NDJjMWNhNjBhYmRhMWExYzgzNTNhM2Y2IjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHBhdGgiO3M6NTA6InZlbmRvci9zeW1mb255L2NhY2hlL1RyYWl0cy9SZWxheS9SZWxheTExVHJhaXQucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czo1NDQ4OiI8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFN5bWZvbnkgcGFja2FnZS4KICoKICogKGMpIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENhY2hlXFRyYWl0c1xSZWxheTsKCmlmICh2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbigncmVsYXknKSwgJzAuMTEuMCcsICc+PScpKSB7CiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICB0cmFpdCBSZWxheTExVHJhaXQKICAgIHsKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gY21zSW5jckJ5KCRrZXksICRmaWVsZCwgJHZhbHVlLCAuLi4kZmllbGRzX2FuZF9mYWx1ZXMpOiBcUmVsYXlcUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5jbXNJbmNyQnkoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gY21zSW5mbygka2V5KTogXFJlbGF5XFJlbGF5fGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+Y21zSW5mbyguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBjbXNJbml0QnlEaW0oJGtleSwgJHdpZHRoLCAkZGVwdGgpOiBcUmVsYXlcUmVsYXl8Ym9vbAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmNtc0luaXRCeURpbSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBjbXNJbml0QnlQcm9iKCRrZXksICRlcnJvciwgJHByb2JhYmlsaXR5KTogXFJlbGF5XFJlbGF5fGJvb2wKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5jbXNJbml0QnlQcm9iKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGNtc01lcmdlKCRkc3RrZXksICRrZXlzLCAkd2VpZ2h0cyA9IFtdKTogXFJlbGF5XFJlbGF5fGJvb2wKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5jbXNNZXJnZSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBjbXNRdWVyeSgka2V5LCAuLi4kZmllbGRzKTogXFJlbGF5XFJlbGF5fGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+Y21zUXVlcnkoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gY29tbWFuZGxvZygkc3ViY21kLCAuLi4kYXJncyk6IFxSZWxheVxSZWxheXxhcnJheXxib29sfGludAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmNvbW1hbmRsb2coLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaGV4cGlyZSgkaGFzaCwgJHR0bCwgJGZpZWxkcywgJG1vZGUgPSBudWxsKTogXFJlbGF5XFJlbGF5fGFycmF5fGZhbHNlCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+aGV4cGlyZSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBoZXhwaXJlYXQoJGhhc2gsICR0dGwsICRmaWVsZHMsICRtb2RlID0gbnVsbCk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhleHBpcmVhdCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBoZXhwaXJldGltZSgkaGFzaCwgJGZpZWxkcyk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhleHBpcmV0aW1lKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhnZXRkZWwoJGtleSwgJGZpZWxkcyk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhnZXRkZWwoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaGdldGV4KCRoYXNoLCAkZmllbGRzLCAkZXhwaXJ5ID0gbnVsbCk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhnZXRleCguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBocGVyc2lzdCgkaGFzaCwgJGZpZWxkcyk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhwZXJzaXN0KC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhwZXhwaXJlKCRoYXNoLCAkdHRsLCAkZmllbGRzLCAkbW9kZSA9IG51bGwpOiBcUmVsYXlcUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5ocGV4cGlyZSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBocGV4cGlyZWF0KCRoYXNoLCAkdHRsLCAkZmllbGRzLCAkbW9kZSA9IG51bGwpOiBcUmVsYXlcUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5ocGV4cGlyZWF0KC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhwZXhwaXJldGltZSgkaGFzaCwgJGZpZWxkcyk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhwZXhwaXJldGltZSguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBocHR0bCgkaGFzaCwgJGZpZWxkcyk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmhwdHRsKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGhzZXRleCgka2V5LCAkZmllbGRzLCAkZXhwaXJ5ID0gbnVsbCk6IFxSZWxheVxSZWxheXxmYWxzZXxpbnQKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5oc2V0ZXgoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaHR0bCgkaGFzaCwgJGZpZWxkcyk6IFxSZWxheVxSZWxheXxhcnJheXxmYWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5yZWFsSW5zdGFuY2UgPz89ICgkdGhpcy0+bGF6eU9iamVjdFN0YXRlLT5pbml0aWFsaXplcikoKSktPmh0dGwoLi4uXGZ1bmNfZ2V0X2FyZ3MoKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc2VydmVyTmFtZSgpOiBmYWxzZXxzdHJpbmcKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+cmVhbEluc3RhbmNlID8/PSAoJHRoaXMtPmxhenlPYmplY3RTdGF0ZS0+aW5pdGlhbGl6ZXIpKCkpLT5zZXJ2ZXJOYW1lKC4uLlxmdW5jX2dldF9hcmdzKCkpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHNlcnZlclZlcnNpb24oKTogZmFsc2V8c3RyaW5nCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPnJlYWxJbnN0YW5jZSA/Pz0gKCR0aGlzLT5sYXp5T2JqZWN0U3RhdGUtPmluaXRpYWxpemVyKSgpKS0+c2VydmVyVmVyc2lvbiguLi5cZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9CiAgICB9Cn0gZWxzZSB7CiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICB0cmFpdCBSZWxheTExVHJhaXQKICAgIHsKICAgIH0KfQoiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZG9jQmxvY2siO047czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBtZXRhZGF0YSI7YTowOnt9fQ==";