diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e201d5bc..27025c87d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ -# v5.0.1-alpha6 +# v5.0.1-alpha7 -- Add new subform classes -- Fix registry class methods return type -- Update all list and custom fields to use the new layouts +- Add push options to Joomla Power +- Complete the Joomla Power Init and Reset features +- Fix Gitea Contents class functions +- Last Alpha release (feature block) # v5.0.1-alpha @@ -14,7 +15,10 @@ - Update the Schema class to also update null mismatching if needed - Add repositories for better integration with gitea - Refactored the Data classes -- Add new Data classes +- Add new Data classes +- Add new subform classes +- Fix registry class methods return type +- Update all list and custom fields to use the new layouts # v5.0.0 diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php index e53528de7..4ba4c3d19 100644 --- a/ComponentbuilderInstallerScript.php +++ b/ComponentbuilderInstallerScript.php @@ -1516,7 +1516,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // Fix the assets table rules column size. - $this->setDatabaseAssetsRulesFix(96000, "MEDIUMTEXT"); + $this->setDatabaseAssetsRulesFix(96160, "MEDIUMTEXT"); // Install the global extension params. $this->setExtensionsParams( '{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","subform_layouts":"default","editor":"none","manage_jcb_package_directories":"2","set_browser_storage":"1","storage_time_to_live":"global","super_powers_documentation":"0","powers_repository":"0","super_powers_repositories":"0","builder_gif_size":"480-272","compiler_plugin":["componentbuilderactionlogcompiler","componentbuilderfieldorderingcompiler","componentbuilderheaderscompiler","componentbuilderpowersautoloadercompiler","componentbuilderprivacycompiler"],"add_menu_prefix":"1","menu_prefix":"ยป","namespace_prefix":"JCB","minify":"0","language":"en-GB","percentagelanguageadd":"30","assets_table_fix":"2","compiler_field_builder_type":"2","field_name_builder":"1","type_name_builder":"1","import_guid_only":"1","export_language_strings":"1","development_method":"1","expansion":"0","return_options_build":"2","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","add_jquery_framework":"1","uikit_load":"1","uikit_min":"","uikit_style":""}' @@ -3266,7 +3266,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface echo '
-

Upgrade to Version 5.0.1-alpha6 Was Successful! Let us know if anything is not working as expected.

'; +

Upgrade to Version 5.0.1-alpha7 Was Successful! Let us know if anything is not working as expected.

'; // Add/Update component in the action logs extensions table. $this->setActionLogsExtensions(); diff --git a/README.md b/README.md index 87a1988b1..49b1ca60c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have! -You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (5.0.1-alpha6) with **ALL** its features and **ALL** concepts totally open-source and free! +You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (5.0.1-alpha7) with **ALL** its features and **ALL** concepts totally open-source and free! > Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45) @@ -144,13 +144,13 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 28th June, 2024 -+ *Version*: 5.0.1-alpha6 ++ *Last Build*: 8th July, 2024 ++ *Version*: 5.0.1-alpha7 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **763059** ++ *Line count*: **764707** + *Field count*: **2110** -+ *File count*: **5413** ++ *File count*: **5423** + *Folder count*: **546** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com). diff --git a/admin/README.txt b/admin/README.txt index 87a1988b1..49b1ca60c 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have! -You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (5.0.1-alpha6) with **ALL** its features and **ALL** concepts totally open-source and free! +You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (5.0.1-alpha7) with **ALL** its features and **ALL** concepts totally open-source and free! > Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45) @@ -144,13 +144,13 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 28th June, 2024 -+ *Version*: 5.0.1-alpha6 ++ *Last Build*: 8th July, 2024 ++ *Version*: 5.0.1-alpha7 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **763059** ++ *Line count*: **764707** + *Field count*: **2110** -+ *File count*: **5413** ++ *File count*: **5423** + *Folder count*: **546** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com). diff --git a/admin/access.xml b/admin/access.xml index 3391674c7..231163b60 100644 --- a/admin/access.xml +++ b/admin/access.xml @@ -388,6 +388,7 @@ + diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index 6b91f6842..25cbff752 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -6901,6 +6901,8 @@ COM_COMPONENTBUILDER_JOOMLA_POWER_NEW="A New Joomla Power" COM_COMPONENTBUILDER_JOOMLA_POWER_ORDERING_LABEL="Ordering" COM_COMPONENTBUILDER_JOOMLA_POWER_PERMISSION="Permissions" COM_COMPONENTBUILDER_JOOMLA_POWER_PUBLISHING="Publishing" +COM_COMPONENTBUILDER_JOOMLA_POWER_PUSH_BUTTON_ACCESS="Joomla Power Push Button Access" +COM_COMPONENTBUILDER_JOOMLA_POWER_PUSH_BUTTON_ACCESS_DESC="Allows the users in this group to access the push button." COM_COMPONENTBUILDER_JOOMLA_POWER_RESET_BUTTON_ACCESS="Joomla Power Reset Button Access" COM_COMPONENTBUILDER_JOOMLA_POWER_RESET_BUTTON_ACCESS_DESC="Allows the users in this group to access the reset button." COM_COMPONENTBUILDER_JOOMLA_POWER_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Joomla Power to customise the alias." @@ -7655,6 +7657,7 @@ COM_COMPONENTBUILDER_PATH_TO_THE_ZIPPED_PACKAGE_IS_CODESCODE_BR_S_S="Path to the COM_COMPONENTBUILDER_PERMISSIONS="Permissions" COM_COMPONENTBUILDER_PERMISSION_DENIED="Permission Denied!" COM_COMPONENTBUILDER_PFILE_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP="

File at %s/%s gave the following error!
%s

" +COM_COMPONENTBUILDER_PJOOMLA_POWERB_REPOSITORY_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP="

Joomla Power repository at %s/%s gave the following error!
%s

" COM_COMPONENTBUILDER_PJOOMLA_POWER_BGUIDSB_NOT_FOUNDP="

Joomla Power guid:%s not found!

" COM_COMPONENTBUILDER_PJOOMLA_POWER_BGUIDSB_WAS_FOUND_BUT_MISSING_A_NAMESPACE_VALUE_FOR_JOOMLA_SP="

Joomla Power guid:%s was found, but missing a namespace value for Joomla %s!

" COM_COMPONENTBUILDER_PLACEHOLDER="Placeholder" @@ -7946,6 +7949,8 @@ COM_COMPONENTBUILDER_PS_NAMING_MISMATCH_ERROR_SPPTHE_S_NAME_IS_BSB_AND_THE_ENDIN COM_COMPONENTBUILDER_PUBLIC_ACCESS="Public Access" COM_COMPONENTBUILDER_PUBLISHED="Published" COM_COMPONENTBUILDER_PUBLISHING="Publishing" +COM_COMPONENTBUILDER_PUSH="Push" +COM_COMPONENTBUILDER_PUSH_FAILED="Push Failed!" COM_COMPONENTBUILDER_READY_TO_COMPILE_A_COMPONENT="Ready to compile a component" COM_COMPONENTBUILDER_REFRESH="Refresh" COM_COMPONENTBUILDER_REGEX_SEARCH="Regex Search" @@ -9070,6 +9075,7 @@ COM_COMPONENTBUILDER_THERE_WAS_AN_ERROR_GETTING_THE_PACKAGE_INFO="There was an e COM_COMPONENTBUILDER_THERE_WAS_A_PROBLEM_BNO_VIEW_OR_ID_FOUND_IN_SESSION_OR_VIEW_NOT_ALLOWED_TO_ACCESS_AREAB_WE_COULD_NOT_LOAD_ANY_LINKED_TO_VALUES_PLEASE_INFORM_YOUR_SYSTEM_ADMINISTRATOR="There was a problem, no view or id found in session or view not allowed to access area, we could not load any linked to values. Please inform your system administrator!" COM_COMPONENTBUILDER_THESE_ARE_THE_SAME_PACKAGES_FOUND_ON_A_S_GITHUBA_AND_CAN_BE_IMPORTED_BY_SIMPLY_MAKING_A_SELECTION_AND_THEN_CLICKING_THE_BGET_PACKAGEB_BUTTONBR_SOME_OF_THESE_PACKAGES_WOULD_REQUIRE_A_KEY_SINCE_THEY_ARE_NOT_FREE="These are the same packages found on gitHub and can be imported by simply making a selection and then clicking the [Get Package] button.
Some of these packages would require a key, since they are not free." COM_COMPONENTBUILDER_THESE_ARE_THE_SAME_PACKAGES_FOUND_ON_A_S_GITHUBA_AND_CAN_BE_IMPORTED_BY_SIMPLY_MAKING_A_SELECTION_AND_THEN_CLICKING_THE_BGET_PACKAGEB_BUTTONBR_SOME_OF_THESE_PACKAGES_WOULD_REQUIRE_A_KEY_SINCE_THEY_ARE_NOT_FREE_A_S_GET_A_KEY_TODAYA="These are the same packages found on gitHub and can be imported by simply making a selection and then clicking the [Get Package] button.
Some of these packages would require a key, since they are not free. Get a key today!." +COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_PUSHED="These Joomla powers have successfully been pushed." COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET="These Joomla powers have successfully been reset." COM_COMPONENTBUILDER_THESE_OPTIONS_ARE_NOT_AVAILABLE_TO_THE_FIELD_IF_BNONE_DBB_OPTION_IS_SELECTED="These options are not available to the field if None DB option is selected." COM_COMPONENTBUILDER_THESE_OPTIONS_ARE_ONLY_AVAILABLE_TO_THE_FIELD_IF_BSHOW_IN_LIST_VIEWB_OPTION_IS_SELECTED="These options are only available to the field if Show in list view option is selected." @@ -9120,6 +9126,7 @@ COM_COMPONENTBUILDER_THE_FTP_CONNECTION_FOR_BSB_COULD_NOT_BE_MADE_PLEASE_CHECK_Y COM_COMPONENTBUILDER_THE_FTP_SIGNATURE_FOR_BSB_WAS_NOT_WELL_FORMED_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP signature for %s was not well formed, please check your signature details!" COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_POWERS_HAS_FAILED="The initialization of this Joomla powers has failed." COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_POWERS_HAS_FAILED="The initialization of this powers has failed." +COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_PUSHED="The Joomla power has successfully been pushed." COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_RESET="The Joomla power has successfully been reset." COM_COMPONENTBUILDER_THE_KEY_OF_THIS_PACKAGE="The key of this package." COM_COMPONENTBUILDER_THE_LIBRARY_CONFIG_FIELDS="The library config fields" @@ -9140,6 +9147,8 @@ COM_COMPONENTBUILDER_THE_POWER_HAS_SUCCESSFULLY_BEEN_RESET="The power has succes COM_COMPONENTBUILDER_THE_PRIVATE_KEY_FIELD_COULD_NOT_BE_LOADED_FOR_BSB_SERVER="The private key field could not be loaded for %s server!" COM_COMPONENTBUILDER_THE_PRIVATE_KEY_FILE_COULD_NOT_BE_LOADEDFOUND_FOR_BSB_SERVER="The private key file could not be loaded/found for %s server!" COM_COMPONENTBUILDER_THE_PRO_BOARD_IS_LOADING="The pro board is loading" +COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_JOOMLA_POWERS_HAS_FAILED="The push of these Joomla powers has failed." +COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_JOOMLA_POWER_HAS_FAILED="The push of this Joomla power has failed." COM_COMPONENTBUILDER_THE_README_IS_LOADING="The readme is loading" COM_COMPONENTBUILDER_THE_REPLACE_PROCESS_HAD_AN_ERROR_WITH_TABLE="The replace process had an error with table" COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_POWERS_HAS_FAILED="The reset of these Joomla powers has failed." @@ -9397,6 +9406,7 @@ COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THESE_EXTENSIONS="You COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THE_COMPONENT="You do not have permission to install the component!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THE_MODULE="You do not have permission to install the module!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THE_PLUGIN="You do not have permission to install the plugin!" +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_JOOMLA_POWER="You do not have permission to push this Joomla power" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_JOOMLA_POWER="You do not have permission to reset this Joomla power" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_POWER="You do not have permission to reset this power" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE="You do not have permission to run the expansion module!" diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini index d60a51e1d..9fec768ae 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini @@ -788,6 +788,8 @@ COM_COMPONENTBUILDER_JOOMLA_POWERS_SUBMENU="Joomla Powers Submenu" COM_COMPONENTBUILDER_JOOMLA_POWERS_SUBMENU_DESC="Allows the users in this group to submenu of joomla power" COM_COMPONENTBUILDER_JOOMLA_POWER_INIT_BUTTON_ACCESS="Joomla Power Init Button Access" COM_COMPONENTBUILDER_JOOMLA_POWER_INIT_BUTTON_ACCESS_DESC="Allows the users in this group to access the init button." +COM_COMPONENTBUILDER_JOOMLA_POWER_PUSH_BUTTON_ACCESS="Joomla Power Push Button Access" +COM_COMPONENTBUILDER_JOOMLA_POWER_PUSH_BUTTON_ACCESS_DESC="Allows the users in this group to access the push button." COM_COMPONENTBUILDER_JOOMLA_POWER_RESET_BUTTON_ACCESS="Joomla Power Reset Button Access" COM_COMPONENTBUILDER_JOOMLA_POWER_RESET_BUTTON_ACCESS_DESC="Allows the users in this group to access the reset button." COM_COMPONENTBUILDER_LANGUAGES_ACCESS="Languages Access" diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index 422dd35df..b2b142aff 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -2097,499 +2097,51 @@ INSERT INTO `#__componentbuilder_joomla_component` (`id`, `add_admin_event`, `ad INSERT INTO `#__componentbuilder_joomla_plugin` (`id`, `add_head`, `add_php_method_uninstall`, `add_php_postflight_install`, `add_php_postflight_update`, `add_php_preflight_install`, `add_php_preflight_uninstall`, `add_php_preflight_update`, `add_php_script_construct`, `add_sales_server`, `add_sql`, `add_sql_uninstall`, `add_update_server`, `addreadme`, `class_extends`, `description`, `fields`, `guid`, `head`, `joomla_plugin_group`, `method_selection`, `main_class_code`, `name`, `php_method_uninstall`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_uninstall`, `php_preflight_update`, `php_script_construct`, `plugin_version`, `property_selection`, `readme`, `sales_server`, `sql`, `sql_uninstall`, `system_name`, `update_server`, `update_server_target`, `update_server_url`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES (1, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 4, 'The plugin to fully integrate componentbuilder with the privacy suite of Joomla.', '{}', '518f7be7-140c-47d3-9fb2-b6717230e0fc', 'dXNlIEpvb21sYVxVdGlsaXRpZXNcQXJyYXlIZWxwZXI7DQoNCkpMb2FkZXI6OnJlZ2lzdGVyKCdQcml2YWN5UGx1Z2luJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fcHJpdmFjeS9oZWxwZXJzL3BsdWdpbi5waHAnKTsNCkpMb2FkZXI6OnJlZ2lzdGVyKCdQcml2YWN5UmVtb3ZhbFN0YXR1cycsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3ByaXZhY3kvaGVscGVycy9yZW1vdmFsL3N0YXR1cy5waHAnKTsNCkpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7IA==', 10, '{\"method_selection0\":{\"method\":\"51\"},\"method_selection1\":{\"method\":\"52\"},\"method_selection2\":{\"method\":\"53\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICAkYXBwOw0KDQoJLyoqDQoJICogRGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAdmFyICAgIERhdGFiYXNlRHJpdmVyDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRkYjsNCg0KCS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcmVtb3ZlIGluZm9ybWF0aW9uIHJlcXVlc3QgY2FuIGJlIHByb2Nlc3NlZA0KCSAqDQoJICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgUHJpdmFjeVJlbW92YWxTdGF0dXMNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblByaXZhY3lDYW5SZW1vdmVEYXRhKFByaXZhY3lUYWJsZVJlcXVlc3QgJHJlcXVlc3QsIEpVc2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRzdGF0dXMgPSBuZXcgUHJpdmFjeVJlbW92YWxTdGF0dXM7DQoNCgkJLy8gVGhpcyBwbHVnaW4gb25seSBwcm9jZXNzZXMgZGF0YSBmb3IgcmVnaXN0ZXJlZCB1c2VyIGFjY291bnRzDQoJCWlmICghJHVzZXIpDQoJCXsNCgkJCXJldHVybiAkc3RhdHVzOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhlIGhlbHBlciBtZXRob2QgaXMgc2V0IGluIHRoZSBjb21wb25lbnQNCgkJaWYgKG1ldGhvZF9leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsICdvblByaXZhY3lDYW5SZW1vdmVEYXRhJykpDQoJCXsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6b25Qcml2YWN5Q2FuUmVtb3ZlRGF0YSgkdGhpcywgJHN0YXR1cywgJHJlcXVlc3QsICR1c2VyKTsNCgkJfQ0KDQoJCXJldHVybiAkc3RhdHVzOw0KCX0NCg0KCS8qKg0KCSAqIFByb2Nlc3NlcyBhbiBleHBvcnQgcmVxdWVzdCBmb3IgSm9vbWxhIGNvcmUgdXNlciBkYXRhDQoJICoNCgkgKiBAcGFyYW0gICBQcml2YWN5VGFibGVSZXF1ZXN0ICAkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZA0KCSAqIEBwYXJhbSAgIEpVc2VyICAgICAgICAgICAgICAgICR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblByaXZhY3lFeHBvcnRSZXF1ZXN0KFByaXZhY3lUYWJsZVJlcXVlc3QgJHJlcXVlc3QsIEpVc2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRkb21haW5zID0gYXJyYXkoKTsNCg0KCQkvLyBUaGlzIHBsdWdpbiBvbmx5IHByb2Nlc3NlcyBkYXRhIGZvciByZWdpc3RlcmVkIHVzZXIgYWNjb3VudHMNCgkJaWYgKCEkdXNlcikNCgkJew0KCQkJcmV0dXJuICRkb21haW5zOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhlIGhlbHBlciBtZXRob2QgaXMgc2V0IGluIHRoZSBjb21wb25lbnQNCgkJaWYgKG1ldGhvZF9leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsICdvblByaXZhY3lFeHBvcnRSZXF1ZXN0JykpDQoJCXsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6b25Qcml2YWN5RXhwb3J0UmVxdWVzdCgkdGhpcywgJGRvbWFpbnMsICRyZXF1ZXN0LCAkdXNlcik7DQoJCX0NCg0KCQlyZXR1cm4gJGRvbWFpbnM7DQoJfQ0KDQoJLyoqDQoJICogUmVtb3ZlcyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSByZW1vdmUgaW5mb3JtYXRpb24gcmVxdWVzdA0KCSAqDQoJICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUHJpdmFjeVJlbW92ZURhdGEoUHJpdmFjeVRhYmxlUmVxdWVzdCAkcmVxdWVzdCwgSlVzZXIgJHVzZXIgPSBudWxsKQ0KCXsNCgkJLy8gVGhpcyBwbHVnaW4gb25seSBwcm9jZXNzZXMgZGF0YSBmb3IgcmVnaXN0ZXJlZCB1c2VyIGFjY291bnRzDQoJCWlmICghJHVzZXIpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCS8vIGNoZWNrIGlmIHRoZSBoZWxwZXIgbWV0aG9kIGlzIHNldCBpbiB0aGUgY29tcG9uZW50DQoJCWlmIChtZXRob2RfZXhpc3RzKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCAnb25Qcml2YWN5UmVtb3ZlRGF0YScpKQ0KCQl7DQoJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6Om9uUHJpdmFjeVJlbW92ZURhdGEoJHRoaXMsICRyZXF1ZXN0LCAkdXNlcik7DQoJCX0NCgl9', '[[[Component]]]', 'Ly8gUEhQIE1ldGhvZCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFBvc3RmbGlnaHQgKGluc3RhbGwp', 'Ly8gUEhQIFBvc3RmbGlnaHQgKHVwZGF0ZSk=', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', 'Ly8gUEhQIFByZWZsaWdodCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFByZWZsaWdodCAodXBkYXRlKQ==', '', '1.0.0', '{\"property_selection0\":{\"property\":\"31\"},\"property_selection1\":{\"property\":\"32\"},\"property_selection2\":{\"property\":\"33\"}}', 'IyAjIyNQTFVHSU5fTkFNRSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw==', '', '', '', 'Global Privacy', '', 1, 'https://www.vdm.io/updates/componentbuilder_global_privacy.xml', '', 1, '2019-07-16 00:49:50', '2020-05-24 22:49:38', 29, '', 1), +(2, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to link your components to the privacy suite of Joomla by adding a new privacy tab to the JCB admin views, where you can set all the required details for the integration.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Global Privacy\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2600\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"}}},\"fields1\":{\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"plugin\",\"label\":\"Plugin\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2600\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"}}},\"fields2\":{\"file\":\"admin_view\",\"fields_name\":\"params.privacy\",\"fieldset\":\"privacy\",\"label\":\"Privacy\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2603\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2604\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2605\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2606\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2607\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2608\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2611\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2612\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2613\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2614\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2615\",\"custom_value\":\"\"}}}}', 'a3e3ce4d-f6c1-4a92-bdc0-d7c61a0756c1', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXEFwcGxpY2F0aW9uXENNU0FwcGxpY2F0aW9uOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcUmVnaXN0cnlcUmVnaXN0cnk7DQp1c2UgSm9vbWxhXENNU1xGb3JtXEZvcm07DQoNCkpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7IA0K', 3, '{\"method_selection0\":{\"method\":\"113\"},\"method_selection1\":{\"method\":\"12\"},\"method_selection2\":{\"method\":\"0\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uDQoJICoNCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZXBhcmVGb3JtKEZvcm0gJGZvcm0sICRkYXRhKQ0KCXsNCgkJJGNvbnRleHQgPSAkZm9ybS0+Z2V0TmFtZSgpOw0KDQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoc3RycG9zKCRjb250ZXh0LCAnY29tX1tbW2NvbXBvbmVudF1dXS5hZG1pbl92aWV3JykgPT09IDApDQoJCXsNCgkJCS8vIEFkZCB0aGUgZm9ybXMgcGF0aA0KCQkJRm9ybTo6YWRkRm9ybVBhdGgoX19ESVJfXyAuICcvZm9ybXMnKTsNCgkJCS8vIGFkZCB0aGUgYWRtaW4gdmlldyBwYXJhbXMgZm9yIHByaXZhY3kgaW50ZWdyYXRpb24NCgkJCSRmb3JtLT5sb2FkRmlsZSgnYWRtaW5fdmlldycpOw0KCQkJLy8gaWYgdGhlIGdsb2JhbCBwbHVnaW4gaXMgbm90IHNldCwgYWxsb3cgaXQgdG8gYmUgc2V0IGZyb20gdGhlIGFkbWluIHZpZXcNCgkJCWlmICgoJHBsdWdpbiA9ICR0aGlzLT5wYXJhbXMtPmdldCgncGx1Z2luJywgMCkpID09IDApDQoJCQl7DQoJCQkJJGZvcm0tPmxvYWRGaWxlKCdjb25maWcnKTsNCgkJCQkvLyBtYWtlIHRoZSBwbHVnaW4gZmllbGQgcmVxdWlyZWQgKExBVEVSIHdoZW4gd2UgY2FuIGdpdmUgbW9yZSBpbmZvKQ0KCQkJCS8vJGZvcm0tPnNldEZpZWxkQXR0cmlidXRlKCdwbHVnaW4nLCAncmVxdWlyZWQnLCB0cnVlLCAncGFyYW1zLnByaXZhY3knKTsNCgkJCQkvLyRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgncGx1Z2luJywgJ3Nob3dvbicsICdhY3RpdmF0ZToxJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCQkJLy8kZm9ybS0+c2V0RmllbGRBdHRyaWJ1dGUoJ25vdGVfc2VsZWN0X3ByaXZhY3lfcGx1Z2luJywgJ3Nob3dvbicsICdhY3RpdmF0ZToxJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCQl9DQoJCQkvLyB1cGRhdGUgYWxsIGVkaXRvcnMgdG8gdXNlIHRoaXMgY29tcG9uZW50cyBnbG9iYWwgZWRpdG9yDQoJCQkkZ2xvYmFsX2VkaXRvciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdlZGl0b3InLCAnbm9uZScpOw0KCQkJLy8gc2V0IHRoZSBmaWVsZCBlZGl0b3IgdmFsdWUgKHdpdGggbm9uZSBhcyBmYWxsYmFjaykNCgkJCSRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgnY3VzdG9tX2xpbmsnLCAnZWRpdG9yJywgJGdsb2JhbF9lZGl0b3IgLiAnfG5vbmUnLCAncGFyYW1zLnByaXZhY3knKTsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkgKiBUaGlzIGlzIGFuIGV2ZW50IHRoYXQgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSB0aGUgY29udGVudA0KCSAqIGlzIHNhdmVkIGludG8gdGhlIGRhdGFiYXNlLg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgcGFzc2VkIHRvIHRoZSBwbHVnaW4gKGFkZGVkIGluIDEuNikuDQoJICogQHBhcmFtICAgb2JqZWN0ICAkYXJ0aWNsZSAgQSBKVGFibGVDb250ZW50IG9iamVjdC4NCgkgKiBAcGFyYW0gICBib29sICAgICRpc05ldyAgICBJZiB0aGUgY29udGVudCBpcyBqdXN0IGFib3V0IHRvIGJlIGNyZWF0ZWQuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkLg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudEJlZm9yZVNhdmUoJGNvbnRleHQsICRpdGVtLCAkaXNOZXcsICRkYXRhID0gYXJyYXkoKSkNCgl7DQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoJ2NvbV9bW1tjb21wb25lbnRdXV0uYWRtaW5fdmlldycgPT09ICRjb250ZXh0KQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGpzb24NCgkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+cGFyYW1zKSkNCgkJCXsNCgkJCQkvLyBDb252ZXJ0IHRoZSBwYXJhbXMgZmllbGQgdG8gYW4gYXJyYXkuDQoJCQkJJHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5Ow0KCQkJCSRyZWdpc3RyeS0+bG9hZFN0cmluZygkaXRlbS0+cGFyYW1zKTsNCgkJCQkkaXRlbS0+cGFyYW1zID0gJHJlZ2lzdHJ5LT50b0FycmF5KCk7DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGUgcGx1Z2luIHdhcyBzZXQNCgkJCWlmIChpc3NldCgkaXRlbS0+cGFyYW1zWydwbHVnaW4nXSkgJiYgJGl0ZW0tPnBhcmFtc1sncGx1Z2luJ10gPiAwKQ0KCQkJew0KCQkJCS8vIGZpcnN0IHNldCBuZXcgcGFyYW1zDQoJCQkJJHRoaXMtPnBhcmFtcy0+c2V0KCdwbHVnaW4nLCAoaW50KSAkaXRlbS0+cGFyYW1zWydwbHVnaW4nXSk7DQoJCQkJLy8gdXBkYXRlIHRoZSBnbG9iYWwgcGx1Z2luIHNldHRpbmdzDQoJCQkJJGV4dGVuc2lvblRhYmxlID0gbmV3ICBcSnRhYmxlRXh0ZW5zaW9uKEZhY3Rvcnk6OmdldERibygpKTsNCgkJCQkkZXh0ZW5zaW9uVGFibGUtPmxvYWQoYXJyYXkoJ2VsZW1lbnQnID0+ICdbW1tjb21wb25lbnRdXV1wcml2YWN5dGFicycpKTsNCgkJCQkvLyBTYXZlIHRoZSBjaGFuZ2UNCgkJCQkkZXh0ZW5zaW9uVGFibGUtPnNldCgncGFyYW1zJywgJHRoaXMtPnBhcmFtcy0+dG9TdHJpbmcoKSk7DQoJCQkJJGV4dGVuc2lvblRhYmxlLT5zYXZlKChhcnJheSkgJGV4dGVuc2lvblRhYmxlKTsNCgkJCQkvLyBhbmQgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBwYXJhbXMNCgkJCQl1bnNldCgkaXRlbS0+cGFyYW1zWydwbHVnaW4nXSk7DQoJCQkJLy8gY2xlYXIgdGhlIHBsdWdpbiBjYWNoZQ0KCQkJCSR0aGlzLT5jbGVhbkNhY2hlKCdjb21fcGx1Z2lucycsIDApOw0KCQkJCSR0aGlzLT5jbGVhbkNhY2hlKCdjb21fcGx1Z2lucycsIDEpOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhbiBhcnJheQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5wYXJhbXMpKQ0KCQkJew0KCQkJCS8vIENvbnZlcnQgdGhlIHBhcmFtcyBmaWVsZCB0byBhIHN0cmluZy4NCgkJCQkkcGFyYW1zID0gbmV3IFJlZ2lzdHJ5Ow0KCQkJCSRwYXJhbXMtPmxvYWRBcnJheSgkaXRlbS0+cGFyYW1zKTsNCgkJCQkkaXRlbS0+cGFyYW1zID0gKHN0cmluZykgJHBhcmFtczsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIENsZWFuIHRoZSBjYWNoZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGdyb3VwICAgICAgVGhlIGNhY2hlIGdyb3VwDQoJICogQHBhcmFtICAgaW50ZWdlciAgJGNsaWVudF9pZCAgVGhlIElEIG9mIHRoZSBjbGllbnQNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDMuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBjbGVhbkNhY2hlKCRncm91cCA9IG51bGwsICRjbGllbnRfaWQgPSAwKQ0KCXsNCgkJJGNvbmYgPSBGYWN0b3J5OjpnZXRDb25maWcoKTsNCg0KCQkkb3B0aW9ucyA9IGFycmF5KA0KCQkJJ2RlZmF1bHRncm91cCcgPT4gJGdyb3VwID86IChpc3NldCgkdGhpcy0+b3B0aW9uKSA/ICR0aGlzLT5vcHRpb24gOiBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dC0+Z2V0KCdvcHRpb24nKSksDQoJCQknY2FjaGViYXNlJyA9PiAkY2xpZW50X2lkID8gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY2FjaGUnIDogJGNvbmYtPmdldCgnY2FjaGVfcGF0aCcsIEpQQVRIX1NJVEUgLiAnL2NhY2hlJyksDQoJCQkncmVzdWx0JyA9PiB0cnVlLA0KCQkpOw0KDQoJCXRyeQ0KCQl7DQoJCQkvKiogQHZhciBcSkNhY2hlQ29udHJvbGxlckNhbGxiYWNrICRjYWNoZSAqLw0KCQkJJGNhY2hlID0gXEpDYWNoZTo6Z2V0SW5zdGFuY2UoJ2NhbGxiYWNrJywgJG9wdGlvbnMpOw0KCQkJJGNhY2hlLT5jbGVhbigpOw0KCQl9DQoJCWNhdGNoIChcSkNhY2hlRXhjZXB0aW9uICRleGNlcHRpb24pDQoJCXsNCgkJCSRvcHRpb25zWydyZXN1bHQnXSA9IGZhbHNlOw0KCQl9DQoNCgkJLy8gVHJpZ2dlciB0aGUgb25Db250ZW50Q2xlYW5DYWNoZSBldmVudC4NCgkJXEpFdmVudERpc3BhdGNoZXI6OmdldEluc3RhbmNlKCktPnRyaWdnZXIoJ29uQ29udGVudENsZWFuQ2FjaGUnLCAkb3B0aW9ucyk7DQoJfQ==', '[[[Component]]] Privacy Tabs', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"9\"},\"property_selection1\":{\"property\":\"7\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Privacy Tabs', '', 1, '', '', 1, '2019-08-17 01:17:45', '2024-04-09 10:34:30', 97, '', 2), +(3, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to build the privacy plugin for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to link your admin views to the privacy suite of Joomla via our other Content - [[[Component]]] Privacy Tabs plugin.', '{}', 'b49dddae-2195-4d2a-8f12-69032852a104', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbjsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow0KDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KDQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXEZhY3RvcnkgYXMgQ0ZhY3Rvcnk7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xQbGFjZWZpeDsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcVXRpbGl0aWVzXEluZGVudDsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcVXRpbGl0aWVzXExpbmU7DQo=', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"},\"method_selection2\":{\"method\":\"70\"},\"method_selection3\":{\"method\":\"119\"},\"method_selection4\":{\"method\":\"120\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoqDQoJICogR2xvYmFsIHN3aXRjaCB0byBzZWUgaWYgY29tcG9uZW50IGhhdmUgbmVlZCBvZiBwcml2YWN5IHBsdWdpbiB0byBiZSBsb2FkZWQuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkbG9hZFByaXZhY3kgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIFRoZSBWaWV3cyBMaW5rZWQgdG8gSm9vbWxhIFVzZXJzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGFjdGl2ZVZpZXdzID0gW107DQoNCgkvKioNCgkgKiBUaGUgVmlld3MgcGVybWlzc2lvbiBmaWVsZHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkcGVybWlzc2lvbkZpZWxkcyA9IFtdOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGFkZCB0aGUgcHJpdmFjeQ0KCQkkdmlldy0+cGFyYW1zID0gKGlzc2V0KCR2aWV3LT5wYXJhbXMpICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXMpKSA/IGpzb25fZGVjb2RlKCR2aWV3LT5wYXJhbXMsIHRydWUpIDogJHZpZXctPnBhcmFtczsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXMpICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPnBhcmFtc1sncHJpdmFjeSddKSAmJiANCgkJCWlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYWN0aXZhdGUnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhY3RpdmF0ZSddID09IDEpDQoJCXsNCgkJCS8vIGFjdGl2YXRlIHRoZSBsb2FkIG9mIHRoZSBwcml2YWN5IHBsdWdpbg0KCQkJJHRoaXMtPmxvYWRQcml2YWN5ID0gdHJ1ZTsNCgkJCS8vIGxvYWQgdGhlIGFkbWluIHZpZXcgZGV0YWlscw0KCQkJJHRoaXMtPmFjdGl2ZVZpZXdzWyR2aWV3LT5pZF0gPSAkdmlldzsNCgkJCS8vIGFkZCBwZXJtaXNzaW9ucw0KCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zID0gKGlzc2V0KCR2aWV3LT5hZGRwZXJtaXNzaW9ucykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHZpZXctPmFkZHBlcm1pc3Npb25zKSkgPyBqc29uX2RlY29kZSgkdmlldy0+YWRkcGVybWlzc2lvbnMsIHRydWUpIDogbnVsbDsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+YWRkcGVybWlzc2lvbnMpKQ0KCQkJew0KCQkJCSR2aWV3LT5hZGRwZXJtaXNzaW9ucyA9IGFycmF5X3ZhbHVlcygkdmlldy0+YWRkcGVybWlzc2lvbnMpOw0KCQkJCS8vIGFkZCB0aGUgbmV3IHBlcm1pc3Npb25zDQoJCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zW10gPSBhcnJheSgnYWN0aW9uJyA9PiAndmlldy5wcml2YWN5LmRlbGV0ZScsICdpbXBsZW1lbnRhdGlvbicgPT4gMywgJ3RpdGxlJyA9PiAkdmlldy0+bmFtZV9saXN0IC4gJyBQcml2YWN5IERlbGV0ZScsICdkZXNjcmlwdGlvbicgPT4gJyBBbGxvd3MgdGhlIHVzZXJzIGluIHRoaXMgZ3JvdXAgdG8gcmVtb3ZlIHRoZWlyIHBlcnNvbmFsIGRhdGEgaW4gJyAuICR2aWV3LT5uYW1lX2xpc3QgLiAnIHZpYSB0aGUgSm9vbWxhIHByaXZhY3kgc3VpdGUuJyk7DQoJCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zW10gPSBhcnJheSgnYWN0aW9uJyA9PiAndmlldy5wcml2YWN5LmFjY2VzcycsICdpbXBsZW1lbnRhdGlvbicgPT4gMywgJ3RpdGxlJyA9PiAkdmlldy0+bmFtZV9saXN0IC4gJyBQcml2YWN5IEFjY2VzcycsICdkZXNjcmlwdGlvbicgPT4gJyBBbGxvd3MgdGhlIHVzZXJzIGluIHRoaXMgZ3JvdXAgdG8gYWNjZXNzIHRoZWlyIHBlcnNvbmFsIGRhdGEgaW4gJyAuICR2aWV3LT5uYW1lX2xpc3QgLiAnIHZpYSB0aGUgSm9vbWxhIHByaXZhY3kgc3VpdGUuJyk7DQoJCQkJLy8gY29udmVydCBiYWNrIHRvIGpzb24NCgkJCQkkdmlldy0+YWRkcGVybWlzc2lvbnMgPSBqc29uX2VuY29kZSgkdmlldy0+YWRkcGVybWlzc2lvbnMsIEpTT05fRk9SQ0VfT0JKRUNUKTsNCgkJCX0NCgkJCS8vIGFkZCBwbGFjZWhvbGRlcnMgdG8gdmlldyBpZiBub3QgYWxyZWFkeSBzZXQNCgkJCWlmICghaXNzZXQoJHRoaXMtPmFjdGl2ZVZpZXdzWyR2aWV3LT5pZF0tPnBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJJHRoaXMtPmFjdGl2ZVZpZXdzWyR2aWV3LT5pZF0tPnBsYWNlaG9sZGVycyA9IENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5hY3RpdmU7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBjb21wb25lbnQgbmVlZHMgYSBwcml2YWN5IHBsdWdpbiBsb2FkZWQNCgkJaWYgKCR0aGlzLT5sb2FkUHJpdmFjeSkNCgkJew0KCQkJJHBsdWdpbiA9IEpQbHVnaW5IZWxwZXI6OmdldFBsdWdpbignY29udGVudCcsICdbW1tjb21wb25lbnRdXV1wcml2YWN5dGFicycpOw0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBqc29uDQoJCQlpZiAoaXNzZXQoJHBsdWdpbi0+cGFyYW1zKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcGx1Z2luLT5wYXJhbXMpKQ0KCQkJew0KCQkJCS8vIENvbnZlcnQgdGhlIHBhcmFtcyBmaWVsZCB0byBhbiBhcnJheS4NCgkJCQkkcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnk7DQoJCQkJJHJlZ2lzdHJ5LT5sb2FkU3RyaW5nKCRwbHVnaW4tPnBhcmFtcyk7DQoJCQkJJHBsdWdpbi0+cGFyYW1zID0gJHJlZ2lzdHJ5LT50b0FycmF5KCk7DQoJCQl9DQoJCQkvLyBub3cgZ2V0IHRoZSBwbHVnaW4gSUQgaWYgc2V0DQoJCQlpZiAoaXNzZXQoJHBsdWdpbi0+cGFyYW1zWydwbHVnaW4nXSkgJiYgJHBsdWdpbi0+cGFyYW1zWydwbHVnaW4nXSA+IDApDQoJCQl7DQoJCQkJLy8gaWYgbGlua2VkIGl0IHdpbGwgb25seSBsb2FkIGl0IG9uY2UNCgkJCQlDRmFjdG9yeTo6XygnSm9vbWxhcGx1Z2luLkRhdGEnKS0+c2V0KCRwbHVnaW4tPnBhcmFtc1sncGx1Z2luJ10pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCUZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmVucXVldWVNZXNzYWdlKFRleHQ6Ol8oJ1lvdSBkbyBub3QgaGF2ZSBhIGdsb2JhbCBwcml2YWN5IHBsdWdpbiBzZXR1cCwgc28gdGhlIGludGVncmF0aW9uIHdpdGggSm9vbWxhIHByaXZhY3kgc3VpdGUgY291bGQgbm90IGJlIGJ1aWxkLicpLCAnV2FybmluZycpOw0KCQkJCSR0aGlzLT5sb2FkUHJpdmFjeT0gZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgVXBkYXRlIEZpbGVzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZVVwZGF0ZUZpbGVzKCRjb21waWxlcikNCgl7DQoJCS8vIGNoZWNrIGlmIHByaXZhY3kgaXMgdG8gYmUgbG9hZGVkDQoJCWlmICgkdGhpcy0+bG9hZFByaXZhY3kgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmFjdGl2ZVZpZXdzKSkNCgkJew0KCQkJLy8gZ2V0IGNvbXBpbGVyIGRlZmF1bHRzDQoJCQkkc3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IENGYWN0b3J5OjpfKCdDb25maWcnKS0+Z2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCBmYWxzZSk7DQoJCQkkZXhwb3J0VGV4dE9ubHkgPSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmdldCgnZXhwb3J0X3RleHRfb25seScsIDEpOw0KDQoJCQkvLyBsb2FkIHRoZSBnZXRQcml2YWN5RXhwb3J0IGZ1bmN0aW9ucw0KCQkJZm9yZWFjaCAoJHRoaXMtPmFjdGl2ZVZpZXdzIGFzICRpZCA9PiAmJHZpZXcpDQoJCQl7DQoJCQkJLy8gc2V0IHBlcm1pc3Npb25zIGJhc2VkIG9uIHZpZXcNCgkJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydwZXJtaXNzaW9ucyddKSkNCgkJCQl7DQoJCQkJCUNGYWN0b3J5OjpfKCdDb25maWcnKS0+c2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCAoYm9vbCkgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydwZXJtaXNzaW9ucyddKTsNCgkJCQl9DQoNCgkJCQkvLyBhbGxvdyB0ZXh0IG9ubHkgZXhwb3J0DQoJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5zZXQoJ2V4cG9ydF90ZXh0X29ubHknLCAxKTsNCg0KCQkJCS8vIHNldCB2aWV3IGxpc3QgbmFtZQ0KCQkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJCSR2aWV3TmFtZV9zaW5nbGUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX3NpbmdsZSk7DQoJCQkJLy8gbG9hZCB0aGUgZnVuY3Rpb24NCgkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk11bHRpJyktPmFkZCgkdmlld05hbWVfbGlzdCAuICd8TU9ERUxFWFBPUlRNRVRIT0QnLA0KCQkJCQkkY29tcGlsZXItPnNldEdldEl0ZW1zTW9kZWxNZXRob2QoDQoJCQkJCQkkdmlld05hbWVfc2luZ2xlLA0KCQkJCQkJJHZpZXdOYW1lX2xpc3QsDQoJCQkJCQlbDQoJCQkJCQkJJ2Z1bmN0aW9uTmFtZScgPT4gJ2dldFByaXZhY3lFeHBvcnQnLA0KCQkJCQkJCSdkb2NEZXNjJyA9PiAnTWV0aG9kIHRvIGdldCBkYXRhIGR1cmluZyBhbiBleHBvcnQgcmVxdWVzdC4nLA0KCQkJCQkJCSd0eXBlJyA9PiAncHJpdmFjeScNCgkJCQkJCV0NCgkJCQkJKQ0KCQkJCSk7DQoJCQkJLy8gZ2V0IHRoZSBwZXJtaXNzaW9ucyBidWlsZGluZyB2YWx1ZXMgZm9yIGxhdGVyIGlmIG5lZWRlZA0KCQkJCWlmIChDRmFjdG9yeTo6XygnQ29uZmlnJyktPmdldCgncGVybWlzc2lvbl9zdHJpY3RfcGVyX2ZpZWxkJywgZmFsc2UpICYmDQoJCQkJCWlzc2V0KCRjb21waWxlci0+cGVybWlzc2lvbkZpZWxkc1skdmlld05hbWVfc2luZ2xlXSkgJiYNCgkJCQkJU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBpbGVyLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdKSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdID0gJGNvbXBpbGVyLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gc2V0IGNvbXBpbGVyIGRlZmF1bHRzDQoJCQlDRmFjdG9yeTo6XygnQ29uZmlnJyktPnNldCgncGVybWlzc2lvbl9zdHJpY3RfcGVyX2ZpZWxkJywgJHN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpOw0KCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5zZXQoJ2V4cG9ydF90ZXh0X29ubHknLCAkZXhwb3J0VGV4dE9ubHkpOw0KDQoJCQkvLyBhZGQgaGVscGVyIGNsYXNzZXMNCgkJCSRoZWxwZXJfc3RyaW5ncyA9IFsnQ1VTVE9NX0hFTFBFUl9TQ1JJUFQnLCAnU0lURV9DVVNUT01fSEVMUEVSX1NDUklQVCcsICdCT1RIX0NVU1RPTV9IRUxQRVJfU0NSSVBUJ107DQoJCQkkcHJpdmFjeV9ldmVudHMgPSBbDQoJCQkJJ1ByaXZhY3lDYW5SZW1vdmVEYXRhJyA9PiB0cnVlLA0KCQkJCSdQcml2YWN5RXhwb3J0UmVxdWVzdCcgPT4gdHJ1ZSwNCgkJCQknUHJpdmFjeVJlbW92ZURhdGEnID0+IHRydWUNCgkJCV07DQoNCgkJCWZvcmVhY2ggKCRoZWxwZXJfc3RyaW5ncyBhcyAkaGVscGVyKQ0KCQkJew0KCQkJCWlmICgoJGhlbHBlcl9jb250ZW50ID0gQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+Z2V0KCRoZWxwZXIpKSAhPT0gbnVsbCAmJg0KCQkJCQlTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaGVscGVyX2NvbnRlbnQpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJHByaXZhY3lfZXZlbnRzIGFzICRwcml2YWN5X2V2ZW50ID0+ICYkYWRkKQ0KCQkJCQl7DQoJCQkJCQkvLyBjaGVjayBpZiB0aGUgZXZlbiBpcyBvdmVyd3JpdGVuDQoJCQkJCQlpZiAoc3RycG9zKCRoZWxwZXJfY29udGVudCwgJ3B1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb24nIC4gJHByaXZhY3lfZXZlbnQgLiAnKCcpICE9PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkkYWRkID0gZmFsc2U7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIGFkZCB0aGUgZXZlbnRzIHN0aWxsIG5lZWRlZA0KCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWRkKCdCT1RIX0NVU1RPTV9IRUxQRVJfU0NSSVBUJywNCgkJCQlDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkdGhpcy0+Z2V0SGVscGVyTWV0aG9kKCRwcml2YWN5X2V2ZW50cykpDQoJCQkpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBMYW5nIEZpbGUgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRMYW5nRmlsZURhdGEoKQ0KCXsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5sYW5ndWFnZUFycmF5KSkNCgkJew0KCQkJZm9yZWFjaCgkdGhpcy0+bGFuZ3VhZ2VBcnJheSBhcyAka2V5ID0+ICRzdHJpbmcpDQoJCQl7DQoJCQkJQ0ZhY3Rvcnk6Ol8oJ0xhbmd1YWdlJyktPnNldCgnc2l0ZScsICRrZXksICRzdHJpbmcpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBIZWxwZXIgbWV0aG9kcyBuZWVkZWQgdG8gaW50ZWdyYXRlIHdpdGggSm9vbWxhIFByaXZhY3kgU3VpdGUNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkaGVscGVyTWV0aG9kcyAgVGhlIGhlbHBlciBtZXRob2RzIHN0cmluZw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhlbHBlck1ldGhvZCgmJGV2ZW50cykNCgl7DQoJCSRtZXRob2RzID0gJyc7DQoJCWZvcmVhY2ggKCRldmVudHMgYXMgJGV2ZW50ID0+ICRhZGQpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHRoZSBldmVuIHNob3VsZCBiZSBhZGRlZA0KCQkJaWYgKCRhZGQpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSBldmVudA0KCQkJCSR0aGlzLT57J3NldCcuJGV2ZW50fSgkbWV0aG9kcyk7DQoJCQl9DQoJCX0NCgkJLy8gb25seSBhZGQgaGVhZGVyIGlmIHRoZXJlIHdhcyBldmVudHMgYWRkZWQNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRtZXRob2RzKSkNCgkJew0KCQkJJG1ldGhvZHMgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA8PDw9PT0gUHJpdmFjeSBpbnRlZ3JhdGlvbiB3aXRoIEpvb21sYSBQcml2YWN5IHN1aXRlID09PT4+PiIgLiBQSFBfRU9MIC4gJG1ldGhvZHM7DQoJCX0NCg0KCQlyZXR1cm4gJG1ldGhvZHM7DQoJfQ0KDQoJLyoqDQoJICogU2V0IFByaXZhY3kgQ2FuIFJlbW92ZSBEYXRhDQoJICogDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZHMgIFRoZSBtZXRob2RzIHN0cmluZw0KCSAqIA0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0UHJpdmFjeUNhblJlbW92ZURhdGEoJiRtZXRob2RzKQ0KCXsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIvKioiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHJlbW92ZSBpbmZvcm1hdGlvbiByZXF1ZXN0IGNhbiBiZSBwcm9jZXNzZWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBQcml2YWN5UGx1Z2luICBcJHBsdWdpbiAgVGhlIHBsdWdpbiBiZWluZyBwcm9jZXNzZWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lSZW1vdmFsU3RhdHVzICBcJHN0YXR1cyAgVGhlIHN0YXR1cyBiZWluZyBzZXQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lUYWJsZVJlcXVlc3QgIFwkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHBhcmFtICAgSlVzZXIgICAgICAgICAgICAgICAgXCR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHJldHVybiAgUHJpdmFjeVJlbW92YWxTdGF0dXMiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqLyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAicHVibGljIHN0YXRpYyBmdW5jdGlvbiBvblByaXZhY3lDYW5SZW1vdmVEYXRhKCZcJHBsdWdpbiwgJlwkc3RhdHVzLCAmXCRyZXF1ZXN0LCAmXCR1c2VyKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAieyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQnVja2V0IHRvIGdldCBhbGwgcmVhc29ucyB3aHkgcmVtb3ZhbCBub3QgYWxsb3dlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRyZWFzb25zID0gYXJyYXkoKTsiOw0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KDQoJCQkvLyBsb2FkIHRoZSBjYW5EbyBmcm9tIGdldEFjdGlvbnMgaGVscGVyIG1ldGhvZA0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSAiIC4gJHZpZXctPm5hbWVfbGlzdDsNCgkJCS8vIHNldCB0aGUgaWYgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBwZXJtaXNzaW9uIGJ1aWxkZXINCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRBY3Rpb24oJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUuZGVsZXRlJykNCgkJCQkuICInLCAnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJykgJiYgIVwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBDRmFjdG9yeTo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEFjdGlvbigkdmlld05hbWVfc2luZ2xlLCAnY29yZS5wcml2YWN5LmRlbGV0ZScpDQoJCQkJLiAiJywgJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIicpKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkJLy8gc2V0IGxhbmd1YWdlIGtleQ0KCQkJJGxhbmdfa2V5ID0gJHZpZXctPnBsYWNlaG9sZGVyc1tQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKV0gLiAnX1BSSVZBQ1lfQ0FOVF9SRU1PVkVfJyAuICR2aWV3LT5wbGFjZWhvbGRlcnNbUGxhY2VmaXg6Ol8oIlZJRVdTIildOw0KCQkJLy8gc2V0IGxhbmd1YWdlIHN0cmluZw0KCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbJGxhbmdfa2V5XSA9ICJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byByZW1vdmUvZGVsZXRlICIuICR2aWV3LT5uYW1lX2xpc3QgLiAiLiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcmVhc29uc1tdID0gSlRlIiAuICJ4dDo6XygnIiAuICRsYW5nX2tleSAuICInKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJCS8vIHNldCBsYW5ndWFnZSBrZXkNCgkJCSRsYW5nX2tleSA9ICR2aWV3LT5wbGFjZWhvbGRlcnNbUGxhY2VmaXg6Ol8oIkxBTkdfUFJFRklYIildIC4gJ19QUklWQUNZX0NBTlRfUkVNT1ZFX0NPTlRBQ1RfU1VQUE9SVCc7DQoJCX0NCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDaGVjayBpZiBhbnkgcmVhc29ucyB3ZXJlIGZvdW5kIG5vdCB0byBhbGxvdyByZW1vdmFsIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soXCRyZWFzb25zKSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkc3RhdHVzLT5jYW5SZW1vdmUgPSBmYWxzZTsiOw0KCQkvLyBzZXQgbGFuZ3VhZ2Ugc3RyaW5nDQoJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nX2tleV0gPSAnUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgbW9yZSBkZXRhaWxzLic7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRzdGF0dXMtPnJlYXNvbiA9IGltcGxvZGUoJyAnIC4gUEhQX0VPTCwgXCRyZWFzb25zKSAuICcgJyAuIFBIUF9FT0wgLiBKVGUiIC4gInh0OjpfKCciIC4gJGxhbmdfa2V5IC4gIicpOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAicmV0dXJuIFwkc3RhdHVzOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCX0NCg0KCS8qKg0KCSAqIFNldCBQcml2YWN5IEV4cG9ydCBSZXF1ZXN0DQoJICogDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZHMgIFRoZSBtZXRob2RzIHN0cmluZw0KCSAqIA0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0UHJpdmFjeUV4cG9ydFJlcXVlc3QoJiRtZXRob2RzKQ0KCXsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIvKioiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIFByb2Nlc3NlcyBhbiBleHBvcnQgcmVxdWVzdCBmb3IgSm9vbWxhIGNvcmUgdXNlciBkYXRhIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHBhcmFtICAgUHJpdmFjeVBsdWdpbiAgXCRwbHVnaW4gIFRoZSBwbHVnaW4gYmVpbmcgcHJvY2Vzc2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBEb21haW5BcnJheSAgXCRkb21haW5zICBUaGUgYXJyYXkgb2YgZG9tYWlucyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgXCRyZXF1ZXN0ICBUaGUgcmVxdWVzdCByZWNvcmQgYmVpbmcgcHJvY2Vzc2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICBcJHVzZXIgICAgIFRoZSB1c2VyIGFjY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCBpZiBhdmFpbGFibGUiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqLyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAicHVibGljIHN0YXRpYyBmdW5jdGlvbiBvblByaXZhY3lFeHBvcnRSZXF1ZXN0KCZcJHBsdWdpbiwgJlwkZG9tYWlucywgJlwkcmVxdWVzdCwgJlwkdXNlcikiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInsiOw0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB2aWV3IGxpc3QgbmFtZQ0KCQkJJHZpZXdOYW1lX2xpc3QgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX2xpc3QpOw0KCQkJLy8gc2V0IHZpZXcgc2luZ2xlIG5hbWUNCgkJCSR2aWV3TmFtZV9zaW5nbGUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX3NpbmdsZSk7DQoJCQkvLyBsb2FkIHRoZSBjYW5EbyBmcm9tIGdldEFjdGlvbnMgaGVscGVyIG1ldGhvZA0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDaGVjayBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIGFjY2VzcyAiIC4gJHZpZXctPm5hbWVfbGlzdDsNCgkJCS8vIHNldCB0aGUgaWYgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBwZXJtaXNzaW9uIGJ1aWxkZXINCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKFwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBDRmFjdG9yeTo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEdsb2JhbCgkdmlld05hbWVfc2luZ2xlLCAnY29yZS5hY2Nlc3MnKQ0KCQkJCS4gIicsICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSB8fCBcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRHbG9iYWwoJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUucHJpdmFjeS5hY2Nlc3MnKQ0KCQkJCS4gIicsICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgR2V0ICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZG9tYWluc1tdID0gc2VsZjo6Y3JlYXRlIiAuIHVjZmlyc3QoJHZpZXdOYW1lX2xpc3QpIC4gIkRvbWFpbihcJHBsdWdpbiwgXCR1c2VyKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJfQ0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInJldHVybiBcJGRvbWFpbnM7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICJ9IiAuIFBIUF9FT0w7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmFjdGl2ZVZpZXdzIGFzICR2aWV3KQ0KCQl7DQoJCQkvLyBzZXQgdmlldyBsaXN0IG5hbWUNCgkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIi8qKiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIENyZWF0ZSB0aGUgZG9tYWluIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZTsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBKVGFibGVVc2VyICBcJHVzZXIgIFRoZSBKVGFibGVVc2VyIG9iamVjdCB0byBwcm9jZXNzIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICovIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAicHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRG9tYWluKCZcJHBsdWdpbiwgJlwkdXNlcikiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgY3JlYXRlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiBkb21haW4iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJGRvbWFpbiA9IHNlbGY6OmNyZWF0ZURvbWFpbignIiAuICR2aWV3TmFtZV9zaW5nbGUgLiAiJywgJyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiXyIgLiAkdmlld05hbWVfc2luZ2xlIC4gIl9kYXRhJyk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGRhdGFiYXNlIG9iamVjdCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgYWxsIGl0ZW0gaWRzIG9mICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiB0aGF0IGJlbG9uZyB0byB0aGlzIHVzZXIiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICItPnNlbGVjdCgnaWQnKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi0+ZnJvbShcJGRiLT5xdW90ZU5hbWUoJyNfXyIgLiBQbGFjZWZpeDo6XygnY29tcG9uZW50JykgLiAnXycgLiAkdmlld05hbWVfc2luZ2xlIC4gIicpKTsiOw0KCQkJLy8gZ2V0IHZpYSBjdXN0b20gc2NyaXB0DQoJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSA9PSAzKQ0KCQkJew0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBzdHJfcmVwbGFjZShhcnJheV9rZXlzKCR2aWV3LT5wbGFjZWhvbGRlcnMpLCBhcnJheV92YWx1ZXMoJHZpZXctPnBsYWNlaG9sZGVycyksICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnY3VzdG9tX2xpbmsnXSk7DQoJCQl9DQoJCQkvLyBqdXN0IGFub3RoZXIgZmllbGQNCgkJCWVsc2VpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWyd1c2VyX2xpbmsnXSA9PSAyICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnb3RoZXJfdXNlcl9maWVsZCddKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGZpZWxkIG5hbWUNCgkJCQlpZiAoKCRmaWVsZF9uYW1lID0gJHRoaXMtPmdldEZpZWxkTmFtZSgkdmlldy0+ZmllbGRzLCAkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ290aGVyX3VzZXJfZmllbGQnXSkpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeS0+d2hlcmUoXCRkYi0+cXVvdGVOYW1lKCciIC4gJGZpZWxkX25hbWUgLiAiJykgLiAnID0gJyAuIFwkZGItPnF1b3RlKFwkdXNlci0+aWQpKTsiOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBnaXZlIGEgd2FybmluZyBtZXNzYWdlIChUT0RPKQ0KDQoJCQkJCS8vIHN0b3AgYW55IGZyb20gbG9hZGluZw0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiID09PT0gRVJST1IgPT09PT0gRVJST1IgPT09PT09IChmaWVsZCBuYW1lIG5vdCBmb3VuZCkiOw0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAtMic7IC8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIDwtLSB0aGlzIHdpbGwgbmV2ZXIgcmV0dXJuIGFueSB2YWx1ZS4gQ2hlY2sgeW91ciBbb3RoZXIgdXNlciBmaWVsZF0gc2VsZWN0ZWQgaW4gdGhlIGFkbWluIHZpZXcgcHJpdmFjeSB0YWIuIjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBnZXQgYmFzZWQgb24gY3JlYXRlZCBieQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeS0+d2hlcmUoXCRkYi0+cXVvdGVOYW1lKCdjcmVhdGVkX2J5JykgLiAnID0gJyAuIFwkZGItPnF1b3RlKFwkdXNlci0+aWQpKTsiOw0KCQkJfQ0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgYWxsIGl0ZW1zIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIGRvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcGtzID0gXCRkYi0+c2V0UXVlcnkoXCRxdWVyeSktPmxvYWRDb2x1bW4oKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgdGhlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiBtb2RlbCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgnIiAuICR2aWV3TmFtZV9saXN0IC4gIicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJyk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgR2V0IGFsbCBpdGVtIGRldGFpbHMgb2YgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlciI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkaXRlbXMgPSBcJG1vZGVsLT5nZXRQcml2YWN5RXhwb3J0KFwkcGtzLCBcJHVzZXIpOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGNoZWNrIGlmIHdlIGhhdmUgaXRlbXMgc2luY2UgcGVybWlzc2lvbnMgY291bGQgYmxvY2sgdGhlIHJlcXVlc3QiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soXCRpdGVtcykpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFJlbW92ZSAiIC4gJHZpZXctPm5hbWVfc2luZ2xlIC4gIiBkZWZhdWx0IGNvbHVtbnMiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJmb3JlYWNoIChhcnJheSgncGFyYW1zJywgJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnLCAnY3JlYXRlZCcsICdjcmVhdGVkX2J5JywgJ21vZGlmaWVkJywgJ21vZGlmaWVkX2J5JywgJ3B1Ymxpc2hlZCcsICdvcmRlcmluZycsICdhY2Nlc3MnLCAndmVyc2lvbicsICdoaXRzJykgYXMgXCRjb2x1bW4pIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkaXRlbXMgPSBBcnJheUhlbHBlcjo6ZHJvcENvbHVtbihcJGl0ZW1zLCBcJGNvbHVtbik7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGxvYWQgdGhlIGl0ZW1zIGludG8gdGhlIGRvbWFpbiBvYmplY3QiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJmb3JlYWNoIChcJGl0ZW1zIGFzIFwkaXRlbSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCRkb21haW4tPmFkZEl0ZW0oc2VsZjo6Y3JlYXRlSXRlbUZyb21BcnJheShcJGl0ZW0sIFwkaXRlbVsnaWQnXSkpOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAicmV0dXJuIFwkZG9tYWluOyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCgkJfQ0KCQkvLyB3ZSBtdXN0IGFkZCB0aGVzZSBoZWxwZXIgbWV0aG9kcw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQ3JlYXRlIGEgbmV3IGRvbWFpbiBvYmplY3QiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBzdHJpbmcgIFwkbmFtZSAgICAgICAgIFRoZSBkb21haW4ncyBuYW1lIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcGFyYW0gICBzdHJpbmcgIFwkZGVzY3JpcHRpb24gIFRoZSBkb21haW4ncyBkZXNjcmlwdGlvbiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEByZXR1cm4gIFByaXZhY3lFeHBvcnREb21haW4iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAc2luY2UgICAzLjkuMCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICovIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICJwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZURvbWFpbihcJG5hbWUsIFwkZGVzY3JpcHRpb24gPSAnJykiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkZG9tYWluICAgICAgICAgICAgICA9IG5ldyBQcml2YWN5RXhwb3J0RG9tYWluOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRkb21haW4tPm5hbWUgICAgICAgID0gXCRuYW1lOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRkb21haW4tPmRlc2NyaXB0aW9uID0gXCRkZXNjcmlwdGlvbjsiOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInJldHVybiBcJGRvbWFpbjsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIn0iOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQ3JlYXRlIGFuIGl0ZW0gb2JqZWN0IGZvciBhbiBhcnJheSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgXCRkYXRhICAgIFRoZSBhcnJheSBkYXRhIHRvIGNvbnZlcnQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIGludGVnZXJ8bnVsbCAgXCRpdGVtSWQgIFRoZSBJRCBvZiB0aGlzIGl0ZW0iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0SXRlbSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBzaW5jZSAgIDMuOS4wIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKi8iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlSXRlbUZyb21BcnJheShhcnJheSBcJGRhdGEsIFwkaXRlbUlkID0gbnVsbCkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkaXRlbSA9IG5ldyBQcml2YWN5RXhwb3J0SXRlbTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkaXRlbS0+aWQgPSBcJGl0ZW1JZDsiOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gImZvcmVhY2ggKFwkZGF0YSBhcyBcJGtleSA9PiBcJHZhbHVlKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAieyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiaWYgKGlzX29iamVjdChcJHZhbHVlKSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkdmFsdWUgPSAoYXJyYXkpIFwkdmFsdWU7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoaXNfYXJyYXkoXCR2YWx1ZSkpIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJHZhbHVlID0gcHJpbnRfcihcJHZhbHVlLCB0cnVlKTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZmllbGQgICAgICAgID0gbmV3IFByaXZhY3lFeHBvcnRGaWVsZDsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZmllbGQtPm5hbWUgID0gXCRrZXk7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGZpZWxkLT52YWx1ZSA9IFwkdmFsdWU7IjsNCg0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGl0ZW0tPmFkZEZpZWxkKFwkZmllbGQpOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAicmV0dXJuIFwkaXRlbTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGZpZWxkIG5hbWUNCgkgKiANCgkgKiBAcGFyYW0gICBhcnJheSAgICRmaWVsZHMgIFRoZSBmaWVsZHMgYXJyYXkNCgkgKiBAcGFyYW0gICBpbnQgICAgICAgJGlkICAgICAgIFRoZSBmaWVsZCBpZA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZyAgICBUaGUgZmllbGQgbmFtZQ0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRGaWVsZE5hbWUoJiRmaWVsZHMsICRpZCkNCgl7DQoJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKQ0KCQl7DQoJCQlpZiAoJGZpZWxkWydmaWVsZCddID09ICRpZCkNCgkJCXsNCgkJCQlyZXR1cm4gJGZpZWxkWydiYXNlX25hbWUnXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogU2V0IFByaXZhY3kgUmVtb3ZlIERhdGENCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kcyAgVGhlIG1ldGhvZHMgc3RyaW5nDQoJICogDQoJICogQHJldHVybiAgdm9pZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRQcml2YWN5UmVtb3ZlRGF0YSgmJG1ldGhvZHMpDQoJew0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogUmVtb3ZlcyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSByZW1vdmUgaW5mb3JtYXRpb24gcmVxdWVzdCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lUYWJsZVJlcXVlc3QgIFwkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHBhcmFtICAgSlVzZXIgICAgICAgICAgICAgICAgXCR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogQHJldHVybiAgdm9pZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICovIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICJwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9uUHJpdmFjeVJlbW92ZURhdGEoJlwkcGx1Z2luLCAmXCRyZXF1ZXN0LCAmXCR1c2VyKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAieyI7DQoJCWZvcmVhY2ggKCR0aGlzLT5hY3RpdmVWaWV3cyBhcyAkdmlldykNCgkJew0KCQkJLy8gc2V0IHRoZSBhbm9ueW1pemUgc3dpdGNoDQoJCQkkYW5vbnltaXplID0gZmFsc2U7DQoJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemUnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemUnXSA9PSAxICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplX2ZpZWxkcyddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSwgdHJ1ZSkpDQoJCQl7DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJGFub255bWl6ZSA9IHRydWU7DQoJCQl9DQoJCQkvLyBzZXQgdmlldyBsaXN0IG5hbWUNCgkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KCQkJLy8gbG9hZCB0aGUgY2FuRG8gZnJvbSBnZXRBY3Rpb25zIGhlbHBlciBtZXRob2QNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBkZWxldCAiIC4gJHZpZXctPm5hbWVfbGlzdDsNCgkJCS8vIHNldCB0aGUgaWYgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBwZXJtaXNzaW9uIGJ1aWxkZXINCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKFwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBDRmFjdG9yeTo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEFjdGlvbigkdmlld05hbWVfc2luZ2xlLCAnY29yZS5kZWxldGUnKQ0KCQkJCS4gIicsICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSB8fCBcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRBY3Rpb24oJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUucHJpdmFjeS5kZWxldGUnKQ0KCQkJCS4gIicsICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBwbGFpbiBkZWxldGUsIG9yIGl0IGlzIGEgQW5vbnltaXplIA0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gYW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBBbm9ueW1pemUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZSAuICIgZGF0YSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJzZWxmOjphbm9ueW1pemUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRGF0YShcJHBsdWdpbiwgXCR1c2VyKTsiOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGp1c3QgZHVtcCwgZGVsZXRlIHRoZSByb3dzDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBSZW1vdmUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZSAuICIgZGF0YSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJzZWxmOjpyZW1vdmUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRGF0YShcJHBsdWdpbiwgXCR1c2VyKTsiOw0KCQkJfQ0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJfQ0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIn0iIC4gUEhQX0VPTDsNCg0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB0aGUgYW5vbnltaXplIHN3aXRjaA0KCQkJJGFub255bWl6ZSA9IGZhbHNlOw0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplJ10gPT0gMSAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemVfZmllbGRzJ10sIHRydWUpKQ0KCQkJew0KCQkJCS8vIEFub255bWl6ZSB0aGUgZGF0YQ0KCQkJCSRhbm9ueW1pemUgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gc2V0IHZpZXcgbGlzdCBuYW1lDQoJCQkkdmlld05hbWVfbGlzdCA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfbGlzdCk7DQoJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJJHZpZXdOYW1lX3NpbmdsZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfc2luZ2xlKTsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIvKioiOw0KDQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgcGxhaW4gZGVsZXRlLCBvciBpdCBpcyBhIEFub255bWl6ZQ0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiBBbm9ueW1pemUgdGhlICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRhdGEiOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIERlbGV0ZSB0aGUgcm93cw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAiICogUmVtb3ZlIHRoZSAiIC4gJHZpZXctPm5hbWVfc2luZ2xlIC4gIiBkYXRhIjsNCgkJCX0NCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEBwYXJhbSAgIEpUYWJsZVVzZXIgIFwkdXNlciAgVGhlIEpUYWJsZVVzZXIgb2JqZWN0IHRvIHByb2Nlc3MiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gIiAqIEByZXR1cm4gIHZvaWQiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICIgKi8iOw0KDQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgcGxhaW4gZGVsZXRlLCBvciBpdCBpcyBhIEFub255bWl6ZSANCgkJCWlmICgkYW5vbnltaXplKQ0KCQkJew0KCQkJCS8vIEFub255bWl6ZSB0aGUgZGF0YQ0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAicHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhbm9ueW1pemUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRGF0YSgmXCRwbHVnaW4sICZcJHVzZXIpIjsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBEZWxldGUgdGhlIHJvd3MNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gInByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlIiAuIHVjZmlyc3QoJHZpZXdOYW1lX2xpc3QpIC4gIkRhdGEoJlwkcGx1Z2luLCAmXCR1c2VyKSI7DQoJCQl9DQoNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGdldCBkYXRhYmFzZSBvYmplY3QiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGFsbCBpdGVtIGlkcyBvZiAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgdGhhdCBiZWxvbmcgdG8gdGhpcyB1c2VyIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeSA9IFwkZGItPmdldFF1ZXJ5KHRydWUpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLT5zZWxlY3QoJ2lkJykiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICItPmZyb20oXCRkYi0+cXVvdGVOYW1lKCcjX18iIC4gUGxhY2VmaXg6Ol8oJ2NvbXBvbmVudCcpIC4gJ18nIC4gJHZpZXdOYW1lX3NpbmdsZSAuICInKSk7IjsNCgkJCS8vIGdldCB2aWEgY3VzdG9tIHNjcmlwdA0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMykNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkdmlldy0+cGxhY2Vob2xkZXJzKSwgYXJyYXlfdmFsdWVzKCR2aWV3LT5wbGFjZWhvbGRlcnMpLCAkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2N1c3RvbV9saW5rJ10pOw0KCQkJfQ0KCQkJLy8ganVzdCBhbm90aGVyIGZpZWxkDQoJCQllbHNlaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMiAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ290aGVyX3VzZXJfZmllbGQnXSkpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBmaWVsZCBuYW1lDQoJCQkJaWYgKCgkZmllbGRfbmFtZSA9ICR0aGlzLT5nZXRGaWVsZE5hbWUoJHZpZXctPmZpZWxkcywgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydvdGhlcl91c2VyX2ZpZWxkJ10pKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnIiAuICRmaWVsZF9uYW1lIC4gIicpIC4gJyA9ICcgLiBcJGRiLT5xdW90ZShcJHVzZXItPmlkKSk7IjsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSAoVE9ETykNCg0KCQkJCQkvLyBzdG9wIGFueSBmcm9tIGxvYWRpbmcNCgkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA9PT09IEVSUk9SID09PT09IEVSUk9SID09PT09PSAoZmllbGQgbmFtZSBub3QgZm91bmQpIjsNCgkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gLTInOyAvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA8LS0gdGhpcyB3aWxsIG5ldmVyIHJldHVybiBhbnkgdmFsdWUuIENoZWNrIHlvdXIgW290aGVyIHVzZXIgZmllbGRdIHNlbGVjdGVkIGluIHRoZSBhZG1pbiB2aWV3IHByaXZhY3kgdGFiLiI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZ2V0IGJhc2VkIG9uIGNyZWF0ZWQgYnkNCgkJCWVsc2UNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgnY3JlYXRlZF9ieScpIC4gJyA9ICcgLiBcJGRiLT5xdW90ZShcJHVzZXItPmlkKSk7IjsNCgkJCX0NCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGFsbCBpdGVtcyBmb3IgdGhlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiB0YWJsZSB0aGF0IGJlbG9uZyB0byB0aGlzIHVzZXIiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHBrcyA9IFwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpLT5sb2FkQ29sdW1uKCk7IjsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuUEhQX0VPTCAuICBJbmRlbnQ6Ol8oMikgLiAiaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKFwkcGtzKSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IHRoZSAiIC4gJHZpZXdOYW1lX3NpbmdsZSAuICIgbW9kZWwiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJG1vZGVsID0gc2VsZjo6Z2V0TW9kZWwoJyIgLiAkdmlld05hbWVfc2luZ2xlIC4gIicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJyk7IjsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBwbGFpbiBkZWxldGUsIG9yIGl0IGlzIGEgQW5vbnltaXplIA0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIHBzZXVkb2Fub255bWlzZWQgZGF0YSBhcnJheQ0KCQkJCSRfZGF0YV9idWNrZXQgPSBhcnJheSgpOw0KCQkJCSRfcmFuZG9tX2J1Y2tldCA9IGFycmF5KCk7DQoJCQkJJF9wZXJtaXNzaW9uX2J1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemVfZmllbGRzJ10gYXMgJHJvdykNCgkJCQl7DQoJCQkJCWlmICgoJGZpZWxkX25hbWUgPSAkdGhpcy0+Z2V0RmllbGROYW1lKCR2aWV3LT5maWVsZHMsICRyb3dbJ2ZpZWxkJ10pKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCWlmICAoJ1JBTkRPTScgPT09ICRyb3dbJ3ZhbHVlJ10pIA0KCQkJCQkJew0KCQkJCQkJCSRfcmFuZG9tX2J1Y2tldFskZmllbGRfbmFtZV0gPSA4OyAvLyAoVE9ETykgbWFrZSB0aGUgc2l6ZSBkeW5hbWljDQoJCQkJCQl9DQoJCQkJCQkkX2RhdGFfYnVja2V0W10gPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIiciIC4gJGZpZWxkX25hbWUgLiAiJyA9PiAnIiAuICRyb3dbJ3ZhbHVlJ10gLiInIjsNCgkJCQkJCSRfcGVybWlzc2lvbl9idWNrZXRbJGZpZWxkX25hbWVdID0gJGZpZWxkX25hbWU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0aGlzIGlzIHRoZSBwc2V1ZG9hbm9ueW1pc2VkIGRhdGEgYXJyYXkgZm9yICIgLiAkdmlldy0+bmFtZV9saXN0Ow0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YSA9IGFycmF5KCI7DQoJCQkJJG1ldGhvZHMgLj0gaW1wbG9kZSgnLCcsICRfZGF0YV9idWNrZXQpOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiKTsiOw0KDQoJCQkJLy8gYWRkIHRoZSBwZXJtaXNzaW9uYWwgcmVtb3ZhbCBvZiB2YWx1ZXMgdGhlIHVzZXIgaGFzIG5vdCByaWdodCB0byB2aWV3IG9yIGFjY2Vzcw0KCQkJCSRoYXNQZXJtaXNzaW9uYWwgPSBmYWxzZTsNCgkJCQlpZiAoaXNzZXQoJHRoaXMtPnBlcm1pc3Npb25GaWVsZHNbJHZpZXdOYW1lX3NpbmdsZV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdIGFzICRmaWVsZE5hbWUgPT4gJHBlcm1pc3Npb25fb3B0aW9ucykNCgkJCQkJew0KCQkJCQkJaWYgKCEkaGFzUGVybWlzc2lvbmFsICYmIGlzc2V0KCRfcGVybWlzc2lvbl9idWNrZXRbJGZpZWxkTmFtZV0pKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2goJHBlcm1pc3Npb25fb3B0aW9ucyBhcyAkcGVybWlzc2lvbl9vcHRpb24gPT4gJGZpZWxkVHlwZSkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICghJGhhc1Blcm1pc3Npb25hbCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJc3dpdGNoICgkcGVybWlzc2lvbl9vcHRpb24pDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJY2FzZSAnYWNjZXNzJzoNCgkJCQkJCQkJCQljYXNlICd2aWV3JzoNCgkJCQkJCQkJCQljYXNlICdlZGl0JzoNCgkJCQkJCQkJCQkJJGhhc1Blcm1pc3Npb25hbCA9IHRydWU7DQoJCQkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gYWRkIHRoZSBub3RlcyBhbmQgZ2V0IHRoZSBnbG9iYWwgc3dpdGNoDQoJCQkJCWlmICgkaGFzUGVybWlzc2lvbmFsKQ0KCQkJCQl7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBHZXQgZ2xvYmFsIHBlcm1pc3Npb25hbCBjb250cm9sIGFjdGl2YXRpb24uIChkZWZhdWx0IGlzIGluYWN0aXZlKSI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJyktPmdldCgnc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkJywgMCk7IjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiaWYoXCRzdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGQpIjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHJlbW92ZSBhbGwgZmllbGRzIHRoYXQgaXMgbm90IHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkIjsNCgkJCQkJCWZvcmVhY2ggKCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdIGFzICRmaWVsZE5hbWUgPT4gJHBlcm1pc3Npb25fb3B0aW9ucykNCgkJCQkJCXsNCgkJCQkJCQlpZiAoaXNzZXQoJF9wZXJtaXNzaW9uX2J1Y2tldFskZmllbGROYW1lXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gImlmICgiOw0KCQkJCQkJCQkkX3Blcm1pc3Npb25faWYgPSBhcnJheSgpOw0KCQkJCQkJCQlmb3JlYWNoICgkcGVybWlzc2lvbl9vcHRpb25zIGFzICRwZXJtX2tleSA9PiAkZmllbGRfdHlwcmV3KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkX3Blcm1pc3Npb25faWZbXSA9ICIhXCR1c2VyLT5hdXRob3Jpc2UoJyIgLiAkdmlld05hbWVfc2luZ2xlIC4gIi4iIC4gJHBlcm1fa2V5IC4gIi4iIC4gJGZpZWxkTmFtZSAuICInLCAnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiJykiOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRtZXRob2RzIC49ICBpbXBsb2RlKCcgfHwgJywgJF9wZXJtaXNzaW9uX2lmKTsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gICIpIjsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJ7IjsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg1KSAuICJ1bnNldChcJHBzZXVkb2Fub255bWlzZWREYXRhWyciLiAkZmllbGROYW1lIC4gIiddKTsiOw0KCQkJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIn0iOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoJCQkJCX0NCgkJCQl9DQoNCg0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IHRoZSAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgdGFibGUiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0YWJsZSA9IFwkbW9kZWwtPmdldFRhYmxlKCk7IjsNCg0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIHBzZXVkb2Fub255bWlzZWQgZGF0YSBmb3IgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHNldCI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKFwkcHNldWRvYW5vbnltaXNlZERhdGEpKSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHN0aWxsIGFyY2hpdmUgYWxsIGl0ZW1zIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkdGFibGUtPnB1Ymxpc2goXCRwa3MsIDIpOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJyZXR1cm4gZmFsc2U7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBJdGVyYXRlIHRoZSBpdGVtcyB0byBhbm9uaW1pemUgZWFjaCBvbmUuIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImZvcmVhY2ggKFwkcGtzIGFzIFwkaSA9PiBcJHBrKSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkdGFibGUtPnJlc2V0KCk7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkcHNldWRvYW5vbnltaXNlZERhdGFbJ2lkJ10gPSBcJHBrOyI7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRfcmFuZG9tX2J1Y2tldCkpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkX3JhbmRvbV9idWNrZXQgYXMgJGZpZWxkTmFtZSA9PiAkc2l6ZSkNCgkJCQkJew0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJpZiAoaXNzZXQoXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YVsnIiAuICRmaWVsZE5hbWUgLiAiJ10pKSI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gInsiOw0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg1KSAuICJcJHBzZXVkb2Fub255bWlzZWREYXRhWyciIC4gJGZpZWxkTmFtZSAuICInXSA9IHNlbGY6OnJhbmRvbWtleSgiIC4gKGludCkgJHNpemUgLiAiKTsiOw0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJ9IjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJpZiAoXCR0YWJsZS0+YmluZChcJHBzZXVkb2Fub255bWlzZWREYXRhKSkiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAieyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg1KSAuICJcJHRhYmxlLT5zdG9yZSgpOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJ9IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBhcmNoaXZlIGFsbCBpdGVtcyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHRhYmxlLT5wdWJsaXNoKFwkcGtzLCAyKTsiOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIERlbGV0ZSB0aGUgcm93cw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IHRoZSAiIC4gJHZpZXctPm5hbWVfbGlzdCAuICIgdGFibGUiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0YWJsZSA9IFwkbW9kZWwtPmdldFRhYmxlKCk7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEl0ZXJhdGUgdGhlIGl0ZW1zIHRvIGRlbGV0ZSBlYWNoIG9uZS4iOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiZm9yZWFjaCAoXCRwa3MgYXMgXCRpID0+IFwkcGspIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiaWYgKFwkdGFibGUtPmxvYWQoXCRwaykpIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gInsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNSkgLiAiXCR0YWJsZS0+ZGVsZXRlKFwkcGspOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJ9IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2xlYXIgdGhlIGNvbXBvbmVudCdzIGNhY2hlIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkbW9kZWwtPmNsZWFuQ2FjaGUoKTsiOw0KCQkJfQ0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCQl9DQoJfQ==', '[[[Component]]] Privacy Compiler', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.2.3', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Privacy Compiler', '', 1, '', '', 1, '2019-08-17 23:47:50', '2024-05-26 20:13:46', 155, '', 3), +(4, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to tweak the export options for your components during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\nAlso be sure to activate the component/s that should be targeted with this added export feature under the Component Activation tab.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Settings\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2680\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2681\",\"custom_value\":\"\"}}}}', 'e3681356-565b-46a2-aa11-b2d9ab908938', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOyANCg0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcSW5kZW50Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcTGluZTsNCg==', 11, '{\"method_selection0\":{\"method\":\"92\"},\"method_selection1\":{\"method\":\"56\"},\"method_selection2\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogVGhlIGxhbmd1YWdlIHN0cmluZyBidWlsZGVyDQoJICogDQoJICogQHZhciAgICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJGxhbmd1YWdlQXJyYXkgPSBbXTsNCg0KCS8qDQoJICogVGhlIEV4cG9ydCBUZXh0IE9ubHkgc3dpdGNoDQoJICogDQoJICogQHZhciAgICAgIGludA0KCSAqLw0KCXByb3RlY3RlZCAkZXhwb3J0VGV4dE9ubHkgPSAwOw0KDQoJLyoNCgkgKiBUaGUgU3RyaWN0IEZpZWxkIEV4cG9ydCBQZXJtaXNzaW9ucyBzd2l0Y2gNCgkgKiANCgkgKiBAdmFyICAgICAgYm9vbA0KCSAqLw0KCXByb3RlY3RlZCAkc3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IGZhbHNlOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIEdldCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldENvbXBvbmVudERhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAkdGhpcy0+Y29tcG9uZW50QWN0aXZlKCkpDQoJCXsNCgkJCS8vIGFjdGl2YXRlIGV4cG9ydCB0ZXh0IG9ubHkNCgkJCUNGYWN0b3J5OjpfKCdDb25maWcnKS0+c2V0KCdleHBvcnRfdGV4dF9vbmx5JywgKGludCkgJHRoaXMtPmV4cG9ydFRleHRPbmx5KTsNCg0KCQkJLy8gYWN0aXZhdGUgc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkIGlmIHNldCBpbiBwbHVnaW4gKGRlZmF1bHQgdHJ1ZSkNCgkJCUNGYWN0b3J5OjpfKCdDb25maWcnKS0+c2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCAoYm9vbCkgJHRoaXMtPnN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQWZ0ZXIgTW9kZWwgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJNb2RlbENvbXBvbmVudERhdGEoJiRjb21wb25lbnQpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGV4cG9ydCBmb3IgYW55IHZpZXcNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJLy8gc2V0IHRoZSBleHBvcnQvaW1wb3J0IG9wdGlvbg0KCQkJaWYgKGlzc2V0KCRjb21wb25lbnQtPmFkbWluX3ZpZXdzKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29tcG9uZW50LT5hZG1pbl92aWV3cykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGNvbXBvbmVudC0+YWRtaW5fdmlld3MgYXMgJHZpZXcpDQoJCQkJew0KCQkJCQlpZiAoISR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAoaXNzZXQoJHZpZXdbJ3BvcnQnXSkgJiYgJHZpZXdbJ3BvcnQnXSB8fCAxID09ICR2aWV3WydzZXR0aW5ncyddLT5hZGRfY3VzdG9tX2ltcG9ydCkpDQoJCQkJCXsNCgkJCQkJCSR0aGlzLT5leHBvcnRUZXh0T25seSA9IDE7DQoJCQkJCQkkdGhpcy0+c3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IChib29sKSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3N0cmljdF9wZXJtaXNzaW9uX3Blcl9maWVsZCcsIDEpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBMYW5nIEZpbGUgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRMYW5nRmlsZURhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAkdGhpcy0+Y29tcG9uZW50QWN0aXZlKCkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmxhbmd1YWdlQXJyYXkpKQ0KCQl7DQoJCQlmb3JlYWNoKCR0aGlzLT5sYW5ndWFnZUFycmF5IGFzICRrZXkgPT4gJHN0cmluZykNCgkJCXsNCgkJCQlDRmFjdG9yeTo6XygnTGFuZ3VhZ2UnKS0+c2V0KCdhZG1pbnN5cycsICRrZXksICRzdHJpbmcpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBDb25maWcgRmllbGQgc2V0c10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRDb25maWdGaWVsZHNldHMoJiR0aW1lcikNCgl7DQoJCS8vIG9ubHkgYWRkIGZpZWxkcyBhZnRlciBzZWNvbmQgdGltZQ0KCQlpZiAoJHRoaXMtPmV4cG9ydFRleHRPbmx5ICYmICR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSAmJiAkdGltZXIgPT0gMikNCgkJew0KCQkJLy8gbWFpbiBsYW5nIHByZWZpeA0KCQkJJGxhbmcgPSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmxhbmdfcHJlZml4IC4gJ19DT05GSUcnOw0KCQkJLy8gc3RhcnQgYnVpbGRpbmcgZmllbGQgc2V0IGZvciBjb25maWcNCgkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygxKSAuICI8ZmllbGRzZXQiOw0KCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDIpIC4gJ25hbWU9ImV4cG9ydF90ZXh0X29ubHlfY29uZmlnIic7DQoJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMikgLiAnbGFiZWw9IicgLiAkbGFuZyAuICdfRVhQT1JUX1RFWFRfT05MWV9UQUJfTEFCRUwiJzsNCgkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygyKSAuICdkZXNjcmlwdGlvbj0iJyAuICRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9ERVNDUklQVElPTiI+JzsNCgkJCS8vIHNldHVwIGxhbmcNCgkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9MQUJFTCddID0gIkV4cG9ydCBPcHRpb25zIjsNCgkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9ERVNDUklQVElPTiddID0gIkhlcmUgYXJlIHNvbWUgZXh0cmEgb3B0aW9uIHRvIGFkanVzdCB0aGUgZXhwb3J0IGJlaGF2aW9yIG9mIGFkbWluIHZpZXdzLiI7DQoJCQkvLyBhZGQgY3VzdG9tIEV4cG9ydCBPcHRpb25zDQoJCQlpZiAoaXNzZXQoJGNvbmZpZ0ZpZWxkU2V0c0N1c3RvbUZpZWxkWydFeHBvcnQgT3B0aW9ucyddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnRmllbGRTZXRzQ3VzdG9tRmllbGRbJ0V4cG9ydCBPcHRpb25zJ10pKQ0KCQkJew0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IGltcGxvZGUoIiIsICRjb25maWdGaWVsZFNldHNDdXN0b21GaWVsZFsnRXhwb3J0IE9wdGlvbnMnXSk7DQoJCQkJdW5zZXQoJGNvbmZpZ0ZpZWxkU2V0c0N1c3RvbUZpZWxkWydFeHBvcnQgT3B0aW9ucyddKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfRVhQT1JUX1RFWFRfT05MWV9MQUJFTCddID0gIkV4cG9ydCBUZXh0IE9ubHkiOw0KCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX0RFU0NSSVBUSU9OJ10gPSAiVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZXhwb3J0IG9mIHN0cmluZy90ZXh0IGluc3RlYWQgb2YgbGlua2VkIElEcyBpbiBhbGwgYWRtaW4gdmlld3MgdGhhdCBoYXZlIGFuIGV4cG9ydCBvcHRpb24uIjsNCg0KCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19BQ1RJVkFURSddID0gIkFjdGl2YXRlIjsNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfREVBQ1RJVkFURSddID0gIkRlYWN0aXZhdGUiOw0KDQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICI8IS0tIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4cG9ydCBUZXh0IE9ubHkgRmllbGQuIFR5cGU6IFJhZGlvLiAoam9vbWxhKSAtLT4iOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygyKSAuICI8ZmllbGQiOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJ0eXBlPVwicmFkaW9cIiI7DQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDMpIC4gIm5hbWU9XCJleHBvcnRfdGV4dF9vbmx5XCIiOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJsYWJlbD1cIiIgLiAkbGFuZyAuICJfRVhQT1JUX1RFWFRfT05MWV9MQUJFTFwiIjsNCgkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMykgLiAiZGVzY3JpcHRpb249XCIiIC4gJGxhbmcgLiAiX0VYUE9SVF9URVhUX09OTFlfREVTQ1JJUFRJT05cIiI7DQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDMpIC4gImNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC15ZXNub1wiIjsNCgkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMykgLiAiZGVmYXVsdD1cIjBcIj4iOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8IS0tIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIE9wdGlvbiBTZXQuIC0tPiI7DQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDMpIC4gIjxvcHRpb24gdmFsdWU9XCIxXCI+IjsNCgkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oNCkgLiAkbGFuZyAuICJfQUNUSVZBVEU8L29wdGlvbj4iOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8b3B0aW9uIHZhbHVlPVwiMFwiPiI7DQoJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDQpIC4gJGxhbmcgLiAiX0RFQUNUSVZBVEU8L29wdGlvbj4iOw0KCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygyKSAuICI8L2ZpZWxkPiI7DQoNCgkJCQkvLyBhZGQgIHN0cmljdCBGaWVsZCBFeHBvcnQgUGVybWlzc2lvbnMgZmllbGQNCgkJCQlpZiAoJHRoaXMtPnN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMpDQoJCQkJew0KCQkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfU1RSSUNUX1BFUk1JU1NJT05fUEVSX0ZJRUxEX0xBQkVMJ10gPSAiVXNlIFN0cmljdCBQZXJtaXNzaW9uIHBlci9maWVsZCI7DQoJCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19TVFJJQ1RfUEVSTUlTU0lPTl9QRVJfRklFTERfREVTQ1JJUFRJT04nXSA9ICJVc2Ugc3RyaWN0IHBlcm1pc3Npb25zIHBlci9maWVsZCBpbiB0aGUgZXhwb3J0IG1ldGhvZHMgd2hlcmUgdGhlcmUgYXJlIGZpZWxkcyBwZXJtaXNzaW9ucyBpbiBhIHZpZXcuIjsNCg0KCQkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIjwhLS0iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgU3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkIEZpZWxkLiBUeXBlOiBSYWRpby4gKGpvb21sYSkgLS0+IjsNCgkJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDIpIC4gIjxmaWVsZCI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJ0eXBlPVwicmFkaW9cIiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJuYW1lPVwic3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkXCIiOw0KCQkJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMykgLiAibGFiZWw9XCIiIC4gJGxhbmcgLiAiX1NUUklDVF9QRVJNSVNTSU9OX1BFUl9GSUVMRF9MQUJFTFwiIjsNCgkJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDMpIC4gImRlc2NyaXB0aW9uPVwiIiAuICRsYW5nIC4gIl9TVFJJQ1RfUEVSTUlTU0lPTl9QRVJfRklFTERfREVTQ1JJUFRJT05cIiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAteWVzbm9cIiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICJkZWZhdWx0PVwiMVwiPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8IS0tIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIE9wdGlvbiBTZXQuIC0tPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8b3B0aW9uIHZhbHVlPVwiMVwiPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6Xyg0KSAuICRsYW5nIC4gIl9BQ1RJVkFURTwvb3B0aW9uPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6XygzKSAuICI8b3B0aW9uIHZhbHVlPVwiMFwiPiI7DQoJCQkJCSRjb25maWdGaWVsZFNldHNbXSA9IEluZGVudDo6Xyg0KSAuICRsYW5nIC4gIl9ERUFDVElWQVRFPC9vcHRpb24+IjsNCgkJCQkJJGNvbmZpZ0ZpZWxkU2V0c1tdID0gSW5kZW50OjpfKDIpIC4gIjwvZmllbGQ+IjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjbG9zZSB0aGF0IGZpZWxkc2V0DQoJCQkkY29uZmlnRmllbGRTZXRzW10gPSBJbmRlbnQ6Ol8oMSkgLiAiPC9maWVsZHNldD4iOw0KCQl9DQoJfQ0KDQpbQ1VTVE9NQ09ERT1jb21wb25lbnRBY3RpdmVd', '[[[Component]]] Export Compiler', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.2.0', '{\"property_selection0\":{\"property\":\"34\"},\"property_selection1\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Export Compiler', '', 1, '', '', 1, '2019-08-21 20:42:45', '2023-12-30 09:44:06', 43, '', 2), +(5, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to improve your action log integration with Joomla for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"activate\",\"label\":\"Component Activation\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2680\",\"custom_value\":\"\"}}}}', '91e831bf-5337-4b9c-8f6c-e90255b9e36a', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcUGxhY2VmaXg7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xJbmRlbnQ7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xMaW5lOw0K', 11, '{\"method_selection0\":{\"method\":\"59\"},\"method_selection1\":{\"method\":\"120\"},\"method_selection2\":{\"method\":\"79\"},\"method_selection3\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoqDQoJICogVGhlIFNjcmlwdHMNCgkgKiANCgkgKiBAdmFyICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJHNjcmlwdHNBcnJheSA9IFsnUE9TVElOU1RBTExTQ1JJUFQnID0+IFtdLCAnUE9TVFVQREFURVNDUklQVCcgPT4gW10sICdVTklOU1RBTExTQ1JJUFQnID0+IFtdXTsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldENvbXBvbmVudERhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+bGFuZ3VhZ2VBcnJheSkpDQoJCXsNCgkJCWZvcmVhY2goJHRoaXMtPmxhbmd1YWdlQXJyYXkgYXMgJGtleSA9PiAkc3RyaW5nKQ0KCQkJew0KCQkJCUNGYWN0b3J5OjpfKCdMYW5ndWFnZScpLT5zZXQoJ2FkbWluJywgJGtleSwgJHN0cmluZyk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBCdWlsZCBGaWxlcyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkFmdGVyQnVpbGRGaWxlc0NvbnRlbnQoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJJGZ1bmN0aW9uX25hbWUgPSAnZ2V0TWFpbkozJzsNCgkJCWlmIChDRmFjdG9yeTo6XygnQ29uZmlnJyktPmdldCgnam9vbWxhX3ZlcnNpb24nLCAzKSAhPSAzKQ0KCQkJew0KCQkJCSRmdW5jdGlvbl9uYW1lID0gJ2dldE1haW5KNCc7DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgc2NyaXB0IHN0cmluZ3MgdG8gdGhlICBjb21wb25lbnQNCgkJCWZvcmVhY2ggKCR0aGlzLT5zY3JpcHRzQXJyYXkgYXMgJHRhcmdldCA9PiAmJGJ1Y2tldCkNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIGNvbXBvbmVudCBtYWluIHRhcmdldCBzY3JpcHQNCgkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hZGQoJHRhcmdldCwgJHRoaXMtPnskZnVuY3Rpb25fbmFtZSAuICR0YXJnZXR9KCkpOw0KCQkJCS8vIGFkZCB0aGUgY29tcG9uZW50IHZpZXdzIHRhcmdldCBzY3JpcHRzDQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCXsNCgkJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWRkKCR0YXJnZXQsIGltcGxvZGUoJycsICRidWNrZXQpKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGFkZCB0aGUgYmV0dGVyIGludGVncmF0aW9uIHdpdGggYWN0aW9uIGxvZw0KCQlpZiAoJHRoaXMtPmNvbXBvbmVudEFjdGl2ZSgpICYmU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPmZpZWxkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCR2aWV3LT5maWVsZHMgYXMgJGZpZWxkKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkZmllbGRbJ3RpdGxlJ10pICYmICRmaWVsZFsndGl0bGUnXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJHRpdGxlX2hvbGRlciA9ICRmaWVsZFsnYmFzZV9uYW1lJ107DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGlmIG5vdCBmb3VuZCB0cnkgYWdhaW4NCgkJCWlmICghaXNzZXQoJHRpdGxlX2hvbGRlcikpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHZpZXctPmZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJGZpZWxkWydsaXN0J10pICYmICRmaWVsZFsnbGlzdCddID09IDEgJiYNCgkJCQkJCWlzc2V0KCRmaWVsZFsnb3JkZXJfbGlzdCddKSAmJiAkZmllbGRbJ29yZGVyX2xpc3QnXSA9PSAxICYmDQoJCQkJCQlpc3NldCgkZmllbGRbJ2xpbmsnXSkgJiYgJGZpZWxkWydsaW5rJ10gPT0gMSkNCgkJCQkJew0KCQkJCQkJJHRpdGxlX2hvbGRlciA9ICRmaWVsZFsnYmFzZV9uYW1lJ107DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gaWYgZm91bmQgdXBkYXRlIHBsYWNlaG9sZGVyDQoJCQlpZiAoaXNzZXQoJHRpdGxlX2hvbGRlcikpDQoJCQl7DQoJCQkJLy8gc2V0IG1haW4gdGl0bGUNCgkJCQlDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+c2V0KCc8PDxNQUlOX1RJVExFPj4+JywgJHRpdGxlX2hvbGRlciwgZmFsc2UpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGZhbGwgYmFjayBvbiBJRA0KCQkJCUNGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5zZXQoJzw8PE1BSU5fVElUTEU+Pj4nLCAnaWQnLCBmYWxzZSk7DQoJCQl9DQoNCgkJCSRmdW5jdGlvbl9uYW1lID0gJ2dldFZpZXdKMyc7DQoJCQlpZiAoQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5nZXQoJ2pvb21sYV92ZXJzaW9uJywgMykgIT0gMykNCgkJCXsNCgkJCQkkZnVuY3Rpb25fbmFtZSA9ICdnZXRWaWV3SjQnOw0KCQkJfQ0KDQoJCQkvLyBub3cgbG9hZCB0aGUgc2NyaXB0IHN0cmluZ3MNCgkJCWZvcmVhY2ggKCR0aGlzLT5zY3JpcHRzQXJyYXkgYXMgJHRhcmdldCA9PiAmJGJ1Y2tldCkNCgkJCXsNCgkJCQkkYnVja2V0W10gPSAkdGhpcy0+eyRmdW5jdGlvbl9uYW1lIC4gJHRhcmdldH0oKTsNCgkJCX0NCg0KCQkJLy8ganVzdCByZW1vdmUgaXQgYWdhaW4NCgkJCUNGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5yZW1vdmUoJzw8PE1BSU5fVElUTEU+Pj4nKTsNCg0KCQkJLy8gc2V0IGxhbmd1YWdlIHN0cmluZw0KCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPmdldF8oIkxBTkdfUFJFRklYIikgLiAnX1RZUEVfJyAuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5nZXRfKCJWSUVXIildID0gJHZpZXctPm5hbWVfc2luZ2xlOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFBvc3QgSW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozUE9TVElOU1RBTExTQ1JJUFQoKQ0KCXsNCgkJJHNjcmlwdCA9IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCBkYiBpZiBub3Qgc2V0IGFscmVhZHkuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImlmICghaXNzZXQoXCRkYikpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCRkYiA9IEZhY3Rvcnk6OmdldERibygpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ3JlYXRlIHRoZSAiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIiBhY3Rpb24gbG9ncyBleHRlbnNpb25zIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIl9hY3Rpb25fbG9nc19leHRlbnNpb25zID0gbmV3IFxzdGRDbGFzcygpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMtPmV4dGVuc2lvbiA9ICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgdGhlIG9iamVjdCBpbnRvIHRoZSBhY3Rpb24gbG9ncyBleHRlbnNpb25zIHRhYmxlLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnNfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnLCBcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBQb3N0IEluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKM1BPU1RJTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSB0aGUgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX3RpdGxlID0gJyIgLiBQbGFjZWZpeDo6XygiVklFVyIpIC4gIic7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZy0+aWRfaG9sZGVyID0gJ2lkJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRpdGxlX2hvbGRlciA9ICc8PDxNQUlOX1RJVExFPj4+JzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRhYmxlX25hbWUgPSAnI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRleHRfcHJlZml4ID0gJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgdGhlIG9iamVjdCBpbnRvIHRoZSBhY3Rpb24gbG9nIGNvbmZpZyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dfY29uZmlnJywgXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgTWFpbiBQb3N0IFVwZGF0ZSBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozUE9TVFVQREFURVNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgU2V0IGRiIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiaWYgKCFpc3NldChcJGRiKSkiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDcmVhdGUgdGhlICIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgb2JqZWN0LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucy0+ZXh0ZW5zaW9uID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIic7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENoZWNrIGlmICIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiIGFjdGlvbiBsb2cgZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gYWN0aW9uIGxvZ3MgZXh0ZW5zaW9ucyBEQi4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRxdWVyeSA9IFwkZGItPmdldFF1ZXJ5KHRydWUpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT5zZWxlY3QoXCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcpKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnktPmZyb20oXCRkYi0+cXVvdGVOYW1lKCcjX19hY3Rpb25fbG9nc19leHRlbnNpb25zJykpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2V4dGVuc2lvbicpIC4gJyBMSUtFICcuIFwkZGItPnF1b3RlKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucy0+ZXh0ZW5zaW9uKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGRiLT5leGVjdXRlKCk7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCB0aGUgb2JqZWN0IGludG8gdGhlIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUgaWYgbm90IGZvdW5kLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIVwkZGItPmdldE51bVJvd3MoKSkiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnNfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnLCBcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFBvc3QgVXBkYXRlIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3SjNQT1NUVVBEQVRFU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSB0aGUgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT5pZCA9IG51bGw7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX3RpdGxlID0gJyIgLiBQbGFjZWZpeDo6XygiVklFVyIpIC4gIic7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZy0+aWRfaG9sZGVyID0gJ2lkJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRpdGxlX2hvbGRlciA9ICc8PDxNQUlOX1RJVExFPj4+JzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRhYmxlX25hbWUgPSAnI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRleHRfcHJlZml4ID0gJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuICBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIGlzIGFscmVhZHkgaW4gYWN0aW9uX2xvZ19jb25maWcgREIuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRxdWVyeS0+c2VsZWN0KFwkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnKSkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT5mcm9tKFwkZGItPnF1b3RlTmFtZSgnI19fYWN0aW9uX2xvZ19jb25maWcnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgndHlwZV9hbGlhcycpIC4gJyBMSUtFICcuIFwkZGItPnF1b3RlKFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGRiLT5leGVjdXRlKCk7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCB0aGUgb2JqZWN0IGludG8gdGhlIGNvbnRlbnQgdHlwZXMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImlmIChcJGRiLT5nZXROdW1Sb3dzKCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPmlkID0gXCRkYi0+bG9hZFJlc3VsdCgpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZ19VcGRhdGVkID0gXCRkYi0+dXBkYXRlT2JqZWN0KCcjX19hY3Rpb25fbG9nX2NvbmZpZycsIFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLCAnaWQnKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJlbHNlIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWdfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dfY29uZmlnJywgXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozVU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgYXBwIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFpc3NldChcJGFwcCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiIGZyb20gdGhlIGFjdGlvbl9sb2dzX2V4dGVuc2lvbnMgdGFibGUiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIl9hY3Rpb25fbG9nc19leHRlbnNpb25zID0gYXJyYXkoIFwkZGItPnF1b3RlTmFtZSgnZXh0ZW5zaW9uJykgLiAnID0gJyAuIFwkZGItPnF1b3RlKCdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSApOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPmRlbGV0ZShcJGRiLT5xdW90ZU5hbWUoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucyk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4ZWN1dGUgdGhlIHF1ZXJ5IHRvIHJlbW92ZSAiIC4gUGxhY2VmaXg6Ol8oIkNvbXBvbmVudCIpIC4gIiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX3JlbW92ZWRfZG9uZSA9IFwkZGItPmV4ZWN1dGUoKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfcmVtb3ZlZF9kb25lKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIElmIHN1Y2Nlc3NmdWxseSByZW1vdmUgIiAuIFBsYWNlZml4OjpfKCJDb21wb25lbnQiKSAuICIgYWRkIHF1ZXVlZCBzdWNjZXNzIG1lc3NhZ2UuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZSIgLiAieHQ6Ol8oJ1RoZSBjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIgZXh0ZW5zaW9uIHdhcyByZW1vdmVkIGZyb20gdGhlIDxiPiNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnM8L2I+IHRhYmxlJykpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Vmlld0ozVU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgYXBwIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFpc3NldChcJGFwcCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiBmcm9tIHRoZSBhY3Rpb25fbG9nX2NvbmZpZyB0YWJsZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZyA9IGFycmF5KCBcJGRiLT5xdW90ZU5hbWUoJ3R5cGVfYWxpYXMnKSAuICcgPSAnLiBcJGRiLT5xdW90ZSgnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiLiIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicpICk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeS0+ZGVsZXRlKFwkZGItPnF1b3RlTmFtZSgnI19fYWN0aW9uX2xvZ19jb25maWcnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRkYi0+c2V0UXVlcnkoXCRxdWVyeSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4ZWN1dGUgdGhlIHF1ZXJ5IHRvIHJlbW92ZSBjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIuIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnX2RvbmUgPSBcJGRiLT5leGVjdXRlKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gImlmIChcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZ19kb25lKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIElmIHN1Y2Nlc3NmdWxseSByZW1vdmVkICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiBhZGQgcXVldWVkIHN1Y2Nlc3MgbWVzc2FnZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAtPmVucXVldWVNZXNzYWdlKFRlIiAuICJ4dDo6XygnVGhlIGNvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICIgdHlwZSBhbGlhcyB3YXMgcmVtb3ZlZCBmcm9tIHRoZSA8Yj4jX19hY3Rpb25fbG9nX2NvbmZpZzwvYj4gdGFibGUnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIn0iOw0KDQoJCXJldHVybiBDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkc2NyaXB0KTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIE1haW4gUG9zdCBJbnN0YWxsIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRNYWluSjRQT1NUSU5TVEFMTFNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKQ0KCQkJLiAiIEFkZCBjb21wb25lbnQgdG8gdGhlIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkdGhpcy0+c2V0QWN0aW9uTG9nc0V4dGVuc2lvbnMoKTsiOw0KDQoJCXJldHVybiAkc2NyaXB0Ow0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBQb3N0IEluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKNFBPU1RJTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgQWRkICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiB0byB0aGUgYWN0aW9uIGxvZ3MgY29uZmlnIHRhYmxlLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHRoaXMtPnNldEFjdGlvbkxvZ0NvbmZpZygiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdHlwZVRpdGxlIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIiciIC4gUGxhY2VmaXg6Ol8oIlZJRVciKSAuICInLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0eXBlQWxpYXMiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBpZEhvbGRlciI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInaWQnLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0aXRsZUhvbGRlciI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInPDw8TUFJTl9USVRMRT4+PicsIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRhYmxlTmFtZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGV4dFByZWZpeCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInIiAuIFBsYWNlZml4OjpfKCJMQU5HX1BSRUZJWCIpIC4gIiciOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiKTsiOw0KDQoJCXJldHVybiBDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkc2NyaXB0KTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIE1haW4gUG9zdCBVcGRhdGUgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE1haW5KNFBPU1RVUERBVEVTQ1JJUFQoKQ0KCXsNCgkJJHNjcmlwdCA9IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykNCgkJCS4gIiBBZGQvVXBkYXRlIGNvbXBvbmVudCBpbiB0aGUgYWN0aW9uIGxvZ3MgZXh0ZW5zaW9ucyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0aGlzLT5zZXRBY3Rpb25Mb2dzRXh0ZW5zaW9ucygpOyI7DQoNCgkJcmV0dXJuICRzY3JpcHQ7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFBvc3QgVXBkYXRlIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3SjRQT1NUVVBEQVRFU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgQWRkL1VwZGF0ZSAiIC4gUGxhY2VmaXg6Ol8oIlZpZXciKSAuICIgaW4gdGhlIGFjdGlvbiBsb2dzIGNvbmZpZyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0aGlzLT5zZXRBY3Rpb25Mb2dDb25maWcoIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHR5cGVUaXRsZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInIiAuIFBsYWNlZml4OjpfKCJWSUVXIikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdHlwZUFsaWFzIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIidjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIuIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgaWRIb2xkZXIiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJ2lkJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGl0bGVIb2xkZXIiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJzw8PE1BSU5fVElUTEU+Pj4nLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0YWJsZU5hbWUiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJyNfXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiXyIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicsIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRleHRQcmVmaXgiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIik7IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbko0VU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgUmVtb3ZlIGNvbXBvbmVudCBmcm9tIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkdGhpcy0+cmVtb3ZlQWN0aW9uTG9nc0V4dGVuc2lvbnMoKTsiOw0KDQoJCXJldHVybiAkc2NyaXB0Ow0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBVbmluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKNFVOSU5TVEFMTFNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKQ0KCQkJLiAiIFJlbW92ZSAiIC4gUGxhY2VmaXg6Ol8oIlZpZXciKSAuICIgZnJvbSBhY3Rpb24gbG9ncyBjb25maWcgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkdGhpcy0+cmVtb3ZlQWN0aW9uTG9nQ29uZmlnKCdjb21fIg0KCQkJLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiLiIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KW0NVU1RPTUNPREU9Y29tcG9uZW50QWN0aXZlXQ==', '[[[Component]]] ActionLog Compiler', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '2.0.0', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB ActionLog Compiler', '', 1, '', '', 1, '2019-08-27 08:22:41', '2024-01-17 14:23:51', 63, '', 3), +(6, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to add download link, url or icon and more to content from the [[[Component]]].', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"\",\"fields_rules_paths\":\"2\",\"fields\":{\"fields0\":{\"field\":\"2644\",\"custom_value\":\"1\"},\"fields1\":{\"field\":\"2645\",\"custom_value\":\"md\"},\"fields2\":{\"field\":\"2646\",\"custom_value\":\"\"}}}}', 'cbbd9ccd-441b-4c88-b0bb-44c724943df0', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOyA=', 3, '{\"method_selection0\":{\"method\":\"16\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogQWRkIHRoZSBjc3MgZmlsZXMgdG8gdGhlIGRvY3VtZW50IGZvciB0aGUgdmVjdG9yIHN5bGUNCgkgKg0KCSAqIEB2YXIgICAgYm9vbGVhbg0KCSAqLw0KCXByb3RlY3RlZCAgJGFkZGNzcyA9IGZhbHNlOw0KCXByb3RlY3RlZCAgJHNldGNzcyA9IGZhbHNlOw0KDQoJLyoqDQoJICogVGhpcyBpcyB0aGUgZmlyc3Qgc3RhZ2UgaW4gcHJlcGFyaW5nIGNvbnRlbnQgZm9yIG91dHB1dCBhbmQgaXMgdGhlDQoJICogbW9zdCBjb21tb24gcG9pbnQgZm9yIGNvbnRlbnQgb3JpZW50YXRlZCBwbHVnaW5zIHRvIGRvIHRoZWlyIHdvcmsuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIHRoZSBwbHVnaW4uDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJiRyb3cgICAgIFRoZSBhcnRpY2xlIG9iamVjdC4gIE5vdGUgJGFydGljbGUtPnRleHQgaXMgYWxzbyBhdmFpbGFibGUNCgkgKiBAcGFyYW0gICBtaXhlZCAgICAmJHBhcmFtcyAgVGhlIGFydGljbGUgcGFyYW1zDQoJICogQHBhcmFtICAgaW50ZWdlciAgJHBhZ2UgICAgIFRoZSAncGFnZScgbnVtYmVyDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Db250ZW50UHJlcGFyZSgkY29udGV4dCwgJiRyb3csICYkcGFyYW1zLCAkcGFnZSA9IDApDQoJew0KCQkvLyBTaW1wbGUgcGVyZm9ybWFuY2UgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYm90IHNob3VsZCBwcm9jZXNzIGZ1cnRoZXINCgkJaWYgKHN0cnBvcygkcm93LT50ZXh0LCAnW1tbW1NFQ1VSRUZJTEVdXV09JykgIT09IGZhbHNlKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgcmVwbGFjZW1lbnQgdmFsdWVzDQoJCQkkcmVwbGFjZW1lbnQgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IGFsbCBJRCBrZXlzDQoJCQkka2V5cyA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OmFsbEJldHdlZW4oJHJvdy0+dGV4dCwgJ1tbW1tTRUNVUkVGSUxFXV1dPScsICddJyk7DQoJCQkvLyBtYWtlIHN1cmUgd2UgcmVhbGx5IGhhdmUgc29tZXRoaW5nIChzaG91bGQgbm90IGJlIG5lZWRlZC4uLikNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygka2V5cykpDQoJCQl7DQoJCQkJJGlkcyA9IGFycmF5KCk7DQoJCQkJJGJ1aWxkZXIgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2goJGtleXMgYXMgJGtleSkNCgkJCQl7DQoJCQkJCWlmIChzdHJwb3MoJGtleSwgJ18nKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCWxpc3QoJHR5cGUsICRpZCkgPSBleHBsb2RlKCdfJywgJGtleSwgMik7DQoJCQkJCQkkaWRzWyhpbnQpICRpZF0gPSAoaW50KSAkaWQ7DQoJCQkJCQkkYnVpbGRlclska2V5XSA9IGFycmF5KCdpZCcgPT4gKGludCkgJGlkLCAndHlwZScgPT4gJHR5cGUpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGJ1aWxkZXJbJGtleV0gPSBudWxsOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGdldCBpdGVtcw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSAmJiAoJGl0ZW1zID0gJHRoaXMtPmdldEl0ZW1zKGFycmF5X3ZhbHVlcygkaWRzKSkpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRidWlsZGVyIGFzICRrZXkgPT4gJHRhcmdldCkNCgkJCQkJew0KCQkJCQkJLy8gYnVpbGQgdGhlIHBsYWNlaG9sZGVyIGtleQ0KCQkJCQkJJF9rZXkgPSAnW1tbW1NFQ1VSRUZJTEVdXV09JyAuICRrZXkgLiAnXSc7DQoJCQkJCQkvLyBtYWtlIHN1cmUgaXQgZ2V0cyByZW1vdmVkIGlmIG5vdCBmb3VuZA0KCQkJCQkJJHJlcGxhY2VtZW50WyRfa2V5XSA9ICcnOw0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0YXJnZXQpICYmIGlzc2V0KCR0YXJnZXRbJ2lkJ10pICYmIGlzc2V0KCRpdGVtc1skdGFyZ2V0WydpZCddXSkpDQoJCQkJCQl7DQoJCQkJCQkJJHJlcGxhY2VtZW50WyRfa2V5XSA9ICR0aGlzLT5nZXREb3dubG9hZFN0cmluZygkdGFyZ2V0Wyd0eXBlJ10sICRpdGVtc1skdGFyZ2V0WydpZCddXSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gbm93IHVwZGF0ZSB0aGUgY29udGVudA0KCQkJCQkkcm93LT50ZXh0ID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkcmVwbGFjZW1lbnQpLCBhcnJheV92YWx1ZXMoJHJlcGxhY2VtZW50KSwgJHJvdy0+dGV4dCk7DQoJCQkJCS8vIGFkZCB0aGUgY3NzIGZpbGVzDQoJCQkJCWlmICgkdGhpcy0+YWRkY3NzKQ0KCQkJCQl7DQoJCQkJCQkvLyBnZXQgdGhlIGRvY3VtZW50IG9iamVjdA0KCQkJCQkJJGRvY3VtZW50ID0gRmFjdG9yeTo6Z2V0RG9jdW1lbnQoKTsNCltDVVNUT01DT0RFPWZpbGVJY29uVmV0b3JzQ1NTKyQsCQkJCQkJXQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogVGhlIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBmaWxlIGRvd25sb2FkIHN0cmluZw0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHR5cGUgIFRoZSB0eXBlIG9mIGRvd25sb2FkIHN0cmluZw0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGl0ZW0gIFRoZSBmaWxlIGl0ZW0gb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RG93bmxvYWRTdHJpbmcoJHR5cGUsICRpdGVtKQ0KCXsNCgkJc3dpdGNoKCR0eXBlKQ0KCQl7DQoJCQljYXNlICdpY29uJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlDQoJCQkJaWYgKCEkdGhpcy0+c2V0Y3NzKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmFkZGNzcyA9ICR0aGlzLT5wYXJhbXMtPmdldCgnYWRkX2NzcycsIHRydWUpOw0KCQkJCQkkdGhpcy0+c2V0Y3NzID0gdHJ1ZTsNCgkJCQl9DQoJCQkJJHRpdGxlID0gKGlzc2V0KCRpdGVtLT5kZXNjcmlwdGlvbikgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmRlc2NyaXB0aW9uKSkgPyAkaXRlbS0+ZGVzY3JpcHRpb24gOiAkaXRlbS0+bmFtZTsNCgkJCQlyZXR1cm4gJzxhIGhyZWY9IicgLiAkaXRlbS0+bGluayAuICciIHRpdGxlPSInIC4gICR0aXRsZSAgLiAnIj4nIC4NCgkJCQkJJzxzcGFuIGNsYXNzPSJmaXYtJyAuIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0RmlsZVZlY3RvclN0eWxlKHRydWUpIC4gJyBmaXYtaWNvbi0nIC4gJGl0ZW0tPmZpbGVfZXh0ZW5zaW9uIC4gJyBmaXYtc2l6ZS0nIC4gJHRoaXMtPnBhcmFtcy0+Z2V0KCdpY29uX3NpemUnLCAnbWQnKSAuICciPjwvc3Bhbj4nIC4NCgkJCQkJJzwvYT4nOw0KCQkJYnJlYWs7DQoJCQljYXNlICdpY29uLW1kJzoNCgkJCWNhc2UgJ2ljb24tbWVkaXVtJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggbWVkaXVtIHNpemUNCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLW1kIj48L3NwYW4+JyAuDQoJCQkJCSc8L2E+JzsNCgkJCWJyZWFrOw0KCQkJY2FzZSAnaWNvbi1sZyc6DQoJCQljYXNlICdpY29uLWxhcmdlJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggbGFyZ2Ugc2l6ZQ0KCQkJCWlmICghJHRoaXMtPnNldGNzcykNCgkJCQl7DQoJCQkJCSR0aGlzLT5hZGRjc3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF9jc3MnLCB0cnVlKTsNCgkJCQkJJHRoaXMtPnNldGNzcyA9IHRydWU7DQoJCQkJfQ0KCQkJCSR0aXRsZSA9IChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQkJcmV0dXJuICc8YSBocmVmPSInIC4gJGl0ZW0tPmxpbmsgLiAnIiB0aXRsZT0iJyAuICAkdGl0bGUgIC4gJyI+JyAuDQoJCQkJCSc8c3BhbiBjbGFzcz0iZml2LScgLiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZpbGVWZWN0b3JTdHlsZSh0cnVlKSAuICcgZml2LWljb24tJyAuICRpdGVtLT5maWxlX2V4dGVuc2lvbiAuICcgZml2LXNpemUtbGciPjwvc3Bhbj4nIC4NCgkJCQkJJzwvYT4nOw0KCQkJYnJlYWs7DQoJCQljYXNlICdpY29uLXhsJzoNCgkJCWNhc2UgJ2ljb24teGxhcmdlJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggeGxhcmdlIHNpemUNCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLXhsIj48L3NwYW4+JyAuDQoJCQkJCSc8L2E+JzsNCgkJCWJyZWFrOw0KDQoJCQljYXNlICdpY29uK25hbWUnOg0KCQkJCS8vIHRoZSBpY29uIHR5cGUgd2l0aCBuYW1lIHVuZGVyDQoJCQkJaWYgKCEkdGhpcy0+c2V0Y3NzKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmFkZGNzcyA9ICR0aGlzLT5wYXJhbXMtPmdldCgnYWRkX2NzcycsIHRydWUpOw0KCQkJCQkkdGhpcy0+c2V0Y3NzID0gdHJ1ZTsNCgkJCQl9DQoJCQkJJHRpdGxlID0gKGlzc2V0KCRpdGVtLT5kZXNjcmlwdGlvbikgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmRlc2NyaXB0aW9uKSkgPyAkaXRlbS0+ZGVzY3JpcHRpb24gOiAkaXRlbS0+bmFtZTsNCgkJCQlyZXR1cm4gJzxhIGhyZWY9IicgLiAkaXRlbS0+bGluayAuICciIHRpdGxlPSInIC4gICR0aXRsZSAgLiAnIj4nIC4NCgkJCQkJJzxzcGFuIGNsYXNzPSJmaXYtJyAuIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0RmlsZVZlY3RvclN0eWxlKHRydWUpIC4gJyBmaXYtaWNvbi0nIC4gJGl0ZW0tPmZpbGVfZXh0ZW5zaW9uIC4gJyBmaXYtc2l6ZS0nIC4gJHRoaXMtPnBhcmFtcy0+Z2V0KCdpY29uX3NpemUnLCAnbWQnKSAuICciPjwvc3Bhbj4gPGJyIC8+JyAuDQoJCQkJCSRpdGVtLT5maWxlX25hbWUgLiAnPC9hPic7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2ljb24tbWQrbmFtZSc6DQoJCQljYXNlICdpY29uLW1lZGl1bStuYW1lJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggbWVkaXVtIHNpemUgYW5kIG5hbWUgdW5kZXINCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLW1kIj48L3NwYW4+IDxiciAvPicgLg0KCQkJCQkkaXRlbS0+ZmlsZV9uYW1lIC4gJzwvYT4nOw0KCQkJYnJlYWs7DQoJCQljYXNlICdpY29uLWxnK25hbWUnOg0KCQkJY2FzZSAnaWNvbi1sYXJnZStuYW1lJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggbGFyZ2Ugc2l6ZSBhbmQgbmFtZSB1bmRlcg0KCQkJCWlmICghJHRoaXMtPnNldGNzcykNCgkJCQl7DQoJCQkJCSR0aGlzLT5hZGRjc3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF9jc3MnLCB0cnVlKTsNCgkJCQkJJHRoaXMtPnNldGNzcyA9IHRydWU7DQoJCQkJfQ0KCQkJCSR0aXRsZSA9IChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQkJcmV0dXJuICc8YSBocmVmPSInIC4gJGl0ZW0tPmxpbmsgLiAnIiB0aXRsZT0iJyAuICAkdGl0bGUgIC4gJyI+JyAuDQoJCQkJCSc8c3BhbiBjbGFzcz0iZml2LScgLiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZpbGVWZWN0b3JTdHlsZSh0cnVlKSAuICcgZml2LWljb24tJyAuICRpdGVtLT5maWxlX2V4dGVuc2lvbiAuICcgZml2LXNpemUtbGciPjwvc3Bhbj4gPGJyIC8+JyAuDQoJCQkJCSRpdGVtLT5maWxlX25hbWUgLiAnPC9hPic7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2ljb24teGwrbmFtZSc6DQoJCQljYXNlICdpY29uLXhsYXJnZStuYW1lJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggeGxhcmdlIHNpemUgYW5kIG5hbWUgdW5kZXINCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLXhsIj48L3NwYW4+IDxiciAvPicgLg0KCQkJCQkkaXRlbS0+ZmlsZV9uYW1lIC4gJzwvYT4nOw0KCQkJYnJlYWs7DQoNCgkJCWNhc2UgJ2ljb24tbmFtZSc6DQoJCQkJLy8gdGhlIGljb24gdHlwZSB3aXRoIG5hbWUgbmV4dCB0bw0KCQkJCWlmICghJHRoaXMtPnNldGNzcykNCgkJCQl7DQoJCQkJCSR0aGlzLT5hZGRjc3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF9jc3MnLCB0cnVlKTsNCgkJCQkJJHRoaXMtPnNldGNzcyA9IHRydWU7DQoJCQkJfQ0KCQkJCSR0aXRsZSA9IChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQkJcmV0dXJuICc8YSBocmVmPSInIC4gJGl0ZW0tPmxpbmsgLiAnIiB0aXRsZT0iJyAuICAkdGl0bGUgIC4gJyI+JyAuDQoJCQkJCSc8c3BhbiBjbGFzcz0iZml2LScgLiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZpbGVWZWN0b3JTdHlsZSh0cnVlKSAuICcgZml2LWljb24tJyAuICRpdGVtLT5maWxlX2V4dGVuc2lvbiAuICcgZml2LXNpemUtJyAuICR0aGlzLT5wYXJhbXMtPmdldCgnaWNvbl9zaXplJywgJ21kJykgLiAnIj48L3NwYW4+ICcgLg0KCQkJCQkkaXRlbS0+ZmlsZV9uYW1lIC4gJzwvYT4nOw0KCQkJYnJlYWs7DQoJCQljYXNlICdpY29uLW1kLW5hbWUnOg0KCQkJY2FzZSAnaWNvbi1tZWRpdW0tbmFtZSc6DQoJCQkJLy8gdGhlIGljb24gdHlwZSB3aXRoIG1lZGl1bSBzaXplIGFuZCBuYW1lIG5leHQgdG8NCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLW1kIj48L3NwYW4+JyAuDQoJCQkJCSRpdGVtLT5maWxlX25hbWUgLiAnPC9hPic7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2ljb24tbGctbmFtZSc6DQoJCQljYXNlICdpY29uLWxhcmdlLW5hbWUnOg0KCQkJCS8vIHRoZSBpY29uIHR5cGUgd2l0aCBsYXJnZSBzaXplIGFuZCBuYW1lIG5leHQgdG8NCgkJCQlpZiAoISR0aGlzLT5zZXRjc3MpDQoJCQkJew0KCQkJCQkkdGhpcy0+YWRkY3NzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZGRfY3NzJywgdHJ1ZSk7DQoJCQkJCSR0aGlzLT5zZXRjc3MgPSB0cnVlOw0KCQkJCX0NCgkJCQkkdGl0bGUgPSAoaXNzZXQoJGl0ZW0tPmRlc2NyaXB0aW9uKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+ZGVzY3JpcHRpb24pKSA/ICRpdGVtLT5kZXNjcmlwdGlvbiA6ICRpdGVtLT5uYW1lOw0KCQkJCXJldHVybiAnPGEgaHJlZj0iJyAuICRpdGVtLT5saW5rIC4gJyIgdGl0bGU9IicgLiAgJHRpdGxlICAuICciPicgLg0KCQkJCQknPHNwYW4gY2xhc3M9ImZpdi0nIC4gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRGaWxlVmVjdG9yU3R5bGUodHJ1ZSkgLiAnIGZpdi1pY29uLScgLiAkaXRlbS0+ZmlsZV9leHRlbnNpb24gLiAnIGZpdi1zaXplLWxnIj48L3NwYW4+JyAuDQoJCQkJCSRpdGVtLT5maWxlX25hbWUgLiAnPC9hPic7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2ljb24teGwtbmFtZSc6DQoJCQljYXNlICdpY29uLXhsYXJnZS1uYW1lJzoNCgkJCQkvLyB0aGUgaWNvbiB0eXBlIHdpdGggeGxhcmdlIHNpemUgYW5kIG5hbWUgbmV4dCB0bw0KCQkJCWlmICghJHRoaXMtPnNldGNzcykNCgkJCQl7DQoJCQkJCSR0aGlzLT5hZGRjc3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF9jc3MnLCB0cnVlKTsNCgkJCQkJJHRoaXMtPnNldGNzcyA9IHRydWU7DQoJCQkJfQ0KCQkJCSR0aXRsZSA9IChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQkJcmV0dXJuICc8YSBocmVmPSInIC4gJGl0ZW0tPmxpbmsgLiAnIiB0aXRsZT0iJyAuICAkdGl0bGUgIC4gJyI+JyAuDQoJCQkJCSc8c3BhbiBjbGFzcz0iZml2LScgLiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZpbGVWZWN0b3JTdHlsZSh0cnVlKSAuICcgZml2LWljb24tJyAuICRpdGVtLT5maWxlX2V4dGVuc2lvbiAuICcgZml2LXNpemUteGwiPjwvc3Bhbj4nIC4NCgkJCQkJJGl0ZW0tPmZpbGVfbmFtZSAuICc8L2E+JzsNCgkJCWJyZWFrOw0KDQoJCQljYXNlICduYW1lJzoNCgkJCQkvLyBqdXN0IHRoZSBmaWxlIG5hbWUNCgkJCQlyZXR1cm4gJGl0ZW0tPmZpbGVfbmFtZTsNCgkJCWNhc2UgJ2Rlc2NyaXB0aW9uJzoNCgkJCQkvLyBqdXN0IHRoZSBmaWxlIGRlc2NyaXB0aW9uDQoJCQkJcmV0dXJuIChpc3NldCgkaXRlbS0+ZGVzY3JpcHRpb24pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5kZXNjcmlwdGlvbikpID8gJGl0ZW0tPmRlc2NyaXB0aW9uIDogJGl0ZW0tPm5hbWU7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3VybCc6DQoJCQkJLy8gdGhlIHVybCB0eXBlDQoJCQkJcmV0dXJuICRpdGVtLT5saW5rOw0KCQkJYnJlYWs7DQoJCQljYXNlICdsaW5rJzoNCgkJCQkvLyB0aGUgbGluayB0eXBlDQoJCQkJJHRpdGxlID0gKGlzc2V0KCRpdGVtLT5kZXNjcmlwdGlvbikgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmRlc2NyaXB0aW9uKSkgPyAkaXRlbS0+ZGVzY3JpcHRpb24gOiAkaXRlbS0+bmFtZTsNCgkJCQlyZXR1cm4gJzxhIGhyZWY9IicgLiAkaXRlbS0+bGluayAuICciIHRpdGxlPSInIC4gICR0aXRsZSAgLiAnIj4nIC4gJGl0ZW0tPmZpbGVfbmFtZSAuICc8L2E+JzsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoNCgkvKioNCgkgKiBUaGUgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGZpbGVzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRpZHMgIFRoZSBpZHMgb2YgdGhlIGZpbGVzIHRvIHJldHJpZXZlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRJdGVtcygkaWRzKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywgJ21haW5fZmlsZScsICdhY2Nlc3MnLCAnbmFtZScsICdkZXNjcmlwdGlvbicpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2ZpbGUnKSk7DQoNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgSU4gKCcgLiBpbXBsb2RlKCcsJywkaWRzKSAuICcpJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBpdGVtcw0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgnaWQnKTsNCgkJCS8vIHNldCBsaW5rIG9wdGlvbnMNCgkJCSRsaW5rb3B0aW9ucyA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0TGlua09wdGlvbnMoKTsNCgkJCS8vIGdldCBzZXNzaW9uIHRva2VuDQoJCQkkc2Vzc2lvbiA9IEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKTsNCgkJCS8vICB1bmxvY2sgc29tZSBkYXRhDQoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGlkID0+ICYkaXRlbSkNCgkJCXsNCgkJCQlpZiAoIWVtcHR5KCRpdGVtLT5tYWluX2ZpbGUpICYmICFpc19udW1lcmljKCRpdGVtLT5tYWluX2ZpbGUpICYmICRpdGVtLT5tYWluX2ZpbGUgPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaXRlbS0+bWFpbl9maWxlLCB0cnVlKSkpDQoJCQkJew0KCQkJCQkvLyBtZWRpdW0gZGVjcnlwdCBkYXRhIG1haW5fZmlsZS4NCgkJCQkJJGl0ZW0tPm1haW5fZmlsZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZGVjcnlwdCgkaXRlbS0+bWFpbl9maWxlKTsNCgkJCQl9DQpbQ1VTVE9NQ09ERT1zZXRTZWN1cmVGaWxlTGlua0luSXRlbU9iamVjdCsJCQkJXQ0KCQkJfQ0KCQkJcmV0dXJuICRpdGVtczsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '[[[Component]]] Download in Content', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"9\"},\"property_selection1\":{\"property\":\"7\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'set Download of Files in Content', '', 1, '', '', 1, '2019-09-13 17:15:19', '2020-05-24 22:48:49', 24, '', 2), +(7, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to add language packaging to JCB. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{}', '12dea095-2cc8-4830-b435-3d4599177ed1', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KDQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXEZhY3RvcnkgYXMgQ0ZhY3Rvcnk7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xQbGFjZWZpeDsNCnVzZSBWRE1cSm9vbWxhXENvbXBvbmVudGJ1aWxkZXJcQ29tcGlsZXJcVXRpbGl0aWVzXEluZGVudDsNCg==', 11, '{\"method_selection0\":{\"method\":\"88\"},\"method_selection1\":{\"method\":\"55\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBEYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEB2YXIgICAgRGF0YWJhc2VEcml2ZXINCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkZGI7DQoNCgkvKioNCgkgKiBBcHBsaWNhdGlvbiBvYmplY3QNCgkgKg0KCSAqIEB2YXIgICAgQ01TQXBwbGljYXRpb24NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXBwOw0KDQoJLyoqDQoJICogVGhlIHBlcmNlbnRhZ2UgYmVmb3JlIGEgbGFuZ3VhZ2UgY2FuIGJlIGFkZGVkDQoJICogDQoJICogQHZhciAgICAgaW50DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcGVyY2VudGFnZUxhbmd1YWdlQWRkOw0KDQoJLyoqDQoJICogVGhlIHBlcmNlbnRhZ2UgYmVmb3JlIGEgbGFuZ3VhZ2UgY2FuIGJlIGFkZGVkDQoJICogDQoJICogQHZhciAgICAgaW50DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcGVyY2VudGFnZUxhbmd1YWdlQWRkT3ZlcmlkZSA9IDIwMDsNCg0KCS8qKg0KCSAqIFRoZSBsYW5ndWFnZXMgbmFtZXMNCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGxhbmd1YWdlTmFtZXMgPSBbXTsNCg0KCS8qKg0KCSAqIFRoZSBsYW5ndWFnZSBidWlsZGluZyB0cmFja2VyDQoJICogDQoJICogQHZhciAgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRsYW5ndWFnZVRyYWNrZXIgPSBbXTsNCg0KCS8qKg0KCSAqIFRoZSBzaG91bGQgdGhlIHNpdGUgZm9sZGVyIGJlIHJlbW92ZWQNCgkgKiANCgkgKiBAdmFyICAgICBib29sDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcmVtb3ZlU2l0ZUZvbGRlcjsNCg0KCS8qKg0KCSAqIFRoZSBzaG91bGQgdGhlIHNpdGUgZm9sZGVyIGJlIHJlbW92ZWQNCgkgKiANCgkgKiBAdmFyICAgICBib29sDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcmVtb3ZlU2l0ZUVkaXRGb2xkZXI7DQoNCgkvKioNCgkgKiBUaGUgY29tcG9uZW50IHBhdGgNCgkgKiANCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRjb21wb25lbnRQYXRoOw0KDQoJLyoqDQoJICogVGhlIGNvbXBpbGVyIHBhdGgNCgkgKiANCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRjb21waWxlclBhdGg7DQoNCgkvKioNCgkgKiBUaGUgdGVtcG9yYWwgcGF0aA0KCSAqIA0KCSAqIEB2YXIgICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJHRlbXBQYXRoOw0KDQoJLyoqDQoJICogVGhlIGpvb21sYSB2ZXJzaW9uDQoJICogDQoJICogQHZhciAgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkam9vbWxhVmVyc2lvbjsNCg0KCS8qKg0KCSAqIFRoZSBjb21wb25lbnQgdmVyc2lvbg0KCSAqIA0KCSAqIEB2YXIgICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGNvbXBvbmVudF92ZXJzaW9uOw0KDQoJLyoqDQoJICogVGhlIGNvbXBvbmVudCBuYW1lDQoJICogDQoJICogQHZhciAgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkY29tcG9uZW50Q29kZU5hbWU7DQoNCgkvKioNCgkgKiBUaGUgZmlsZSBjb250ZW50IHN0YXRpYyB2YWx1ZXMNCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGZpbGVDb250ZW50U3RhdGljOw0KDQoJLyoNCgkgKiBUaGUgbGluZSBudW1iZXJzIFN3aXRjaA0KCSAqIA0KCSAqIEB2YXIgICAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkZGVidWdMaW5lbnIgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIFRoZSBBY3RpdmUgQ29tcG9uZW50cw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhY3RpdmVDb21wb25lbnRzID0gW107DQoNCgkvKioNCgkgKiBUaGUgQWN0aXZlIENvbXBvbmVudHMgTmFtZXMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYWN0aXZlQ29tcG9uZW50c05hbWVzID0gW107DQoNCgkvKioNCgkgKiBUaGUgTGFuZ3VhZ2VzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGxhbmd1YWdlcyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIExhbmd1YWdlIGJ1aWxkIGRldGFpbHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYnVpbGREZXRhaWxzID0gW107DQoNCgkvKioNCgkgKiBUaGUgRXhjbHVkZWQgTGFuZ3VhZ2VzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGV4Y2x1ZGVkTGFuZyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIEFjdGl2ZSBMYW5ndWFnZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkbGFuZ1RhZzsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbENvbXBvbmVudERhdGEoJiRjb21wb25lbnQpDQoJew0KCQkvLyBhZGQgdGhlIHByaXZhY3kNCgkJJGNvbXBvbmVudC0+cGFyYW1zID0gKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtcykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudC0+cGFyYW1zKSkgPyBqc29uX2RlY29kZSgkY29tcG9uZW50LT5wYXJhbXMsIHRydWUpIDogJGNvbXBvbmVudC0+cGFyYW1zOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudC0+cGFyYW1zKSAmJiBpc3NldCgkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXSkgJiYNCgkJCWlzc2V0KCRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydhY3RpdmF0ZSddKSAmJiAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsnYWN0aXZhdGUnXSA9PSAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBhZG1pbiBjb21wb25lbnQgZGV0YWlscw0KCQkJJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGNvbXBvbmVudC0+aWRdID0gQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5jb21wb25lbnRfY29udGV4dDsNCgkJCSR0aGlzLT5hY3RpdmVDb21wb25lbnRzTmFtZXNbJGNvbXBvbmVudC0+aWRdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkY29tcG9uZW50LT5uYW1lX2NvZGUpOw0KCQkJJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNSZWFsTmFtZXNbJGNvbXBvbmVudC0+aWRdID0gJGNvbXBvbmVudC0+bmFtZTsNCgkJCS8vIGFkZCBleGNsdWRlZCBsaXN0IG9mIGxhbmd1YWdlcw0KCQkJaWYgKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydsYW5ndWFnZXMnXSkpDQoJCQl7DQoJCQkJJHRoaXMtPmV4Y2x1ZGVkTGFuZ1skY29tcG9uZW50LT5pZF0gPSAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsnbGFuZ3VhZ2VzJ107DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmV4Y2x1ZGVkTGFuZ1skY29tcG9uZW50LT5pZF0gPSBhcnJheSgpOw0KCQkJfQ0KCQkJLy8gbm93IHNldCB0aGUgY29tcG9uZW50IGFkZCBsYW5ndWFnZXMgaWYgd2Ugc2hvdWxkIHVzZSBsb2NhbCAoMikNCgkJCWlmIChpc3NldCgkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsndXNlX3BlcmNlbnRhZ2VsYW5ndWFnZWFkZCddKSAmJiAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsndXNlX3BlcmNlbnRhZ2VsYW5ndWFnZWFkZCddID09IDIpDQoJCQl7DQoJCQkJJHRoaXMtPnBlcmNlbnRhZ2VMYW5ndWFnZUFkZE92ZXJpZGUgPSAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsncGVyY2VudGFnZWxhbmd1YWdlYWRkJ107DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gZ2V0IGNvbXBvbmVudCBpZA0KCQkkaWQgPSAoaW50KSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9pZDsNCgkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgYWN0aXZlDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+YWN0aXZlQ29tcG9uZW50cykNCgkJCSYmIGlzc2V0KCR0aGlzLT5hY3RpdmVDb21wb25lbnRzWyRpZF0pICYmICR0aGlzLT5wZXJjZW50YWdlTGFuZ3VhZ2VBZGRPdmVyaWRlICE9IDIwMCkNCgkJew0KCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5zZXQoJ3BlcmNlbnRhZ2VfbGFuZ3VhZ2VfYWRkJywgJHRoaXMtPnBlcmNlbnRhZ2VMYW5ndWFnZUFkZE92ZXJpZGUpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBMYW5nIEZpbGUgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRMYW5nRmlsZURhdGEoKQ0KCXsNCgkJLy8gbGV0cyBtYXAgc29tZSBhcnJheXMgdG8gdGhlIHBsdWdpbiBmb3IgbGF0ZXIgdXNlDQoJCSR0aGlzLT5jb21waWxlclBhdGggPSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmNvbXBpbGVyX3BhdGg7DQoJCSR0aGlzLT50ZW1wUGF0aCA9IENGYWN0b3J5OjpfKCdDb25maWcnKS0+dG1wX3BhdGg7DQoJCSR0aGlzLT5sYW5nVGFnID0gQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZzsNCgkJJHRoaXMtPmRlYnVnTGluZW5yID0gQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5nZXQoJ2RlYnVnX2xpbmVfbnInLCBmYWxzZSk7DQoJCSR0aGlzLT5jb21wb25lbnRfdmVyc2lvbiA9IENGYWN0b3J5OjpfKCdDb25maWcnKS0+Z2V0KCdjb21wb25lbnRfdmVyc2lvbicsICcxLjAuMCcpOw0KCQkkdGhpcy0+am9vbWxhVmVyc2lvbiA9IENGYWN0b3J5OjpfKCdDb25maWcnKS0+am9vbWxhX3ZlcnNpb247DQoJCSR0aGlzLT5wZXJjZW50YWdlTGFuZ3VhZ2VBZGQgPSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPnBlcmNlbnRhZ2VfbGFuZ3VhZ2VfYWRkOw0KCQkkdGhpcy0+cmVtb3ZlU2l0ZUZvbGRlciA9IENGYWN0b3J5OjpfKCdDb25maWcnKS0+cmVtb3ZlX3NpdGVfZm9sZGVyOw0KCQkkdGhpcy0+cmVtb3ZlU2l0ZUVkaXRGb2xkZXIgPSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPnJlbW92ZV9zaXRlX2VkaXRfZm9sZGVyOw0KCQkkdGhpcy0+Y29tcG9uZW50UGF0aCA9IENGYWN0b3J5OjpfKCdVdGlsaXRpZXMuUGF0aHMnKS0+Y29tcG9uZW50X3BhdGg7DQoJCSR0aGlzLT5jb21wb25lbnRDb2RlTmFtZSA9IENGYWN0b3J5OjpfKCdDb25maWcnKS0+Y29tcG9uZW50X2NvZGVfbmFtZTsNCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgQnVpbGQgUGx1Z2luIExhbmcgRmlsZXNdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlQnVpbGRQbHVnaW5MYW5nRmlsZXMoJiRwbHVnaW4sICYkbGFuZ3VhZ2VzKQ0KCXsNCgkJLy8gZ2V0IGNvbXBvbmVudCBpZA0KCQkkaWQgPSAoaW50KSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9pZDsNCgkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgYWN0aXZlDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+YWN0aXZlQ29tcG9uZW50cykgJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGlkXSkpDQoJCXsNCgkJCS8vIHNldCBmaWxlIG5hbWUNCgkJCSRmaWxlX25hbWUgPSAncGxnXycgLiBzdHJ0b2xvd2VyKCRwbHVnaW4tPmdyb3VwKSAuICdfJyAuIHN0cnRvbG93ZXIoJHBsdWdpbi0+Y29kZV9uYW1lKTsNCgkJCS8vIGV4dHJ1ZGUgdGhlIGxhbmd1YWdlcyB0aGF0IHNob3VsZCBub3QgcmVtYWluIGluIHRoZSBwbHVnaW4NCgkJCSR0aGlzLT5leHRydWRlTGFuZ3VhZ2VzKCRpZCwgJGxhbmd1YWdlcywgQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZywgJGZpbGVfbmFtZSwgJ2FkbWluJyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgQnVpbGQgTW9kdWxlIExhbmcgRmlsZXNdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlQnVpbGRNb2R1bGVMYW5nRmlsZXMoJiRtb2R1bGUsICYkbGFuZ3VhZ2VzKQ0KCXsNCgkJLy8gZ2V0IGNvbXBvbmVudCBpZA0KCQkkaWQgPSAoaW50KSBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9pZDsNCgkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgYWN0aXZlDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+YWN0aXZlQ29tcG9uZW50cykgJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGlkXSkpDQoJCXsNCgkJCS8vIGV4dHJ1ZGUgdGhlIGxhbmd1YWdlcyB0aGF0IHNob3VsZCBub3QgcmVtYWluIGluIHRoZSBtb2R1bGUNCgkJCSR0aGlzLT5leHRydWRlTGFuZ3VhZ2VzKCRpZCwgJGxhbmd1YWdlcywgQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZywgJG1vZHVsZS0+ZmlsZV9uYW1lLCAkbW9kdWxlLT50YXJnZXRfY2xpZW50KTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBbGwgTGFuZyBGaWxlc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVCdWlsZEFsbExhbmdGaWxlcygmJGxhbmd1YWdlcykNCgl7DQoJCS8vIGdldCBjb21wb25lbnQgaWQNCgkJJGlkID0gKGludCkgQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5jb21wb25lbnRfaWQ7DQoJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIGFjdGl2ZQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHMpICYmIGlzc2V0KCR0aGlzLT5hY3RpdmVDb21wb25lbnRzWyRpZF0pKQ0KCQl7DQoJCQkvLyBzZXQgZmlsZSBuYW1lDQoJCQkkZmlsZV9uYW1lID0gJ2NvbV8nIC4gJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNOYW1lc1skaWRdOw0KCQkJLy8gZXh0cnVkZSB0aGUgbGFuZ3VhZ2VzIHRoYXQgc2hvdWxkIG5vdCByZW1haW4gaW4gdGhlIG1vZHVsZQ0KCQkJJHRoaXMtPmV4dHJ1ZGVMYW5ndWFnZXMoJGlkLCAkbGFuZ3VhZ2VzLCBDRmFjdG9yeTo6XygnQ29uZmlnJyktPmxhbmdfdGFnLCAkZmlsZV9uYW1lKTsNCgkJfQ0KCQkvLyBidWlsZCB0aGUgbGFuZ3VhZ2UgcGFja2FnZXMNCgkJJHRoaXMtPmJ1aWxkTGFuZ3VhZ2VzKCRpZCwgQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZyk7DQoJfQ0KDQoJLyoqDQoJICogRXh0cnVkZXIgb2YgdGhlIGxhbmd1YWdlcw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGV4dHJ1ZGVMYW5ndWFnZXMoJiRpZCwgJiRsYW5ndWFnZXMsICRsYW5nVGFnLCAmJGZpbGVfbmFtZSwgJHRhcmdldF9jbGllbnQgPSAnYm90aCcpDQoJew0KCQkkbWFpbkxhbmdMb2FkZXIgPSBbXTsNCgkJLy8gY2hlY2sgaWYgdGhpcyBpZCB3YXMgc2V0IGJlZm9yZQ0KCQlpZiAoIWlzc2V0KCR0aGlzLT5sYW5ndWFnZXNbJGlkXSkpDQoJCXsNCgkJCSR0aGlzLT5sYW5ndWFnZXNbJGlkXSA9IFtdOw0KCQkJJHRoaXMtPmJ1aWxkRGV0YWlsc1skaWRdID0gW107DQoJCX0NCgkJLy8gY2hlY2sgaWYgdGhpcyBmaWxlIG5hbWUgd2FzIHNldCBiZWZvcmUNCgkJaWYgKCFpc3NldCgkdGhpcy0+bGFuZ3VhZ2VzWyRpZF1bJGZpbGVfbmFtZV0pKQ0KCQl7DQoJCQkkdGhpcy0+bGFuZ3VhZ2VzWyRpZF1bJGZpbGVfbmFtZV0gPSBbXTsNCgkJfQ0KCQkvLyBzZXQgYWxsIHRoZSBleHRyYSBsYW5ndWFnZXMgbm90IGV4Y2x1ZGVkDQoJCWZvcmVhY2ggKCRsYW5ndWFnZXMgYXMgJGtleSA9PiAkbGFuZ3VhZ2UpDQoJCXsNCgkJCWlmICgka2V5ICE9PSAkbGFuZ1RhZyAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGFuZ3VhZ2UpICYmICghaXNzZXQoJHRoaXMtPmV4Y2x1ZGVkTGFuZ1skaWRdKSB8fCAhaW5fYXJyYXkoJGtleSwgJHRoaXMtPmV4Y2x1ZGVkTGFuZ1skaWRdKSkpDQoJCQl7DQoJCQkJLy8gYWRkIHRvIG91ciBidWNrZXQNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VzWyRpZF1bJGZpbGVfbmFtZV1bJGtleV0gPSAkbGFuZ3VhZ2U7DQoJCQkJLy8gcmVtb3ZlIGZyb20gdGhlIEpDQiBidWlsZA0KCQkJCXVuc2V0KCRsYW5ndWFnZXNbJGtleV0pOw0KCQkJfQ0KCQkJLy8gY291bnQgdGhlIGFyZWEgc3RyaW5ncw0KCQkJaWYgKCRsYW5nVGFnID09PSAka2V5KQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRsYW5ndWFnZSBhcyAkYXJlYSA9PiAkbGFuZ3VhZ2VTdHJpbmdzKQ0KCQkJCXsNCgkJCQkJJG1haW5MYW5nTG9hZGVyWyRhcmVhXSA9IGNvdW50KCRsYW5ndWFnZVN0cmluZ3MpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBzdG9yZSBkZXRhaWxzIGZvciBidWlsZA0KCQkkdGhpcy0+YnVpbGREZXRhaWxzWyRpZF1bJGZpbGVfbmFtZV0gPSBbJGxhbmdUYWcgPT4gJG1haW5MYW5nTG9hZGVyLCAndGFyZ2V0X2NsaWVudCcgPT4gJHRhcmdldF9jbGllbnRdOw0KCX0NCg0KCS8qKg0KCSAqIFN0YXJ0IHRoZSBidWlsZGluZyBvZiB0aGUgbGFuZ3VhZ2VzIHBhY2thZ2VzDQoJICogDQoJICogQHJldHVybiAgdm9pZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBidWlsZExhbmd1YWdlcygmJGlkLCAkbGFuZ1RhZykNCgl7DQoJCWlmIChpc3NldCgkdGhpcy0+bGFuZ3VhZ2VzWyRpZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5sYW5ndWFnZXNbJGlkXSkpDQoJCXsNCgkJCS8vIHJlc3QgeG1sIGFycmF5DQoJCQkkbGFuZ1hNTCA9IFtdOw0KCQkJJGxhbmdOYW1lcyA9IFtdOw0KCQkJJGxhbmdQYWNrYWdlcyA9IFtdOw0KCQkJJGxhbmdaSVBOYW1lcyA9IFtdOw0KCQkJJGxhbmdYTUxOYW1lcyA9IFtdOw0KCQkJJHZlcnNpb25OYW1lID0gJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNOYW1lc1skaWRdIC4gJ192JyAuIHN0cl9yZXBsYWNlKCcuJywgJ18nLCAkdGhpcy0+Y29tcG9uZW50X3ZlcnNpb24gLiAnX19KJyAuICR0aGlzLT5qb29tbGFWZXJzaW9uKTsNCgkJCWZvcmVhY2ggKCR0aGlzLT5sYW5ndWFnZXNbJGlkXSBhcyAkZmlsZV9uYW1lID0+ICRsYW5ndWFnZXMpDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsYW5ndWFnZXMpICYmIGlzc2V0KCR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVskbGFuZ1RhZ10pKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBtYWluIGxhbmcgbG9hZGVyDQoJCQkJCSRtYWluTGFuZ0xvYWRlciA9ICR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVskbGFuZ1RhZ107DQoJCQkJCS8vIGdldCB0aGUgdGFyZ2V0IGNsaWVudA0KCQkJCQkkdGFyZ2V0X2NsaWVudCA9ICR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVsndGFyZ2V0X2NsaWVudCddOw0KCQkJCQlmb3JlYWNoICgkbGFuZ3VhZ2VzIGFzICR0YWcgPT4gJGFyZWFzKQ0KCQkJCQl7DQoJCQkJCQkvLyB0cmltIHRoZSB0YWcNCgkJCQkJCSR0YWcgPSB0cmltKCR0YWcpOw0KCQkJCQkJLy8gZ2V0IGxhbmd1YWdlIG5hbWUNCgkJCQkJCSRsYW5nTmFtZSA9ICR0aGlzLT5nZXRMYW5ndWFnZU5hbWUoJHRhZyk7DQoJCQkJCQkkbGFuZ0NvZGVOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkbGFuZ05hbWUsICdGJyk7DQoJCQkJCQkvLyBzZXQgdGhlIGZpbGUgZm9sZGVyIG5hbWUNCgkJCQkJCSRsYW5nRm9sZGVyRmlsZU5hbWUgPSAkbGFuZ0NvZGVOYW1lIC4gJ18nIC4gJHZlcnNpb25OYW1lOw0KCQkJCQkJLy8gc2V0IHRoZSBtYWluIGZvbGRlciBwYXRoDQoJCQkJCQkkbWFpbl9wYXRoID0gJHRoaXMtPmNvbXBpbGVyUGF0aCAuICcvJyAuICRsYW5nRm9sZGVyRmlsZU5hbWUgLiAnLyc7DQoJCQkJCQkvLyBzZXQgdGhlIGxhbmd1YWdlIG5hbWUgZm9yIGxhdGVyDQoJCQkJCQkkbGFuZ05hbWVzWyRtYWluX3BhdGhdID0gJGxhbmdOYW1lOw0KCQkJCQkJLy8gc2V0IHRoZSBsYW5nIHppcCBuYW1lIGZvciBsYXRlcg0KCQkJCQkJJGxhbmdaSVBOYW1lc1skbWFpbl9wYXRoXSA9ICRsYW5nRm9sZGVyRmlsZU5hbWU7DQoJCQkJCQkvLyBzZXQgdGhlIGxhbmcgeG1sIG5hbWUgZm9yIGxhdGVyDQoJCQkJCQkkbGFuZ1hNTE5hbWVzWyRtYWluX3BhdGhdID0gJGxhbmdDb2RlTmFtZSAuICdfJyAuICR0aGlzLT5hY3RpdmVDb21wb25lbnRzTmFtZXNbJGlkXSA7DQoJCQkJCQkvLyB3ZSBtdXN0IGNoZWNrIGlmIG9sZCBmb2xkZXIgaXMgZm91bmQgYW5kIHJlbW92ZSBpdA0KCQkJCQkJaWYgKCFpc3NldCgkdGhpcy0+bGFuZ3VhZ2VUcmFja2VyWyRtYWluX3BhdGhdKSAmJiBKRm9sZGVyOjpleGlzdHMoJG1haW5fcGF0aCkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gcmVtb3ZlIHRoZSBtYWluIGZvbGRlcg0KCQkJCQkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6cmVtb3ZlRm9sZGVyKCRtYWluX3BhdGgpOw0KCQkJCQkJCS8vIGRvIG5vdCByZW1vdmUgaXQgYWdhaW4NCgkJCQkJCQkkdGhpcy0+bGFuZ3VhZ2VUcmFja2VyWyRtYWluX3BhdGhdID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJCS8vIGNoZWNrIGlmIGV4aXN0IGFuZCBjcmVhdGUgaWYgbm90DQoJCQkJCQlpZiAoIUpGb2xkZXI6OmV4aXN0cygkbWFpbl9wYXRoKSkNCgkJCQkJCXsNCgkJCQkJCQlKRm9sZGVyOjpjcmVhdGUoJG1haW5fcGF0aCk7DQoJCQkJCQkJLy8gY291bnQgdGhlIGZvbGRlciBjcmVhdGVkDQoJCQkJCQkJQ0ZhY3Rvcnk6Ol8oJ1V0aWxpdGllcy5Db3VudGVyJyktPmZvbGRlcisrOw0KCQkJCQkJfQ0KCQkJCQkJZm9yZWFjaCAoJGFyZWFzIGFzICRhcmVhID0+ICRsYW5ndWFnZVN0cmluZ3MpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUNCgkJCQkJCQkkZmlsZU5hbWUgPSAkdGhpcy0+Z2V0TGFuZ3VhZ2VGaWxlTmFtZSgkZmlsZV9uYW1lLCAkdGFnLCAkYXJlYSk7DQoJCQkJCQkJLy8gY2hlY2sgaWYgbGFuZ3VhZ2Ugc2hvdWxkIGJlIGFkZGVkDQoJCQkJCQkJaWYgKCR0aGlzLT5zaG91bGRMYW5ndWFnZUJlQWRkZWQoJHRhZywgJGxhbmd1YWdlU3RyaW5ncywgJG1haW5MYW5nTG9hZGVyWyRhcmVhXSwgJGZpbGVOYW1lKSAmJiAoJGFjdGlvbnMgPSAkdGhpcy0+Z2V0TGFuZ0FjdGlvbnMoJGZpbGVfbmFtZSwgJHRhZywgJGFyZWEsICR0YXJnZXRfY2xpZW50KSkgIT09IGZhbHNlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gc2V0IHRoZSBsYW5ndWFnZSBkYXRhDQoJCQkJCQkJCSRsYW5nID0gYXJyYXlfbWFwKA0KCQkJCQkJCQkJZnVuY3Rpb24gKCRsYW5nc3RyaW5nLCAkcGxhY2Vob2xkZXIpIHsNCgkJCQkJCQkJCQlyZXR1cm4gJHBsYWNlaG9sZGVyIC4gJz0iJyAuICRsYW5nc3RyaW5nIC4gJyInOw0KCQkJCQkJCQkJfSwgYXJyYXlfdmFsdWVzKCRsYW5ndWFnZVN0cmluZ3MpLA0KCQkJCQkJCQkJYXJyYXlfa2V5cygkbGFuZ3VhZ2VTdHJpbmdzKQ0KCQkJCQkJCQkpOw0KCQkJCQkJCQkvLyBzZXQgdGhlIGxpbmUgY291bnRlcg0KCQkJCQkJCQlDRmFjdG9yeTo6XygnVXRpbGl0aWVzLkNvdW50ZXInKS0+bGluZSArPSBjb3VudCgNCgkJCQkJCQkJCShhcnJheSkgJGxhbmcNCgkJCQkJCQkJKTsNCgkJCQkJCQkJLy8gY2hlY2sgdGhhdCB0aGUgbWFpbiBmb2xkZXIgZXhpc3QNCgkJCQkJCQkJZm9yZWFjaCAoJGFjdGlvbnMgYXMgJGFjdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJGNsaWVudF9wYXRoID0gJG1haW5fcGF0aCAuICRhY3RbJ3RhcmdldF9jbGllbnQnXSAuICcvJzsNCgkJCQkJCQkJCS8vIGNoZWNrIGlmIGV4aXN0IGFuZCBjcmVhdGUgaWYgbm90DQoJCQkJCQkJCQlpZiAoIUpGb2xkZXI6OmV4aXN0cygkY2xpZW50X3BhdGgpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCUpGb2xkZXI6OmNyZWF0ZSgkY2xpZW50X3BhdGgpOw0KCQkJCQkJCQkJCS8vIGNvdW50IHRoZSBmb2xkZXIgY3JlYXRlZA0KCQkJCQkJCQkJCSR0aGlzLT5mb2xkZXJDb3VudCsrOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gd3JpdGUgdGhlIGxhbmd1YWdlIGRhdGEgdG8gYSBmaWxlDQoJCQkJCQkJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6OndyaXRlRmlsZSgNCgkJCQkJCQkJCQkkY2xpZW50X3BhdGggLiAkYWN0WydmaWxlX25hbWUnXSwgaW1wbG9kZShQSFBfRU9MLCAkbGFuZykNCgkJCQkJCQkJCSk7DQoJCQkJCQkJCQkvLyBjb3VudCB0aGUgZmlsZSBjcmVhdGVkDQoJCQkJCQkJCQlDRmFjdG9yeTo6XygnVXRpbGl0aWVzLkNvdW50ZXInKS0+bGluZSsrOw0KCQkJCQkJCQkJLy8gYnVpbGQgeG1sIHN0cmluZ3MNCgkJCQkJCQkJCWlmICghaXNzZXQoJGxhbmdYTUxbJG1haW5fcGF0aF0pKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRsYW5nWE1MWyRtYWluX3BhdGhdID0gYXJyYXkoKTsNCgkJCQkJCQkJCQkkbGFuZ1BhY2thZ2VzWyRtYWluX3BhdGhdID0gYXJyYXkoKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWlmICghaXNzZXQoJGxhbmdYTUxbJG1haW5fcGF0aF1bJGFjdFsndGFyZ2V0X2NsaWVudCddXSkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGxhbmdYTUxbJG1haW5fcGF0aF1bJGFjdFsndGFyZ2V0X2NsaWVudCddXSA9IGFycmF5KCk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkvLyBzZXQgdGhlIHBhY2thZ2UgdGFyZ2V0cw0KCQkJCQkJCQkJJGxhbmdQYWNrYWdlc1skbWFpbl9wYXRoXVskYWN0Wyd0YXJnZXRfY2xpZW50J11dID0gJGFjdFsndGFyZ2V0J107DQoJCQkJCQkJCQkkbGFuZ1hNTFskbWFpbl9wYXRoXVskYWN0Wyd0YXJnZXRfY2xpZW50J11dW10gPSAkYWN0WydmaWxlX25hbWUnXTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBjbGVhciBtZW1vcnkNCgkJCQkJCQkJdW5zZXQoJGxhbmcpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gbG9hZCB0aGUgbGFuZyB4bWwNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGFuZ1hNTCkpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGxhbmdYTUwgYXMgJG1haW5fcGF0aCA9PiAkdGFyZ2V0X2NsaWVudHMpDQoJCQkJew0KCQkJCQkvLyBnZXQgdGhlIFhNTA0KCQkJCQkkeG1sID0gc3RyX3JlcGxhY2UoDQoJCQkJCQkJYXJyYXlfa2V5cyhDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hbGxBY3RpdmUoKSksDQoJCQkJCQkJYXJyYXlfdmFsdWVzKENGYWN0b3J5OjpfKCdDb21waWxlci5CdWlsZGVyLkNvbnRlbnQuT25lJyktPmFsbEFjdGl2ZSgpKSwNCgkJCQkJCQkkdGhpcy0+Z2V0TGFuZ3VhZ2VYTUwoJHRhcmdldF9jbGllbnRzLCAkbGFuZ1BhY2thZ2VzWyRtYWluX3BhdGhdLCAkbGFuZ05hbWVzWyRtYWluX3BhdGhdKQ0KCQkJCQkJKTsNCgkJCQkJLy8gZ2V0IHRoZSBYTUwgRmlsZSBOYW1lDQoJCQkJCSR4bWxGaWxlTmFtZSA9ICRsYW5nWE1MTmFtZXNbJG1haW5fcGF0aF0gLiAnLnhtbCc7DQoJCQkJCS8vIHdyaXRlIHRoZSBsYW5ndWFnZSBkYXRhIHRvIGEgZmlsZQ0KCQkJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6OndyaXRlRmlsZSgNCgkJCQkJCSRtYWluX3BhdGggLiAkeG1sRmlsZU5hbWUsICR4bWwNCgkJCQkJKTsNCgkJCQkJLy8gc2V0IHRoZSB6aXAgZnVsbCBwYXRoDQoJCQkJCSR6aXBQYXRoID0gJHRoaXMtPnRlbXBQYXRoIC4gJy8nIC4gJGxhbmdaSVBOYW1lc1skbWFpbl9wYXRoXSAuICcuemlwJzsNCgkJCQkJLy8gbm93IHppcCB0aGUgcGFja2FnZQ0KCQkJCQlpZiAoW1tbQ29tcG9uZW50XV1dSGVscGVyOjp6aXAoDQoJCQkJCQkkbWFpbl9wYXRoLCAkemlwUGF0aA0KCQkJCQkpKQ0KCQkJCQl7DQoJCQkJCQkvLyBub3cgcmVtb3ZlIHRoZSBwYWNrYWdlDQoJCQkJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6OnJlbW92ZUZvbGRlcigkbWFpbl9wYXRoKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgbGFuZ3VhZ2UgeG1sDQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExhbmd1YWdlWE1MKCYkdGFyZ2V0X2NsaWVudHMsICYkdGFyZ2V0cywgJiRsYW5ndWFnZSkNCgl7DQoJCSR4bWwgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiAnPGV4dGVuc2lvbiB0eXBlPSJmaWxlIiB2ZXJzaW9uPSIzLjIiIG1ldGhvZD0idXBncmFkZSI+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzxuYW1lPicgLiBQbGFjZWZpeDo6X2goJ0NvbXBvbmVudCcpIC4gJyAtICcgLiAkbGFuZ3VhZ2UgLiAnIExhbmd1YWdlIFBhY2s8L25hbWU+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzxjcmVhdGlvbkRhdGU+JyAuIFBsYWNlZml4OjpfaCgnQlVJTEREQVRFJykgLiAnPC9jcmVhdGlvbkRhdGU+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzxhdXRob3I+JyAuIFBsYWNlZml4OjpfaCgnQVVUSE9SJykgLiAnPC9hdXRob3I+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzxhdXRob3JFbWFpbD4nIC4gUGxhY2VmaXg6Ol9oKCdBVVRIT1JFTUFJTCcpIC4gJzwvYXV0aG9yRW1haWw+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDEpIC4gJzxhdXRob3JVcmw+JyAuIFBsYWNlZml4OjpfaCgnQVVUSE9SV0VCU0lURScpIC4gJzwvYXV0aG9yVXJsPic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICc8Y29weXJpZ2h0PicgLiBQbGFjZWZpeDo6X2goJ0NPUFlSSUdIVCcpIC4gJzwvY29weXJpZ2h0Pic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICc8bGljZW5zZT4nIC4gUGxhY2VmaXg6Ol9oKCdMSUNFTlNFJykgLiAnPC9saWNlbnNlPic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICc8dmVyc2lvbj4nIC4gUGxhY2VmaXg6Ol9oKCdBQ1RVQUxWRVJTSU9OJykgLiAnPC92ZXJzaW9uPic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIEluZGVudDo6XygxKSAuICc8ZGVzY3JpcHRpb24+JyAuICRsYW5ndWFnZSAuICcgTGFuZ3VhZ2UgUGFjayAtICcgLiBQbGFjZWZpeDo6X2goJ1NIT1JUX0RFU0NSSVBUSU9OJykgLiAnPC9kZXNjcmlwdGlvbj4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAnPGZpbGVzZXQ+JzsNCgkJZm9yZWFjaCAoJHRhcmdldF9jbGllbnRzIGFzICR0YXJnZXRfY2xpZW50ID0+ICRmaWxlcykNCgkJew0KCQkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gJzxmaWxlcyBmb2xkZXI9IicgLiAkdGFyZ2V0X2NsaWVudCAuICciIHRhcmdldD0iJyAuICR0YXJnZXRzWyR0YXJnZXRfY2xpZW50XSAuICciPic7DQoJCQlmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpDQoJCQl7DQoJCQkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gJzxmaWxlbmFtZT4nIC4gJGZpbGUgLiAnPC9maWxlbmFtZT4nOw0KCQkJfQ0KCQkJJHhtbCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gJzwvZmlsZXM+JzsNCgkJfQ0KCQkkeG1sIC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMSkgLiAnPC9maWxlc2V0Pic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuICc8L2V4dGVuc2lvbj4nOw0KDQoJCXJldHVybiAkeG1sOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgbGFuZ3VhZ2UgbmFtZQ0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRMYW5ndWFnZU5hbWUoJiR0YWcpDQoJew0KCQlpZiAoIWlzc2V0KCR0aGlzLT5sYW5ndWFnZU5hbWVzWyR0YWddKSkNCgkJew0KCQkJaWYgKCgkbmFtZSA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OnZhcignbGFuZ3VhZ2UnLCAkdGFnLCAnbGFuZ3RhZycsICduYW1lJykpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VOYW1lc1skdGFnXSA9ICRuYW1lOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5sYW5ndWFnZU5hbWVzWyR0YWddID0gJHRhZzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJHRoaXMtPmxhbmd1YWdlTmFtZXNbJHRhZ107DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBsYW5ndWFnZSBhY3Rpb25zDQoJICogDQoJICogQHJldHVybiAgYXJyYXkNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGFuZ0FjdGlvbnMoJiRmaWxlX25hbWUsICYkdGFnLCAmJGFyZWEsICYkdGFyZ2V0X2NsaWVudCkNCgl7DQoJCS8vIGNvbXBvbmVudCBleHRlbnRpb24gdHlwZQ0KCQlpZiAoc3RycG9zKCRmaWxlX25hbWUsICdjb21fJykgIT09IGZhbHNlKQ0KCQl7DQoJCQkkdGFyZ2V0X2NsaWVudCA9ICdhZG1pbic7DQoJCQkkdGFyZ2V0ID0gJ2FkbWluaXN0cmF0b3IvbGFuZ3VhZ2UvJzsNCgkJCWlmIChzdHJwb3MoJGFyZWEsICdzaXRlJykgIT09IGZhbHNlKQ0KCQkJew0KCQkJCSR0YXJnZXRfY2xpZW50ID0gJ3NpdGUnOw0KCQkJCSR0YXJnZXQgPSAnbGFuZ3VhZ2UvJzsNCgkJCX0NCgkJCXJldHVybiBhcnJheSgNCgkJCQlhcnJheSgNCgkJCQkJJ3RhcmdldF9jbGllbnQnID0+ICR0YXJnZXRfY2xpZW50LA0KCQkJCQkndGFyZ2V0JyA9PiAkdGFyZ2V0IC4gJHRhZywNCgkJCQkJJ2ZpbGVfbmFtZScgPT4gJHRoaXMtPmdldExhbmd1YWdlRmlsZU5hbWUoJGZpbGVfbmFtZSwgJHRhZywgJGFyZWEpDQoJCQkJKQ0KCQkJKTsNCgkJfQ0KCQllbHNlaWYgKCdhZG1pbicgPT09ICR0YXJnZXRfY2xpZW50KQ0KCQl7DQoJCQkkdGFyZ2V0ID0gJ2FkbWluaXN0cmF0b3IvbGFuZ3VhZ2UvJzsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0YXJnZXQgPSAnbGFuZ3VhZ2UvJzsNCgkJfQ0KCQkvLyBtb2R1bGUvcGx1Z2luIGV4dGVuc2lvbiB0eXBlIChUT0RPIHdlIHJldHVybiBib3RoIGZvciBub3cpDQoJCXJldHVybiBhcnJheSgNCgkJCWFycmF5KA0KCQkJCSd0YXJnZXRfY2xpZW50JyA9PiAkdGFyZ2V0X2NsaWVudCwNCgkJCQkndGFyZ2V0JyA9PiAkdGFyZ2V0IC4gJHRhZywNCgkJCQknZmlsZV9uYW1lJyA9PiAkdGhpcy0+Z2V0TGFuZ3VhZ2VGaWxlTmFtZSgkZmlsZV9uYW1lLCAkdGFnLCAkYXJlYSkNCgkJCSksDQoJCQlhcnJheSgNCgkJCQkndGFyZ2V0X2NsaWVudCcgPT4gJHRhcmdldF9jbGllbnQsDQoJCQkJJ3RhcmdldCcgPT4gJHRhcmdldCAuICR0YWcsDQoJCQkJJ2ZpbGVfbmFtZScgPT4gJHRoaXMtPmdldExhbmd1YWdlRmlsZU5hbWUoJGZpbGVfbmFtZSwgJHRhZywgJGFyZWEsICcuc3lzJykNCgkJCSkNCgkJKTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGxhbmd1YWdlIGZpbGUgbmFtZQ0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRMYW5ndWFnZUZpbGVOYW1lKCYkZmlsZV9uYW1lLCAmJHRhZywgJiRhcmVhLCAkdHlwZSA9ICcnKQ0KCXsNCgkJLy8gY29tcG9uZW50IGV4dGVuc2lvbiB0eXBlDQoJCWlmIChzdHJwb3MoJGZpbGVfbmFtZSwgJ2NvbV8nKSAhPT0gZmFsc2UpDQoJCXsNCgkJCWlmIChzdHJwb3MoJGFyZWEsICdzeXMnKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJHR5cGUgPSAnLnN5cyc7DQoJCQl9DQoJCX0NCgkJLy8gZmlsZSBuYW1lDQoJCXJldHVybiAkdGFnIC4gJy4nIC4gJGZpbGVfbmFtZSAuICR0eXBlIC4gJy5pbmknOw0KCX0NCg0KCS8qKg0KCSAqIGNoZWNrIGlmIGEgdHJhbnNsYXRpb24gc2hvdWxkIGJlIGFkZGVkDQoJICogDQoJICogQHJldHVybiAgYm9vbA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzaG91bGRMYW5ndWFnZUJlQWRkZWQoJiR0YWcsICYkbGFuZ3VhZ2VTdHJpbmdzLCAmJHRvdGFsLA0KCQkmJGZpbGVfbmFtZQ0KCSkgew0KCQkvLyBvbmx5IGxvZyBtZXNzYWdlcyBmb3Igbm9uZSAkdGhpcy0+bGFuZ1RhZyB0cmFuc2xhdGlvbnMNCgkJaWYgKCR0aGlzLT5sYW5nVGFnICE9PSAkdGFnKQ0KCQl7DQoJCQkkbGFuZ1N0cmluZ05yICA9IGNvdW50KCRsYW5ndWFnZVN0cmluZ3MpOw0KCQkJJGxhbmdTdHJpbmdTdW0gPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmJjbWF0aCgNCgkJCQknbXVsJywgJGxhbmdTdHJpbmdOciwgMTAwDQoJCQkpOw0KCQkJJHBlcmNlbnRhZ2UgICAgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmJjbWF0aCgNCgkJCQknZGl2JywgJGxhbmdTdHJpbmdTdW0sICR0b3RhbA0KCQkJKTsNCgkJCSRzdHJpbmdOQW1lICAgID0gKCRsYW5nU3RyaW5nTnIgPT0gMSkgPyAnKHN0cmluZyAnDQoJCQkJLiAkdGFnIC4gJyB0cmFuc2xhdGVkKScNCgkJCQk6ICcoc3RyaW5ncyAnIC4gJHRhZyAuICcgdHJhbnNsYXRlZCknOw0KDQoJCQkvLyBmb3JjZSBsb2FkIGlmIGRlYnVnIGxpbmVzIGFyZSBhZGRlZA0KCQkJaWYgKCEkdGhpcy0+ZGVidWdMaW5lbnIpDQoJCQl7DQoJCQkJLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIGluc3RhbGwgdGhpcyB0cmFuc2xhdGlvbg0KCQkJCWlmICgkcGVyY2VudGFnZSA8ICR0aGlzLT5wZXJjZW50YWdlTGFuZ3VhZ2VBZGQpDQoJCQkJew0KCQkJCQkvLyBkb250IGFkZA0KCQkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5MYW5ndWFnZS5NZXNzYWdlcycpLT5zZXQoImV4Y2x1ZGUuJGZpbGVfbmFtZSIsDQoJCQkJCQknPGI+JyAuICR0b3RhbCAuICc8L2I+KHRvdGFsICcNCgkJCQkJCS4gJHRoaXMtPmxhbmdUYWcgLiAnIHN0cmluZ3MpIG9ubHkgPGI+Jw0KCQkJCQkJLiAkbGFuZ1N0cmluZ05yIC4gJzwvYj4nIC4gJHN0cmluZ05BbWUNCgkJCQkJCS4gJyA9ICcgLiAkcGVyY2VudGFnZQ0KCQkJCQkpOw0KDQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIHNob3cgaWYgaXQgd2FzIGFkZGVkIGFzIHdlbGwNCgkJCUNGYWN0b3J5OjpfKCdDb21waWxlci5CdWlsZGVyLkxhbmd1YWdlLk1lc3NhZ2VzJyktPnNldCgiaW5jbHVkZS4kZmlsZV9uYW1lIiwNCgkJCQknPGI+JyAuICR0b3RhbCAuICc8L2I+KHRvdGFsICcNCgkJCQkuICR0aGlzLT5sYW5nVGFnIC4gJyBzdHJpbmdzKSBhbmQgPGI+Jw0KCQkJCS4gJGxhbmdTdHJpbmdOciAuICc8L2I+JyAuICRzdHJpbmdOQW1lIC4gJyA9ICcNCgkJCQkuICRwZXJjZW50YWdlDQoJCQkpOw0KCQl9DQoNCgkJcmV0dXJuIHRydWU7DQoJfQ0K', '[[[Component]]] Language Packaging', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQkvLyBsb2FkIHRoZSBoZWxwZXIgY2xhc3MNCgkJCUpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7DQoJCQkvLyBibG9jayBpbnN0YWxsDQoJCQkkYmxvY2tJbnN0YWxsID0gdHJ1ZTsNCgkJCS8vIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIEpDQg0KCQkJJG1hbmlmZXN0ID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjptYW5pZmVzdCgpOw0KCQkJaWYgKGlzc2V0KCRtYW5pZmVzdC0+dmVyc2lvbikgJiYgc3RycG9zKCRtYW5pZmVzdC0+dmVyc2lvbiwgJy4nKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSB2ZXJzaW9uDQoJCQkJJGpjYlZlcnNpb24gPSBleHBsb2RlKCcuJywgJG1hbmlmZXN0LT52ZXJzaW9uKTsNCgkJCQkvLyBjaGVjayB0aGF0IHdlIGhhdmUgSkNCIDIuMTAuMTMgb3IgaGlnaGVyIGluc3RhbGxlZA0KCQkJCWlmIChjb3VudCgkamNiVmVyc2lvbikgPT0gMyAmJiAoKCRqY2JWZXJzaW9uWzBdID09IDIgJiYgJGpjYlZlcnNpb25bMV0gPj0gMTAgJiYgKCgkamNiVmVyc2lvblsxXSA9PSAxMCAmJiAkamNiVmVyc2lvblsyXSA+PSAxMykgfHwgKCRqY2JWZXJzaW9uWzFdID4gMTApKSkgfHwgJGpjYlZlcnNpb25bMF0gPj0gMykpDQoJCQkJew0KCQkJCQkkYmxvY2tJbnN0YWxsID0gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWxsb3cgaW5zdGFsbCBpZiBhbGwgY29uZGl0aW9ucyBhcmUgbWV0DQoJCQlpZiAoJGJsb2NrSW5zdGFsbCkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnUGxlYXNlIHVwZ3JhZGUgdG8gSkNCIDIuMTAuMTMgb3IgaGlnaGVyIGJlZm9yZSBpbnN0YWxsaW5nIHRoaXMgcGx1Z2luLicsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0=', '', '', '', '1.2.0', '{\"property_selection0\":{\"property\":\"34\"},\"property_selection1\":{\"property\":\"35\"},\"property_selection2\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Language Packaging', '', 1, '', '', 1, '2019-10-12 22:36:16', '2023-12-30 09:43:54', 83, '', 2), +(8, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to integrate componentbuilder with [[[curriculumbuilder_link_name]]]. To activate it you must first enable it here.', '{}', '3b7fd798-af89-4cd9-b85a-1c43b83ec655', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw==', 3, '{}', 'CS8qKg0KCSAqIERhdGFiYXNlIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBEYXRhYmFzZURyaXZlcg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRkYjsNCg0KCS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqLw0KCXByb3RlY3RlZCAgJGFwcDsNCg0KCS8qKg0KCSAqIExvY2tlZCBmaWxlbiBuYW1lDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCAgJGZpbGVMb2NrZWQ7DQoNCgkvKioNCgkgKiBIaWRkZW4gZmlsZSBwYXRoDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCAgJGhpZGVuRmlsZTsNCg0KCS8qKg0KCSAqIE9wZW4gZmlsZSBwYXRoDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCAgJG9wZW5GaWxlOw0KDQoJLyoqDQoJICogSGlkZGVuIGltYWdlIGZvbGRlciBwYXRoDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCAgJGhpZGVuUGFnZXNGb2xkZXI7DQoNCgkvKioNCgkgKiBUaGUgcGFnZXMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgICRwYWdlczsNCg0KCS8qKg0KCSAqIEZpbGUgTmFtZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgICRmaWxlTmFtZSA9IGZhbHNlOw0KDQoJLyoqDQoJICogRmlsZSBFeHRlbnNpb24NCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICovDQoJcHJvdGVjdGVkICAkZmlsZUV4dGVuc2lvbiA9IGZhbHNlOw0KDQoJLyoqDQoJICogVGhpcyBpcyBhIGV2ZW50IHRvIGJ1aWxkIHRoZSB2aWV3IGFyZWENCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gdGhlIHBsdWdpbi4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbltbW2NvbXBvbmVudF9hY3JvbnltXV1dUHJvY2Vzc2luZ1JlcXVlc3QoJGNvbnRleHQsICRhamF4LCAmJHBhZ2UsICYkdGFyZ2V0LCAmJHJlc3VsdCkNCgl7DQoJCWlmICgnY29tX1tbW2NvbXBvbmVudF1dXS5zdGFnZScgPT09ICRjb250ZXh0DQoJCQkmJiAkdGhpcy0+YXBwLT5pc0NsaWVudCgnYWRtaW5pc3RyYXRvcicpDQoJCQkmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcGFnZSkNCgkJCSYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCR0YXJnZXQpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHVzZXIgb2JqZWN0DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCS8vIGdldCBwYWdlIHZhbHVlcw0KCQkJJHBhZ2UgPSBqc29uX2RlY29kZSgkcGFnZSk7DQoJCQkvLyBnZXQgcGFnZSB2YWx1ZXMNCgkJCSR0YXJnZXQgPSBqc29uX2RlY29kZSgkdGFyZ2V0KTsNCgkJCS8vIHNhbml0aXphIHN0cmluZ3MNCgkJCWlmIChpc3NldCgkcGFnZS0+bmFtZSkgJiYgaXNzZXQoJHBhZ2UtPmV4dHJ1ZGUpICYmIGlzc2V0KCRwYWdlLT5pbWFnZSkgJiYgaXNzZXQoJHBhZ2UtPmh0bWwpICYmIGlzc2V0KCRwYWdlLT5zdmcpDQoJCQkJJiYgMSA9PSAkcGFnZS0+ZXh0cnVkZSAmJiBpc3NldCgkdGFyZ2V0LT51c2VyKSAmJiBpc3NldCgkdGFyZ2V0LT50eXBlKSAmJiAoJHRhcmdldC0+dXNlciA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZGVjcnlwdCgkdGFyZ2V0LT51c2VyKSkgIT09IGZhbHNlDQoJCQkJJiYgJHRhcmdldC0+dXNlciA9PSAkdXNlci0+Z2V0KCdpZCcpDQoJCQkJJiYgaXNzZXQoJHRhcmdldC0+bmFtZSkgJiYgaXNzZXQoJHRhcmdldC0+ZmlsZW5hbWUpICYmICgkdGFyZ2V0LT5maWxlbmFtZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZGVjcnlwdCgkdGFyZ2V0LT5maWxlbmFtZSkpICE9PSBmYWxzZQ0KCQkJCSYmIGlzc2V0KCR0YXJnZXQtPmd1aWQpICYmICgkdGFyZ2V0LT5ndWlkID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpkZWNyeXB0KCR0YXJnZXQtPmd1aWQpKSAhPT0gZmFsc2UgJiYgW1tbQ29tcG9uZW50XV1dSGVscGVyOjp2YWxpZEdVSUQoJHRhcmdldC0+Z3VpZCkNCgkJCQkmJiBzdHJwb3MoJHRhcmdldC0+ZmlsZW5hbWUsICdWRE0nKSAhPT0gZmFsc2UgJiYgc3RycG9zKCRwYWdlLT5uYW1lLCAnX3BhZ2UnKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJLy8gbG9hZCB0aGUgZmlsZSBjbGFzcw0KCQkJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZpbGUnKTsNCgkJCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5mb2xkZXInKTsNCgkJCQkvLyBub3cgbGV0cyBnZXQgdGhlIGZpbGUgZGF0YQ0KCQkJCSR0aGlzLT5oaWRlblBhdGggPSBydHJpbShbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZvbGRlclBhdGgoJ3BhdGgnLCAnaGlkZGVuZmlsZXBhdGgnKSwgJy8nKTsNCgkJCQkkdGhpcy0+aGlkZW5GaWxlID0gJHRoaXMtPmhpZGVuUGF0aCAuICcvJyAuICR0YXJnZXQtPmZpbGVuYW1lOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgZmlsZSBleGlzdA0KCQkJCWlmIChKRmlsZTo6ZXhpc3RzKCR0aGlzLT5oaWRlbkZpbGUpKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgPSAkdGhpcy0+aGlkZW5QYXRoIC4gJy8ucGFnZXNfJyAuIHRyaW0oJHRhcmdldC0+ZmlsZW5hbWUsICcuJyk7DQoJCQkJCS8vIG1ha2UgcGF0aCBzYWZlDQoJCQkJCSR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyID0gSkZvbGRlcjo6bWFrZVNhZmUoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIpOw0KCQkJCQkvLyBkb2VzIHRoZSBpbWFnZSBleGlzdA0KCQkJCQlpZiAoSkZvbGRlcjo6ZXhpc3RzKCR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyKSAmJiBKRmlsZTo6ZXhpc3RzKCR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyIC4gJy8nIC4gJy4nIC4gJHBhZ2UtPm5hbWUpKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgdGhlIGRhdGVzDQoJCQkJCQkkZGF0ZSA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9TcWwoKTsNCgkJCQkJCS8vIGdldCBbW1tjdXJyaWN1bHVtYnVpbGRlcl1dXSBoZWxwZXIgY2xhc3MNCgkJCQkJCSRbW1tDdXJyaWN1bHVtYnVpbGRlcl1dXUhlbHBlciA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0SGVscGVyQ2xhc3MoJ1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dJyk7DQoJCQkJCQkvLyBidWlsZCB0aGUgcmVzb3VyY2UgYW5kIGtlZXAgdGhlIEdVSUQgcmVhZHkgaWYgbW9yZSBwYWdlcyBpcyB0byBiZSBidWlsZA0KCQkJCQkJaWYgKCgkcmVzb3VyY2UgPSAkW1tbQ3VycmljdWx1bWJ1aWxkZXJdXV1IZWxwZXI6OmdldFZhcigncmVzb3VyY2UnLCAkdGFyZ2V0LT5ndWlkLCAnZ3VpZCcsICdpZCcpKSA9PT0gZmFsc2UpDQoJCQkJCQl7DQoJCQkJCQkJLy8gc2V0IHRoZSBkYXRhIGZvciB0aGUgcmVzb3VyY2UNCgkJCQkJCQkkZGF0YSA9IGFycmF5KA0KCQkJCQkJCQknaWQnID0+IDAsDQoJCQkJCQkJCSdndWlkJyA9PiAkdGFyZ2V0LT5ndWlkLA0KCQkJCQkJCQknbmFtZScgPT4gJHRhcmdldC0+bmFtZSwNCgkJCQkJCQkJJ3B1Ymxpc2hlZCcgPT4gMCwNCgkJCQkJCQkJJ3ZlcnNpb24nID0+IDEsDQoJCQkJCQkJCSdjcmVhdGVkX2J5JyA9PiAkdGFyZ2V0LT51c2VyLA0KCQkJCQkJCQknY3JlYXRlZCcgPT4gJGRhdGUsDQoJCQkJCQkJCSd0eXBlJyA9PiAkdGFyZ2V0LT50eXBlKTsNCgkJCQkJCQkkcmVzb3VyY2VNb2RlbCA9ICRbW1tDdXJyaWN1bHVtYnVpbGRlcl1dXUhlbHBlcjo6Z2V0TW9kZWwoJ3Jlc291cmNlJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY3VycmljdWx1bWJ1aWxkZXJdXV0nKTsNCgkJCQkJCQlpZiAoISRyZXNvdXJjZU1vZGVsLT5zYXZlKCRkYXRhKSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIGRvIG5vdCBjb250aW51ZSB0byBzZXQgdGhlIHBhZ2VzIGlmIHdlIGNvdWxkIG5vdCBjcmVhdGUgdGhlIHJlc291cmNlDQoJCQkJCQkJCSR0YXJnZXQtPmd1aWQgPSBudWxsOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcmVzb3VyY2UNCgkJCQkJCWlmIChbW1tDb21wb25lbnRdXV1IZWxwZXI6OnZhbGlkR1VJRCgkdGFyZ2V0LT5ndWlkKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIFBhZ2UgTW9kZWwNCgkJCQkJCQkkcGFnZU1vZGVsID0gJFtbW0N1cnJpY3VsdW1idWlsZGVyXV1dSGVscGVyOjpnZXRNb2RlbCgncGFnZScsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dJyk7DQoJCQkJCQkJLy8gc2V0IHRoZSBkYXRhIGZvciB0aGUgcGFnZQ0KCQkJCQkJCSRkYXRhID0gYXJyYXkoDQoJCQkJCQkJCSdpZCcgPT4gMCwNCgkJCQkJCQkJJ251bWJlcicgPT4gKGludCkgJHBhZ2UtPm5hbWUsDQoJCQkJCQkJCSdndWlkJyA9PiAnJywNCgkJCQkJCQkJJ3Jlc291cmNlJyA9PiAkdGFyZ2V0LT5ndWlkLA0KCQkJCQkJCQknbmFtZScgPT4gJHRhcmdldC0+bmFtZSwNCgkJCQkJCQkJJ2NvbnRlbnQnID0+ICcnLA0KCQkJCQkJCQkncHVibGlzaGVkJyA9PiAwLA0KCQkJCQkJCQkndmVyc2lvbicgPT4gMSwNCgkJCQkJCQkJJ2NyZWF0ZWRfYnknID0+ICR0YXJnZXQtPnVzZXIsDQoJCQkJCQkJCSdjcmVhdGVkJyA9PiAkZGF0ZSwNCgkJCQkJCQkJJ3R5cGUnID0+ICR0YXJnZXQtPnR5cGUpOw0KCQkJCQkJCS8vIHNldCB0aGUgaW1hZ2UNCgkJCQkJCQlpZiAoMSA9PSAkcGFnZS0+aW1hZ2UpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBnZXQgY29udGVudA0KCQkJCQkJCQkkZGF0YVsnY29udGVudCddID0gJzxpbWcgc3JjPSInIC4gJHRoaXMtPmdldExpbmsoJy4nLiRwYWdlLT5uYW1lKSAuICciIGFsdD0iJyAuICRwYWdlLT5uYW1lIC4gJyI+JzsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gc2V0IHRoZSBwYWdlIGFzIEhUTUwNCgkJCQkJCQllbHNlaWYgKDEgPT0gJHBhZ2UtPmh0bWwpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBnZXQgY29udGVudA0KCQkJCQkJCQkkdGhpcy0+Z2V0SFRNTEZyb21QREYoJGRhdGEsIChpbnQpICRwYWdlLT5uYW1lKTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gc2V0IHRoZSBwYWdlIGFzIEhUTUwNCgkJCQkJCQllbHNlaWYgKDEgPT0gJHBhZ2UtPnN2ZykNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIGdldCBjb250ZW50DQoJCQkJCQkJCSR0aGlzLT5nZXRTVkdGcm9tUERGKCRkYXRhLCAoaW50KSAkcGFnZS0+bmFtZSk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIHNhdmUgdGhlIHBhZ2UgaWYgYW55IG9mIHRoZSBvcHRpb25zIHdhcyBzZXQNCgkJCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ2NvbnRlbnQnXSkgJiYgKDEgPT0gJHBhZ2UtPmh0bWwgfHwgMSA9PSAkcGFnZS0+c3ZnIHx8IDEgPT0gJHBhZ2UtPmltYWdlKSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIHNhdmUgdGhlIHBhZ2UNCgkJCQkJCQkJaWYgKCRwYWdlTW9kZWwtPnNhdmUoJGRhdGEpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkcmVzdWx0ID0gdHJ1ZTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgaXMgYSBldmVudCB0byBidWlsZCB0aGUgdmlldyBhcmVhDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIHRoZSBwbHVnaW4uDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25bW1tjb21wb25lbnRfYWNyb255bV1dXUJ1aWxkVmlldygkY29udGV4dCwgJHZpZXcpDQoJew0KCQlpZiAoJ2NvbV9bW1tjb21wb25lbnRdXV0uc3RhZ2UnID09PSAkY29udGV4dCAmJiAkdGhpcy0+YXBwLT5pc0NsaWVudCgnYWRtaW5pc3RyYXRvcicpKQ0KCQl7DQoJCQkvLyBleHRyYWN0IHRoZSBwYWdlcyBmcm9tIHRoZSBQREYgYW5kIGxvYWQgdGhlaXIgcGF0aHMgdG8gbWVtb3J5DQoJCQlpZiAoJHRoaXMtPnNldFBhZ2VzKCkgJiYgJHRoaXMtPmZpbGVOYW1lKQ0KCQkJew0KCQkJCS8vIGJ1aWxkIHRoZSBzZWxlY3Rpb24gYXJlYQ0KCQkJCWlmICgoJHZpZXctPl9kaXNwbGF5X3ZpZXdfaGVhZGVyID0gJHRoaXMtPmJ1aWxkUmVzb3VyY2VBcmVhKCkpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCS8vIGJ1aWxkIHRoZSBzZWxlY3Rpb24gYXJlYQ0KCQkJCQkkdmlldy0+X2Rpc3BsYXlfdmlldyA9ICR0aGlzLT5idWlsZFNlbGVjdGlvbkFyZWEoKTsNCgkJCQkJLy8gYnVpbGQgdGhlIGphdmFzY3JpcHQNCgkJCQkJJHZpZXctPl9kaXNwbGF5X3ZpZXdfZm9vdGVyID0gJHRoaXMtPmJ1aWxkSmF2YVNjcmlwdCgpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgaXMgYSBnZXQgaXRlbSBldmVudCB0byBpbmplY3QgY3VzdG9tIGJlaGF2aW9yLg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IGJlaW5nIHBhc3NlZCB0byB0aGUgcGx1Z2luLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uW1tbY29tcG9uZW50X2Fjcm9ueW1dXV1HZXRJdGVtKCRjb250ZXh0LCAuLi4kYXJncykNCgl7DQoJCS8vIGFjdGlvbiB0byBiZSB0YWtlbiB3aXRoIHdlIGhhdmUgZmlsZSBpdGVtDQoJCWlmICgnY29tX1tbW2NvbXBvbmVudF1dXS5maWxlJyA9PT0gJGNvbnRleHQgJiYgJHRoaXMtPmFwcC0+aXNDbGllbnQoJ2FkbWluaXN0cmF0b3InKSAmJiBpc3NldCgkYXJnc1swXSkNCgkJCS8vIGp1c3QgZm9yIFBERidzIGZvciBub3cNCgkJCSYmIGlzc2V0KCRhcmdzWzBdLT5maWxlX2V4dGVuc2lvbikgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGFyZ3NbMF0tPmZpbGVfZXh0ZW5zaW9uKSAmJiAncGRmJyA9PT0gc3RydG9sb3dlcigkYXJnc1swXS0+ZmlsZV9leHRlbnNpb24pKQ0KCQl7DQoJCQlpZiAoKCRrZXkgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoJGFyZ3NbMF0tPm1haW5fZmlsZSkpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkka2V5ID0gdXJsZW5jb2RlKCRrZXkpOw0KCQkJCS8vICRhcmdzWzBdID09ICRpdGVtDQoJCQkJJGFyZ3NbMF0tPm9uY2xpY2sgLj0gIm9wZW5QZGZQYXRoU2VsZWN0aW9uKCIgLiAoaW50KSAkYXJnc1swXS0+aWQgLiAiLCAnIiAuICRhcmdzWzBdLT5maWxlX25hbWUgLiAiJywgJyIgLiAka2V5IC4gIicpIjsNCgkJCQkkYXJnc1swXS0+bGluayA9ICcjJzsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCdjb21fW1tbY29tcG9uZW50XV1dLnN0YWdlJyA9PT0gJGNvbnRleHQgJiYgJHRoaXMtPmFwcC0+aXNDbGllbnQoJ2FkbWluaXN0cmF0b3InKSAmJiAkYXJnc1sxXSA+IDApDQoJCXsNCgkJCS8vICRhcmdzWzBdID09ICR0aGlzDQoJCQkvLyAkYXJnc1sxXSA9PSAkcGsNCgkJCS8vICRhcmdzWzJdID09ICRxdWVyeQ0KCQkJLy8gJGFyZ3NbM10gPT0gJGRiDQoJCQlpZiAoKCRicmlkZ2UgPSAkdGhpcy0+YXBwLT5pbnB1dC0+Z2V0KCdicmlkZ2UnLCBmYWxzZSwgJ2Jhc2U2NCcpKSAhPT0gZmFsc2UNCgkJCQkmJiAoJGJyaWRnZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZGVjcnlwdCgkYnJpZGdlKSkgIT09IGZhbHNlDQoJCQkJJiYgJ1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dLnJlc291cmNlLnBkZicgPT09ICRicmlkZ2UNCgkJCQkmJiAoJHRoaXMtPmZpbGVMb2NrZWQgPSAkdGhpcy0+YXBwLT5pbnB1dC0+Z2V0KCdrZXknLCBmYWxzZSwgJ2Jhc2U2NCcpKSAhPT0gZmFsc2UNCgkJCQkmJiAoJGZpbGUgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmRlY3J5cHQoJHRoaXMtPmZpbGVMb2NrZWQpKSAhPT0gZmFsc2UNCgkJCQkmJiBzdHJwb3MoJGZpbGUsICdWRE0nKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJLy8gbG9hZCB0aGUgZmlsZSBjbGFzcw0KCQkJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZpbGUnKTsNCgkJCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5mb2xkZXInKTsNCgkJCQkvLyBub3cgbGV0cyBnZXQgdGhlIGZpbGUgZGF0YQ0KCQkJCSR0aGlzLT5oaWRlblBhdGggPSBydHJpbShbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEZvbGRlclBhdGgoJ3BhdGgnLCAnaGlkZGVuZmlsZXBhdGgnKSwgJy8nKTsNCgkJCQkkdGhpcy0+aGlkZW5GaWxlID0gJHRoaXMtPmhpZGVuUGF0aCAuICcvJyAuICRmaWxlOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgZmlsZSBleGlzdA0KCQkJCWlmIChKRmlsZTo6ZXhpc3RzKCR0aGlzLT5oaWRlbkZpbGUpKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgPSAkdGhpcy0+aGlkZW5QYXRoIC4gJy8ucGFnZXNfJyAuIHRyaW0oJGZpbGUsICcuJyk7DQoJCQkJCS8vIGV4dHJhY3QgdGhlIHBhZ2VzIGZyb20gdGhlIFBERiBhbmQgbG9hZCB0aGVpciBwYXRocyB0byBtZW1vcnkNCgkJCQkJaWYgKCR0aGlzLT5zZXRQYWdlcygpKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+ZmlsZU5hbWUgPSBleHBsb2RlKCdWRE0nLCAkZmlsZSlbMV07DQoJCQkJCQkkdGhpcy0+X2ZpbGVOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdGhpcy0+ZmlsZU5hbWUsICdXJywgJ18nLCBmYWxzZSwgZmFsc2UpOw0KCQkJCQkJJHRoaXMtPmZpbGVFeHRlbnNpb24gPSBleHBsb2RlKCdfJywgJGZpbGUpWzJdOw0KCQkJCQkJJHRoaXMtPmZpbGVOYW1lIC49ICcuJyAuICR0aGlzLT5maWxlRXh0ZW5zaW9uOw0KCQkJCQkJJHRoaXMtPmd1aWQgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OkdVSUQoKTsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKFRleHQ6Ol8oJ1RoZSBQREYgZmlsZSBjb3VsZCBub3QgYmUgZm91bmQsIHBsZWFzZSB0cnkgYWdhaW4hJyksICdlcnJvcicpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogVGhpcyBpcyBhIHNldCBEb2N1bWVudCBldmVudCB0byBpbmplY3QgY3VzdG9tIGJlaGF2aW9yLg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IGJlaW5nIHBhc3NlZCB0byB0aGUgcGx1Z2luLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uW1tbY29tcG9uZW50X2Fjcm9ueW1dXV1Eb2N1bWVudCgkY29udGV4dCwgJHZpZXcpDQoJew0KCQkvLyBhY3Rpb24gdG8gYmUgdGFrZW4gd2l0aCBmb2xkZXJzIGRvY3VtZW50DQoJCWlmICgnY29tX1tbW2NvbXBvbmVudF1dXS5mb2xkZXJzJyA9PT0gJGNvbnRleHQgJiYgJHRoaXMtPmFwcC0+aXNDbGllbnQoJ2FkbWluaXN0cmF0b3InKSAmJiBpc3NldCgkdmlldy0+ZG9jdW1lbnQpKQ0KCQl7DQoJCQkvLyBidWlsZCBicmlkZ2Uga2V5IChvbmx5IGNvbnRpbnVlIGlmIHdlIGNhbiBjcmVhdGUgYSBrZXkpDQoJCQlpZiAoKCRrZXkgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoJ1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dLnJlc291cmNlLnBkZicpKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJGtleSA9IHVybGVuY29kZSgka2V5KTsNCgkJCQkvLyBhZGQgSmF2YVNjcmlwdCB0byBkb2N1bWVudA0KCQkJCSR2aWV3LT5kb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oImZ1bmN0aW9uIG9wZW5QZGZQYXRoU2VsZWN0aW9uKGZpbGVJRCwgZmlsZU5hbWUsIGZpbGVLZXkpIHsNCgkJCQkJVUlraXQubW9kYWwuY29uZmlybSgnV291bGQgeW91IGxpa2UgdG8gdXNlIDxiPicrZmlsZU5hbWUrJzwvYj4gaW4gW1tbY3VycmljdWx1bWJ1aWxkZXJfbGlua19uYW1lXV1dIGFzIGEgcmVzb3VyY2U/JykudGhlbihmdW5jdGlvbiAoKSB7DQoJCSAgCQkJCWpRdWVyeSgnI1tbW2NvbXBvbmVudF1dXV9sb2FkZXInKS5odG1sKCc8YnIgLz48Y2VudGVyPjxkaXYgY2xhc3M9XCd1ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1yaWdodCB1ay1hbmltYXRpb24tc2NhbGUtdXAgdWstYm94LXNoYWRvdy1ib3R0b21cJz48aDI+IiAuIFRleHQ6Ol8oJ1dlIGFyZSBleHRyYWN0aW5nIHRoZSBwYWdlcyBmcm9tIHRoZSBQREYsIHRoaXMgbWF5IHRha2UgYSBtb21lbnQuPGJyIC8+UGxlYXNlIHdhaXQgYW5kIGRvIG5vdCByZWRpcmVjdCBhd2F5IGZyb20gdGhpcyBwYWdlIScpIC4gIjwvaDI+PC9kaXY+PC9jZW50ZXI+Jyk7DQoJCQkJCQlqUXVlcnkoJyNsb2FkaW5nJykuc2hvdygpOw0KCQkgIAkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdmlldz1zdGFnZSZicmlkZ2U9IiAuICRrZXkgLiAiJmtleT0nICsgZmlsZUtleSArICcmaWQ9JyArIGZpbGVJRDsNCgkJIAkgIAkJfSk7DQoJCQkJfSIpOw0KCQkJfQ0KCQl9DQoJCWVsc2VpZiAoJ2NvbV9bW1tjb21wb25lbnRdXV0uc3RhZ2UnID09PSAkY29udGV4dCAmJiAkdGhpcy0+YXBwLT5pc0NsaWVudCgnYWRtaW5pc3RyYXRvcicpICYmICR0aGlzLT5maWxlTmFtZSAmJiBpc3NldCgkdmlldy0+ZG9jdW1lbnQpKQ0KCQl7DQoJCQkvLyAgd2UgdXBkYXRlIHRoZSBoZWFkaW5nLCB0aXRsZSBhbmQgaWNvbg0KCQkJJHZpZXctPmRvY3VtZW50LT5zZXRUaXRsZShUZXh0OjpfKCdFeHRydWRlJykgLiAnICcgLiAkdGhpcy0+ZmlsZU5hbWUpOw0KCQkJSlRvb2xiYXJIZWxwZXI6OnRpdGxlKFRleHQ6Ol8oJ0V4dHJ1ZGUnKSAuICcgJyAuICR0aGlzLT5maWxlTmFtZSwgJ2Fycm93LXVwLTQnKTsNCgkJfQ0KCX0NCgkJCQkJCS8vIHdlIGxlYXZlIHRoaXMgb3V0IGZvciBub3cuICciIC4gJGFyZ3NbMF0tPmxpbmsgLiAiJywgDQoJCQkJCQkvLyAsIGZ1bmN0aW9uICgpIHsNCgkJCQkJCS8vIFVJa2l0Lm1vZGFsLmNvbmZpcm0oJ1dvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlIGRvd25sb2FkaW5nIDxiPicrZmlsZU5hbWUrJzwvYj4/JykudGhlbihmdW5jdGlvbiAoKSB7DQoJCSAgCQkJCS8vCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbGluazsNCgkJIAkgIAkJCS8vIH0sIGZ1bmN0aW9uICgpIHsNCgkJCQkJCS8vCVVJa2l0Lm1vZGFsLmFsZXJ0KCc8aDM+T2theSBzbyB3aHkgZGlkIHlvdSBjbGljayBvbiB0aGUgZmlsZT88L2gzPjxwPkhtbW0geW91IG11c3QgaGF2ZSBiZWVuIGEgbGl0dGxlIGN1cmlvdXMgaG93IHRoaW5ncyB3b3JrIEkgc3VwcG9zZS48L3A+PGg0PlZlcnkgd2VsbCBlbmpveSE8L2g0PicpOw0KCQkgICAJCQkJLy8gfSk7DQoJCSAgIAkJCQkvLyB9KTsNCg0KCS8qKg0KCSAqIFNldCB0aGUgcGFnZXMgbGlua3MNCgkgKg0KCSAqDQoJICogQHJldHVybiAgYXJyYXkgb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFBhZ2VzKCkNCgl7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcikpDQoJCXsNCgkJCS8vIG1ha2UgcGF0aCBzYWZlDQoJCQkkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlciA9IEpGb2xkZXI6Om1ha2VTYWZlKCR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyKTsNCgkJCS8vIGNoZWNrIGlmIHRoZSBwYXRoIGV4aXN0DQoJCQlpZiAoIUpGb2xkZXI6OmV4aXN0cygkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcikpDQoJCQl7DQoJCQkJLy8gY3JlYXRlIHRoZSBwYWdlcyBmb2xkZXINCgkJCQlKRm9sZGVyOjpjcmVhdGUoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIpOw0KCQkJfQ0KCQkJLy8ganVzdCBsb2FkIHRoZWlyIHBhdGhzIHRvIG1lbW9yeQ0KCQkJcmV0dXJuICR0aGlzLT5nZXRQYWdlcygpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIHBhZ2VzIGxpbmtzDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5IG9uIHN1Y2Nlc3MNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRQYWdlcygkdHJ5ID0gdHJ1ZSkNCgl7DQoJCS8vIGFsd2F5cyByZW1vdmUgdGhlIG9wZW4gUERGIGlmIGZvdW5kDQoJCWlmIChpc3NldCgkdGhpcy0+b3BlbkZpbGUpICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5vcGVuRmlsZSkpDQoJCXsNCgkJCSR0aGlzLT5vcGVuRmlsZSA9ICcnOw0KCQl9DQoJCS8vIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGVtIGxvYWRlZA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPnBhZ2VzKSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gY2hlY2sgaWYgaXQgbm93IGV4aXN0DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcikgJiYgSkZvbGRlcjo6ZXhpc3RzKCR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyKSkNCgkJew0KCQkJLy8gd2UgbXVzdCBmaXJzdCBzdG9yZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQ0KCQkJJGpvb21sYSA9IGdldGN3ZCgpOw0KCQkJLy8gZ28gdG8gdGhhdCBoaWRkZW4gaW1hZ2UgZm9sZGVyDQoJCQljaGRpcigkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcik7DQoJCQkvLyBsb2FkIGFsbCB0aGUgcGFnZXMgaW4gdGhpcyBwYXRoDQoJCQkkdGhpcy0+cGFnZXMgPSBKRm9sZGVyOjpmaWxlcygnLicsICdfcGFnZScsIGZhbHNlLCB0cnVlLCBhcnJheSgpLCBhcnJheSgpKTsNCgkJCS8vIGdvIHRvIHRoYXQgam9vbWxhIGZvbGRlcg0KCQkJY2hkaXIoJGpvb21sYSk7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGFueQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5wYWdlcykpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBleHRyYWN0IHRoZSBwYWdlcyBmcm9tIHRoZSBQREYNCgkJCWlmICgkdHJ5KQ0KCQkJew0KCQkJCXJldHVybiAkdGhpcy0+Z2V0UGFnZXNGcm9tUERGKCk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIGdldCBhIGh0bWwgcGFnZSBmcm9tIFBERg0KCSAqDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SFRNTEZyb21QREYoJiRkYXRhLCAkbnIpDQoJew0KCQlpZiAoYHdoaWNoIHBkZnRvaHRtbGApDQoJCXsNCgkJCS8vIG9wZW4gdGhlIFBERg0KCQkJJHRoaXMtPm9wZW5QREYoKTsNCg0KCQkJJG5hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpyYW5kb20oMjApOw0KCQkJJHRlbXBPcGVuRmlsZSA9ICR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyIC4gJy8nIC4gJG5hbWUgLiAnLnBkZic7DQoNCgkJCS8vIHdlIGhhdmUgdG8gcGxhY2UgdGhlIG9wZW5lZCBmaWxlIG9uIHRoZSBkcml2ZQ0KCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjp3cml0ZUZpbGUoJHRlbXBPcGVuRmlsZSwgJHRoaXMtPm9wZW5GaWxlKTsNCg0KCQkJLy8gd2UgbXVzdCBmaXJzdCBzdG9yZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQ0KCQkJJGpvb21sYSA9IGdldGN3ZCgpOw0KCQkJLy8gZ28gdG8gdGhhdCBoaWRkZW4gaW1hZ2UgZm9sZGVyDQoJCQljaGRpcigkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcik7DQoJCQkvLyBub3cgd2UgcnVuIHRoZSBjb21tYW5kDQoJCQlzaGVsbF9leGVjKCJwZGZ0b2h0bWwgLWYgJG5yIC1sICRuciAtcCAtYyAtcyAtbm9mcmFtZXMgLWZvbnRmdWxsbmFtZSAtZm10IGpwZyAkbmFtZS5wZGYgJG5hbWUiKTsNCgkJCS8vIHJlbW92ZSBvcGVuIGZpbGUNCgkJCUpGaWxlOjpkZWxldGUoJHRlbXBPcGVuRmlsZSk7DQoNCgkJCS8vIGdldCB0aGUgZG9tIGRvY3VtZW50IGNsYXNzDQoJCQkkaHRtbCA9IG5ldyBET01Eb2N1bWVudCgpOw0KDQoJCQkvLyBnZXQgdGhlIGh0bWwNCgkJCSRodG1sLT5sb2FkSFRNTEZpbGUoIiRuYW1lLmh0bWwiKTsNCgkJCSRpbWFnZV9uYW1lID0gJG5hbWUgLiBzdHJfcGFkKChzdHJpbmcpJG5yLCAzLCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQkvLyBsb2FkIHRoZSBpbWFnZQ0KCQkJJGltYWdlX2RhdGEgPSBmaWxlX2dldF9jb250ZW50cygiJGltYWdlX25hbWUuanBnIik7DQoJCQkkaW1hZ2VfZGF0YSA9IExpYnJhcnlkYXRhYmFzZUhlbHBlcjo6ZW5jcnlwdCgkaW1hZ2VfZGF0YSk7DQoJCQkkaW1hZ2VfbGluayA9ICR0aGlzLT5nZXRMaW5rKCRpbWFnZV9uYW1lKTsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6d3JpdGVGaWxlKCRpbWFnZV9uYW1lLCB3b3Jkd3JhcCgkaW1hZ2VfZGF0YSwgMTI4LCAiXG4iLCB0cnVlKSk7DQoNCgkJCS8vIHJlbW92ZSBvcGVuIGZpbGUNCgkJCUpGaWxlOjpkZWxldGUoIiRuYW1lLmh0bWwiKTsNCgkJCUpGaWxlOjpkZWxldGUoIiRpbWFnZV9uYW1lLmpwZyIpOw0KDQoJCQkvLyBnbyB0byB0aGF0IGpvb21sYSBmb2xkZXINCgkJCWNoZGlyKCRqb29tbGEpOw0KDQoJCQkvLyBleHRydWRlIHRoZSBodG1sDQoJCQkkZGl2cyA9ICRodG1sLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2Jyk7DQoJCQkkc3R5bGVzID0gJGh0bWwtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHlsZScpOw0KCQkJLy8gbG9hZCB0aGUgYmFja2dyb3VuZCBpbWFnZSBzdHJpbmcNCgkJCSRpbWFnZXMgPSAkaHRtbC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpOw0KCQkJJGltYWdlX3NyYyA9IG51bGw7DQoJCQkvLyBtYWtlIHN1cmUgdGhlcmUgaXMgYW4gaW1hZ2UNCgkJCWlmICgkaW1hZ2VzLT5sZW5ndGggPiAwKQ0KCQkJew0KCQkJCSRpbWFnZV9zcmMgPSAkaW1hZ2VzLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUoJ3NyYycpOw0KCQkJfQ0KCQkJLy8gbG9hZCB0aGUgYm9keSBodG1sIHRvIHRoZSBwYWdlIGRhdGFiYXNlIGFycmF5DQoJCQlpZiAoJGRpdnMtPmxlbmd0aCA9PSAxKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaW1hZ2Vfc3JjKSkNCgkJCQl7DQoJCQkJCSRkYXRhWydjb250ZW50J10gPSBzdHJfcmVwbGFjZSgkaW1hZ2Vfc3JjLCAkaW1hZ2VfbGluaywgJGh0bWwtPnNhdmVIVE1MKCRkaXZzLT5pdGVtKDApKSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRkYXRhWydjb250ZW50J10gPSAkaHRtbC0+c2F2ZUhUTUwoJGRpdnMtPml0ZW0oMCkpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGxvYWQgdGhlIGJvZHkgY3NzIHRvIHRoZSBwYWdlIGRhdGFiYXNlIGFycmF5DQoJCQlpZiAoJHN0eWxlcy0+bGVuZ3RoID09IDIpDQoJCQl7DQoJCQkJJGRhdGFbJ2NzcyddID0gJHN0eWxlcy0+aXRlbSgxKS0+bm9kZVZhbHVlOw0KCQkJCSRkYXRhWydhZGRfY3NzJ10gPSAxOw0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIGdldCBhIGh0bWwgcGFnZSBmcm9tIFBERg0KCSAqDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U1ZHRnJvbVBERigmJGRhdGEsICRucikNCgl7DQoJCWlmIChgd2hpY2ggcGRmdG9jYWlyb2ApDQoJCXsNCgkJCS8vIG9wZW4gdGhlIFBERg0KCQkJJHRoaXMtPm9wZW5QREYoKTsNCg0KCQkJJG5hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpyYW5kb20oMjApOw0KCQkJJHRlbXBPcGVuRmlsZSA9ICR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyIC4gJy8nIC4gJG5hbWUgLiAnLnBkZic7DQoNCgkJCS8vIHdlIGhhdmUgdG8gcGxhY2UgdGhlIG9wZW5lZCBmaWxlIG9uIHRoZSBkcml2ZQ0KCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjp3cml0ZUZpbGUoJHRlbXBPcGVuRmlsZSwgJHRoaXMtPm9wZW5GaWxlKTsNCg0KCQkJLy8gd2UgbXVzdCBmaXJzdCBzdG9yZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQ0KCQkJJGpvb21sYSA9IGdldGN3ZCgpOw0KCQkJLy8gZ28gdG8gdGhhdCBoaWRkZW4gaW1hZ2UgZm9sZGVyDQoJCQljaGRpcigkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlcik7DQoJCQkvLyBub3cgd2UgcnVuIHRoZSBjb21tYW5kDQoJCQlzaGVsbF9leGVjKCJwZGZ0b2NhaXJvIC1mICRuciAtbCAkbnIgLXN2ZyAkbmFtZS5wZGYgJG5hbWUiKTsNCgkJCS8vIHJlbW92ZSBvcGVuIGZpbGUNCgkJCUpGaWxlOjpkZWxldGUoJHRlbXBPcGVuRmlsZSk7DQoNCgkJCS8vIGxvYWQgdGhlIHN2ZyBkYXRhDQoJCQkkZGF0YVsnY29udGVudCddID0gZmlsZV9nZXRfY29udGVudHMoJG5hbWUpOw0KDQoJCQkvLyByZW1vdmUgb3BlbiBmaWxlDQoJCQlKRmlsZTo6ZGVsZXRlKCRuYW1lKTsNCgkJCS8vIGdvIHRvIHRoYXQgam9vbWxhIGZvbGRlcg0KCQkJY2hkaXIoJGpvb21sYSk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHBhZ2VzIGZyb20gUERGDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFBhZ2VzRnJvbVBERigpDQoJew0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0DQoJCWlmIChKRmlsZTo6ZXhpc3RzKCR0aGlzLT5oaWRlbkZpbGUpKQ0KCQl7DQoJCQkvLyBvcGVuIHRoZSBQREYNCgkJCWlmICghJHRoaXMtPm9wZW5QREYoKSkNCgkJCXsNCgkJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdXZSBjb3VsZCBub3Qgb3BlbiB0aGUgZGVjcnlwdCB0aGUgUERGIHRvIGV4dHJhY3QgdGhlIHBhZ2VzLCBwbGVhc2UgdHJ5IGFnYWluISBQbGVhc2UgaW5mb3JtIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgaWYgdGhpcyBjb250aW51ZXMgdG8gaGFwcGVuLicpLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQkvLyB1c2UgcGRmdG9jYWlybyAoQkVTVCBPUFRJT04pDQoJCQlpZiAoYHdoaWNoIHBkZnRvY2Fpcm9gKQ0KCQkJew0KCQkJCSRuYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6cmFuZG9tKDIwKTsNCgkJCQkkdGVtcE9wZW5GaWxlID0gJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgLiAnLycgLiAkbmFtZSAuICcucGRmJzsNCgkJCQkvLyB3ZSBoYXZlIHRvIHBsYWNlIHRoZSBvcGVuZWQgZmlsZSBvbiB0aGUgZHJpdmUNCgkJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6OndyaXRlRmlsZSgkdGVtcE9wZW5GaWxlLCAkdGhpcy0+b3BlbkZpbGUpOw0KCQkJCS8vIHdlIG11c3QgZmlyc3Qgc3RvcmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkNCgkJCQkkam9vbWxhID0gZ2V0Y3dkKCk7DQoJCQkJLy8gZ28gdG8gdGhhdCBoaWRkZW4gaW1hZ2UgZm9sZGVyDQoJCQkJY2hkaXIoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIpOw0KCQkJCS8vIG5vdyB3ZSBydW4gdGhlIGNvbW1hbmQNCgkJCQlzaGVsbF9leGVjKCJwZGZ0b2NhaXJvIC1qcGVnICRuYW1lLnBkZiBwYWdlIik7DQoJCQkJLy8gcmVtb3ZlIG9wZW4gZmlsZQ0KCQkJCUpGaWxlOjpkZWxldGUoJHRlbXBPcGVuRmlsZSk7DQoJCQkJLy8gbm93IGVuY3J5cHQgdGhlIHBhZ2VzDQoJCQkJJHBhZ2VzID0gSkZvbGRlcjo6ZmlsZXMoJy4nLCAnLmpwZycsIGZhbHNlLCB0cnVlLCBhcnJheSgpLCBhcnJheSgpKTsNCgkJCQkvLyBmaXJzdCBnZXQgY29udGVudCB0aGUgcmVtb3ZlIGZpbGUgdGhlIHNhdmUgZW5jcnlwdGVkIGNvbnRlbnQNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBhZ2VzKSkNCgkJCQl7DQoJCQkJCWFycmF5X21hcCggZnVuY3Rpb24oJGltYWdlKXsNCgkJCQkJCSRwYWdlX251bWJlciA9IHN0cl9yZXBsYWNlKGFycmF5KCcuLycsICdwYWdlLScsICcuanBnJyksICcnLCAkaW1hZ2UpOw0KCQkJCQkJJGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkaW1hZ2UpOw0KCQkJCQkJSkZpbGU6OmRlbGV0ZSgkaW1hZ2UpOw0KCQkJCQkJJGRhdGEgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoJGRhdGEpOw0KCQkJCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjp3cml0ZUZpbGUoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgLiAnLy4nIC4gJHBhZ2VfbnVtYmVyIC4gJ19wYWdlJywgd29yZHdyYXAoJGRhdGEsIDEyOCwgIlxuIiwgdHJ1ZSkpOw0KCQkJCQl9LCAkcGFnZXMpOw0KCQkJCX0NCgkJCQkvLyBnbyB0byB0aGF0IGpvb21sYSBmb2xkZXINCgkJCQljaGRpcigkam9vbWxhKTsNCgkJCQkNCgkJCX0NCgkJCWVsc2VpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnaW1hZ2ljaycpKQ0KCQkJew0KCQkJCS8vIHRyeSB0byBydW4gdGhlIGV4dHJhdGlvbg0KCQkJCWlmICghJHRoaXMtPmltYWdpY2tQREZ4dHJhY3QoKSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKFRleHQ6Ol8oJ1dlIGNvdWxkIG5vdCBleHRyYXh0IHRoZSBwYWdlcyBmcm9tIHRoZSBQREYsIHBsZWFzZSB0cnkgYWdhaW4hIFBsZWFzZSBpbmZvcm0geW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBpZiB0aGlzIGNvbnRpbnVlcyB0byBoYXBwZW4uJyksICdlcnJvcicpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdQbGVhc2UgaW5mb3JtIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgdGhhdCB5b3UgbmVlZCB0aGUgUEhQIDxiPmltYWdpY2sgZXh0cmFjdGlvbjwvYj4gaW5zdGFsbGVkIG9uIHlvdXIgaG9zdGluZyBhY2NvdW50LiBUaGUgZXh0cmFjdGlvbiBvZiB0aGUgcGFnZXMgZnJvbSB5b3VyIFBERiBmaWxlcyBhcmUgZG9uZSB3aXRoIHRoaXMgbGlicmFyeSE8YnIgLz5odHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldHVwLnBocCcpLCAnZXJyb3InKTsNCgkJCX0NCgkJfQ0KCQkvLyB0cnkgdG8gbG9hZCB0aGUgcGFnZXMgbGlua3MgYWdhaW4NCgkJcmV0dXJuICR0aGlzLT5nZXRQYWdlcyhmYWxzZSk7DQoJfQ0KDQoJLyoqDQoJICogb3BlbiB0aGUgUERGDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIG9wZW5QREYoKQ0KCXsNCgkJJGRhdGEgPSBzdHJfcmVwbGFjZSgiXG4iLCAnJywgZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPmhpZGVuRmlsZSkpOw0KCQlpZiAoJGRhdGEgPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpKQ0KCQl7DQoJCQlpZiAobWV0aG9kX2V4aXN0cygnW1tbQ29tcG9uZW50XV1dSGVscGVyJywgJ2RlY3J5cHQnKQ0KCQkJCSYmICgkdGhpcy0+b3BlbkZpbGUgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmRlY3J5cHQoJGRhdGEpKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQkJDQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEV4dHJhY3QgcGFnZXMgZnJvbSBQREYNCgkgKg0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW1hZ2lja1BERnh0cmFjdCgpDQoJew0KCQlpZiAoaXNzZXQoJHRoaXMtPm9wZW5GaWxlKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+b3BlbkZpbGUpKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSB3aG9sZSBQREYNCgkJCSRwZGYgPSBuZXcgaW1hZ2ljaygpOw0KCQkJLy8gc2V0IGltYWdlIHJlc29sdXRpb24gKFRPRE8pDQoJCQkkcGRmLT5zZXRSZXNvbHV0aW9uKDE0NCwgMTQ0KTsNCgkJCS8vIGxvYWQgdGhlIFBERg0KCQkJJHBkZi0+cmVhZEltYWdlQmxvYigkdGhpcy0+b3BlbkZpbGUpOw0KCQkJLy8gJHBkZi0+ZGVzcGVja2xlaW1hZ2UoKTsNCgkJCS8vIGdldCB0aGUgbnVtYmVyIHBhZ2VzDQoJCQkkbnVtYmVyID0gJHBkZi0+Z2V0TnVtYmVySW1hZ2VzKCk7DQoJCQkvLyBDb252ZXJ0IFBERiBwYWdlcyB0byBpbWFnZXMNCgkJCWZvcigkaSA9IDA7ICRpIDwgJG51bWJlcjsgJGkrKykNCgkJCXsNCgkJCQkvLyBzZXQgbWVtb3J5IHN0b3JhZ2UNCgkJCQkkdG1wX2hhbmRsZSA9IGZvcGVuKCJwaHA6Ly90ZW1wIiwgJ3IrJyk7DQoJCQkJLy8gU2V0IGl0ZXJhdG9yIHBvc3Rpb24NCgkJCQkkcGRmLT5zZXRJdGVyYXRvckluZGV4KCRpKTsNCgkJCQkvLyBTZXQgaW1hZ2UgZm9ybWF0DQoJCQkJJHBkZi0+c2V0SW1hZ2VGb3JtYXQoJ2pwZWcnKTsNCgkJCQkkcGRmLT5zZXRJbWFnZUNvbXByZXNzaW9uKGltYWdpY2s6OkNPTVBSRVNTSU9OX0xPU1NMRVNTSlBFRyk7DQoJCQkJJHBkZi0+c2V0SW1hZ2VDb21wcmVzc2lvblF1YWxpdHkoMTAwKTsNCgkJCQkkcGRmLT5zZXRJbWFnZUFscGhhQ2hhbm5lbChJbWFnaWNrOjpBTFBIQUNIQU5ORUxfUkVNT1ZFKTsNCgkJCQkkcGRmLT50cmFuc3BhcmVudFBhaW50SW1hZ2UoJyNmZmZmZmYnLCAwLCAwLCBmYWxzZSk7DQoJCQkJLy8gV3JpdGUgUGFnZXMgdG8gdGhlIGhpZGRlbiBwYWdlIGZvbGRlcg0KCQkJCSRwZGYtPndyaXRlSW1hZ2VGaWxlKCR0bXBfaGFuZGxlKTsNCgkJCQlyZXdpbmQoJHRtcF9oYW5kbGUpOw0KCQkJCS8vIHNldCB0aGUgcGFnZSBudW1iZXINCgkJCQkkcGFnZV9udW1lciA9ICRpICsgMTsNCgkJCQkvLyBub3cgd3JpdGUgdGhlIGZpbGUgdG8gZHJpdmUgZW5jcnlwdGVkDQoJCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjp3cml0ZUZpbGUoJHRoaXMtPmhpZGVuUGFnZXNGb2xkZXIgLiAnLy4nIC4gJHBhZ2VfbnVtZXIgLiAnX3BhZ2UnLCB3b3Jkd3JhcChbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoc3RyZWFtX2dldF9jb250ZW50cygkdG1wX2hhbmRsZSkpLCAxMjgsICJcbiIsIHRydWUpKTsNCgkJCQkvLyBjbGVhbiB1cCB5b3VyIHRlbXBvcmFyeSBzdG9yYWdlIGhhbmRsZQ0KCQkJCWZjbG9zZSgkdG1wX2hhbmRsZSk7DQoJCQl9DQoJCQkkdGhpcy0+b3BlbkZpbGUgPSAnJzsNCgkJCXJldHVybiAkcGRmLT5jbGVhcigpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBidWlsZCB0aGUgc2VsZWN0aW9uIHZpZXcgYXJlYQ0KCSAqDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcgb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1aWxkUmVzb3VyY2VBcmVhKCkNCgl7DQoJCS8vIHNldCB0aGUgaGVhZGluZw0KCQkkYXJlYSA9ICc8aDQ+JyAuIFRleHQ6Ol8oJ1Jlc291cmNlJykgLiAnPC9oND4nOw0KDQoJCSRhcmVhIC49ICc8ZGl2IGNsYXNzPSJmb3JtLWlubGluZSBmb3JtLWlubGluZS1oZWFkZXIiPic7DQoNCgkJLy8gbmFtZSBhdHRyaWJ1dGVzDQoJCSRhdHRyaWJ1dGVzID0gYXJyYXkoDQoJCQkndHlwZScgPT4gJ3RleHQnLA0KCQkJJ25hbWUnID0+ICdyZXNvdXJjZV9uYW1lJywNCgkJCSdsYWJlbCcgPT4gSnVzdFRFWFQ6Ol8oJ05hbWUnKSwNCgkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQknZGVzY3JpcHRpb24nID0+IEp1c3RURVhUOjpfKCdBZGQgdGhlIG5hbWUgaGVyZSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGNhbGwgdGhpcyByZXNvdXJjZS4nKSk7DQoJCSRmaWVsZCA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Z2V0RmllbGRPYmplY3QoJGF0dHJpYnV0ZXMsICR0aGlzLT5fZmlsZU5hbWUpOw0KDQoJCSRhcmVhIC49ICc8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4nOw0KCQkkYXJlYSAuPSAnPGRpdiBjbGFzcz0iY29udHJvbC1sYWJlbCI+JyAuICRmaWVsZC0+bGFiZWwgLiAnPC9kaXY+JzsNCgkJJGFyZWEgLj0gJzxkaXYgY2xhc3M9ImNvbnRyb2xzIj4nIC4gJGZpZWxkLT5pbnB1dCAuICc8L2Rpdj4nOw0KCQkkYXJlYSAuPSAnPC9kaXY+JzsNCg0KCQkkYXJlYSAuPSAnPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+JzsNCgkJJGFyZWEgLj0gJzxkaXYgY2xhc3M9ImNvbnRyb2xzIj48YnV0dG9uIGNsYXNzPSJidG4gYnV0dG9uLXVuZG8tMiIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLnJlbG9hZChmYWxzZSk7Ij48c3BhbiBjbGFzcz0iaWNvbi11bmRvLTIiPjwvc3Bhbj4gJyAuIFRleHQ6Ol8oJ1Jlc2V0JykgLiAnPC9idXR0b24+PC9kaXY+JzsNCgkJJGFyZWEgLj0gJzwvZGl2Pic7DQoNCgkJJGFyZWEgLj0gJzxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPic7DQoJCSRhcmVhIC49ICc8ZGl2IGNsYXNzPSJjb250cm9scyI+PGJ1dHRvbiBjbGFzcz0iYnRuIGJ1dHRvbi1hcnJvdy11cC00IiAgb25jbGljaz0iZXh0cnVkZVNlbGVjdGVkKCk7Ij48c3BhbiBjbGFzcz0iaWNvbi1hcnJvdy11cC00Ij48L3NwYW4+ICcgLiBUZXh0OjpfKCdFeHRydWRlJykgLiAnPC9idXR0b24+PC9kaXY+JzsNCgkJJGFyZWEgLj0gJzwvZGl2Pic7DQoNCgkJJGFyZWEgLj0gJzwvZGl2Pic7DQoNCgkJcmV0dXJuICRhcmVhOw0KCX0NCg0KCS8qKg0KCSAqIGJ1aWxkIHRoZSBzZWxlY3Rpb24gdmlldyBhcmVhDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZyBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRTZWxlY3Rpb25BcmVhKCkNCgl7DQoJCSRhcmVhID0gJyc7DQoJCSRsaW5rcyA9ICR0aGlzLT5nZXRMaW5rcygpOw0KCQkkbmFtZXMgPSAkdGhpcy0+Z2V0TmFtZXMoKTsNCgkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIGxpbmtzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGlua3MpKQ0KCQl7DQoJCQkkYXJlYSA9ICc8c3R5bGU+LnVrLWxpZ2h0Ym94IHt6LWluZGV4OjIwMDA7fTwvc3R5bGU+JzsNCgkJCS8vIG9ubHkgbG9hZCB0aGVzIGlmIHdlIGhhdmUgbW9yZSB0aGVuNSBwYWdlcw0KCQkJaWYgKGNvdW50KCRsaW5rcykgPiA1KQ0KCQkJew0KCQkJCSRhcmVhIC49IFBIUF9FT0wgLiAnPGRpdiAgaWQ9InNlbGVjdF9idXR0b25fYWxsXzEyMyI+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxidXR0b24gY2xhc3M9InNlbGVjdF9idXR0b25fYWxsIHVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay13aWR0aC0xLTEgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSIgZGF0YS12YWx1ZT0iMSIgb25jbGljaz0idG9nZ2xlU2VsZWN0aW9uKFwnYWxsXCcpIiB1ay10b2dnbGU9InRhcmdldDogLnNlbGVjdGlvbl9hbGw7IGFuaW1hdGlvbjogdWstYW5pbWF0aW9uLWZhZGU7Ij5VbnNlbGVjdCBBbGw8L2J1dHRvbj4nOw0KCQkJCSRhcmVhIC49IFBIUF9FT0wgLiAnPC9kaXY+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgIGlkPSJzZWxlY3RfYnV0dG9uX2FsbF8xMjQiIGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIHNlbGVjdGlvbl9hbGwiPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImV4dHJ1ZGVfaW1hZ2VfYWxsIHVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay1idXR0b24tc21hbGwgdWstd2lkdGgtMS0yIiAgb25jbGljaz0ic2V0RXh0cnVkZVN0YXR1cyhcJ2ltYWdlXCcsIFwnaHRtbFwnLCBcJ3N2Z1wnLCBcJ2FsbFwnKSIgZGF0YS12YWx1ZT0iMSIgdWstaWNvbj0iaWNvbjogaW1hZ2UiPjwvYnV0dG9uPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImV4dHJ1ZGVfaHRtbF9hbGwgdWstYnV0dG9uIHVrLWJ1dHRvbi1kZWZhdWx0IHVrLWJ1dHRvbi1zbWFsbCB1ay13aWR0aC0xLTIiICBvbmNsaWNrPSJzZXRFeHRydWRlU3RhdHVzKFwnaHRtbFwnLCBcJ2ltYWdlXCcsIFwnc3ZnXCcsIFwnYWxsXCcpIiBkYXRhLXZhbHVlPSIwIj5IVE1MPC9idXR0b24+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZXh0cnVkZV9zdmdfYWxsIHVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay1idXR0b24tc21hbGwgdWstd2lkdGgtMS0yIiAgb25jbGljaz0ic2V0RXh0cnVkZVN0YXR1cyhcJ3N2Z1wnLCBcJ2ltYWdlXCcsIFwnaHRtbFwnLCBcJ2FsbFwnKSIgZGF0YS12YWx1ZT0iMCI+U1ZHPC9idXR0b24+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzwvZGl2Pic7DQoJCQl9DQoJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLWdyaWQtc21hbGwgdWstY2hpbGQtd2lkdGgtMS0yQHMgdWstY2hpbGQtd2lkdGgtMS0zQG0gdWstY2hpbGQtd2lkdGgtMS01QGwiIHVrLWdyaWQgdWstbGlnaHRib3g9ImFuaW1hdGlvbjogc2xpZGUiPic7DQoJCQlmb3JlYWNoICgkbmFtZXMgYXMgJGxpbmsgPT4gJG5hbWUpDQoJCQl7DQoJCQkJLy9tYWtlIHN1cmUgdGhlIG5hbWUgaXMgc2VjdXJlDQoJCQkJJF9uYW1lID0gTGlicmFyeWRhdGFiYXNlSGVscGVyOjpzYWZlU3RyaW5nKCRuYW1lKTsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLXBhZGRpbmctc21hbGwiPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIGNsYXNzPSJzZWxlY3RfYnV0dG9uX2FsbCBzZWxlY3RfYnV0dG9uXycgLiAkX25hbWUgLiAnIHVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay13aWR0aC0xLTEgdWstYnV0dG9uLXNtYWxsIiBkYXRhLXZhbHVlPSIxIiBvbmNsaWNrPSJ0b2dnbGVTZWxlY3Rpb24oXCcnIC4gJF9uYW1lIC4gJ1wnKSIgdHlwZT0iYnV0dG9uIiB1ay10b2dnbGU9InRhcmdldDogLnNlbGVjdGlvbl8nIC4gJF9uYW1lIC4gJzsgYW5pbWF0aW9uOiB1ay1hbmltYXRpb24tZmFkZTsiPlVuc2VsZWN0PC9idXR0b24+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLWJveC1zaGFkb3ctbWVkaXVtIj4nOw0KCQkJCSRhcmVhIC49IFBIUF9FT0wgLiAnPGEgY2xhc3M9InVrLWlubGluZSIgaHJlZj0iJyAuICRsaW5rc1skbGlua10gLiAnIiBkYXRhLWFsdD0iSW1hZ2UiPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8aW1nIHNyYz0iJyAuICRsaW5rc1skbGlua10gLiAnIiBhbHQ9IicgLiAkbmFtZSAuICciPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8ZGl2IGNsYXNzPSJ1ay1vdmVybGF5IHVrLWxpZ2h0IHVrLWJhY2tncm91bmQtcHJpbWFyeSB1ay1wb3NpdGlvbi1jZW50ZXIgc2VsZWN0aW9uX2FsbCBzZWxlY3Rpb25fJyAuICRfbmFtZSAuICciPjxzcGFuIHVrLWljb249ImNoZWNrIj48L3NwYW4+PC9kaXY+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLW92ZXJsYXkgdWstb3ZlcmxheS1wcmltYXJ5IHVrLXBvc2l0aW9uLWNlbnRlciBzZWxlY3Rpb25fYWxsIHNlbGVjdGlvbl8nIC4gJF9uYW1lIC4gJyIgaGlkZGVuPjxzcGFuIHVrLWljb249ImJhbiI+PC9zcGFuPjwvZGl2Pic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8L2E+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLXRleHQtbGlnaHRlciB1ay10ZXh0LXNtYWxsIHVrLXRleHQtY2VudGVyIj4nIC4gJG5hbWUgLiAnPC9kaXY+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzxkaXYgY2xhc3M9InVrLWJ1dHRvbi1ncm91cCB1ay13aWR0aC0xLTEgc2VsZWN0aW9uX2FsbCBzZWxlY3Rpb25fJyAuICRfbmFtZSAuICciPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImV4dHJ1ZGVfaW1hZ2VfJyAuICRfbmFtZSAuICcgZXh0cnVkZV9pbWFnZV9hbGwgdWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLWJ1dHRvbi1zbWFsbCB1ay13aWR0aC0xLTMiICBvbmNsaWNrPSJzZXRFeHRydWRlU3RhdHVzKFwnaW1hZ2VcJywgXCdodG1sXCcsIFwnc3ZnXCcsIFwnJyAuICRfbmFtZSAuICdcJykiIGRhdGEtdmFsdWU9IjEiIHVrLWljb249Imljb246IGltYWdlIj48L2J1dHRvbj4nOw0KCQkJCSRhcmVhIC49IFBIUF9FT0wgLiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJleHRydWRlX2h0bWxfJyAuICRfbmFtZSAuICcgZXh0cnVkZV9odG1sX2FsbCB1ay1idXR0b24gdWstYnV0dG9uLWRlZmF1bHQgdWstYnV0dG9uLXNtYWxsIHVrLXdpZHRoLTEtMyIgIG9uY2xpY2s9InNldEV4dHJ1ZGVTdGF0dXMoXCdodG1sXCcsIFwnaW1hZ2VcJywgXCdzdmdcJywgXCcnIC4gJF9uYW1lIC4gJ1wnKSIgZGF0YS12YWx1ZT0iMCI+SFRNTDwvYnV0dG9uPic7DQoJCQkJJGFyZWEgLj0gUEhQX0VPTCAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImV4dHJ1ZGVfc3ZnXycgLiAkX25hbWUgLiAnIGV4dHJ1ZGVfc3ZnX2FsbCB1ay1idXR0b24gdWstYnV0dG9uLWRlZmF1bHQgdWstYnV0dG9uLXNtYWxsIHVrLXdpZHRoLTEtMyIgIG9uY2xpY2s9InNldEV4dHJ1ZGVTdGF0dXMoXCdzdmdcJywgXCdpbWFnZVwnLCBcJ2h0bWxcJywgXCcnIC4gJF9uYW1lIC4gJ1wnKSIgZGF0YS12YWx1ZT0iMCI+U1ZHPC9idXR0b24+JzsNCgkJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCQl9DQoJCQkkYXJlYSAuPSBQSFBfRU9MIC4gJzwvZGl2Pic7DQoJCX0NCgkJcmV0dXJuICRhcmVhOw0KCX0NCg0KCS8qKg0KCSAqIGJ1aWxkIHRoZSBhamF4IGJlaGF2aW9yDQoJICoNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZyBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRKYXZhU2NyaXB0KCkNCgl7DQoJCSRzY3JpcHQgPSAnJzsNCgkJLy8gZ2V0IHRoZSBwYWdlIG5hbWVzDQoJCSRuYW1lcyA9ICR0aGlzLT5nZXROYW1lcygpOw0KCQkkdXNlciA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6ZW5jcnlwdChGYWN0b3J5OjpnZXRVc2VyKCktPmdldCgnaWQnKSk7DQoJCSRndWlkID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjplbmNyeXB0KCR0aGlzLT5ndWlkKTsNCgkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIGxpbmtzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbmFtZXMpKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgSlNPTiBvYmplY3QgdGhhdCB3aWxsIGJlIHNlbmQNCgkJCSRqc29uID0gbmV3IFxzdGRDbGFzcygpOyANCgkJCWZvcmVhY2ggKCRuYW1lcyBhcyAkbmFtZSkNCgkJCXsNCgkJCQkkX25hbWUgPSBMaWJyYXJ5ZGF0YWJhc2VIZWxwZXI6OnNhZmVTdHJpbmcoJG5hbWUpOw0KCQkJCSRqc29uLT4kX25hbWUgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJGpzb24tPiRfbmFtZS0+bmFtZSA9ICRuYW1lOw0KCQkJCSRqc29uLT4kX25hbWUtPmV4dHJ1ZGUgPSAxOw0KCQkJCSRqc29uLT4kX25hbWUtPmltYWdlID0gMTsNCgkJCQkkanNvbi0+JF9uYW1lLT5odG1sID0gMDsNCgkJCQkkanNvbi0+JF9uYW1lLT5zdmcgPSAwOw0KCQkJfQ0KCQkJJHNjcmlwdCAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPic7DQoJCQkkc2NyaXB0IC49ICd2YXIgRGF0YVJlc291cmNlTmFtZSA9ICInIC4gJHRoaXMtPmZpbGVMb2NrZWQgLiAnIjsnOw0KCQkJJHNjcmlwdCAuPSAndmFyIERhdGFSZXNvdXJjZVBhZ2VzPSAnIC4ganNvbl9lbmNvZGUoJGpzb24pIC4gJzsnOw0KDQoJCQkkc2NyaXB0IC49ICdmdW5jdGlvbiBpc0VtcHR5KG9iaikgeyc7DQoJCQkkc2NyaXB0IC49ICdmb3IodmFyIGtleSBpbiBvYmopIHsnOw0KCQkJJHNjcmlwdCAuPSAnaWYob2JqLmhhc093blByb3BlcnR5KGtleSkpJzsNCgkJCSRzY3JpcHQgLj0gJ3JldHVybiBmYWxzZTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICdyZXR1cm4gdHJ1ZTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkvLyBtYWtlIGFuIGFqYXggcG9zdC9nZXQgdG8gc3RhcnQgdGhlIGV4dHJ1c2lvbg0KCQkJJHNjcmlwdCAuPSAnZnVuY3Rpb24gZXh0cnVkZVNlbGVjdGVkKCl7JzsNCgkJCSRzY3JpcHQgLj0gJy8qIHdlIHN0YXJ0dXAgdGhlIHNwaW5uZXIgKi8nOw0KCQkJJHNjcmlwdCAuPSAnalF1ZXJ5KCIjbG9hZGluZyIpLnNob3coKTsnOw0KCQkJJHNjcmlwdCAuPSAndmFyIHR5cGUgPSBKU09OLnN0cmluZ2lmeSh7JzsNCgkJCSRzY3JpcHQgLj0gJ2ZpbGVuYW1lOiBEYXRhUmVzb3VyY2VOYW1lLCc7DQoJCQkkc2NyaXB0IC49ICduYW1lOiBqUXVlcnkoIiNyZXNvdXJjZV9uYW1lIikudmFsKCksJzsNCgkJCSRzY3JpcHQgLj0gJ3VzZXI6ICInIC4gJHVzZXIgLiAnIiwnOw0KCQkJJHNjcmlwdCAuPSAnZ3VpZDogIicgLiAkZ3VpZCAuICciLCc7DQoJCQkkc2NyaXB0IC49ICd0eXBlOiAxJzsNCgkJCSRzY3JpcHQgLj0gJ30pOyc7DQoJCQkkc2NyaXB0IC49ICcvKiBvbmx5IGFjdCBpZiBleHRydXNpb24gaXMgYWN0aXZlLiAqLyc7DQoJCQkkc2NyaXB0IC49ICdwcm9jZXNzaW5nUmVxdWVzdChPYmplY3Qua2V5cyhEYXRhUmVzb3VyY2VQYWdlcykuZmlsdGVyKGZ1bmN0aW9uKGtleSl7JzsNCgkJCSRzY3JpcHQgLj0gJ3JldHVybiBEYXRhUmVzb3VyY2VQYWdlc1trZXldLmV4dHJ1ZGU7JzsNCgkJCSRzY3JpcHQgLj0gJ30pLCB0eXBlKTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICdmdW5jdGlvbiB0b2dnbGVTZWxlY3Rpb24ocGFnZSl7JzsNCgkJCS8vIG9ubHkgYWRkIHRoZXNlIGlmIHdlIGhhdmUgbW9yZSB0aGVuIGZpdmUNCgkJCWlmIChjb3VudCgkbmFtZXMpID4gNSkNCgkJCXsNCgkJCQkkc2NyaXB0IC49ICdpZiAocGFnZSAhPT0gImFsbCIpeyc7DQoJCQkJJHNjcmlwdCAuPSAnalF1ZXJ5KCIjc2VsZWN0X2J1dHRvbl9hbGxfMTIzIikucmVtb3ZlKCk7JzsNCgkJCQkkc2NyaXB0IC49ICd9JzsNCgkJCX0NCgkJCSRzY3JpcHQgLj0gJ3ZhciBidXR0b24gPSBqUXVlcnkoIi5zZWxlY3RfYnV0dG9uXyIrcGFnZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhciB2YWx1ZSA9IGJ1dHRvbi5kYXRhKCJ2YWx1ZSIpOyc7DQoJCQkkc2NyaXB0IC49ICdpZiAodmFsdWUpeyc7DQoJCQkkc2NyaXB0IC49ICdidXR0b24udGV4dCgiU2VsZWN0Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhbHVlID0gMDsnOw0KCQkJJHNjcmlwdCAuPSAnfSBlbHNlIHsnOw0KCQkJJHNjcmlwdCAuPSAnYnV0dG9uLnRleHQoIlVuc2VsZWN0Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhbHVlID0gMTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkvLyBvbmx5IGFkZCB0aGVzZSBpZiB3ZSBoYXZlIG1vcmUgdGhlbiBmaXZlDQoJCQlpZiAoY291bnQoJG5hbWVzKSA+IDUpDQoJCQl7DQoJCQkJJHNjcmlwdCAuPSAnaWYgKHBhZ2UgPT09ICJhbGwiKXsnOw0KCQkJCSRzY3JpcHQgLj0gJ2pRdWVyeS5lYWNoKERhdGFSZXNvdXJjZVBhZ2VzLCBmdW5jdGlvbihwLCBrZXkpIHsnOw0KCQkJCSRzY3JpcHQgLj0gJ2tleS5leHRydWRlID0gdmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICd9KTsnOw0KCQkJCSRzY3JpcHQgLj0gJ30gZWxzZSB7JzsNCgkJCQkkc2NyaXB0IC49ICdEYXRhUmVzb3VyY2VQYWdlc1twYWdlXS5leHRydWRlID0gdmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICd9JzsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkc2NyaXB0IC49ICdEYXRhUmVzb3VyY2VQYWdlc1twYWdlXS5leHRydWRlID0gdmFsdWU7JzsNCgkJCX0NCgkJCSRzY3JpcHQgLj0gJ2J1dHRvbi5kYXRhKCJ2YWx1ZSIsIHZhbHVlKTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICdmdW5jdGlvbiBzZXRFeHRydWRlU3RhdHVzKGFjdGlvbiwgb3RoZXJhY3Rpb24sIGFub3RoZXJhY3Rpb24sIHBhZ2Upeyc7DQoJCQkvLyBvbmx5IGFkZCB0aGVzZSBpZiB3ZSBoYXZlIG1vcmUgdGhlbiBmaXZlDQoJCQlpZiAoY291bnQoJG5hbWVzKSA+IDUpDQoJCQl7DQoJCQkJJHNjcmlwdCAuPSAnaWYgKHBhZ2UgIT09ICJhbGwiKXsnOw0KCQkJCSRzY3JpcHQgLj0gJ2pRdWVyeSgiI3NlbGVjdF9idXR0b25fYWxsXzEyNCIpLnJlbW92ZSgpOyc7DQoJCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQl9DQoJCQkkc2NyaXB0IC49ICd2YXIgYnV0dG9uID0galF1ZXJ5KCIuZXh0cnVkZV8iK2FjdGlvbisiXyIrcGFnZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhciBvdGhlcmJ1dHRvbiA9IGpRdWVyeSgiLmV4dHJ1ZGVfIitvdGhlcmFjdGlvbisiXyIrcGFnZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhciBhbm90aGVyYnV0dG9uID0galF1ZXJ5KCIuZXh0cnVkZV8iK2Fub3RoZXJhY3Rpb24rIl8iK3BhZ2UpOyc7DQoJCQkkc2NyaXB0IC49ICd2YXIgdmFsdWUgPSBidXR0b24uZGF0YSgidmFsdWUiKTsnOw0KCQkJJHNjcmlwdCAuPSAnaWYgKHZhbHVlKXsnOw0KCQkJJHNjcmlwdCAuPSAndmFsdWUgPSAwOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcnZhbHVlID0gMTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcnZhbHVlID0gMDsnOw0KCQkJJHNjcmlwdCAuPSAnfSBlbHNlIHsnOw0KCQkJJHNjcmlwdCAuPSAndmFsdWUgPSAxOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcnZhbHVlID0gMDsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcnZhbHVlID0gMDsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkvLyBvbmx5IGFkZCB0aGVzZSBpZiB3ZSBoYXZlIG1vcmUgdGhlbiBmaXZlDQoJCQlpZiAoY291bnQoJG5hbWVzKSA+IDUpDQoJCQl7DQoJCQkJJHNjcmlwdCAuPSAnaWYgKHBhZ2UgPT09ICJhbGwiKXsnOw0KCQkJCSRzY3JpcHQgLj0gJ2pRdWVyeS5lYWNoKERhdGFSZXNvdXJjZVBhZ2VzLCBmdW5jdGlvbihwLCBrZXkpIHsnOw0KCQkJCSRzY3JpcHQgLj0gJ2tleVthY3Rpb25dID0gdmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICdrZXlbb3RoZXJhY3Rpb25dID0gb3RoZXJ2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ2tleVthbm90aGVyYWN0aW9uXSA9IGFub3RoZXJ2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ30pOyc7DQoJCQkJJHNjcmlwdCAuPSAnfSBlbHNlIHsnOw0KCQkJCSRzY3JpcHQgLj0gJ0RhdGFSZXNvdXJjZVBhZ2VzW3BhZ2VdW2FjdGlvbl0gPSB2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ0RhdGFSZXNvdXJjZVBhZ2VzW3BhZ2VdW290aGVyYWN0aW9uXSA9IG90aGVydmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICdEYXRhUmVzb3VyY2VQYWdlc1twYWdlXVthbm90aGVyYWN0aW9uXSA9IGFub3RoZXJ2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ30nOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRzY3JpcHQgLj0gJ0RhdGFSZXNvdXJjZVBhZ2VzW3BhZ2VdW2FjdGlvbl0gPSB2YWx1ZTsnOw0KCQkJCSRzY3JpcHQgLj0gJ0RhdGFSZXNvdXJjZVBhZ2VzW3BhZ2VdW290aGVyYWN0aW9uXSA9IG90aGVydmFsdWU7JzsNCgkJCQkkc2NyaXB0IC49ICdEYXRhUmVzb3VyY2VQYWdlc1twYWdlXVthbm90aGVyYWN0aW9uXSA9IGFub3RoZXJ2YWx1ZTsnOw0KCQkJfQ0KCQkJJHNjcmlwdCAuPSAnYnV0dG9uLmRhdGEoInZhbHVlIiwgdmFsdWUpOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcmJ1dHRvbi5kYXRhKCJ2YWx1ZSIsIG90aGVydmFsdWUpOyc7DQoJCQkkc2NyaXB0IC49ICdhbm90aGVyYnV0dG9uLmRhdGEoInZhbHVlIiwgYW5vdGhlcnZhbHVlKTsnOw0KCQkJJHNjcmlwdCAuPSAnaWYgKHZhbHVlKXsnOw0KCQkJJHNjcmlwdCAuPSAnYnV0dG9uLmFkZENsYXNzKCJ1ay1idXR0b24tcHJpbWFyeSIpOyc7DQoJCQkkc2NyaXB0IC49ICdidXR0b24ucmVtb3ZlQ2xhc3MoInVrLWJ1dHRvbi1kZWZhdWx0Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ290aGVyYnV0dG9uLmFkZENsYXNzKCJ1ay1idXR0b24tZGVmYXVsdCIpOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcmJ1dHRvbi5yZW1vdmVDbGFzcygidWstYnV0dG9uLXByaW1hcnkiKTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcmJ1dHRvbi5hZGRDbGFzcygidWstYnV0dG9uLWRlZmF1bHQiKTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcmJ1dHRvbi5yZW1vdmVDbGFzcygidWstYnV0dG9uLXByaW1hcnkiKTsnOw0KCQkJJHNjcmlwdCAuPSAnfSBlbHNlIHsnOw0KCQkJJHNjcmlwdCAuPSAnYnV0dG9uLmFkZENsYXNzKCJ1ay1idXR0b24tZGVmYXVsdCIpOyc7DQoJCQkkc2NyaXB0IC49ICdidXR0b24ucmVtb3ZlQ2xhc3MoInVrLWJ1dHRvbi1wcmltYXJ5Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ290aGVyYnV0dG9uLmFkZENsYXNzKCJ1ay1idXR0b24tcHJpbWFyeSIpOyc7DQoJCQkkc2NyaXB0IC49ICdvdGhlcmJ1dHRvbi5yZW1vdmVDbGFzcygidWstYnV0dG9uLWRlZmF1bHQiKTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcmJ1dHRvbi5hZGRDbGFzcygidWstYnV0dG9uLWRlZmF1bHQiKTsnOw0KCQkJJHNjcmlwdCAuPSAnYW5vdGhlcmJ1dHRvbi5yZW1vdmVDbGFzcygidWstYnV0dG9uLXByaW1hcnkiKTsnOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICd9JzsNCgkJCSRzY3JpcHQgLj0gJ2Z1bmN0aW9uIHByb2Nlc3NpbmdSZXF1ZXN0KHBhZ2VzLCB0eXBlKSB7JzsNCgkJCSRzY3JpcHQgLj0gJ2lmICghaXNFbXB0eShwYWdlcykpeyc7DQoJCQkkc2NyaXB0IC49ICd2YXIgcnVuID0gMDsgdmFyIHNpemUgPSBPYmplY3Qua2V5cyhwYWdlcykubGVuZ3RoOyBzaXplLS07JzsNCgkJCSRzY3JpcHQgLj0gJ2pRdWVyeSgiI1tbW2NvbXBvbmVudF1dXV9sb2FkZXIiKS5odG1sKCI8YnIgLz48Y2VudGVyPjxkaXYgY2xhc3M9XCJ1ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1yaWdodCB1ay1hbmltYXRpb24tc2NhbGUtdXAgdWstYm94LXNoYWRvdy1ib3R0b21cIj48c21hbGw+JzsNCgkJCSRzY3JpcHQgLj0gVGV4dDo6XygnV2UgYXJlIG5vdyBleHRydWRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgUERGIGRvY3VtZW50IGFuZCBtb3ZpbmcgaXQgaW50byB0aGUgW1tbY3VycmljdWx1bWJ1aWxkZXJfbGlua19uYW1lXV1dIHJlc291cmNlcyBhcmVhLicpOw0KCQkJJHNjcmlwdCAuPSAnPC9zbWFsbD48aDI+JzsNCgkJCSRzY3JpcHQgLj0gVGV4dDo6XygnVGhpcyBtYXkgdGFrZSBhIHNvbWUgdGltZSE8YnIgLz48YnIgLz5QbGVhc2Ugd2FpdCBhbmQgZG8gbm90IHJlZGlyZWN0IGF3YXkgZnJvbSB0aGlzIHBhZ2UhJyk7DQoJCQkkc2NyaXB0IC49ICc8L2gyPjwvZGl2PjwvY2VudGVyPjxkaXY+PHByb2dyZXNzIGlkPVwiW1tbY29tcG9uZW50XV1dX3Jlc3VsdFwiIGNsYXNzPVwidWstcHJvZ3Jlc3NcIiB2YWx1ZT1cIjBcIiBtYXg9XCIiK3NpemUrIlwiPjwvcHJvZ3Jlc3M+PC9kaXY+Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ3ZhciBwcm9jZXNzaW5nUmVxdWVzdENoZWNrZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpeyc7DQoJCQkkc2NyaXB0IC49ICd2YXIga2V5ID0gcGFnZXNbcnVuXTsnOw0KCQkJJHNjcmlwdCAuPSAncHJvY2Vzc2luZ1JlcXVlc3Rfc2VydmVyKEpTT04uc3RyaW5naWZ5KERhdGFSZXNvdXJjZVBhZ2VzW2tleV0pLCB0eXBlKS5kb25lKGZ1bmN0aW9uKHJlc3VsdCkgeyc7DQoJCQkkc2NyaXB0IC49ICdpZiAocmVzdWx0KSB7IGpRdWVyeSgiI1tbW2NvbXBvbmVudF1dXV9yZXN1bHQiKS52YWwocnVuKTsgc2hvd1RoZUZpbmlzaGVkTm90aWNlKHJ1biwgc2l6ZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ30gZWxzZSB7JzsNCgkJCSRzY3JpcHQgLj0gJ2pRdWVyeSgiI1tbW2NvbXBvbmVudF1dXV9sb2FkZXIiKS5hZnRlcigiPGRpdiBjbGFzcz1cInVrLXRleHQtZGFuZ2VyXCI+T29wcyB3ZSBmYWlsZWQgdG8gZXh0cnVkZTogPGI+IisgRGF0YVJlc291cmNlUGFnZXNba2V5XS5uYW1lICsgIjwvYj4geW91IHdpbGwgaGF2ZSB0byB0cnkgZXh0cnVkaW5nIHRoaXMgcGFnZSBhZ2FpbiEgSWYgdGhpcyBjb250aW51ZXMgdG8gaGFwcGVuIGluZm9ybSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yLjwvZGl2PiIpO30nOw0KCQkJJHNjcmlwdCAuPSAnc2hvd1RoZUZpbmlzaGVkTm90aWNlKHJ1biwgc2l6ZSk7JzsNCgkJCSRzY3JpcHQgLj0gJ30pOyc7DQoJCQkkc2NyaXB0IC49ICdpZiAocnVuID09IHNpemUpIHsnOw0KCQkJJHNjcmlwdCAuPSAnY2xlYXJJbnRlcnZhbChwcm9jZXNzaW5nUmVxdWVzdENoZWNrZXIpOyc7DQoJCQkkc2NyaXB0IC49ICd9JzsNCgkJCSRzY3JpcHQgLj0gJ3J1bisrOyc7DQoJCQkkc2NyaXB0IC49ICd9LCAyMDApOyc7DQoJCQkkc2NyaXB0IC49ICd9IGVsc2UgeyBqUXVlcnkoIiNsb2FkaW5nIikuaGlkZSgpO30nOw0KCQkJJHNjcmlwdCAuPSAnfSc7DQoJCQkkc2NyaXB0IC49ICdmdW5jdGlvbiBzaG93VGhlRmluaXNoZWROb3RpY2UocnVuLCBzaXplKSB7JzsNCgkJCSRzY3JpcHQgLj0gJ2lmIChydW4gPT0gc2l6ZSB8fCAwID09IHNpemUpIHsnOw0KCQkJJHNjcmlwdCAuPSAnalF1ZXJ5KCIjbG9hZGluZyIpLmhpZGUoKTsnOw0KCQkJJHNjcmlwdCAuPSAnalF1ZXJ5KCIjW1tbY29tcG9uZW50XV1dX2xvYWRlciIpLmh0bWwoIjxkaXYgY2xhc3M9XCJ1ay1hbGVydC1zdWNjZXNzXCIgdWstYWxlcnQ+PGgxPic7DQoJCQkkc2NyaXB0IC49IFRleHQ6OnNwcmludGYoJyVzIEV4dHJ1c2lvbiBDb21wbGV0ZSEnLCAkdGhpcy0+X2ZpbGVOYW1lKTsNCgkJCSRzY3JpcHQgLj0gJzwvaDE+PHA+JzsNCgkJCSRzY3JpcHQgLj0gVGV4dDo6XygnRG8gbm90ZSB0aGF0IDxiPm5vIGlucHV0dCBmaWVsZHM8L2I+IHdlcmUgc2V0IGZvciB0aGlzIHJlc291cmNlLCBhbmQgdGhlIHJlc291cmNlIGlzIHN0aWxsIDxiPnVwdWJsaXNoZWQ8L2I+LiBPbmx5IG9uY2UgYW4gZWRpdG9yIGhhcyA8Yj5yZXZpZXdlZCBhbmQgcHVibGxpc2hlZDwvYj4gdGhpcyByZXNvdXJjZSwgd2lsbCBpdCBiZSBhdmFpbGFibGUgZm9yIHVzZSBpbiBjb3Vyc2VzLicpOw0KCQkJJHNjcmlwdCAuPSAnPC9wPjwvZGl2Pic7DQoJCQkkc2NyaXB0IC49ICc8ZGl2IGNsYXNzPVwidWstYnV0dG9uLWdyb3VwIHVrLXdpZHRoLTEtMVwiPic7DQoJCQkkc2NyaXB0IC49ICc8YSBocmVmPVwiaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY3VycmljdWx1bWJ1aWxkZXJdXV0mdmlldz1yZXNvdXJjZXNcIiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay13aWR0aC0xLTJcIj4nOw0KCQkJJHNjcmlwdCAuPSBUZXh0OjpzcHJpbnRmKCdSZXZpZXdlIFRoZSBSZXNvdXJjZXMnKTsNCgkJCSRzY3JpcHQgLj0gJzwvYT4nOw0KCQkJJHNjcmlwdCAuPSAnPGEgaHJlZj1cImluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PWZvbGRlcnNcIiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay13aWR0aC0xLTJcIj4nOw0KCQkJJHNjcmlwdCAuPSBUZXh0OjpzcHJpbnRmKCdFeHRydWRlIEFub3RoZXIgUmVzb3VyY2UnKTsNCgkJCSRzY3JpcHQgLj0gJzwvYT4nOw0KCQkJJHNjcmlwdCAuPSAnPC9kaXY+Iik7JzsNCgkJCSRzY3JpcHQgLj0gJ319JzsNCgkJCSRzY3JpcHQgLj0gJzwvc2NyaXB0Pic7DQoJCX0NCgkJcmV0dXJuICRzY3JpcHQ7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBpbWFnZSBsaW5rDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcgb24gc3VjY2Vzcw0KCSAqDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExpbmsoJHBhdGgpDQoJew0KCQkvLyBzZXQgZ2xvYmFscw0KCQkkbGlua29wdGlvbnMgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldExpbmtPcHRpb25zKCk7DQoJCS8vIHNldCBsaW5rIHRva2VuIGlmIG5lZWRlZA0KCQkkbGlua1Rva2VuID0gJyc7DQoJCWlmICgkbGlua29wdGlvbnNbJ3Nlc3Npb24nXSkNCgkJew0KCQkJJGxpbmtUb2tlbiA9ICcmJyAuIEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKSAuICc9MSc7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIG5hbWUNCgkJJG5hbWUgPSBzdHJfcmVwbGFjZSgnLi8nLCAnJywgJHBhdGgpOw0KCQkvLyBsb2NrIHRoZSBwYXRoIHRvIHRoZSBwYWdlDQoJCWlmICgkbGlua29wdGlvbnNbJ2xvY2snXSkNCgkJew0KCQkJJHBhZ2UgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmJhc2U2NF91cmxlbmNvZGUoW1tbQ29tcG9uZW50XV1dSGVscGVyOjplbmNyeXB0KCAkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlciAuICcvJyAuICRuYW1lKSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkcGFnZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGVuY29kZSgkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlciAuICcvJyAuICRuYW1lLCB0cnVlKTsNCgkJfQ0KCQkvLyByZXR1cm4gdGhlIGxpbmsNCgkJcmV0dXJuICR0aGlzLT5nZXRMaW5rVVJMKCRwYWdlLCAkbmFtZSwgJGxpbmtUb2tlbik7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBpbWFnZSBsaW5rIFVSTA0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nIG9uIHN1Y2Nlc3MNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRMaW5rVVJMKCRwYWdlLCAkbmFtZSwgJGxpbmtUb2tlbikNCgl7DQoJCS8vIHJldHVybiB0aGUgbGluaw0KCQlyZXR1cm4gJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLmpwZyZmaWxlPScgLiAkcGFnZSAuICRsaW5rVG9rZW4gLiAnJm5hbWU9JyAuIHN0cl9yZXBsYWNlKCcuJywgJycsICRuYW1lKTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGltYWdlIGxpbmtzDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGlua3MoKQ0KCXsNCgkJLy8gc2V0IGdsb2JhbHMNCgkJJGxpbmtvcHRpb25zID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRMaW5rT3B0aW9ucygpOw0KCQkvLyBzZXQgbGluayB0b2tlbiBpZiBuZWVkZWQNCgkJJGxpbmtUb2tlbiA9ICcnOw0KCQlpZiAoJGxpbmtvcHRpb25zWydzZXNzaW9uJ10pDQoJCXsNCgkJCSRsaW5rVG9rZW4gPSAnJicgLiBKb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkgLiAnPTEnOw0KCQl9DQoJCS8vIGJ1aWxkIGFuZCByZXR1cm4gbGlua3MNCgkJcmV0dXJuIGFycmF5X21hcCggZnVuY3Rpb24oJHBhdGgpIHVzZSgkbGlua29wdGlvbnMsICRsaW5rVG9rZW4pew0KCQkJLy8gYnVpbGQgdGhlIG5hbWUNCgkJCSRuYW1lID0gc3RyX3JlcGxhY2UoJy4vJywgJycsICRwYXRoKTsNCgkJCS8vIGxvY2sgdGhlIHBhdGggdG8gdGhlIHBhZ2UNCgkJCWlmICgkbGlua29wdGlvbnNbJ2xvY2snXSkNCgkJCXsNCgkJCQkkcGFnZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGVuY29kZShbW1tDb21wb25lbnRdXV1IZWxwZXI6OmVuY3J5cHQoICR0aGlzLT5oaWRlblBhZ2VzRm9sZGVyIC4gJy8nIC4gJG5hbWUpKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcGFnZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGVuY29kZSgkdGhpcy0+aGlkZW5QYWdlc0ZvbGRlciAuICcvJyAuICRuYW1lLCB0cnVlKTsNCgkJCX0NCgkJCS8vIHJldHVybiB0aGUgbGluaw0KCQkJcmV0dXJuICR0aGlzLT5nZXRMaW5rVVJMKCRwYWdlLCAkbmFtZSwgJGxpbmtUb2tlbik7DQoJCX0sICR0aGlzLT5wYWdlcyk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBpbWFnZSBuYW1lcw0KCSAqDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSBvbiBzdWNjZXNzDQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmFtZXMoKQ0KCXsNCgkJLy8gYnVpbGQgYW5kIHJldHVybiBsaW5rcw0KCQlyZXR1cm4gYXJyYXlfbWFwKCBmdW5jdGlvbigkcGF0aCl7DQoJCQkvLyBidWlsZCB0aGUgbmFtZQ0KCQkJcmV0dXJuIHN0cl9yZXBsYWNlKGFycmF5KCcuLycsICcuJyksICcnLCAkcGF0aCk7DQoJCX0sICR0aGlzLT5wYWdlcyk7DQoJfQ0KDQo=', '[[[Component]]] Bridge To [[[curriculumbuilder_link_name]]]', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQkvLyBjaGVjayB0aGF0IFtbW2N1cnJpY3VsdW1idWlsZGVyXV1dIGlzIGluc3RhbGxlZA0KCQkJJHBhdGhUb0NvcmUgPSBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjdXJyaWN1bHVtYnVpbGRlcl1dXS9oZWxwZXJzL1tbW2N1cnJpY3VsdW1idWlsZGVyXV1dLnBocCc7DQoJCQlpZiAoIUpGaWxlOjpleGlzdHMoJHBhdGhUb0NvcmUpKQ0KCQkJew0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdbW1tjdXJyaWN1bHVtYnVpbGRlcl9hY3JvbnltXV1dIG11c3QgZmlyc3QgYmUgaW5zdGFsbGVkIGZyb20gPGEgaHJlZj0iW1tbZ2V0X2N1cnJpY3VsdW1idWlsZGVyX2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjdXJyaWN1bHVtYnVpbGRlcl9saW5rX25hbWVdXV08L2E+LicsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0=', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"8\"},\"property_selection1\":{\"property\":\"9\"},\"property_selection2\":{\"property\":\"7\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Bridge To Curriculum Builder', '', 1, '', '', 1, '2019-10-22 20:48:43', '2021-10-21 23:54:58', 172, '', 4), +(9, '', '', '', '', '', '', '', '', '', '', '', '', '', 1, 'Loading WHMCS Products details', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"WHMCS\",\"label\":\"WHMCS Access Details\",\"fields_rules_paths\":\"2\",\"fields\":{\"fields0\":{\"field\":\"2678\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2677\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"324\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2712\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2713\",\"custom_value\":\"\"}}}}', 'e8be5861-f9eb-4d35-890b-14352e8ec86e', '', 3, '{\"method_selection0\":{\"method\":\"16\"}}', 'CS8qKg0KCSAqIEFQSSBVUkwNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJpdmF0ZSAkdXJsOw0KDQoJLyoqDQoJICogU0hPUCBVUkwNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAgMS4wLjMNCgkgKi8NCglwcml2YXRlICRzaG9wdXJsOw0KDQoJLyoqDQoJICogQVBJIElERU5USUZJRVJfT1JfQURNSU5fVVNFUk5BTUUNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJpdmF0ZSAkdXNlcm5hbWU7DQoNCgkvKioNCgkgKiBBUEkgU0VDUkVUX09SX0hBU0hFRF9QQVNTV09SRA0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwcml2YXRlICRwYXNzd29yZDsNCg0KCS8qKg0KCSAqIEFQSSBBQ1RJVkUgQ1VSUkVOQ1kNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJpdmF0ZSAkY3VycmVuY3k7DQoNCgkvKioNCgkgKiBBZGQgdnVlIHRvIHBhZ2UgaGVhZGVyDQoJICoNCgkgKiBAdmFyICAgIGJvb2wNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwcml2YXRlICAkYWRkVnVlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIFRoZSBjdXJyZW5jaWVzDQoJICoNCgkgKiBAdmFyICBhcnJheQ0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXByaXZhdGUgICRjdXJyZW5jaWVzOw0KDQoJLyoqDQoJICogVGhlIHByb2R1Y3RzDQoJICoNCgkgKiBAdmFyICBhcnJheQ0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXByaXZhdGUgICRwcm9kdWN0cyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiB3aG1jcyBzdHJpbmcgbmFtZQ0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSAxLjANCgkgKi8NCglwcml2YXRlICRfd2htY3M7DQoNCgkvKioNCgkgKiB3aG1jcyBhY3Rpb24gbmFtZQ0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSAxLjANCgkgKi8NCglwcml2YXRlICRfd2htY3Nfb3BlbjsNCg0KCS8qKg0KCSAqIHZ1ZSBjYWxsIHRyaWdnZXINCgkgKg0KCSAqIEB2YXIgICBzdHJpbmcNCgkgKiBAc2luY2UgMS4wDQoJICovDQoJcHJpdmF0ZSAkX3dobWNzX3Z1ZTsNCg0KCS8qKg0KCSAqIHZ1ZSBlbmQgdGFyZ2V0DQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDEuMA0KCSAqLw0KCXByaXZhdGUgJF93aG1jc192dWVfOw0KDQoJLyoqDQoJICogZW5kX2Nsb3NpbmcgdGFyZ2V0DQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDEuMA0KCSAqLw0KCXByaXZhdGUgJF9jbG9zaW5nOw0KDQoJLyoqDQoJICogQXBwbGljYXRpb24gb2JqZWN0DQoJICoNCgkgKiBAdmFyICAgIENNU0FwcGxpY2F0aW9uDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGFwcDsNCg0KCS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzdGFnZSBpbiBwcmVwYXJpbmcgY29udGVudCBmb3Igb3V0cHV0IGFuZCBpcyB0aGUNCgkgKiBtb3N0IGNvbW1vbiBwb2ludCBmb3IgY29udGVudCBvcmllbnRhdGVkIHBsdWdpbnMgdG8gZG8gdGhlaXIgd29yay4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gdGhlIHBsdWdpbi4NCgkgKiBAcGFyYW0gICBvYmplY3QgICAmJHJvdyAgICAgVGhlIGFydGljbGUgb2JqZWN0LiAgTm90ZSAkYXJ0aWNsZS0+dGV4dCBpcyBhbHNvIGF2YWlsYWJsZQ0KCSAqIEBwYXJhbSAgIG1peGVkICAgICYkcGFyYW1zICBUaGUgYXJ0aWNsZSBwYXJhbXMNCgkgKiBAcGFyYW0gICBpbnRlZ2VyICAkcGFnZSAgICAgVGhlICdwYWdlJyBudW1iZXINCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRQcmVwYXJlKCRjb250ZXh0LCAmJHJvdywgJiRwYXJhbXMsICRwYWdlID0gMCkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBIVE1MIHN0cmVhbQ0KCQlpZiAoJHRoaXMtPmFwcC0+aXNDbGllbnQoJ2FkbWluaXN0cmF0b3InKSB8fCAkdGhpcy0+YXBwLT5pbnB1dC0+Z2V0Q21kKCdmb3JtYXQnLCAnaHRtbCcpICE9ICdodG1sJykNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJLy8gc2V0IGNhbGwgc3RyaW5nDQoJCWlmICghaXNzZXQoJHRoaXMtPl93aG1jcykpDQoJCXsNCgkJCSR0aGlzLT5fd2htY3MgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2NhbGxfc3RyaW5nJywgJ1dITUNTJyk7DQoJCQkvLyBzZXQgd2htY3MgcGxhY2Vob2xkZXIgb3BlbmluZyB0YWcNCgkJCSR0aGlzLT5fd2htY3Nfb3BlbiA9ICd7JyAuICR0aGlzLT5fd2htY3M7DQoJCQkvLyBzZXQgd2htY3MgdnVlIHRyaWdnZXIgb3BlbmluZyB0YWcNCgkJCSR0aGlzLT5fd2htY3NfdnVlID0gJHRoaXMtPl93aG1jc19vcGVuIC4gJz0nOw0KCQkJLy8gc2V0IHdobWNzIHZ1ZSB0cmlnZ2VyIGVuZCB0YWcNCgkJCSR0aGlzLT5fd2htY3NfdnVlXyA9ICR0aGlzLT5fd2htY3Nfb3BlbiAuICcvJzsNCgkJCS8vIHNldCBjbG9zaW5nIHRhZw0KCQkJJHRoaXMtPl9jbG9zaW5nID0gJ30nOw0KCQl9DQoNCgkJLy8gU2ltcGxlIHBlcmZvcm1hbmNlIGNoZWNrIHRvIGRldGVybWluZSB3aGV0aGVyIGJvdCBzaG91bGQgcHJvY2VzcyBmdXJ0aGVyDQoJCWlmIChzdHJwb3MoJHJvdy0+dGV4dCwgJHRoaXMtPl93aG1jc19vcGVuKSA9PT0gZmFsc2UpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KCQkvLyBnZXQgYWxsIGFjdGlvbnMgY2FsbHMNCgkJJGFjdGlvbnMgPSAkdGhpcy0+Z2V0QWxsQmV0d2Vlbigkcm93LT50ZXh0LCAkdGhpcy0+X3dobWNzX3Z1ZSwgJHRoaXMtPl9jbG9zaW5nKTsNCgkJLy8gdXBkYXRlIGlmIGZvdW5kDQoJCSR0aGlzLT5fZG9WdWUoJHJvdy0+dGV4dCwgJGFjdGlvbnMpOw0KCQkvLyBnZXQgYWxsIGFjdGlvbnMgY2FsbHMNCgkJJGFjdGlvbnMgPSAkdGhpcy0+Z2V0QWxsQmV0d2Vlbigkcm93LT50ZXh0LCAkdGhpcy0+X3dobWNzX29wZW4sICR0aGlzLT5fY2xvc2luZyk7DQoJCS8vIHVwZGF0ZSBpZiBmb3VuZA0KCQkkdGhpcy0+X2RvV2htY3MoJHJvdy0+dGV4dCwgJGFjdGlvbnMpOw0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgaXMgdGhlIHdobWNzIHBsYWNlaG9sZGVyIG1ldGhvZA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRleHQgICAgICAgIFRoZSB0ZXh0IHRvIHVwZGF0ZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGFjdGlvbnMgICAgIFRoZSBhY3Rpb24gY2FsbHMgYmVpbmcgbWFkZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb1dobWNzKCYkdGV4dCwgJGFjdGlvbnMpDQoJew0KCQkvLyBPbmx5IGNvbnRpbnVlIGlmIHdlIGhhdmUgYWN0aW9ucw0KCQlpZiAoJHRoaXMtPmNoZWNrQXJyYXkoJGFjdGlvbnMsIHRydWUpKQ0KCQl7DQoJCQkvLyBnZXQgdXNlcm5hbWUgaWYgbm90IHNldA0KCQkJaWYgKCEkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnVzZXJuYW1lKSkNCgkJCXsNCgkJCQkkdGhpcy0+dXNlcm5hbWUgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3VzZXJuYW1lJywgbnVsbCk7DQoJCQl9DQoJCQkvLyBnZXQgcGFzc3dvcmQgaWYgbm90IHNldA0KCQkJaWYgKCEkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnBhc3N3b3JkKSkNCgkJCXsNCgkJCQkkdGhpcy0+cGFzc3dvcmQgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3Bhc3N3b3JkJywgbnVsbCk7DQoJCQl9DQoJCQkvLyBnZXQgdXJsIGlmIG5vdCBzZXQNCgkJCWlmICghJHRoaXMtPmNoZWNrU3RyaW5nKCR0aGlzLT51cmwpKQ0KCQkJew0KCQkJCSR0aGlzLT51cmwgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3VybCcsIG51bGwpOw0KCQkJCS8vIGJ1aWxkIHNob3AgVVJMIGJhc2VkIG9uIGFmaWxpYXRpb24gc3RhdHVzDQoJCQkJJGFjdGl2YXRlX2FmZmlsaWF0ZSA9ICR0aGlzLT5wYXJhbXMtPmdldCgnYWN0aXZhdGVfYWZmaWxpYXRlX3Byb2dyYW0nLCAwKTsNCgkJCQlpZiAoMSA9PSAkYWN0aXZhdGVfYWZmaWxpYXRlKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPnNob3B1cmwgPSAkdGhpcy0+dXJsIC4gJy9hZmYucGhwP2FmZj0nIC4gKGludCkgJHRoaXMtPnBhcmFtcy0+Z2V0KCdhZmZpbGlhdGVfaWQnLCAwKSAuICcmYT1hZGQnOyANCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRoaXMtPnNob3B1cmwgPSAkdGhpcy0+dXJsIC4gJy9jYXJ0LnBocD9hPWFkZCc7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIG5lZWRlZCBkZXRhaWxzIHRvIGNhbGwNCgkJCWlmICgkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnVzZXJuYW1lKSAmJiAkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnBhc3N3b3JkKSAmJiAkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPnVybCkpDQoJCQl7DQoJCQkJLy8gZ2V0IGdsb2JhbCBjdXJyZW5jeQ0KCQkJCWlmICghJHRoaXMtPmNoZWNrU3RyaW5nKCR0aGlzLT5jdXJyZW5jeSkpDQoJCQkJew0KCQkJCQkkdGhpcy0+Y3VycmVuY3kgPSBzdHJ0b3VwcGVyKCR0aGlzLT5wYXJhbXMtPmdldCgnY3VycmVuY3knLCAnVVNEJykpOw0KCQkJCX0NCgkJCQkvLyBnZXQgYXJyYXkgZ2x1ZQ0KCQkJCSRnbHVlID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhcnJheV9nbHVlJywgJywgJyk7DQoJCQkJLy8gc2V0IGVtcHR5IElEIGFycmF5DQoJCQkJJGlkcyA9IGFycmF5KCk7DQoJCQkJJGlkc19xdWVyeSA9IGFycmF5KCk7DQoJCQkJJGRlYnVnID0gZmFsc2U7DQoJCQkJLy8gdXBkYXRlcg0KCQkJCSR1cGRhdGUgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKCRhY3Rpb25zIGFzICRxdWVyeSkNCgkJCQl7DQoJCQkJCS8vIGNsZWFyIG91dCB0aGUgY2FsbA0KCQkJCQkkdXBkYXRlWyR0aGlzLT5fd2htY3Nfb3BlbiAuICAkcXVlcnkgLiAkdGhpcy0+X2Nsb3NpbmddID0gJyc7DQoJCQkJCS8vIGdldCB0aGUgaW5wdXRzDQoJCQkJCSRxdWVyeUFycmF5ID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnfCcsIHRyaW0oJHF1ZXJ5KSkpOw0KCQkJCQkvLyBjb250aW51ZSBvbmx5IGlmIHdlIGhhdmUgdmFsdWVzDQoJCQkJCWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkcXVlcnlBcnJheSwgdHJ1ZSkpDQoJCQkJCXsNCgkJCQkJCS8vIG9ubHkgb25lIElEIHBlci9xdWVyeQ0KCQkJCQkJJHNlYXJjaCA9IHRydWU7DQoJCQkJCQlmb3JlYWNoICgkcXVlcnlBcnJheSBhcyAkcXVlcnlWYWx1ZSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgaWQgcXVlcnkNCgkJCQkJCQlpZiAoJHNlYXJjaCAmJiBpc19udW1lcmljKCRxdWVyeVZhbHVlKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRpZCA9IChpbnQpICRxdWVyeVZhbHVlOw0KCQkJCQkJCQkvLyBzZXQgdGhlIHByb2R1Y3QgSUQgYXJyYXkNCgkJCQkJCQkJJGlkc1skaWRdID0gJGlkOw0KCQkJCQkJCQkvLyBtYWtlIHN1cmUgdGhlIGFycmF5IGlzIHNldA0KCQkJCQkJCQlpZiAoIWlzc2V0KCRpZHNfcXVlcnlbJGlkXSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRpZHNfcXVlcnlbJGlkXSA9IGFycmF5KCk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gd2Ugc2V0IHRoZSBidWlsZGVyIHF1ZXJ5DQoJCQkJCQkJCSRpZHNfcXVlcnlbJGlkXVskcXVlcnldID0gICR0aGlzLT5tZXJnZUFycmF5cyhhcnJheV9tYXAoIGZ1bmN0aW9uICgkdmFsKSB1c2UoJGlkKSB7DQoJCQkJCQkJCQkvLyBtYWtlIHN1cmUgaXQgaXMgbm90IGFuIElEDQoJCQkJCQkJCQlpZiAoIWlzX251bWVyaWMoJHZhbCkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gc2V0IHNvbWUgb3B0aW9ucw0KCQkJCQkJCQkJCSRsb3dlciA9IHN0cnRvbG93ZXIoJHZhbCk7DQoJCQkJCQkJCQkJJHVwcGVyID0gc3RydG91cHBlcigkdmFsKTsNCgkJCQkJCQkJCQlpZiAoJGxvd2VyID09PSAnbW9udGhseScgfHwgJGxvd2VyID09PSAncXVhcnRlcmx5JyB8fA0KCQkJCQkJCQkJCQkkbG93ZXIgPT09ICdzZW1pYW5udWFsbHknIHx8ICRsb3dlciA9PT0gJ2FubnVhbGx5JyB8fA0KCQkJCQkJCQkJCQkkbG93ZXIgPT09ICdiaWVubmlhbGx5JyB8fCAkbG93ZXIgPT09ICd0cmllbm5pYWxseScgfHwNCgkJCQkJCQkJCQkJJGxvd2VyID09PSAnbXNldHVwZmVlJyB8fCAkbG93ZXIgPT09ICdxc2V0dXBmZWUnIHx8DQoJCQkJCQkJCQkJCSRsb3dlciA9PT0gJ3NzZXR1cGZlZScgfHwgJGxvd2VyID09PSAnYXNldHVwZmVlJyB8fA0KCQkJCQkJCQkJCQkkbG93ZXIgPT09ICdic2V0dXBmZWUnIHx8ICRsb3dlciA9PT0gJ3RzZXR1cGZlZScgKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJLy8gbWFwIElEIHRvIHRlcm0NCgkJCQkJCQkJCQkJcmV0dXJuIGFycmF5KCAndGVybScgPT4gJGxvd2VyKTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJZWxzZWlmICgkbG93ZXIgPT09ICR2YWwgJiYgJ2RlYnVnJyAhPT0gJHZhbCkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCS8vIG1hcCBJRCB0byB0eXBlIG9wdGlvbg0KCQkJCQkJCQkJCQlyZXR1cm4gYXJyYXkoICd0eXBlJyA9PiAkbG93ZXIpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQllbHNlaWYgKCR1cHBlciA9PT0gJHZhbCkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCS8vIG1hcCBJRCB0byBjdXJyZW5jeQ0KCQkJCQkJCQkJCQlyZXR1cm4gYXJyYXkoICdjdXJyZW5jeScgPT4gJHVwcGVyKTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlyZXR1cm4gYXJyYXkoJ2lkJyA9PiAkaWQpOw0KCQkJCQkJCQl9LCAkcXVlcnlBcnJheSkpOw0KCQkJCQkJCQkvLyBvbmx5IG9uZSBJRCBwZXIvcXVlcnkNCgkJCQkJCQkJJHNlYXJjaCA9IGZhbHNlOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlaWYgKCFpc19udW1lcmljKCRxdWVyeVZhbHVlKSAmJiBzdHJ0b2xvd2VyKCRxdWVyeVZhbHVlKSA9PT0gJ2RlYnVnJykNCgkJCQkJCQl7DQoJCQkJCQkJCSRkZWJ1ZyA9IHRydWU7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGdldCB0aGUgcHJvZHVjdHMNCgkJCQlpZiAoKCRwcm9kdWN0cyA9ICR0aGlzLT5nZXRQcm9kdWN0cygkaWRzKSkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIHN1Y2Nlc3MNCgkJCQkJaWYgKCRwcm9kdWN0cy0+cmVzdWx0ID09PSAnc3VjY2VzcycpDQoJCQkJCXsNCgkJCQkJCWZvcmVhY2ggKCRwcm9kdWN0cy0+cHJvZHVjdHMtPnByb2R1Y3QgYXMgJHByb2R1Y3QpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKGlzc2V0KCRpZHNfcXVlcnlbJHByb2R1Y3QtPnBpZF0pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJZm9yZWFjaCAoJGlkc19xdWVyeVskcHJvZHVjdC0+cGlkXSBhcyAkcXVlcnkgPT4gJHRyaWdnZXJzKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkvLyBzZXQgdGhlIGRldGFpbHMNCgkJCQkJCQkJCWlmIChpc3NldCgkdHJpZ2dlcnNbJ3R5cGUnXSkgJiYgJ3VybCcgIT09ICR0cmlnZ2Vyc1sndHlwZSddICYmIGlzc2V0KCRwcm9kdWN0LT57JHRyaWdnZXJzWyd0eXBlJ119KSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQlpZiAoJHRoaXMtPmNoZWNrU3RyaW5nKCRwcm9kdWN0LT57JHRyaWdnZXJzWyd0eXBlJ119KSkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSR1cGRhdGVbJHRoaXMtPl93aG1jc19vcGVuIC4gICRxdWVyeSAuICR0aGlzLT5fY2xvc2luZ10gPSAkcHJvZHVjdC0+eyR0cmlnZ2Vyc1sndHlwZSddfTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJZWxzZWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkcHJvZHVjdC0+eyR0cmlnZ2Vyc1sndHlwZSddfSkpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkdXBkYXRlWyR0aGlzLT5fd2htY3Nfb3BlbiAuICAkcXVlcnkgLiAkdGhpcy0+X2Nsb3NpbmddID0gaW1wbG9kZSgkZ2x1ZSwgJHByb2R1Y3QtPnskdHJpZ2dlcnNbJ3R5cGUnXX0pOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2UNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBzZXQgdGhlIGN1cnJlbmN5DQoJCQkJCQkJCQkJaWYgKGlzc2V0KCR0cmlnZ2Vyc1snY3VycmVuY3knXSkpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkY3VycmVuY3kgPSAkdHJpZ2dlcnNbJ2N1cnJlbmN5J107DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCWVsc2UNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSRjdXJyZW5jeSA9ICR0aGlzLT5jdXJyZW5jeTsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJLy8gc2V0IHRoZSB0ZXJtDQoJCQkJCQkJCQkJaWYgKGlzc2V0KCR0cmlnZ2Vyc1sndGVybSddKSkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSR0ZXJtID0gJHRyaWdnZXJzWyd0ZXJtJ107DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCWVsc2UNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSR0ZXJtID0gJ21vbnRobHknOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkvLyBzZXQgdXJsDQoJCQkJCQkJCQkJaWYgKGlzc2V0KCR0cmlnZ2Vyc1sndHlwZSddKSAmJiAndXJsJyA9PT0gJHRyaWdnZXJzWyd0eXBlJ10pDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQlpZiAoaXNzZXQoJHByb2R1Y3QtPnVybHMtPnskY3VycmVuY3l9LT57JHRlcm19KSkNCgkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJaWYgKCdtb250aGx5JyA9PT0gJHRlcm0pDQoJCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkJJHVwZGF0ZVskdGhpcy0+X3dobWNzX29wZW4gLiAgJHF1ZXJ5IC4gJHRoaXMtPl9jbG9zaW5nXSA9ICBzdHJfcmVwbGFjZSgnJmJpbGxpbmdjeWNsZT1tb250aGx5JywgJycsICRwcm9kdWN0LT51cmxzLT57JGN1cnJlbmN5fS0+eyR0ZXJtfSk7DQoJCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkJJHVwZGF0ZVskdGhpcy0+X3dobWNzX29wZW4gLiAgJHF1ZXJ5IC4gJHRoaXMtPl9jbG9zaW5nXSA9ICRwcm9kdWN0LT51cmxzLT57JGN1cnJlbmN5fS0+eyR0ZXJtfTsNCgkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkvLyBzZXQgcHJpY2UNCgkJCQkJCQkJCQllbHNlaWYgKGlzc2V0KCRwcm9kdWN0LT5wcmljaW5nLT57JGN1cnJlbmN5fS0+eyR0ZXJtfSkgJiYgJzAuMDAnICE9PSAkcHJvZHVjdC0+cHJpY2luZy0+eyRjdXJyZW5jeX0tPnskdGVybX0pDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkdXBkYXRlWyR0aGlzLT5fd2htY3Nfb3BlbiAuICAkcXVlcnkgLiAkdGhpcy0+X2Nsb3NpbmddID0gJHByb2R1Y3QtPnByaWNpbmctPnskY3VycmVuY3l9LT5wcmVmaXggLiAnICcgLiAkcHJvZHVjdC0+cHJpY2luZy0+eyRjdXJyZW5jeX0tPnskdGVybX07DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIGRlYnVnDQoJCQkJCWlmICgkZGVidWcpDQoJCQkJCXsNCgkJCQkJCSR0ZXh0IC49ICc8YnIgLz48cHJlPicgLiBqc29uX2VuY29kZSgkcHJvZHVjdHMsIEpTT05fUFJFVFRZX1BSSU5UKSAuICc8L3ByZT4nOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSB0aGUgdGV4dA0KCQkJCWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkdXBkYXRlKSkNCgkJCQl7DQoJCQkJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkdXBkYXRlKSwgYXJyYXlfdmFsdWVzKCR1cGRhdGUpLCAkdGV4dCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogVGhpcyBpcyB0aGUgdnVlIG1ldGhvZA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRleHQgICAgICAgIFRoZSB0ZXh0IHRvIHVwZGF0ZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGFjdGlvbnMgICAgIFRoZSBhY3Rpb24gY2FsbHMgYmVpbmcgbWFkZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb1Z1ZSgmJHRleHQsICRhY3Rpb25zKQ0KCXsNCgkJLy8gT25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGFjdGlvbnMNCgkJaWYgKCR0aGlzLT5jaGVja0FycmF5KCRhY3Rpb25zLCB0cnVlKSkNCgkJew0KCQkJLy8gZ2V0IHVzZXJuYW1lIGlmIG5vdCBzZXQNCgkJCWlmICghJHRoaXMtPmNoZWNrU3RyaW5nKCR0aGlzLT51c2VybmFtZSkpDQoJCQl7DQoJCQkJJHRoaXMtPnVzZXJuYW1lID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCd1c2VybmFtZScsIG51bGwpOw0KCQkJfQ0KCQkJLy8gZ2V0IHBhc3N3b3JkIGlmIG5vdCBzZXQNCgkJCWlmICghJHRoaXMtPmNoZWNrU3RyaW5nKCR0aGlzLT5wYXNzd29yZCkpDQoJCQl7DQoJCQkJJHRoaXMtPnBhc3N3b3JkID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdwYXNzd29yZCcsIG51bGwpOw0KCQkJfQ0KCQkJLy8gZ2V0IHVybCBpZiBub3Qgc2V0DQoJCQlpZiAoISR0aGlzLT5jaGVja1N0cmluZygkdGhpcy0+dXJsKSkNCgkJCXsNCgkJCQkkdGhpcy0+dXJsID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCd1cmwnLCBudWxsKTsNCgkJCQkvLyBidWlsZCBzaG9wIFVSTCBiYXNlZCBvbiBhZmlsaWF0aW9uIHN0YXR1cw0KCQkJCSRhY3RpdmF0ZV9hZmZpbGlhdGUgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FjdGl2YXRlX2FmZmlsaWF0ZV9wcm9ncmFtJywgMCk7DQoJCQkJaWYgKDEgPT0gJGFjdGl2YXRlX2FmZmlsaWF0ZSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5zaG9wdXJsID0gJHRoaXMtPnVybCAuICcvYWZmLnBocD9hZmY9JyAuIChpbnQpICR0aGlzLT5wYXJhbXMtPmdldCgnYWZmaWxpYXRlX2lkJywgMCkgLiAnJmE9YWRkJzsgDQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSR0aGlzLT5zaG9wdXJsID0gJHRoaXMtPnVybCAuICcvY2FydC5waHA/YT1hZGQnOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGFkZCB2dWUgdG8gdGhlIGhlYWRlciBvZiB0aGUgZG9jdW1lbnQgaWYgbmVlZGVkIChkZWZhdWx0IHRydWUpDQoJCQlpZiAoJHRoaXMtPmFkZFZ1ZSAmJiAkdGhpcy0+cGFyYW1zLT5nZXQoJ2FkZF92dWUnLCAxKSkNCgkJCXsNCgkJCQlGYWN0b3J5OjpnZXREb2N1bWVudCgpLT5hZGRTY3JpcHQoSm9vbWxhX19fZWVjYzE0M2VfYjVjZl80YzMzX2JhNGRfOTdkYTFkZjYxNDIyX19fUG93ZXI6OnJvb3QodHJ1ZSkgLicvcGx1Z2lucy9jb250ZW50L3dobWNzcHJvZHVjdHMvanMvdnVlLm1pbi5qcycsIGFycmF5KCd2ZXJzaW9uJyA9PiAnYXV0bycpKTsNCgkJCX0NCgkJCS8vIGRvIG5vdCBhZGQgdnVlIGFnYWluDQoJCQkkdGhpcy0+YWRkVnVlID0gZmFsc2U7DQoJCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGRldGFpbHMgdG8gY2FsbA0KCQkJaWYgKCR0aGlzLT5jaGVja1N0cmluZygkdGhpcy0+dXNlcm5hbWUpICYmICR0aGlzLT5jaGVja1N0cmluZygkdGhpcy0+cGFzc3dvcmQpICYmICR0aGlzLT5jaGVja1N0cmluZygkdGhpcy0+dXJsKSkNCgkJCXsNCgkJCQkvLyBnZXQgZ2xvYmFsIGN1cnJlbmN5DQoJCQkJaWYgKCEkdGhpcy0+Y2hlY2tTdHJpbmcoJHRoaXMtPmN1cnJlbmN5KSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5jdXJyZW5jeSA9IHN0cnRvdXBwZXIoJHRoaXMtPnBhcmFtcy0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKSk7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZXINCgkJCQkkdXBkYXRlID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoICgkYWN0aW9ucyBhcyAkcXVlcnkpDQoJCQkJew0KCQkJCQkvLyBjbGVhciBvdXQgdGhlIGNhbGwNCgkJCQkJJHVwZGF0ZVskdGhpcy0+X3dobWNzX3Z1ZSAuICAkcXVlcnkgLiAkdGhpcy0+X2Nsb3NpbmddID0gJyc7DQoJCQkJCSR1cGRhdGVbJHRoaXMtPl93aG1jc192dWVfIC4gICRxdWVyeSAuICR0aGlzLT5fY2xvc2luZ10gPSAnJzsNCgkJCQkJLy8gZ2V0IHRoZSBpbnB1dHMNCgkJCQkJJHF1ZXJ5QXJyYXkgPSBhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCd8JywgdHJpbSgkcXVlcnkpKSk7DQoJCQkJCS8vIGNvbnRpbnVlIG9ubHkgaWYgd2UgaGF2ZSB2YWx1ZXMNCgkJCQkJaWYgKCR0aGlzLT5jaGVja0FycmF5KCRxdWVyeUFycmF5LCB0cnVlKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IHRoaXMNCgkJCQkJCSRpZHMgPSBhcnJheSgpOw0KCQkJCQkJJHR5cGUgPSAncGlkJzsNCgkJCQkJCSRkZWJ1ZyA9IGZhbHNlOw0KCQkJCQkJJGN1cnJlbmN5ID0gJHRoaXMtPmN1cnJlbmN5Ow0KCQkJCQkJZm9yZWFjaCAoJHF1ZXJ5QXJyYXkgYXMgJHF1ZXJ5VmFsdWUpDQoJCQkJCQl7DQoJCQkJCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGlkIHF1ZXJ5DQoJCQkJCQkJaWYgKGlzX251bWVyaWMoJHF1ZXJ5VmFsdWUpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGlkc1soaW50KSAkcXVlcnlWYWx1ZV0gPSAoaW50KSAkcXVlcnlWYWx1ZTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgkdGhpcy0+Y2hlY2tTdHJpbmcoJHF1ZXJ5VmFsdWUpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gc2V0IHNvbWUgb3B0aW9ucw0KCQkJCQkJCQkkbG93ZXIgPSBzdHJ0b2xvd2VyKCRxdWVyeVZhbHVlKTsNCgkJCQkJCQkJJHVwcGVyID0gc3RydG91cHBlcigkcXVlcnlWYWx1ZSk7DQoJCQkJCQkJCWlmICgkbG93ZXIgPT09ICdwaWQnIHx8ICRsb3dlciA9PT0gJ2dpZCcpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vIHdlIGNhbiBvbmx5IGhhdmUgb25lIHR5cGUgKGRvIG5vdCBtaXggdGhlbSkNCgkJCQkJCQkJCSR0eXBlID0gc3RydG9sb3dlcigkcXVlcnlWYWx1ZSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZWlmICgkbG93ZXIgPT09ICdkZWJ1ZycpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkZWJ1ZyA9IHRydWU7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZWlmICgkdXBwZXIgPT09ICRxdWVyeVZhbHVlKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkY3VycmVuY3kgPSAkdXBwZXI7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQkvLyBnZXQgcHJvZHVjdHMNCgkJCQkJCWlmICgoJHByb2R1Y3RzID0gJHRoaXMtPmdldFByb2R1Y3RzKCRpZHMsICR0eXBlLCAkY3VycmVuY3kpKSAhPT0gZmFsc2UpDQoJCQkJCQl7DQoJCQkJCQkJLy8gdGhpcyBhcHAgYmxvY2sgaXNvbGF0aW9uIElEDQoJCQkJCQkJJGFwcElEID0gJHRoaXMtPnJhbmRvbWtleSgxMCk7DQoJCQkJCQkJJHByb2R1Y3RzLT5hcHBfaWQgPSAkYXBwSUQ7DQoJCQkJCQkJJGRhdGEgPSBqc29uX2VuY29kZSgkcHJvZHVjdHMpOw0KCQkJCQkJCS8vIGFkZCB0aGUgYXBwIGRpdg0KCQkJCQkJCSR1cGRhdGVbJHRoaXMtPl93aG1jc192dWUgLiAgJHF1ZXJ5IC4gJHRoaXMtPl9jbG9zaW5nXSA9ICI8ZGl2IGlkPSckYXBwSUQnPiI7DQoJCQkJCQkJJHVwZGF0ZVskdGhpcy0+X3dobWNzX3Z1ZV8gLiAgJHF1ZXJ5IC4gJHRoaXMtPl9jbG9zaW5nXSA9ICI8L2Rpdj48c2NyaXB0PnZhciBkYXRhJGFwcElEID0gJGRhdGE7dmFyIGFwcCRhcHBJRCA9IG5ldyBWdWUoe2VsOiAnIyRhcHBJRCcsIGRhdGE6IGRhdGEkYXBwSUR9KTs8L3NjcmlwdD4iOw0KCQkJCQkJCS8vIGRlYnVnDQoJCQkJCQkJaWYgKCRkZWJ1ZykNCgkJCQkJCQl7DQoJCQkJCQkJCSR0ZXh0IC49ICc8YnIgLz48cHJlPicgLiBqc29uX2VuY29kZSgkcHJvZHVjdHMsIEpTT05fUFJFVFRZX1BSSU5UKSAuICc8L3ByZT4nOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyB1cGRhdGUgdGhlIHRleHQNCgkJCQlpZiAoJHRoaXMtPmNoZWNrQXJyYXkoJHVwZGF0ZSkpDQoJCQkJew0KCQkJCQkkdGV4dCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHVwZGF0ZSksIGFycmF5X3ZhbHVlcygkdXBkYXRlKSwgJHRleHQpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgZ2V0cyB0aGUgcHJvZHVjdHMNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGlkcyAgICAgICAgVGhlIGlkcyB0byBnZXQNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdHlwZSAgICAgVGhlIHR5cGUgb2YgaWRzDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGN1cnJlbmN5ICAgICBUaGUgYWN0aXZlIGN1cnJlbmN5IGZvciB0aGlzIGJsb2NrDQoJICoNCgkgKiBAcmV0dXJuICBvYmplY3QNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRQcm9kdWN0cygkaWRzLCAkdHlwZSA9ICdwaWQnLCAkY3VycmVuY3kgPSAnVVNEJykNCgl7DQoJCWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkaWRzKSAmJiAkdGhpcy0+Y2hlY2tTdHJpbmcoJHR5cGUpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIG1lbW9yeSBrZXkNCgkJCSRrZXkgPSBtZDUoc2VyaWFsaXplKCRpZHMpIC4gJHR5cGUpOw0KCQkJLy8gY2hlY2sgaWYgdGhlc2Ugd2VyZSBhbHJlYWR5IHNldA0KCQkJaWYgKGlzc2V0KCR0aGlzLT5wcm9kdWN0c1ska2V5XSkpDQoJCQl7DQoJCQkJLy8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IGN1cnJlbmN5IGlzIGFjdGl2ZQ0KCQkJCWZvcmVhY2ggKCR0aGlzLT5wcm9kdWN0c1ska2V5XS0+cHJvZHVjdHMtPnByb2R1Y3QgYXMgJiRwcm9kdWN0KQ0KCQkJCXsNCgkJCQkJJHByb2R1Y3QtPmFjdGl2ZV9jdXJyZW5jeSA9ICRjdXJyZW5jeTsNCgkJCQl9DQoJCQkJcmV0dXJuICR0aGlzLT5wcm9kdWN0c1ska2V5XTsNCgkJCX0NCgkJCS8vIHdlIG1ha2UgYSBuZXcgY2FsbA0KCQkJJGNoID0gY3VybF9pbml0KCk7DQoJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdGhpcy0+dXJsIC4gJy9pbmNsdWRlcy9hcGkucGhwJyk7DQoJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgMSk7DQoJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywNCgkJCQlodHRwX2J1aWxkX3F1ZXJ5KA0KCQkJCQlhcnJheSgNCgkJCQkJCSdhY3Rpb24nID0+ICdHZXRQcm9kdWN0cycsDQoJCQkJCQkndXNlcm5hbWUnID0+ICR0aGlzLT51c2VybmFtZSwNCgkJCQkJCSdwYXNzd29yZCcgPT4gJHRoaXMtPnBhc3N3b3JkLA0KCQkJCQkJJHR5cGUgPT4gaW1wbG9kZSgnLCcsICRpZHMpLA0KCQkJCQkJJ3Jlc3BvbnNldHlwZScgPT4gJ2pzb24nDQoJCQkJCSkNCgkJCQkpDQoJCQkpOw0KCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCgkJCSRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOw0KCQkJY3VybF9jbG9zZSgkY2gpOw0KCQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSBqc29uIHN0cmluZw0KCQkJaWYgKCR0aGlzLT5jaGVja0pzb24oJHJlc3BvbnNlKSkNCgkJCXsNCgkJCQkvLyB3ZSBtdXN0IHNldCBhIGZldyBkZXRhaWxzDQoJCQkJJHJlc3BvbnNlID0ganNvbl9kZWNvZGUoJHJlc3BvbnNlKTsNCgkJCQkvLyBjaGVjayB0aGF0IHdlIGhhdmUgc3VjY2Vzcw0KCQkJCWlmICgkcmVzcG9uc2UtPnJlc3VsdCA9PT0gJ3N1Y2Nlc3MnKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBnbG9iYWwgYXZhaWxhYmxlIGN1cnJlbmNpZXMNCgkJCQkJJHJlc3BvbnNlLT5jdXJyZW5jeSA9ICRjdXJyZW5jeTsNCgkJCQkJaWYgKCFpc3NldCgkcmVzcG9uc2UtPmN1cnJlbmNpZXNfc2V0KSkNCgkJCQkJew0KCQkJCQkJJGN1cnJlbmNpZXMgPSAkdGhpcy0+Z2V0Q3VycmVuY2llcygpOw0KCQkJCQl9DQoJCQkJCS8vIGNoZWNrIGlmIHdlIHN1Y2NlZWRlZA0KCQkJCQlpZiAoJHRoaXMtPmNoZWNrT2JqZWN0KCRjdXJyZW5jaWVzKSAmJiAkY3VycmVuY2llcy0+cmVzdWx0ID09PSAnc3VjY2VzcycpDQoJCQkJCXsNCgkJCQkJCSRyZXNwb25zZS0+Y3VycmVuY2llc19zZXQgPSB0cnVlOw0KCQkJCQkJJHJlc3BvbnNlLT5jdXJyZW5jaWVzID0gJGN1cnJlbmNpZXMtPmN1cnJlbmNpZXMtPmN1cnJlbmN5Ow0KCQkJCQkJLy8gbm93IGdldCB0aGUgYWN0aXZlIGN1cnJlbmN5IFVSTCBpZA0KCQkJCQkJZm9yZWFjaCAoJHJlc3BvbnNlLT5jdXJyZW5jaWVzIGFzICRfY3VycmVuY3kpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKCRjdXJyZW5jeSA9PT0gJF9jdXJyZW5jeS0+Y29kZSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRyZXNwb25zZS0+Y3VycmVuY3lfaWQgPSAkX2N1cnJlbmN5LT5pZDsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkcmVzcG9uc2UtPmN1cnJlbmNpZXNfc2V0ID0gZmFsc2U7DQoJCQkJCX0NCgkJCQkJLy8gbWF0aCBmb3IgbW9udGhseSBiaWxsaW5nIG1hcHBpbmcNCgkJCQkJJGRpdmlkZSA9IGFycmF5KCdxdWFydGVybHknID0+IDMsICdzZW1pYW5udWFsbHknID0+IDYsICdhbm51YWxseScgPT4gMTIsICdiaWVubmlhbGx5JyA9PiAyNCwgJ3RyaWVubmlhbGx5JyA9PiAzNik7DQoJCQkJCS8vIHNldCB3aG1jcyBzZXR0aW5ncyB0YWdzDQoJCQkJCSR3aG1jc19vcGVuID0gJzwnIC4gJHRoaXMtPl93aG1jczsNCgkJCQkJLy8gc2V0IGNsb3NpbmcgdGFnDQoJCQkJCSR3aG1jc19jbG9zaW5nID0gJzwvJyAuICR0aGlzLT5fd2htY3MgLiAnPic7DQoJCQkJCS8vIHJlbW92ZSB0aGVzZSBmcm9tIGRlc2NyaXB0aW9uDQoJCQkJCSRyZW1vdmVfZGVzYyA9IGFycmF5KCc8IS0tLS0tLS0nID0+ICcnLCAnLS0tLS0tLT4nID0+ICcnKTsNCgkJCQkJJGZpeF91cmwgPSBhcnJheSgnaHR0cHMtLy8nID0+ICdodHRwczovLycsICdodHRwLS8vJyA9PiAnaHR0cDovLycpOw0KCQkJCQlmb3JlYWNoICgkcmVzcG9uc2UtPnByb2R1Y3RzLT5wcm9kdWN0IGFzICRwcm9kdWN0KQ0KCQkJCQl7DQoJCQkJCQkvLyB3ZSBzZXQgdGhlIG1haW4gVVJMDQoJCQkJCQlpZiAoaXNzZXQoJHJlc3BvbnNlLT5jdXJyZW5jeV9pZCkpDQoJCQkJCQl7DQoJCQkJCQkJJHByb2R1Y3QtPnVybCA9ICR0aGlzLT5zaG9wdXJsIC4gJyZwaWQ9JyAuICRwcm9kdWN0LT5waWQgLiAnJmN1cnJlbmN5PScgLiAkcmVzcG9uc2UtPmN1cnJlbmN5X2lkOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCSRwcm9kdWN0LT51cmwgPSAkdGhpcy0+c2hvcHVybCAuICcmcGlkPScgLiAkcHJvZHVjdC0+cGlkOw0KCQkJCQkJfQ0KCQkJCQkJLy8gd2Ugc2V0IHRoZSBhIHVybCBmb3IgZWFjaCBjdXJyZW5jeQ0KCQkJCQkJJHByb2R1Y3QtPnVybHMgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkkcHJvZHVjdC0+bW9udGhseSA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkJCWZvcmVhY2ggKCRyZXNwb25zZS0+Y3VycmVuY2llcyBhcyAkX2N1cnJlbmN5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIG9ubHkgYWRkIGlmIHdlIGhhdmUgYSBwcmljZSBmb3IgdGhhdCBjdXJyZW5jeQ0KCQkJCQkJCWlmIChpc3NldCgkcHJvZHVjdC0+cHJpY2luZy0+eyRfY3VycmVuY3ktPmNvZGV9KSAgJiYgJHRoaXMtPmNoZWNrT2JqZWN0KCRwcm9kdWN0LT5wcmljaW5nLT57JF9jdXJyZW5jeS0+Y29kZX0pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gY3VycmVuY3kgJiBiaWxsaW5nY3ljbGUgdXJsDQoJCQkJCQkJCSRwcm9kdWN0LT51cmxzLT57JF9jdXJyZW5jeS0+Y29kZX0gPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkJCSRwcm9kdWN0LT5tb250aGx5LT57JF9jdXJyZW5jeS0+Y29kZX0gPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkJCWZvcmVhY2ggKCRwcm9kdWN0LT5wcmljaW5nLT57JF9jdXJyZW5jeS0+Y29kZX0gYXMgJGJpbGxpbmdjeWNsZSA9PiAkY29zdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJaWYgKGlzX251bWVyaWMoJGNvc3QpICYmICcwLjAwJyAhPT0gJGNvc3QgJiYgKCdtb250aGx5JyA9PT0gJGJpbGxpbmdjeWNsZSB8fCBpc3NldCgkZGl2aWRlWyRiaWxsaW5nY3ljbGVdKSkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJHByb2R1Y3QtPnVybHMtPnskX2N1cnJlbmN5LT5jb2RlfS0+eyRiaWxsaW5nY3ljbGV9ID0gJHRoaXMtPnNob3B1cmwgLiAnJnBpZD0nIC4gJHByb2R1Y3QtPnBpZCAuICcmY3VycmVuY3k9JyAuICRfY3VycmVuY3ktPmlkIC4gJyZiaWxsaW5nY3ljbGU9JyAuICRiaWxsaW5nY3ljbGU7DQoJCQkJCQkJCQkJLy8gc2V0IHRoZSBtb250aGx5IHByaWNlDQoJCQkJCQkJCQkJaWYgKGlzc2V0KCRkaXZpZGVbJGJpbGxpbmdjeWNsZV0pKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJHByb2R1Y3QtPm1vbnRobHktPnskX2N1cnJlbmN5LT5jb2RlfS0+eyRiaWxsaW5nY3ljbGV9ID0gJHRoaXMtPmJjbWF0aCgnZGl2JywgJGNvc3QsICRkaXZpZGVbJGJpbGxpbmdjeWNsZV0sIDIpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQllbHNlaWYgKCdtb250aGx5JyA9PT0gJGJpbGxpbmdjeWNsZSkNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSRwcm9kdWN0LT5tb250aGx5LT57JF9jdXJyZW5jeS0+Y29kZX0tPnskYmlsbGluZ2N5Y2xlfSA9ICRjb3N0Ow0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIHNldCB0aGUgZ2xvYmFsIGF2YWlsYWJsZSBwYXltZW50IG9wdGlvbnMgKHllcyB0aGUgZmlyc3QgcHJvZHVjdCBzZXRzIHRoZSBzdGFnZSkNCgkJCQkJCWlmICghaXNzZXQoJHJlc3BvbnNlLT5wYXltZW50X29wdGlvbnNfc2V0KSAmJiAncmVjdXJyaW5nJyA9PT0gJHByb2R1Y3QtPnBheXR5cGUgJiYgaXNzZXQoJHByb2R1Y3QtPnByaWNpbmctPiRjdXJyZW5jeSkpDQoJCQkJCQl7DQoJCQkJCQkJJHJlc3BvbnNlLT5wYXltZW50X29wdGlvbnMgPSBhcnJheSgpOw0KCQkJCQkJCWZvcmVhY2ggKCRwcm9kdWN0LT5wcmljaW5nLT4kY3VycmVuY3kgYXMgJGsgPT4gJHYpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoaXNfbnVtZXJpYygkdikgJiYgJzAuMDAnICE9PSAkdiAmJiBzdHJwb3MoJGssICdzZXR1cGZlZScpID09PSBmYWxzZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHJlc3BvbnNlLT5wYXltZW50X29wdGlvbnNbXSA9ICRrOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGNoZWNrIGlmIHdlIHN1Y2NlZWRlZA0KCQkJCQkJCWlmICgkdGhpcy0+Y2hlY2tBcnJheSgkcmVzcG9uc2UtPnBheW1lbnRfb3B0aW9ucykpDQoJCQkJCQkJew0KCQkJCQkJCQkkcmVzcG9uc2UtPnBheW1lbnRfb3B0aW9uc19zZXQgPSB0cnVlOw0KCQkJCQkJCQkkcmVzcG9uc2UtPnBheW1lbnRfb3B0aW9uID0gJ21vbnRobHknOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIG5vdyBleHRyYWN0IHRoZSBzZXR0aW5ncw0KCQkJCQkJJHNldHRpbmdzID0gJHRoaXMtPmdldEFsbEJldHdlZW4oJHByb2R1Y3QtPmRlc2NyaXB0aW9uLCAkd2htY3Nfb3BlbiwgJHdobWNzX2Nsb3NpbmcpOw0KCQkJCQkJaWYgKCR0aGlzLT5jaGVja0FycmF5KCRzZXR0aW5ncykpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJHNldHRpbmdzIGFzICRzZXR0aW5nKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gbWFrZSBzdXJlIHRvIHJlbW92ZSB0aGVzZSBzZXR0aW5ncw0KCQkJCQkJCQkkcmVtb3ZlX2Rlc2NbJHdobWNzX29wZW4gLiAkc2V0dGluZyAuICR3aG1jc19jbG9zaW5nXSA9ICcnOw0KCQkJCQkJCQkvLyBvbmx5IGNvbnRpbnVlIGlmIHNldCBjb3JyZWN0bHkNCgkJCQkJCQkJaWYgKHN0cnBvcygkc2V0dGluZywgJz4nKSAhPT0gZmFsc2UpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXR0aW5nID0gdHJpbShleHBsb2RlKCc+JywgdHJpbSgkc2V0dGluZykpWzBdKTsNCgkJCQkJCQkJCWlmIChzdHJwb3MoJHNldHRpbmcsICc9JykgIT09IGZhbHNlKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRzZXR0aW5nID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnPScsICRzZXR0aW5nKSk7DQoJCQkJCQkJCQkJJHNfa2V5ID0gYXJyYXlfc2hpZnQoJHNldHRpbmcpOw0KCQkJCQkJCQkJCS8vIGNvbGxhcHNlIHRvIHN0cmluZyBhZ2Fpbg0KCQkJCQkJCQkJCSRzZXR0aW5nID0gaW1wbG9kZSgnJywgJHNldHRpbmcpOw0KCQkJCQkJCQkJCWlmIChzdHJwb3MoJHNldHRpbmcsICd8JykgIT09IGZhbHNlKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJHByb2R1Y3QtPnskc19rZXl9ID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCR2KSB1c2UoJGZpeF91cmwpew0KCQkJCQkJCQkJCQkJcmV0dXJuIHRyaW0oc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkZml4X3VybCksIGFycmF5X3ZhbHVlcygkZml4X3VybCksICR2KSk7DQoJCQkJCQkJCQkJCX0sIGV4cGxvZGUoJ3wnLCAkc2V0dGluZykpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkcHJvZHVjdC0+eyRzX2tleX0gPSBzdHJfcmVwbGFjZShhcnJheV9rZXlzKCRmaXhfdXJsKSwgYXJyYXlfdmFsdWVzKCRmaXhfdXJsKSwgJHNldHRpbmcpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2VpZiAoJHRoaXMtPmNoZWNrU3RyaW5nKCRzZXR0aW5nKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkcHJvZHVjdC0+eyRzZXR0aW5nfSA9IHRydWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQkvLyB1cGRhdGUgdGhlIGRlc2NyaXB0aW9ucw0KCQkJCQkJJHByb2R1Y3QtPmRlc2NyaXB0aW9uID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkcmVtb3ZlX2Rlc2MpLCBhcnJheV92YWx1ZXMoJHJlbW92ZV9kZXNjKSwgJHByb2R1Y3QtPmRlc2NyaXB0aW9uKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBsb2FkIHRvIHBsdWdpbiBtZW1vcnkNCgkJCQkkdGhpcy0+cHJvZHVjdHNbJGtleV0gPSAkcmVzcG9uc2U7DQoJCQkJLy8gcmV0dXJuIG9iamVjdA0KCQkJCXJldHVybiAkdGhpcy0+cHJvZHVjdHNbJGtleV07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgZ2V0cyB0aGUgY3VycmVuY2llcyANCgkgKg0KCSAqIEByZXR1cm4gIG9iamVjdHxmYWxzZQ0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEN1cnJlbmNpZXMoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jaGVja09iamVjdCgkdGhpcy0+Y3VycmVuY2llcykpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+Y3VycmVuY2llczsNCgkJfQ0KCQkvLyB3ZSBtYWtlIGEgbmV3IGNhbGwNCgkJJGNoID0gY3VybF9pbml0KCk7DQoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR0aGlzLT51cmwgLiAnL2luY2x1ZGVzL2FwaS5waHAnKTsNCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywNCgkJCWh0dHBfYnVpbGRfcXVlcnkoDQoJCQkJYXJyYXkoDQoJCQkJCSdhY3Rpb24nID0+ICdHZXRDdXJyZW5jaWVzJywNCgkJCQkJJ3VzZXJuYW1lJyA9PiAkdGhpcy0+dXNlcm5hbWUsDQoJCQkJCSdwYXNzd29yZCcgPT4gJHRoaXMtPnBhc3N3b3JkLA0KCQkJCQkncmVzcG9uc2V0eXBlJyA9PiAnanNvbicNCgkJCQkpDQoJCQkpDQoJCSk7DQoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQoJCSRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOw0KCQljdXJsX2Nsb3NlKCRjaCk7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEganNvbiBzdHJpbmcNCgkJaWYgKCR0aGlzLT5jaGVja0pzb24oJHJlc3BvbnNlKSkNCgkJew0KCQkJLy8gbG9hZCB0byBwbHVnaW4gbWVtb3J5DQoJCQkkdGhpcy0+Y3VycmVuY2llcyA9IGpzb25fZGVjb2RlKCRyZXNwb25zZSk7DQoJCQkvLyByZXR1cm4gb2JqZWN0DQoJCQlyZXR1cm4gJHRoaXMtPmN1cnJlbmNpZXM7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPXBsdWdpbkhlbHBlcnNdDQpbQ1VTVE9NQ09ERT10aGlzYmNtYXRoXQ==', 'WHMCSProducts', '', '', '', '', '', '', '', '1.0.3', '{\"property_selection0\":{\"property\":\"7\"},\"property_selection1\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'WHMCS Products', '', 1, '', '', 1, '2019-11-17 01:24:51', '2020-05-24 22:48:27', 84, '', 5), +(10, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to add packaging (bundling of extentions) to JCB. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{}', '63eb11cc-41ba-4c2f-82b3-94487b0caa12', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOyA=', 11, '{}', '', '[[[Component]]] Extention Packaging', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', '', '', '', '1.0.1', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Extention Packaging', '', 1, '', '', 1, '2020-03-19 12:10:12', '2022-10-23 21:12:31', 6, '', 2), +(11, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to link your components to the language packaging and extending options, so you can set all the required details for the integration.', '{\"fields0\":{\"file\":\"joomla_component\",\"fields_name\":\"params.language_options\",\"fieldset\":\"language_options\",\"label\":\"Language Options\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2740\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2604\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2746\",\"custom_value\":\"1\"},\"fields3\":{\"field\":\"2745\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2742\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2741\",\"custom_value\":\"\"}}}}', '7f2c7689-0f46-41c8-ba69-e33cd92cb20f', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uDQoJICoNCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZXBhcmVGb3JtKEZvcm0gJGZvcm0sICRkYXRhKQ0KCXsNCgkJJGNvbnRleHQgPSAkZm9ybS0+Z2V0TmFtZSgpOw0KDQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoc3RycG9zKCRjb250ZXh0LCAnY29tX1tbW2NvbXBvbmVudF1dXS5qb29tbGFfY29tcG9uZW50JykgPT09IDApDQoJCXsNCgkJCS8vIEFkZCB0aGUgZm9ybXMgcGF0aA0KCQkJRm9ybTo6YWRkRm9ybVBhdGgoX19ESVJfXyAuICcvZm9ybXMnKTsNCgkJCS8vIGFkZCB0aGUgYWRtaW4gdmlldyBwYXJhbXMgZm9yIHByaXZhY3kgaW50ZWdyYXRpb24NCgkJCSRmb3JtLT5sb2FkRmlsZSgnam9vbWxhX2NvbXBvbmVudCcpOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg==', '[[[Component]]] Language Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDBd', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Language Tabs', '', 1, '', '', 1, '2020-03-19 15:27:41', '2022-10-23 21:12:31', 27, '', 2), +(12, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'The [[[core]]] branding override.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Company Details\",\"fields_rules_paths\":\"2\",\"fields\":{\"fields0\":{\"field\":\"681\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"1310\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"280\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"691\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"1169\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"1160\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"1156\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"1005\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"1006\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"1004\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"1008\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"1007\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2392\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"1311\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"1313\",\"custom_value\":\"\"}}}}', '32674996-ce5c-452a-9810-af715d5170e3', '', 11, '{}', 'LyoqDQoJICogQWZmZWN0cyBjb25zdHJ1Y3RvciBiZWhhdmlvci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4NCgkgKg0KCSAqIEB2YXIgICAgYm9vbGVhbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIG9uR2V0Q29tcGFueURldGFpbHMuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25HZXRDb21wYW55RGV0YWlscygkZGV0YWlscywgJGYsICRiKQ0KCXsNCgkJLy8gYWRkIHlvdXIgY29kZSBoZXJlDQoJCXZhcl9kdW1wKCRkZXRhaWxzKTtqZXhpdCgpOw0KCX0NCg0KCS8qKg0KCSAqIG9uR2V0VGVtcGxhdGUuDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25HZXRUZW1wbGF0ZSgkY29udGV4dCwgJGRldGFpbHMpDQoJew0KCQkvLyBhZGQgeW91ciBjb2RlIGhlcmUNCgkJdmFyX2R1bXAoJGNvbnRleHQsICRkZXRhaWxzKTtqZXhpdCgpOw0KCX0=', '[[[core]]]BrandingOverride', '', '', '', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb3JlXV1dIGlzIGluc3RhbGxlZA0KCQkJJHBhdGhUb0NvcmUgPSBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb3JlXV1dL2hlbHBlcnMvW1tbY29yZV1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29yZV1dXSBtdXN0IGZpcnN0IGJlIGluc3RhbGxlZCBmcm9tIDxhIGhyZWY9IltbW2dldF9jb21wb25lbnRfbGlua11dXSIgdGFyZ2V0PSJfYmxhbmsiPltbW2NvbXBvbmVudF9saW5rX25hbWVdXV08L2E+LicsICdlcnJvcicpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0=', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'CoreBrandingOverride', '', 1, '', '', 1, '2020-03-23 02:18:28', '2020-05-24 22:47:52', 15, '', 6), +(13, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set custom ordering to fields in the JCB list views.', '{\"fields0\":{\"file\":\"admin_view\",\"fields_name\":\"params.fieldordering\",\"fieldset\":\"fieldordering\",\"label\":\"Field Ordering\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2751\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2753\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2749\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2754\",\"custom_value\":\"\"}}}}', '5b21d4c5-fe7c-4d71-8eb9-1e6be3e2f662', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uDQoJICoNCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZXBhcmVGb3JtKEZvcm0gJGZvcm0sICRkYXRhKQ0KCXsNCgkJJGNvbnRleHQgPSAkZm9ybS0+Z2V0TmFtZSgpOw0KDQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoc3RycG9zKCRjb250ZXh0LCAnY29tX1tbW2NvbXBvbmVudF1dXS5hZG1pbl92aWV3JykgPT09IDApDQoJCXsNCgkJCS8vIEFkZCB0aGUgZm9ybXMgcGF0aA0KCQkJRm9ybTo6YWRkRm9ybVBhdGgoX19ESVJfXyAuICcvZm9ybXMnKTsNCgkJCS8vIGFkZCB0aGUgYWRtaW4gdmlldyBwYXJhbXMgZm9yIHByaXZhY3kgaW50ZWdyYXRpb24NCgkJCSRmb3JtLT5sb2FkRmlsZSgnYWRtaW5fdmlldycpOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0=', '[[[Component]]] Field Ordering Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDBd', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Field Ordering Tabs', '', 1, '', '', 1, '2020-05-20 12:52:37', '2022-10-23 21:13:08', 23, '', 2), +(14, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set the ordring for your component views during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to set your admin views where you would like to use Field Ordering.', '{}', '752b8c09-8848-4519-8c94-3e61c735935f', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow==', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"}}', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxWaWV3RGF0YSgmJHZpZXcpDQoJew0KCQkvLyBhZGQgdGhlIHByaXZhY3kNCgkJJHZpZXctPnBhcmFtcyA9IChpc3NldCgkdmlldy0+cGFyYW1zKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zKSkgPyBqc29uX2RlY29kZSgkdmlldy0+cGFyYW1zLCB0cnVlKSA6ICR2aWV3LT5wYXJhbXM7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zKSAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXNbJ2ZpZWxkb3JkZXJpbmcnXSkpDQoJCXsNCgkJCWlmICgkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ11bJ2FkZF9hZG1pbl9vcmRlcmluZyddID09IDENCgkJCQl8fCAkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ11bJ2FkZF9saW5rZWRfb3JkZXJpbmcnXSA9PSAxKQ0KCQkJew0KCQkJCS8vIHNldHVwIHRoZSB2aWV3IGtleSBuYW1lDQoJCQkJJG5hbWVfbGlzdCAgID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCQkvLyBsb2FkIHRoZSBhZG1pbiB2aWV3IGRldGFpbHMNCgkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5WaWV3cy5EZWZhdWx0Lk9yZGVyaW5nJyktPnNldCgkbmFtZV9saXN0LCAkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ10pOw0KCQkJfQ0KCQl9DQoJfQ==', '[[[Component]]] Field Ordering Compiler', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDBd', '', '', '', '1.1.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Field Ordering Compiler', '', 1, '', '', 1, '2020-05-21 12:55:05', '2023-12-30 10:06:29', 20, '', 3), +(15, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set the custom headers for your classes during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to set your code where you would like to set Custom Headers.', '{}', 'dff42201-b4d4-442d-85d4-aa3ca3104e37', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow0K', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"},\"method_selection2\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEdsb2JhbCBzd2l0Y2ggdG8gc2VlIGlmIGEgZmlsZSBoYXMgY3VzdG9tIGhlYWRlcnMuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRsb2FkSGVhZGVycyA9IGZhbHNlOw0KDQoJLyoqDQoJICogVGhlIGFjdGl2ZSBoZWFkZXJzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuOA0KCSAqLw0KCXByb3RlY3RlZCAkYWN0aXZlSGVhZGVycyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBUaGUgY29tcGlsZXIgcGxhY2Vob2xkZXJzIHZhbHVlcw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjYNCgkgKi8NCglwcm90ZWN0ZWQgJHBsYWNlaG9sZGVycyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBUaGUgcG93ZXJzIHRvIGluY2x1ZGUgaW4gcHJvamVjdA0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjYNCgkgKi8NCglwcm90ZWN0ZWQgJGxpbmtlZFBvd2VycyA9IGFycmF5KCk7DQoNCgkvKioNCgkgKiBUaGUgVGFyZ2V0cw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjgNCgkgKi8NCglwcm90ZWN0ZWQgJHRhcmdldHMgPSBhcnJheSgNCgkJJ2FkbWluX3ZpZXdfaGVhZGVycycgICAgICAgICAgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfYWRtaW5fdmlld19tb2RlbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fdmlld19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4udmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9zaW5nbGUnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXcnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXcnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXcnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfc2luZ2xlJw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3X2h0bWwnICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9zaW5nbGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfYWRtaW5fdmlld19odG1sJyAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfYWRtaW5fdmlld19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLmFkbWluLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9zaW5nbGUnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXdfY29udHJvbGxlcicgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4udmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX3NpbmdsZScNCgkJCQkpLA0KCQkJCSdhZGRfYWpheF9tb2RlbCcgICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWpheF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWpheC5hZG1pbi5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnYWpheCcNCgkJCQkpLA0KCQkJCSdhZGRfYWRtaW5fdmlld3NfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fdmlld3NfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXdzLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX2xpc3QnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXdzJyAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdzJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3c19odG1sJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3c19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3cy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX2xpc3QnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXdzLmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfbGlzdCcNCgkJCQkpLA0KCQkJCSdhZGRfaW1wb3J0X2N1c3RvbV9jb250cm9sbGVyJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdpbXBvcnRfY3VzdG9tX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2ltcG9ydC5jdXN0b20uY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSksDQoJCQkJJ2FkZF9pbXBvcnRfY3VzdG9tX21vZGVsJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdpbXBvcnRfY3VzdG9tX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdpbXBvcnQuY3VzdG9tLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX2xpc3QnDQoJCQkJKQ0KCQkJKSwNCgkJJ3NpdGVfdmlld19oZWFkZXJzJyAgICAgICAgICAgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfc2l0ZV92aWV3X21vZGVsJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3JyAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXcnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3X2h0bWwnICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld19jb250cm9sbGVyJyAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3NfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3MnICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3cycsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19odG1sJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19jb250cm9sbGVyJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfYWpheF9tb2RlbCcgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhamF4X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhamF4LnNpdGUubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2FqYXgnDQoJCQkJKQ0KCQkJKSwNCgkJJ2N1c3RvbV9hZG1pbl92aWV3X2hlYWRlcnMnICAgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfbW9kZWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXcnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X2NvbnRyb2xsZXInICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3cycgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3MnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfYWpheF9tb2RlbCcgICAgICAgICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FqYXhfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FqYXguYWRtaW4ubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2FqYXgnDQoJCQkJKQ0KCQkJKSwNCgkJJ2R5bmFtaWNfZ2V0X2hlYWRlcnMnICAgICAgICAgICA9Pg0KCQkJYXJyYXkoDQoJCQkJJ2FkZF9zaXRlX3ZpZXdfbW9kZWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3Lm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXcnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlldycsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3JywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdfaHRtbCcgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3X2NvbnRyb2xsZXInICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3LmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3NfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3c19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3cycgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXdzJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzX2h0bWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3NfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3NfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19tb2RlbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3Lm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlldycgICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXcnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3JywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19odG1sJyAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfY29udHJvbGxlcicgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3LmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19tb2RlbCcgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzJyAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3cycsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXdzJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfaHRtbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfY29udHJvbGxlcicgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9hamF4X21vZGVsJyAgICAgICAgICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWpheF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWpheC5hZG1pbi5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnYWpheCcNCgkJCQkpDQoJCQkpLA0KCQknY29tcG9uZW50X2Rhc2hib2FyZF9oZWFkZXJzJyA9Pg0KCQkJYXJyYXkoDQoJCQkJJ2FkZF9kYXNoYm9hcmRfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnZGFzaGJvYXJkX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdkYXNoYm9hcmQubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2Rhc2hib2FyZCcNCgkJCQkpLA0KCQkJCSdhZGRfZGFzaGJvYXJkX3ZpZXcnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2Rhc2hib2FyZF92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdkYXNoYm9hcmQudmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnZGFzaGJvYXJkJw0KCQkJCSksDQoJCQkJJ2FkZF9kYXNoYm9hcmRfdmlld19odG1sJyAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnZGFzaGJvYXJkX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnZGFzaGJvYXJkLnZpZXcuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnZGFzaGJvYXJkJw0KCQkJCSksDQoJCQkJJ2FkZF9kYXNoYm9hcmRfY29udHJvbGxlcicgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnZGFzaGJvYXJkX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2Rhc2hib2FyZC5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdkYXNoYm9hcmQnDQoJCQkJKSwNCgkJCQknYWRkX2FqYXhfbW9kZWwnICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhamF4X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhamF4LmFkbWluLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdhamF4Jw0KCQkJCSkNCgkJCSksDQoJCSdqb29tbGFfY29tcG9uZW50X2hlYWRlcnMnICAgID0+DQoJCQlhcnJheSgNCgkJCQknYWRkX2FkbWluX2NvbXBvbmVudCcgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fY29tcG9uZW50JywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi5jb21wb25lbnQnLA0KCQkJCQkndmlldycgICAgPT4gJ2FkbWluJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX2NvbXBvbmVudCcgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfY29tcG9uZW50JywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLmNvbXBvbmVudCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnc2l0ZScNCgkJCQkpLA0KCQkJCSdhZGRfYWRtaW5faGVscGVyJyAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl9oZWxwZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLmhlbHBlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnYWRtaW4nDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfaGVscGVyJyAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV9oZWxwZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUuaGVscGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdzaXRlJw0KCQkJCSkNCgkJCSkNCgkpOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGNoZWNrIHRoYXQgdGhlIHBhcmFtcyBhcmUgc2V0DQoJCWlmIChpc3NldCgkdmlldy0+cGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgQWRtaW4gVmlld3MNCgkJCSR0aGlzLT5zZXRIZWFkZXJzKCR2aWV3LT5wYXJhbXMsICR2aWV3LCAnYWRtaW5fdmlld19oZWFkZXJzJyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgTW9kZWwgQ3VzdG9tIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZU1vZGVsQ3VzdG9tVmlld0RhdGEoJiR2aWV3LCAmJGlkLCAmJHRhYmxlKQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB0aGUgcGFyYW1zIGFyZSBzZXQNCgkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXMpKQ0KCQl7DQoJCQkvLyBhZGQgdGhlIGhlYWRlcnMgZm9yIHRoZSBTaXRlIFZpZXdzDQoJCQkkdGhpcy0+c2V0SGVhZGVycygkdmlldy0+cGFyYW1zLCAkdmlldywgJ3NpdGVfdmlld19oZWFkZXJzJyk7DQoJCQkvLyBhZGQgdGhlIGhlYWRlcnMgZm9yIHRoZSBDdXN0b20gQWRtaW4gVmlld3MNCgkJCSR0aGlzLT5zZXRIZWFkZXJzKCR2aWV3LT5wYXJhbXMsICR2aWV3LCAnY3VzdG9tX2FkbWluX3ZpZXdfaGVhZGVycycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIER5bmFtaWMgR2V0IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuMTANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxEeW5hbWljR2V0RGF0YSgmJGR5bmFtaWNHZXQsICYkaWQsICYkY29kZSwgJiRhcmVhKQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB0aGUgcGFyYW1zIGFyZSBzZXQNCgkJaWYgKGlzc2V0KCRkeW5hbWljR2V0LT5wYXJhbXMpKQ0KCQl7DQoJCQkvLyBhZGQgdGhlIGhlYWRlcnMgZm9yIHRoZSBTaXRlIFZpZXdzDQoJCQkkdGhpcy0+c2V0RHluYW1pY0hlYWRlcnMoJGR5bmFtaWNHZXQtPnBhcmFtcywgJGNvZGUsICdkeW5hbWljX2dldF9oZWFkZXJzJyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgTW9kZWwgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbENvbXBvbmVudERhdGEoJiRjb21wb25lbnQpDQoJew0KCQkvLyBjaGVjayB0aGF0IHRoZSBwYXJhbXMgYXJlIHNldA0KCQlpZiAoaXNzZXQoJGNvbXBvbmVudC0+cGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgSm9vbWxhIENvbXBvbmVudA0KCQkJJHRoaXMtPnNldEhlYWRlcnMoJGNvbXBvbmVudC0+cGFyYW1zLCAkY29tcG9uZW50LCAnam9vbWxhX2NvbXBvbmVudF9oZWFkZXJzJyk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgZGFzaGJvYXJkIHBhcmFtcyBhcmUgc2V0DQoJCWlmIChpc3NldCgkY29tcG9uZW50LT5kYXNoYm9hcmRfcGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgQ29tcG9uZW50IERhc2hib2FyZA0KCQkJJHRoaXMtPnNldEhlYWRlcnMoJGNvbXBvbmVudC0+ZGFzaGJvYXJkX3BhcmFtcywgJGNvbXBvbmVudCwgJ2NvbXBvbmVudF9kYXNoYm9hcmRfaGVhZGVycycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gc2V0IENsYXNzIEhlYWRlcl0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfc2V0Q2xhc3NIZWFkZXIoJiRldmVudF9jb250ZXh0LCAmJHZpZXdfbmFtZSwgJiRoZWFkZXJzKQ0KCXsNCgkJaWYgKCR0aGlzLT5sb2FkSGVhZGVycyAmJiBpc3NldCgkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXSkNCgkJCSYmIGlzc2V0KCR0aGlzLT5hY3RpdmVIZWFkZXJzWyR2aWV3X25hbWVdWyRldmVudF9jb250ZXh0XSkNCgkJCSYmIGlzX2FycmF5KCR0aGlzLT5hY3RpdmVIZWFkZXJzWyR2aWV3X25hbWVdWyRldmVudF9jb250ZXh0XSkpDQoJCXsNCgkJCS8vIHdvcmsgd2l0aCB0aGUgaGVhZGVyIHZhbHVlcyBhcyBrZXlzDQoJCQkkX2hlYWRlcnMgPSBhcnJheV9mbGlwKCRoZWFkZXJzKTsNCg0KCQkJLy8gbmV3IGhlYWRlcnMNCgkJCSRuZXcgPSAkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZXZlbnRfY29udGV4dF07DQoNCgkJCS8vIG5vdyBhZGQgdGhlIG5ldyBoZWFkZXJzDQoJCQlmb3JlYWNoICgkbmV3IGFzICRuID0+ICRoZWFkZXIpDQoJCQl7DQoJCQkJLy8gaWYgYW4gZW1wdHkgbGluZSBpcyBmb3VuZCBqdXN0IHNraXAgaXQgDQoJCQkJLy8gd2UgY2hlY2sgaWYgdGhpcyBoZWFkZXIgaXMgYWxyZWFkeSBzZXQNCgkJCQlpZiAoZW1wdHkoJGhlYWRlcikgfHwgaXNzZXQoJF9oZWFkZXJzWyRoZWFkZXJdKSkNCgkJCQl7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkkaGVhZGVyc1tdID0gJGhlYWRlcjsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBHZXQgQ29tcG9uZW50IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuNg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVHZXRDb21wb25lbnREYXRhKCkNCgl7DQoJCS8vIGdldCBwbGFjZWhvbGRlcnMgZnJvbSB0aGUgY29tcGlsZXINCgkJJHRoaXMtPnBsYWNlaG9sZGVycyA9IENGYWN0b3J5OjpfKCdDb21wb25lbnQuUGxhY2Vob2xkZXInKS0+Z2V0KCk7DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQWZ0ZXIgR2V0IENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjYNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXRDb21wb25lbnREYXRhKCkNCgl7DQoJCS8vIGFkZCB0aGUgcG93ZXJzIHRvIHRoZSBjb21wb25lbnQNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5saW5rZWRQb3dlcnMsIHRydWUpKQ0KCQl7DQoJCQlDRmFjdG9yeTo6XygnUG93ZXInKS0+bG9hZCgkdGhpcy0+bGlua2VkUG93ZXJzKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIHNldCB0aGUgaGVhZGVycw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjgNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0SGVhZGVycygmJHBhcmFtcywgJiRvYmosICRrZXkpDQoJew0KCQkvLyBhZGQgdGhlIGhlYWRlcnMNCgkJJHBhcmFtcyA9IChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zKSkgPyBqc29uX2RlY29kZSgkcGFyYW1zLCB0cnVlKSA6ICRwYXJhbXM7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBrZXlzIHZhbHVlcyBpbiB0aGUgcGFyYW1zIGFyZWENCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwYXJhbXMpICYmIGlzc2V0KCRwYXJhbXNbJGtleV0pDQoJCQkmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zWyRrZXldKSkNCgkJew0KCQkJZm9yZWFjaCAoJHRoaXMtPnRhcmdldHNbJGtleV0gYXMgJHRhcmdldCA9PiAkZXZlbnQpDQoJCQl7DQoJCQkJaWYgKGlzc2V0KCRwYXJhbXNbJGtleV1bJHRhcmdldF0pDQoJCQkJCSYmICRwYXJhbXNbJGtleV1bJHRhcmdldF0gPT0gMSkNCgkJCQl7DQoJCQkJCS8vIGdldCB0aGUgaGVhZGVyIHN0cmluZyBpZiBzZXQNCgkJCQkJJHRoaXMtPmdldEhlYWRlcnMoDQoJCQkJCQkkcGFyYW1zWyRrZXldLA0KCQkJCQkJJGV2ZW50LA0KCQkJCQkJJHRoaXMtPmdldFZpZXdOYW1lKA0KCQkJCQkJCSRvYmosDQoJCQkJCQkJJGV2ZW50Wyd2aWV3J10NCgkJCQkJCSkNCgkJCQkJKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBzZXQgdGhlIGR5bmFtaWMgZ2V0IGhlYWRlcnMNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC4xMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXREeW5hbWljSGVhZGVycygkcGFyYW1zLCAkY29kZSwgJGtleSkNCgl7DQoJCS8vIGFkZCB0aGUgaGVhZGVycw0KCQkkcGFyYW1zID0gKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRwYXJhbXMpKSA/IGpzb25fZGVjb2RlKCRwYXJhbXMsIHRydWUpIDogJHBhcmFtczsNCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGtleXMgdmFsdWVzIGluIHRoZSBwYXJhbXMgYXJlYQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBhcmFtcykgJiYgaXNzZXQoJHBhcmFtc1ska2V5XSkNCgkJCSYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwYXJhbXNbJGtleV0pKQ0KCQl7DQoJCQlmb3JlYWNoICgkdGhpcy0+dGFyZ2V0c1ska2V5XSBhcyAkdGFyZ2V0ID0+ICRldmVudCkNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJHBhcmFtc1ska2V5XVskdGFyZ2V0XSkNCgkJCQkJJiYgJHBhcmFtc1ska2V5XVskdGFyZ2V0XSA9PSAxKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBoZWFkZXIgc3RyaW5nIGlmIHNldA0KCQkJCQkkdGhpcy0+Z2V0SGVhZGVycygNCgkJCQkJCSRwYXJhbXNbJGtleV0sDQoJCQkJCQkkZXZlbnQsDQoJCQkJCQkkY29kZQ0KCQkJCQkpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgaGVhZGVycw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhlYWRlcnMoJiRwYXJhbXMsICYkZ2V0LCAkdmlld19uYW1lKQ0KCXsNCgkJLy8gd2UgZmlyc3QgY2hlY2sgaWYgdGhlIHZhbHVlIGlzIHNldA0KCQlpZiAoaXNzZXQoJHBhcmFtc1skZ2V0WydmaWVsZCddXSkgfHwgaXNzZXQoJHBhcmFtc1sncG93ZXJfJyAuICRnZXRbJ2ZpZWxkJ11dKSkNCgkJew0KCQkJLy8gc3RhcnQgbGl0dGxlIGhlYWRlcnMgYnVja2V0DQoJCQkkaGVhZGVycyA9IFtdOw0KDQoJCQkvLyBsb2FkIHRoZSBoZWFkZXJzIGlmIHBvd2VyDQoJCQlpZiAoaXNzZXQoJHBhcmFtc1sncG93ZXJfJyAuICRnZXRbJ2ZpZWxkJ11dKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zWydwb3dlcl8nIC4gJGdldFsnZmllbGQnXV0sIHRydWUpDQoJCQkJJiYgKCRwb3dlcnMgPSAkdGhpcy0+Z2V0UG93ZXJzKCRwYXJhbXNbJ3Bvd2VyXycgLiAkZ2V0WydmaWVsZCddXSkpICE9PSBudWxsKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRwb3dlcnMgYXMgJHBvd2VyKQ0KCQkJCXsNCgkJCQkJJHBvd2VyID0gdHJpbSgkcG93ZXIpOw0KCQkJCQkkaGVhZGVyc1skcG93ZXJdID0gJHBvd2VyOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gbG9hZCB0aGUgaGVhZGVycyBpZiB0ZXh0DQoJCQlpZiAoaXNzZXQoJHBhcmFtc1skZ2V0WydmaWVsZCddXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHBhcmFtc1skZ2V0WydmaWVsZCddXSkpDQoJCQl7DQoJCQkJaWYgKCgkX2hlYWRlcnMgPSBleHBsb2RlKFBIUF9FT0wsICRwYXJhbXNbJGdldFsnZmllbGQnXV0pKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRfaGVhZGVycyBhcyAkaGVhZGVyKQ0KCQkJCQl7DQoJCQkJCQkkaGVhZGVyID0gdHJpbSgkaGVhZGVyKTsNCgkJCQkJCWlmIChlbXB0eSgkaGVhZGVyKSkNCgkJCQkJCXsNCgkJCQkJCQljb250aW51ZTsNCgkJCQkJCX0NCgkJCQkJCSRoZWFkZXJzWyRoZWFkZXJdID0gJGhlYWRlcjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gY2hlY2sgaWYgd2UgZm91bmQgc29tZSBoZWFkZXIgdmFsdWVzDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGhlYWRlcnMsIHRydWUpKQ0KCQkJew0KCQkJCS8vIGFjdGl2YXRlIHRoZSBsb2FkIG9mIHRoZSBoZWFkZXJzDQoJCQkJJHRoaXMtPmxvYWRIZWFkZXJzID0gdHJ1ZTsNCgkJCQkvLyBjaGVjayBpZiB0aGlzIGFjdGl2ZSBoZWFkZXIgaXMgYWxyZWFkeSBzZXQNCgkJCQlpZiAoIWlzc2V0KCR0aGlzLT5hY3RpdmVIZWFkZXJzWyR2aWV3X25hbWVdWyRnZXRbJ2NvbnRleHQnXV0pKQ0KCQkJCXsNCgkJCQkJLy8gc3RhcnQgdGhlIGFjdGl2ZSBoZWFkZXINCgkJCQkJJHRoaXMtPmFjdGl2ZUhlYWRlcnNbJHZpZXdfbmFtZV1bJGdldFsnY29udGV4dCddXSA9IFtdOw0KCQkJCX0NCgkJCQkvLyBsb2FkIHRoZSBmb3VuZCBoZWFkZXJzIGFuZCBhdm9pZCBhZGRpbmcgdGhlIHNhbWUgaGVhZGVyIHR3aWNlDQoJCQkJZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikNCgkJCQl7DQoJCQkJCSRoZWFkZXIgPSB0cmltKCRoZWFkZXIpOw0KCQkJCQkkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZ2V0Wydjb250ZXh0J11dWyRoZWFkZXJdID0gJGhlYWRlcjsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIHZpZXcgbmFtZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICoNCgkgKiBAc2luY2UgICAxLjAuOA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3TmFtZSgmJHZpZXcsICYkZ2V0KQ0KCXsNCgkJaWYgKCRnZXQgPT09ICdzaXRlJyB8fCAkZ2V0ID09PSAnYWRtaW4nIHx8ICRnZXQgPT09ICdhamF4JyB8fCAkZ2V0ID09PSAnZGFzaGJvYXJkJykNCgkJew0KCQkJLy8gc3RhdGljIGtleSBuYW1lDQoJCQlyZXR1cm4gJGdldDsNCgkJfQ0KCQllbHNlaWYgKGlzc2V0KCR2aWV3LT57JGdldH0pKQ0KCQl7DQoJCQlyZXR1cm4gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgNCgkJCQkkdmlldy0+eyRnZXR9DQoJCQkpOw0KCQl9DQoJCXJldHVybiAnX2Vycm9yJzsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIHBvd2VycyBoZWFkZXIgdXNlIHN0cmluZ3MNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5fG51bGwNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC42DQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFBvd2Vycygkcm93cyk6ID9hcnJheQ0KCXsNCgkJLy8gbG9hZCB0aGUgYWN0aXZlIHBvd2Vycw0KCQkkcG93ZXJzID0gYXJyYXlfZmlsdGVyKA0KCQkJLy8gZ2V0IHRoZSBwb3dlciBuYW1lc3BhY2UNCgkJCWFycmF5X21hcChmdW5jdGlvbiAoJHJvdykgew0KCQkJCWlmICgoJHBvd2VyID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRHVUlEKCRyb3dbJ3Bvd2VyJ10sICdwb3dlcicsIFsnYS5ndWlkJywgJ2EubmFtZXNwYWNlJ10pKSAhPT0gbnVsbCkNCgkJCQl7DQoJCQkJCQkkcG93ZXItPmJ1aWxkID0gKGludCkgJHJvd1snYnVpbGQnXTsNCgkJCQkJCSRwb3dlci0+YXMgPSAoc3RyaW5nKSAkcm93WydhcyddOw0KDQoJCQkJCQlyZXR1cm4gJHBvd2VyOw0KCQkJCX0NCgkJCQllbHNlaWYgKENGYWN0b3J5OjpfKCdTdXBlcnBvd2VyJyktPmxvYWQoJHJvd1sncG93ZXInXSwgIFsncmVtb3RlJ10pKQ0KCQkJCXsNCgkJCQkJaWYgKCgkcG93ZXIgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmdldEdVSUQoJHJvd1sncG93ZXInXSwgJ3Bvd2VyJywgWydhLmd1aWQnLCAnYS5uYW1lc3BhY2UnXSkpICE9PSBudWxsKQ0KCQkJCQl7DQoJCQkJCQkkcG93ZXItPmJ1aWxkID0gKGludCkgJHJvd1snYnVpbGQnXTsNCgkJCQkJCSRwb3dlci0+YXMgPSAoc3RyaW5nKSAkcm93WydhcyddOw0KDQoJCQkJCQlyZXR1cm4gJHBvd2VyOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0sICRyb3dzKSwNCgkJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSB2YWxpZCBwb3dlcnMNCgkJCWZ1bmN0aW9uICgkcm93KSB7DQoJCQkJcmV0dXJuIGlzX29iamVjdCgkcm93KSAmJiBpc3NldCgkcm93LT5ndWlkKTsNCgkJCX0NCgkJKTsNCgkJLy8gYWRkIHRvIGFjdGl2ZSBwb3dlcnMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwb3dlcnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBkb3RzIHRvIG5hbWVzcGFjZQ0KCQkJcmV0dXJuIGFycmF5X21hcChmdW5jdGlvbiAoJHBvd2VyKSB7DQoJCQkJLy8gYWRkIHRvIGNvbXBpbGVyICh0byBidWlsZCkNCgkJCQlpZiAoJHBvd2VyLT5idWlsZCAhPSA2KQ0KCQkJCXsNCgkJCQkJLy8gc2VjdXJlIHRoYXQgYWx3YXlzIHdpbGwgcmVtYWluIGFsd2F5cyBldmVuIGlmIG9ubHkgc2V0IHRoYXQgd2F5IG9uY2UNCgkJCQkJaWYgKGVtcHR5KCR0aGlzLT5saW5rZWRQb3dlcnNbJHBvd2VyLT5ndWlkXSkgfHwgJHBvd2VyLT5idWlsZCA9PSAxKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+bGlua2VkUG93ZXJzWyRwb3dlci0+Z3VpZF0gPSAkcG93ZXItPmJ1aWxkOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIHRoZSBuYW1lc3BhY2UNCgkJCQkkbmFtZXNwYWNlID0gU3VwZXJfX19jZThjZjgzNF82YmFjXzQ0ZmJfOTQxY184NjFmN2UwNDZjYzBfX19Qb3dlcjo6c2FmZSgNCgkJCQkJc3RyX3JlcGxhY2UoDQoJCQkJCQlhcnJheV9rZXlzKCR0aGlzLT5wbGFjZWhvbGRlcnMpLA0KCQkJCQkJYXJyYXlfdmFsdWVzKCR0aGlzLT5wbGFjZWhvbGRlcnMpLA0KCQkJCQkJc3RyX3JlcGxhY2UoJy4nLCAnXFwnLCAkcG93ZXItPm5hbWVzcGFjZSkNCgkJCQkJKQ0KCQkJCSk7DQoJCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGFuIEFTIG9wdGlvbg0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcG93ZXItPmFzKSAmJiAkcG93ZXItPmFzICE9PSAnZGVmYXVsdCcpDQoJCQkJew0KCQkJCQlyZXR1cm4gJ3VzZSAnIC4gJG5hbWVzcGFjZSAuICcgYXMgJyAuICRwb3dlci0+YXMgLiAnOyc7DQoJCQkJfQ0KCQkJCXJldHVybiAndXNlICcgLiAkbmFtZXNwYWNlIC4gJzsnOw0KCQkJfSwgJHBvd2Vycyk7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQo=', '[[[Component]]] Headers Compiler', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywxLDE4XQ==', '', '', '', '2.3.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Headers Compiler', '', 1, '', '', 1, '2020-05-24 23:04:17', '2023-12-30 11:06:48', 125, '', 3), +(16, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set admin class custom headers.', '{\"fields0\":{\"file\":\"admin_view\",\"fields_name\":\"params.admin_view_headers\",\"fieldset\":\"admin_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2849\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2846\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2969\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2983\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2985\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2968\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2886\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2884\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2995\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2850\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2845\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2967\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2844\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2847\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2966\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2984\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2986\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2965\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2885\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2883\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2996\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2851\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2848\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2964\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"2895\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"2896\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"2970\",\"custom_value\":\"\"},\"fields27\":{\"field\":\"2987\",\"custom_value\":\"\"},\"fields28\":{\"field\":\"2988\",\"custom_value\":\"\"},\"fields29\":{\"field\":\"2952\",\"custom_value\":\"\"},\"fields30\":{\"field\":\"2897\",\"custom_value\":\"\"},\"fields31\":{\"field\":\"2898\",\"custom_value\":\"\"},\"fields32\":{\"field\":\"2999\",\"custom_value\":\"\"},\"fields36\":{\"field\":\"3088\",\"custom_value\":\"\"},\"fields41\":{\"field\":\"3089\",\"custom_value\":\"\"},\"fields40\":{\"field\":\"3090\",\"custom_value\":\"\"},\"fields39\":{\"field\":\"3091\",\"custom_value\":\"\"},\"fields38\":{\"field\":\"3092\",\"custom_value\":\"\"},\"fields37\":{\"field\":\"3093\",\"custom_value\":\"\"},\"fields33\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields34\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields35\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', '9add2e9c-ec36-48ef-b8e5-939ade0149eb', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrYWRtaW5fdmlld10=', '[[[Component]]] Admin Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywxLDE4XQ==', '', '', '', '2.0.3', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Admin Headers Tabs', '', 1, '', '', 1, '2020-10-27 00:46:51', '2023-02-26 01:04:32', 63, '', 2), +(17, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set site class custom headers.', '{\"fields0\":{\"file\":\"site_view\",\"fields_name\":\"params.site_view_headers\",\"fieldset\":\"site_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2855\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2859\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2963\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2981\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2980\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2962\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2890\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2887\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2993\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2854\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2860\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2961\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2856\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2858\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2960\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2982\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2979\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2959\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2889\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2888\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2994\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2853\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2857\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2958\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'ee258df8-057b-4039-a60d-e5b97e6fa6f3', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrc2l0ZV92aWV3XQ==', '[[[Component]]] Site Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.1', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Site Headers Tabs', '', 1, '', '', 1, '2020-12-08 03:18:35', '2022-10-23 21:11:30', 35, '', 2), +(18, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set custom admin class custom headers.', '{\"fields0\":{\"file\":\"custom_admin_view\",\"fields_name\":\"params.custom_admin_view_headers\",\"fieldset\":\"custom_admin_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2866\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2862\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2971\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2990\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2991\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2957\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2893\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2892\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2998\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2867\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2861\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2956\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2865\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2863\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2955\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2989\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2992\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2954\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2894\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2891\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2997\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2868\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2864\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2953\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'b5e29027-f010-45ae-adb1-e8a1dde9a157', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrY3VzdG9tX2FkbWluX3ZpZXdd', '[[[Component]]] Custom Admin Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.1', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Custom Admin Headers Tabs', '', 1, '', '', 1, '2020-12-08 05:25:29', '2022-10-23 21:11:26', 37, '', 2), +(19, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set component class custom headers.', '{\"fields0\":{\"file\":\"joomla_component\",\"fields_name\":\"params.joomla_component_headers\",\"fieldset\":\"joomla_component_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2871\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2872\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2974\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2873\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2874\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2975\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2878\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2877\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2973\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2875\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2876\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2972\",\"custom_value\":\"\"}}}}', 'ce453c88-6f87-4739-9340-de0416066ff4', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMram9vbWxhX2NvbXBvbmVudF0=', '[[[Component]]] Component Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.1', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Component Headers Tabs', '', 1, '', '', 1, '2020-12-26 16:49:54', '2022-10-23 21:11:22', 27, '', 2), +(20, '', '', 1, '', 1, '', '', '', '', 1, '', '', '', 1, 'RSForm! Pro - Advance PHP', '{}', '693bcf07-6464-4bcd-9d32-2af49ebbca44', '', 8, '{}', 'CXByb3RlY3RlZCAkaGFzQWNjZXNzOw0KCXByb3RlY3RlZCAkVkRNX3Bvc3Q7DQoJcHJvdGVjdGVkICRWRE1fYWN0aXZlOw0KCXByb3RlY3RlZCAkVkRNX2NvZGU7DQoJcHJvdGVjdGVkICRWRE1fcnNmb3JtX2lkOw0KDQoJLyoqDQoJICogTG9hZCB0aGUgbGFuZ3VhZ2UgZmlsZSBvbiBpbnN0YW50aWF0aW9uLg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAzLjENCgkgKi8NCglwcm90ZWN0ZWQgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogQ29uc3RydWN0b3INCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJiRzdWJqZWN0ICBUaGUgb2JqZWN0IHRvIG9ic2VydmUNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29uZmlnICAgQW4gYXJyYXkgdGhhdCBob2xkcyB0aGUgcGx1Z2luIGNvbmZpZ3VyYXRpb24NCgkgKg0KCSAqIEBzaW5jZSAgIDEuNQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgmJHN1YmplY3QsICRjb25maWcpDQoJew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCRzdWJqZWN0LCAkY29uZmlnKTsNCg0KCQkvLyBzZXQgYmFja2VuZCBhY2Nlc3MNCgkJJHRoaXMtPmhhc0FjY2VzcyA9ICR0aGlzLT5iYWNrZW5kQWNjZXNzKCk7DQoNCgkJLy8gc2V0IHRoZSB0YWJsZSBwYXRoDQoJCUpUYWJsZTo6YWRkSW5jbHVkZVBhdGgoSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fcnNmb3JtL3RhYmxlcycpOw0KCX0NCg0KCS8qKg0KCSAqICAgIC8vLy8vLyAgICBWYXN0IERldmVsb3BtZW50IE1ldGhvZCAgIFxcXFxcXA0KCSAqICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCgkgKiAgICMjIyMjIyMjIyMgICAgICAgQkFDSyBFTkQgICAgICAjIyMjIyMjIyMjIyMNCgkgKiAgICMjIyMjIyMjIyMgICAgRXZlbnQgVHJpZ2dlcnMgICAjIyMjIyMjIyMjIyMNCgkgKiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoJICoNCgkgKiovDQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gQmFjay1lbmQgW09uIEZvcm0gU2F2ZV0NCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gb3JtU2F2ZSgkZm9ybSkNCgl7DQoJCWlmICgkdGhpcy0+aGFzQWNjZXNzKQ0KCQl7DQoJCQkkYXBwICAgID0gRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKTsNCgkJCSRmb3JtSWQgPSAkYXBwLT5pbnB1dC0+cG9zdC0+Z2V0KCdmb3JtSWQnLCAwLCBpbnQpOw0KCQkJLy8gZ2V0IGFjdGl2ZSBzdGF0ZXMNCgkJCSRldmVudHMgICAgICAgID0gcmFuZ2UoMCwgMTApOw0KCQkJJGV2ZW50c19hY3RpdmUgPSBhcnJheSgpOw0KCQkJJGV2ZW50c19jb2RlICAgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGV2ZW50cyBhcyAkbnIpDQoJCQl7DQoJCQkJJGV2ZW50c19hY3RpdmVbJG5yXSA9ICRhcHAtPmlucHV0LT5wb3N0LT5nZXQoJ3JzZnBhZHZhbmNlcGhwX2FjdGl2ZV8nIC4gJG5yLCAwLCBJTlQpOw0KCQkJCWlmICgkZXZlbnRzX2FjdGl2ZVskbnJdICE9IDApDQoJCQkJew0KCQkJCQkkZXZlbnRzX2NvZGVbJG5yXSA9IGJhc2U2NF9lbmNvZGUoJGFwcC0+aW5wdXQtPnBvc3QtPmdldCgncnNmcGFkdmFuY2VwaHBfY29kZV8nIC4gJG5yLCAnJywgUkFXKSk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQlpZiAoaXNfYXJyYXkoJGV2ZW50c19hY3RpdmUpICYmIGNvdW50KCRldmVudHNfYWN0aXZlKSkNCgkJCXsNCgkJCQkkZXZlbnRzX2FjdGl2ZSA9IGpzb25fZW5jb2RlKCRldmVudHNfYWN0aXZlKTsNCgkJCX0NCgkJCWlmIChpc19hcnJheSgkZXZlbnRzX2NvZGUpICYmIGNvdW50KCRldmVudHNfY29kZSkpDQoJCQl7DQoJCQkJJGV2ZW50c19jb2RlID0ganNvbl9lbmNvZGUoJGV2ZW50c19jb2RlKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkZXZlbnRzX2NvZGUgPSAnJzsNCgkJCX0NCg0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gY2hlY2sgaWYgZGF0YSBpcyBzZXQNCgkJCSRkYi0+c2V0UXVlcnkoIlNFTEVDVCBmb3JtX2lkIEZST00gI19fcnNmb3JtX2FkdmFuY2VwaHAgV0hFUkUgZm9ybV9pZD0nIiAuICRmb3JtSWQgLiAiJyIpOw0KCQkJaWYgKCEkZGItPmxvYWRSZXN1bHQoKSkNCgkJCXsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCQkvLyBJbnNlcnQgY29sdW1ucy4NCgkJCQkkY29sdW1ucyA9IGFycmF5KCdmb3JtX2lkJywgJ2V2ZW50c19hY3RpdmUnLCAnZXZlbnRzX2NvZGUnKTsNCg0KCQkJCS8vIEluc2VydCB2YWx1ZXMuDQoJCQkJJHZhbHVlcyA9IGFycmF5KCRmb3JtSWQsICRkYi0+cXVvdGUoJGV2ZW50c19hY3RpdmUpLCAkZGItPnF1b3RlKCRldmVudHNfY29kZSkpOw0KDQoJCQkJLy8gUHJlcGFyZSB0aGUgaW5zZXJ0IHF1ZXJ5Lg0KCQkJCSRxdWVyeQ0KCQkJCQktPmluc2VydCgkZGItPnF1b3RlTmFtZSgnI19fcnNmb3JtX2FkdmFuY2VwaHAnKSkNCgkJCQkJLT5jb2x1bW5zKCRkYi0+cXVvdGVOYW1lKCRjb2x1bW5zKSkNCgkJCQkJLT52YWx1ZXMoaW1wbG9kZSgnLCcsICR2YWx1ZXMpKTsNCg0KCQkJCS8vIFNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QgYW5kIGV4ZWN1dGUgaXQuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KDQoJCQkJcmV0dXJuICRkYi0+ZXhlY3V0ZSgpOw0KCQkJfQ0KDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkvLyBGaWVsZHMgdG8gdXBkYXRlLg0KCQkJJGZpZWxkcyA9IGFycmF5KA0KCQkJCSRkYi0+cXVvdGVOYW1lKCdldmVudHNfYWN0aXZlJykgLiAnID0gJyAuICRkYi0+cXVvdGUoJGV2ZW50c19hY3RpdmUpLA0KCQkJCSRkYi0+cXVvdGVOYW1lKCdldmVudHNfY29kZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRldmVudHNfY29kZSkNCgkJCSk7DQoNCgkJCS8vIENvbmRpdGlvbnMgZm9yIHdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHVwZGF0ZWQuDQoJCQkkY29uZGl0aW9ucyA9IGFycmF5KA0KCQkJCSRkYi0+cXVvdGVOYW1lKCdmb3JtX2lkJykgLiAnID0gJyAuICRmb3JtSWQNCgkJCSk7DQoNCgkJCSRxdWVyeS0+dXBkYXRlKCRkYi0+cXVvdGVOYW1lKCcjX19yc2Zvcm1fYWR2YW5jZXBocCcpKS0+c2V0KCRmaWVsZHMpLT53aGVyZSgkY29uZGl0aW9ucyk7DQoNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCg0KCQkJcmV0dXJuICRkYi0+ZXhlY3V0ZSgpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEJhY2stZW5kIFtPbiBBZnRlciBTaG93IEZvcm0gRWRpdCBUYWJzIFRhYl0NCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1CYWNrZW5kQWZ0ZXJTaG93Rm9ybUVkaXRUYWJzVGFiKCkNCgl7DQoJCWlmICgkdGhpcy0+aGFzQWNjZXNzKQ0KCQl7DQoJCQkkbGFuZyA9IEZhY3Rvcnk6OmdldExhbmd1YWdlKCk7DQoJCQkkbGFuZy0+bG9hZCgncGxnX3N5c3RlbV9yc2ZwYWR2YW5jZXBocCcpOw0KDQoJCQllY2hvICc8bGk+PGEgaWQ9ImFkdmFuY2VwaHBzY3JpcHRzIiBocmVmPSJqYXZhc2NyaXB0OiB2b2lkKDApOyI+PHNwYW4gY2xhc3M9InJzZmljb24gcnNmaWNvbi1jb2RlIj48L3NwYW4+PHNwYW4gY2xhc3M9ImlubmVyLXRleHQiPicgLiBUZXh0OjpfKCdQTEdfU1lTVEVNX1JTRlBBRFZBTkNFUEhQX0pPT01MQV9QUk9GSUxFX1RBQicpIC4gJzwvc3Bhbj48L2E+PC9saT4nOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEJhY2stZW5kIFtPbiBBZnRlciBTaG93IEZvcm0gRWRpdCBUYWJzXQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUJhY2tlbmRBZnRlclNob3dGb3JtRWRpdFRhYnMoKQ0KCXsNCgkJaWYgKCR0aGlzLT5oYXNBY2Nlc3MpDQoJCXsNCgkJCS8vIHNldCBldmVudCByYW5nZQ0KCQkJJGV2ZW50cyA9IHJhbmdlKDAsIDEwKTsNCgkJCS8vIHNldCB0aGUgbGFuZyByYW5nZQ0KCQkJJEpUZXh0ID0gcmFuZ2UoJ0InLCAnTCcpOw0KDQoJCQkvLyBzZXQgbGFuZ3VhZ2UNCgkJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJCSRsYW5nLT5sb2FkKCdwbGdfc3lzdGVtX3JzZnBhZHZhbmNlcGhwJyk7DQoNCgkJCS8vIGdldCBzZXQgdmFsdWVzDQoJCQkkZm9ybUlkID0gRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+aW5wdXQtPmdldEludCgnZm9ybUlkJyk7DQoJCQkkcm93ICAgID0gSlRhYmxlOjpnZXRJbnN0YW5jZSgnUlNGb3JtX0FkdmFuY2VwaHAnLCAnVGFibGUnKTsNCgkJCWlmICghJHJvdykNCgkJCXsNCgkJCQlyZXR1cm47DQoJCQl9DQoJCQkkcm93LT5sb2FkKCRmb3JtSWQpOw0KCQkJaWYgKHN0cmxlbigkcm93LT5ldmVudHNfYWN0aXZlKSA+IDApDQoJCQl7DQoJCQkJJGV2ZW50c19hY3RpdmUgPSBqc29uX2RlY29kZSgkcm93LT5ldmVudHNfYWN0aXZlLCB0cnVlKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlmb3JlYWNoICgkZXZlbnRzIGFzICRucikNCgkJCQl7DQoJCQkJCSRldmVudHNfYWN0aXZlWyRucl0gPSAwOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChzdHJsZW4oJHJvdy0+ZXZlbnRzX2NvZGUpID4gMCkNCgkJCXsNCgkJCQkkZXZlbnRzX2NvZGUgPSBqc29uX2RlY29kZSgkcm93LT5ldmVudHNfY29kZSwgdHJ1ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGV2ZW50cyBhcyAkbnIpDQoJCQkJew0KCQkJCQkkZXZlbnRzX2NvZGVbJG5yXSA9ICcnOw0KCQkJCX0NCgkJCX0NCgkJCWZvcmVhY2ggKCRldmVudHMgYXMgJG5yKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkZXZlbnRzX2NvZGVbJG5yXSkpDQoJCQkJew0KCQkJCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRldmVudHNfY29kZVskbnJdLCB0cnVlKSkgPT09ICRldmVudHNfY29kZVskbnJdKQ0KCQkJCQl7DQoJCQkJCQkkZXZlbnRzX2NvZGVbJG5yXSA9IGJhc2U2NF9kZWNvZGUoJGV2ZW50c19jb2RlWyRucl0pOw0KCQkJCQl9DQoJCQkJCSRsaXN0c1snYWN0aXZlXycgLiAkbnJdID0gUlNGb3JtUHJvSGVscGVyOjpyZW5kZXJIVE1MKCdzZWxlY3QuYm9vbGVhbmxpc3QnLCAncnNmcGFkdmFuY2VwaHBfYWN0aXZlXycgLiAkbnIsICdjbGFzcz0iaW5wdXRib3giJywgJGV2ZW50c19hY3RpdmVbJG5yXSk7DQoJCQkJCSRsaXN0c1snY29kZV8nIC4gJG5yXSAgID0gJzx0ZXh0YXJlYSBjbGFzcz0icnNfdGV4dGFyZWEgY29kZW1pcnJvci1waHAiIG5hbWU9InJzZnBhZHZhbmNlcGhwX2NvZGVfJyAuICRuciAuICciIGlkPSJjb2RlXycgLiAkbnIgLiAnIiByb3dzPSIyMCIgc3R5bGU9IndpZHRoOiA5OCU7IiBjb2xzPSI5MDAiIGZpbHRlcj0icmF3IiA+Jw0KCQkJCQkJLiBodG1sc3BlY2lhbGNoYXJzKCRldmVudHNfY29kZVskbnJdLCBFTlRfQ09NUEFULCAnVVRGLTgnKSAuICc8L3RleHRhcmVhPic7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRsaXN0c1snYWN0aXZlXycgLiAkbnJdID0gUlNGb3JtUHJvSGVscGVyOjpyZW5kZXJIVE1MKCdzZWxlY3QuYm9vbGVhbmxpc3QnLCAncnNmcGFkdmFuY2VwaHBfYWN0aXZlXycgLiAkbnIsICdjbGFzcz0iaW5wdXRib3giJywgJGV2ZW50c19hY3RpdmVbJG5yXSk7DQoJCQkJCSRsaXN0c1snY29kZV8nIC4gJG5yXSAgID0gJzx0ZXh0YXJlYSBjbGFzcz0icnNfdGV4dGFyZWEgY29kZW1pcnJvci1waHAiIG5hbWU9InJzZnBhZHZhbmNlcGhwX2NvZGVfJyAuICRuciAuICciIGlkPSJjb2RlXycgLiAkbnIgLiAnIiByb3dzPSIyMCIgc3R5bGU9IndpZHRoOiA5OCU7IiBjb2xzPSI5MDAiIGZpbHRlcj0icmF3IiA+PC90ZXh0YXJlYT4nOw0KCQkJCX0NCgkJCX0NCgkJCWVjaG8gJzxkaXYgaWQ9InJzZnBhZHZhbmNlcGhwZGl2Ij4nOw0KCQkJaW5jbHVkZSBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9yc2Zvcm0vaGVscGVycy9yc2ZwYWR2YW5jZXBocC5waHAnOw0KCQkJZWNobyAnPC9kaXY+JzsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiBCYWNrLWVuZCBbT24gQWZ0ZXIgU2hvdyBDb25maWd1cmF0aW9uIFRhYnNdDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUnNmb3JtQmFja2VuZEFmdGVyU2hvd0NvbmZpZ3VyYXRpb25UYWJzKCR0YWJzKQ0KCXsNCgkJaWYgKCR0aGlzLT5oYXNBY2Nlc3MpDQoJCXsNCgkJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJCSRsYW5nLT5sb2FkKCdwbGdfc3lzdGVtX3JzZnBhZHZhbmNlcGhwJyk7DQoNCgkJCSR0YWJzLT5hZGRUaXRsZShUZXh0OjpfKCdQTEdfU1lTVEVNX1JTRlBBRFZBTkNFUEhQX0NPTkZJR19UQUInKSwgJ2Zvcm0tYWR2YW5jZXBocCcpOw0KCQkJJHRhYnMtPmFkZENvbnRlbnQoJHRoaXMtPmFkdmFuY2VwaHBDb25maWd1cmF0aW9uU2NyZWVuKCkpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2V0cyB0aGUgdGFiIGRpc3BsYXkgZm9yIHRoZSBDb25maWd1cmF0aW9uIFNjcmVlbg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhZHZhbmNlcGhwQ29uZmlndXJhdGlvblNjcmVlbigpDQoJew0KCQlpZiAoJHRoaXMtPmhhc0FjY2VzcykNCgkJew0KCQkJJGxhbmcgPSBGYWN0b3J5OjpnZXRMYW5ndWFnZSgpOw0KCQkJJGxhbmctPmxvYWQoJ3BsZ19zeXN0ZW1fcnNmcGFkdmFuY2VwaHAnKTsNCg0KCQkJcmV0dXJuIFRleHQ6Ol8oJ1BMR19TWVNURU1fUlNGUEFEVkFOQ0VQSFBfQ09ORklHX05PVElDRScpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogICAgLy8vLy8vICAgIFZhc3QgRGV2ZWxvcG1lbnQgTWV0aG9kICAgXFxcXFxcDQoJICogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KCSAqICAgIyMjIyMjIyMjIyAgICAgIEZST05UIEVORCAgICAgICMjIyMjIyMjIyMjIw0KCSAqICAgIyMjIyMjIyMjIyAgICBFdmVudCBUcmlnZ2VycyAgICMjIyMjIyMjIyMjIw0KCSAqICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCgkgKg0KCSAqKi8NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiBGcm9udC1lbmQgW09uIEluaXQgRm9ybSBEaXNwbGF5XQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZmluZCc9PiYkZmluZCwncmVwbGFjZSc9PiYkcmVwbGFjZSwnZm9ybUxheW91dCc9PiYkZm9ybUxheW91dCkNCgkgKi8NCgkvKnB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUZyb250ZW5kSW5pdEZvcm1EaXNwbGF5KCRhcmdzKQ0KCXsNCgkJLS0gPj4gIFdlIG5lZWQgYSBmb3JtSWQgdG8gaGF2ZSB0aGlzIHdvcmsgIDw8IC0tLQ0KCQkNCgkJJHRoaXMtPnNldEV2ZW50cygkdGhpcy0+VkRNX3JzZm9ybV9pZCk7DQoJCWlmKCR0aGlzLT5WRE1fYWN0aXZlWzBdID09IDEpew0KCQkJZXZhbCgkdGhpcy0+VkRNX2NvZGVbMF0pOw0KCQl9DQoJfSovDQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gRnJvbnQtZW5kIFtPbiBCZWZvcmUgRm9ybSBEaXNwbGF5XQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZm9ybUxheW91dCc9PiYkZm9ybUxheW91dCwnZm9ybUlkJz0+JGZvcm1JZCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEJlZm9yZUZvcm1EaXNwbGF5KCRhcmdzKQ0KCXsNCgkJJHRoaXMtPnNldEV2ZW50cygkYXJnc1snZm9ybUlkJ10pOw0KCQlpZiAoJHRoaXMtPlZETV9hY3RpdmVbMF0gPT0gMSkNCgkJew0KCQkJJGRhdGEgPSAkdGhpcy0+VkRNX2NvZGVbMF07DQoJCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhLCB0cnVlKSkgPT09ICRkYXRhKQ0KCQkJew0KCQkJCSRkYXRhID0gYmFzZTY0X2RlY29kZSgkZGF0YSk7DQoJCQl9DQoJCQlldmFsKCRkYXRhKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiBGcm9udC1lbmQgW09uIEJlZm9yZSBGb3JtIFZhbGlkYXRpb25dDQoJICoNCgkgKiAkYXJncyA9IGFycmF5KCdpbnZhbGlkJz0+JiRpbnZhbGlkLCAnZm9ybUlkJyA9PiAkZm9ybUlkLCAncG9zdCcgPT4gJiRwb3N0KQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUZyb250ZW5kQmVmb3JlRm9ybVZhbGlkYXRpb24oJGFyZ3MpDQoJew0KCQkkdGhpcy0+c2V0RXZlbnRzKCRhcmdzWydmb3JtSWQnXSk7DQoJCWlmICgkdGhpcy0+VkRNX2FjdGl2ZVsxXSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVsxXTsNCgkJCWlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpKSA9PT0gJGRhdGEpDQoJCQl7DQoJCQkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsNCgkJCX0NCgkJCWV2YWwoJGRhdGEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQmVmb3JlIEZvcm0gUHJvY2Vzc10NCgkgKg0KCSAqICRhcmdzID0gYXJyYXkoJ3Bvc3QnID0+ICYkcG9zdCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEJlZm9yZUZvcm1Qcm9jZXNzKCRhcmdzKQ0KCXsNCgkJJHRoaXMtPnNldEV2ZW50cygkYXJnc1sncG9zdCddWydmb3JtSWQnXSk7DQoJCWlmICgkdGhpcy0+VkRNX2FjdGl2ZVsyXSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVsyXTsNCgkJCWlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpKSA9PT0gJGRhdGEpDQoJCQl7DQoJCQkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsNCgkJCX0NCgkJCWV2YWwoJGRhdGEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQmVmb3JlIFN0b3JlIFN1Ym1pc3Npb25zXQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZm9ybUlkJz0+JGZvcm1JZCwncG9zdCc9PiYkcG9zdCwnU3VibWlzc2lvbklkJz0+JFN1Ym1pc3Npb25JZCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEJlZm9yZVN0b3JlU3VibWlzc2lvbnMoJGFyZ3MpDQoJew0KCQkkdGhpcy0+c2V0RXZlbnRzKCRhcmdzWydmb3JtSWQnXSk7DQoJCWlmICgkdGhpcy0+VkRNX2FjdGl2ZVszXSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVszXTsNCgkJCWlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpKSA9PT0gJGRhdGEpDQoJCQl7DQoJCQkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsNCgkJCX0NCgkJCWV2YWwoJGRhdGEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQWZ0ZXIgU3RvcmUgU3VibWlzc2lvbnNdDQoJICoNCgkgKiAkYXJncyA9IGFycmF5KCdTdWJtaXNzaW9uSWQnPT4kU3VibWlzc2lvbklkLCAnZm9ybUlkJz0+JGZvcm1JZCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEFmdGVyU3RvcmVTdWJtaXNzaW9ucygkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm1JZCddKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzRdID09IDEpDQoJCXsNCgkJCSRkYXRhID0gJHRoaXMtPlZETV9jb2RlWzRdOw0KCQkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpID09PSAkZGF0YSkNCgkJCXsNCgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOw0KCQkJfQ0KCQkJZXZhbCgkZGF0YSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gRnJvbnQtZW5kIFtPbiBBZnRlciBGb3JtIFByb2Nlc3NdDQoJICoNCgkgKiAkYXJncyA9IGFycmF5KCdTdWJtaXNzaW9uSWQnPT4kU3VibWlzc2lvbklkLCdmb3JtSWQnPT4kZm9ybUlkKQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUZyb250ZW5kQWZ0ZXJGb3JtUHJvY2VzcygkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm1JZCddKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzVdID09IDEpDQoJCXsNCgkJCSRkYXRhID0gJHRoaXMtPlZETV9jb2RlWzVdOw0KCQkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpID09PSAkZGF0YSkNCgkJCXsNCgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOw0KCQkJfQ0KCQkJZXZhbCgkZGF0YSk7DQoJCX0NCgl9DQoNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiBGcm9udC1lbmQgW09uIEFmdGVyIFNob3cgVGhhbmt5b3UgTWVzc2FnZV0NCgkgKg0KCSAqICRhcmdzID0gYXJyYXkoJ291dHB1dCc9PiYkb3V0cHV0LCdmb3JtSWQnPT4mJGZvcm1JZCkNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1Gcm9udGVuZEFmdGVyU2hvd1RoYW5reW91TWVzc2FnZSgkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm1JZCddKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzZdID09IDEpDQoJCXsNCgkJCSRkYXRhID0gJHRoaXMtPlZETV9jb2RlWzZdOw0KCQkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpID09PSAkZGF0YSkNCgkJCXsNCgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOw0KCQkJfQ0KCQkJZXZhbCgkZGF0YSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gRnJvbnQtZW5kIFtPbiBBZnRlciBDcmVhdGUgUGxhY2Vob2xkZXJzXQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZm9ybScgPT4gJiRmb3JtLCAncGxhY2Vob2xkZXJzJyA9PiAmJHBsYWNlaG9sZGVycywgJ3ZhbHVlcycgPT4gJiR2YWx1ZXMsICdzdWJtaXNzaW9uJyA9PiAkc3VibWlzc2lvbikNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gb25Sc2Zvcm1BZnRlckNyZWF0ZVBsYWNlaG9sZGVycygkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm0nXS0+Rm9ybUlkKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzddID09IDEpDQoJCXsNCgkJCSRkYXRhID0gJHRoaXMtPlZETV9jb2RlWzddOw0KCQkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSwgdHJ1ZSkpID09PSAkZGF0YSkNCgkJCXsNCgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOw0KCQkJfQ0KCQkJZXZhbCgkZGF0YSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gRnJvbnQtZW5kIFtPbiBCZWZvcmUgVXNlciBFbWFpbF0NCgkgKg0KCSAqICRhcmdzID0gYXJyYXkoJ2Zvcm0nID0+ICYkZm9ybSwgJ3BsYWNlaG9sZGVycycgPT4gJiRwbGFjZWhvbGRlcnMsICd2YWx1ZXMnID0+ICYkdmFsdWVzLCAnc3VibWlzc2lvbklkJyA9PiAkU3VibWlzc2lvbklkLCAndXNlckVtYWlsJz0+JiR1c2VyRW1haWwpDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUnNmb3JtQmVmb3JlVXNlckVtYWlsKCRhcmdzKQ0KCXsNCgkJJHRoaXMtPnNldEV2ZW50cygkYXJnc1snZm9ybSddLT5Gb3JtSWQpOw0KCQlpZiAoJHRoaXMtPlZETV9hY3RpdmVbOF0gPT0gMSkNCgkJew0KCQkJJGRhdGEgPSAkdGhpcy0+VkRNX2NvZGVbOF07DQoJCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhLCB0cnVlKSkgPT09ICRkYXRhKQ0KCQkJew0KCQkJCSRkYXRhID0gYmFzZTY0X2RlY29kZSgkZGF0YSk7DQoJCQl9DQoJCQlldmFsKCRkYXRhKTsNCgkJfQ0KCX0NCg0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQmVmb3JlIEFkbWluIEVtYWlsXQ0KCSAqDQoJICogJGFyZ3MgPSBhcnJheSgnZm9ybScgPT4gJiRmb3JtLCAncGxhY2Vob2xkZXJzJyA9PiAmJHBsYWNlaG9sZGVycywgJ3ZhbHVlcycgPT4gJiR2YWx1ZXMsICdzdWJtaXNzaW9uSWQnID0+ICRTdWJtaXNzaW9uSWQsICdhZG1pbkVtYWlsJz0+JiRhZG1pbkVtYWlsKQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUJlZm9yZUFkbWluRW1haWwoJGFyZ3MpDQoJew0KCQkkdGhpcy0+c2V0RXZlbnRzKCRhcmdzWydmb3JtJ10tPkZvcm1JZCk7DQoJCWlmICgkdGhpcy0+VkRNX2FjdGl2ZVs5XSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVs5XTsNCgkJCWlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRhdGEsIHRydWUpKSA9PT0gJGRhdGEpDQoJCQl7DQoJCQkJJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRkYXRhKTsNCgkJCX0NCgkJCWV2YWwoJGRhdGEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIEZyb250LWVuZCBbT24gQmVmb3JlIEFkZGl0aW9uYWwgRW1haWxdDQoJICoNCgkgKiAkYXJncyA9IGFycmF5KCdmb3JtJz0+JiRmb3JtLCdwbGFjZWhvbGRlcnMnPT4mJHBsYWNlaG9sZGVycywndmFsdWVzJz0+JiR2YWx1ZXMsJ3N1Ym1pc3Npb25JZCc9PiRTdWJtaXNzaW9uSWQsJ2FkZGl0aW9uYWxFbWFpbCc9PiYkYWRkaXRpb25hbEVtYWlsKQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblJzZm9ybUJlZm9yZUFkZGl0aW9uYWxFbWFpbCgkYXJncykNCgl7DQoJCSR0aGlzLT5zZXRFdmVudHMoJGFyZ3NbJ2Zvcm0nXS0+Rm9ybUlkKTsNCgkJaWYgKCR0aGlzLT5WRE1fYWN0aXZlWzEwXSA9PSAxKQ0KCQl7DQoJCQkkZGF0YSA9ICR0aGlzLT5WRE1fY29kZVsxMF07DQoJCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhLCB0cnVlKSkgPT09ICRkYXRhKQ0KCQkJew0KCQkJCSRkYXRhID0gYmFzZTY0X2RlY29kZSgkZGF0YSk7DQoJCQl9DQoJCQlldmFsKCRkYXRhKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqICAgIENoZWNrIGlmIHRoaXMgcGx1Z2luIGlzIGFjdGl2ZSBvbiB0aGUgZm9ybQ0KCSAqDQoJICogQHJldHVybnMgYSBib29sIGZhbHNlIG9yIHRydWUNCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEV2ZW50cygkZm9ybUlkKQ0KCXsNCgkJaWYgKCFpc19hcnJheSgkdGhpcy0+VkRNX2FjdGl2ZSkgfHwgIWNvdW50KCR0aGlzLT5WRE1fYWN0aXZlKSB8fCAkdGhpcy0+VkRNX3JzZm9ybV9pZCAhPSAkZm9ybUlkKQ0KCQl7DQoJCQkvLyBzZXQgZm9ybSBpZA0KCQkJJHRoaXMtPlZETV9yc2Zvcm1faWQgPSAkZm9ybUlkOw0KCQkJLy8gc2V0IGV2ZW50IGFycmF5DQoJCQkkZXZlbnRzID0gcmFuZ2UoMCwgMTApOw0KCQkJLy8gZ2V0IHNldCB2YWx1ZXMNCgkJCSRyb3cgPSBKVGFibGU6OmdldEluc3RhbmNlKCdSU0Zvcm1fQWR2YW5jZXBocCcsICdUYWJsZScpOw0KCQkJaWYgKCEkcm93KQ0KCQkJew0KCQkJCXJldHVybjsNCgkJCX0NCgkJCSRyb3ctPmxvYWQoJHRoaXMtPlZETV9yc2Zvcm1faWQpOw0KCQkJaWYgKHN0cmxlbigkcm93LT5ldmVudHNfYWN0aXZlKSkNCgkJCXsNCgkJCQkkdGhpcy0+VkRNX2FjdGl2ZSA9IGpzb25fZGVjb2RlKCRyb3ctPmV2ZW50c19hY3RpdmUsIHRydWUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRldmVudHMgYXMgJG5yKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPlZETV9hY3RpdmVbJG5yXSA9IDA7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKHN0cmxlbigkcm93LT5ldmVudHNfY29kZSkpDQoJCQl7DQoJCQkJJHRoaXMtPlZETV9jb2RlID0ganNvbl9kZWNvZGUoJHJvdy0+ZXZlbnRzX2NvZGUsIHRydWUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRldmVudHMgYXMgJG5yKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPlZETV9jb2RlWyRucl0gPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJhdGlvblNjcmVlbigpDQoJew0KCQlvYl9zdGFydCgpOw0KDQoJCUpGb3JtOjphZGRGb3JtUGF0aChfX0RJUl9fIC4gJy9mb3JtcycpOw0KDQoJCSRmb3JtID0gSkZvcm06OmdldEluc3RhbmNlKCdwbGdfc3lzdGVtX3JzZnBnb29nbGUuY29uZmlndXJhdGlvbicsICdjb25maWd1cmF0aW9uJywgYXJyYXkoJ2NvbnRyb2wnID0+ICdyc2Zvcm1Db25maWcnKSwgZmFsc2UsIGZhbHNlKTsNCgkJJGZvcm0tPmJpbmQoJHRoaXMtPmxvYWRGb3JtRGF0YSgpKTsNCg0KCQk/Pg0KICAgICAgICA8ZGl2IGlkPSJwYWdlLWdvb2dsZSIgY2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+DQoJCQk8P3BocA0KCQkJZm9yZWFjaCAoJGZvcm0tPmdldEZpZWxkc2V0cygpIGFzICRmaWVsZHNldCkNCgkJCXsNCgkJCQlpZiAoJGZpZWxkcyA9ICRmb3JtLT5nZXRGaWVsZHNldCgkZmllbGRzZXQtPm5hbWUpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJCXsNCgkJCQkJCWVjaG8gJGZpZWxkLT5yZW5kZXJGaWVsZCgpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJPz4NCiAgICAgICAgPC9kaXY+DQoJCTw/cGhwDQoNCgkJJGNvbnRlbnRzID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQoJCW9iX2VuZF9jbGVhbigpOw0KDQoJCXJldHVybiAkY29udGVudHM7DQoJfQ0KDQoJLyoqDQoJICogICAgQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIGJhY2tlbmQgYWNjZXNzDQoJICoNCgkgKiBAcmV0dXJucyBhIGJvb2wgZmFsc2Ugb3IgdHJ1ZQ0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYmFja2VuZEFjY2VzcygpDQoJew0KCQkvLyBnZXQgdXNlcg0KCQkkdXNlcklkICAgICAgID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJJHVzZXJHcm91cCAgICA9IEpVc2VySGVscGVyOjpnZXRVc2VyR3JvdXBzKCR1c2VySWQpOw0KCQkkYWNjZXNzR3JvdXBzID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdhY2Nlc3MnKTsNCgkJaWYgKGlzX2FycmF5KCR1c2VyR3JvdXApKQ0KCQl7DQoJCQlpZiAoaXNfYXJyYXkoJGFjY2Vzc0dyb3VwcykpDQoJCQl7DQoJCQkJcmV0dXJuIChjb3VudChhcnJheV9pbnRlcnNlY3QoJGFjY2Vzc0dyb3VwcywgJHVzZXJHcm91cCkpKSA/IHRydWUgOiBmYWxzZTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyByZXR1cm4gdHJ1ZSBpZiBub3Qgc2V0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', 'RSFPadvancephp', '', 'CQlpZiAoJHR5cGUgPT0gJ2luc3RhbGwnKQ0KCQl7DQoJCQllY2hvICcJPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+Q29uZ3JhdHVsYXRpb25zISBUaGUgcGx1Z2luIGlzIG5vdyBpbnN0YWxsZWQhPC9oMj4NCgkJCQkJPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PGEgaHJlZj0iJyAuIEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpiYXNlKCkgLiAnaW5kZXgucGhwP29wdGlvbj1jb21fcGx1Z2lucyZ2aWV3PXBsdWdpbnMmZmlsdGVyX3NlYXJjaD1BZHZhbmNlIFBIUCBmb3IgUlNGb3JtIVBybyI+QWN0aXZhdGU8L2E+IHRoaXMgcGx1Z2lucyBub3chPC9oMj4NCgkJCQkJPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+WW91IHdpbGwgbmVlZCB0byBzZXR1cCBhIGZldyB0aGluZ3MsIHdhdGNoIHRoZXNlIHR1dG9yaWFsczo8L2gyPg0KCQkJCQk8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+DQoJCQkJCQk8dWw+DQoJCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8veW91dHUuYmUvREtFVnphdGJwRDgiIHRhcmdldD0iX2JsYW5rIj5JbnN0YWxsIFJTRm9ybSBBZHZhbmNlIFBIUCBQbHVnaW48L2E+PC9saT4NCgkJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS9WMzdOcWkxZHBuWSIgdGFyZ2V0PSJfYmxhbmsiPlNldCBSU0Zvcm0gQWR2YW5jZSBQSFA8L2E+PC9saT4NCgkJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS9oU0JKZV9yeXExRSIgdGFyZ2V0PSJfYmxhbmsiPkRlbW9uc3RyYXRpb24gb2YgUlNGb3JtIEFkdmFuY2UgUEhQIFBsdWdpbjwvYT48L2xpPg0KCQkJCQkJPC91bD4NCgkJCQkJPC9kaXY+DQoJCQkJCTxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+TGV0IHVzIGtub3cgaWYgc29tZXRoaW5nIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkITwvcD4nOw0KCQl9DQoJCWlmICgkdHlwZSA9PSAndXBkYXRlJykNCgkJew0KCQkJZWNobyAnCTxoMiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPkNvbmdyYXR1bGF0aW9ucyEgWW91IGhhdmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgdGhlIHBsdWdpbiE8L2gyPg0KCQkJCTxoMiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPlBsZWFzZSB3YXRjaCB0aGVzZSB0dXRvcmlhbHMgaWYgaGF2ZSBhbnkgcXVlc3Rpb25zOjwvaDI+DQoJCQkJPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPg0KCQkJCQk8dWw+DQoJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS9ES0VWemF0YnBEOCIgdGFyZ2V0PSJfYmxhbmsiPkluc3RhbGwgUlNGb3JtIEFkdmFuY2UgUEhQIFBsdWdpbjwvYT48L2xpPg0KCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8veW91dHUuYmUvVjM3TnFpMWRwblkiIHRhcmdldD0iX2JsYW5rIj5TZXQgUlNGb3JtIEFkdmFuY2UgUEhQPC9hPjwvbGk+DQoJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS9oU0JKZV9yeXExRSIgdGFyZ2V0PSJfYmxhbmsiPkRlbW9uc3RyYXRpb24gb2YgUlNGb3JtIEFkdmFuY2UgUEhQIFBsdWdpbjwvYT48L2xpPg0KCQkJCQk8L3VsPg0KCQkJCTwvZGl2Pg0KCQkJCTxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+TGV0IHVzIGtub3cgaWYgc29tZXRoaW5nIGlzIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkITwvcD4nOw0KCQl9', '', 'CQlpZiAoJHR5cGUgPT0gJ3VuaW5zdGFsbCcpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoNCgkJJGFwcCA9IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCk7DQoNCgkJaWYgKCFmaWxlX2V4aXN0cyhKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9yc2Zvcm0vaGVscGVycy9yc2Zvcm0ucGhwJykpDQoJCXsNCgkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgaW5zdGFsbCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUuYXZhbmdhdGUuY29tL29yZGVyL2NhcnQucGhwP1BST0RTPTE5MjUwNDQmUVRZPTEmQUZGSUxJQVRFPTYzOTU2JkFGRlNSQz1wbHVnaW4iIHRhcmdldD0iX2JsYW5rIj5SU0Zvcm0hIFBybyBjb21wb25lbnQ8L2E+IGJlZm9yZSBjb250aW51aW5nLicsICdlcnJvcicpOw0KDQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQlpZiAoIWZpbGVfZXhpc3RzKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3JzZm9ybS9oZWxwZXJzL3ZlcnNpb24ucGhwJykpDQoJCXsNCgkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgdXBncmFkZSA8YSBocmVmPSJodHRwczovL3NlY3VyZS5hdmFuZ2F0ZS5jb20vb3JkZXIvY2FydC5waHA/UFJPRFM9MTkyNTA0NCZRVFk9MSZBRkZJTElBVEU9NjM5NTYmQUZGU1JDPXBsdWdpbiIgdGFyZ2V0PSJfYmxhbmsiPlJTRm9ybSEgUHJvPC9hPiB0byBhdCBsZWFzdCBSNDUgYmVmb3JlIGNvbnRpbnVpbmchJywgJ2Vycm9yJyk7DQoNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCXJldHVybiB0cnVlOw==', '', '', '', '2.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX3JzZm9ybV9hZHZhbmNlcGhwYCAoDQogIGBmb3JtX2lkYCBpbnQoMTEpIE5PVCBOVUxMLA0KICBgZXZlbnRzX2FjdGl2ZWAgdmFyY2hhcigyNTUpIE5PVCBOVUxMLA0KICBgZXZlbnRzX2NvZGVgIG1lZGl1bXRleHQgTk9UIE5VTEwsDQogIFBSSU1BUlkgS0VZIChgZm9ybV9pZGApDQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0Zjg7DQoNCkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGAjX19yc2Zvcm1fYWR2YW5jZXBocHN0b3JlYCAoDQogIGBpZGAgYmlnaW50KDIwKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwNCiAgYHVzZXJfaWRgIGludCgxMSkgTk9UIE5VTEwgREVGQVVMVCAnMCcsDQogIGBkYXRhYCBtZWRpdW10ZXh0IE5PVCBOVUxMLA0KICBQUklNQVJZIEtFWSAoYGlkYCksDQogIEtFWSBgdXNlcl9pZGAgKGB1c2VyX2lkYCkNCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmODs=', '', 'RSForm! Pro - Advance PHP', '', 1, '', '', 1, '2021-09-15 15:11:10', '2023-11-11 09:06:02', 6, '', 7), (21, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Plugin to autoload the powers of componentbuilder', '{}', '86dd28b5-18d4-437e-8a53-7eaf23478fc8', '', 8, '{}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAmJHN1YmplY3QgIFRoZSBvYmplY3QgdG8gb2JzZXJ2ZSAtLSBldmVudCBkaXNwYXRjaGVyLg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGNvbmZpZyAgICBBbiBvcHRpb25hbCBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjb25maWd1cmF0aW9uIHNldHRpbmdzLg0KCSAqDQoJICogQHNpbmNlICAgMS42DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdWJqZWN0LCAkY29uZmlnKQ0KCXsNCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgkc3ViamVjdCwgJGNvbmZpZyk7IyMjUExVR0lOX1BPV0VSX0FVVE9MT0FERVIjIyMNCgl9', '[[[Component]]] Powers Autoloader', '', '', '', 'Ly8gV0hBVD8=', '', '', '', '1.0.1', '{\"property_selection0\":{\"property\":\"25\"},\"property_selection1\":{\"property\":\"27\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Powers Autoloader', '', 1, '', '', 1, '2021-11-11 02:22:02', '2024-03-01 21:18:38', 16, '', 8), +(22, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to build the power autoloader plugin for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Global Autoloader\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2977\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2680\",\"custom_value\":\"\"}}}}', 'd4f37ffe-afd8-492f-9491-9846f215a66d', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbjsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow0KDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KDQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXEZhY3RvcnkgYXMgQ0ZhY3Rvcnk7DQo=', 11, '{\"method_selection0\":{\"method\":\"117\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBjb21wb25lbnQgbmVlZHMgYSBwb3dlciBhdXRvbG9hZGVyIHBsdWdpbiBsb2FkZWQNCgkJaWYgKENGYWN0b3J5OjpfKCdDb25maWcnKS0+YWRkX3Bvd2VyICYmICR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJLy8gbm93IGdldCB0aGUgcGx1Z2luIElEIGlmIHNldA0KCQkJaWYgKCgkaWQgPSAoaW50KSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3BsdWdpbicsIDApKSAhPT0gMCkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBwb3dlciBhdXRvbG9hZGVyIHBsdWdpbg0KCQkJCUNGYWN0b3J5OjpfKCdKb29tbGFwbHVnaW4uRGF0YScpLT5zZXQoJGlkKTsNCgkJCQkvLyBub3cgc2V0IHRoZSBwbHVnaW4gcG93ZXJzIHBsYWNlaG9sZGVyDQoJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+c2V0KCdQTFVHSU5fUE9XRVJfQVVUT0xPQURFUicsICcnKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdZb3UgZG8gbm90IGhhdmUgYSBnbG9iYWwgcG93ZXIgcGx1Z2luIHNldHVwLCBzbyB0aGUgcG93ZXJzIHBsdWdpbiBhdXRvbG9hZGVyIGNvdWxkIG5vdCBiZSBhZGRlZC4nKSwgJ1dhcm5pbmcnKTsNCgkJCX0NCgkJfQ0KCX0NCltDVVNUT01DT0RFPWNvbXBvbmVudEFjdGl2ZV0=', '[[[Component]]] Powers Autoloader Compiler', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDEwXQ==', '', '', '', '1.2.1', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Powers Autoloader Compiler', '', 1, '', '', 1, '2021-11-13 13:05:34', '2024-05-26 20:14:16', 30, '', 3), +(23, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set component dashboard class custom headers.', '{\"fields0\":{\"file\":\"component_dashboard\",\"fields_name\":\"params.component_dashboard_headers\",\"fieldset\":\"component_dashboard_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3010\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"3014\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3006\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"3011\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"3015\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"3007\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"3012\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"3016\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"3008\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"3013\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"3017\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"3009\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'e3252a0c-ce05-428d-a916-24167e00c798', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrY29tcG9uZW50X2Rhc2hib2FyZF0=', '[[[Component]]] Component Dashboard Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.1', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Component Dashboard Headers Tabs', '', 1, '', '', 1, '2021-12-06 04:40:01', '2022-10-23 21:11:58', 17, '', 2), (24, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Add Access Token to easy update [[[Component]]]', '{}', '29ac30d2-1c1a-4b9e-9cfa-c5fcb08caa01', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuDQoJICoNCgkgKiBGb3IgbW9kaWZpY2F0aW9uIG9mIFVSTCBhbmQgaGVhZGVycyBiZWZvcmUgcGFja2FnZSBkb3dubG9hZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkKCYkdXJsLCAmJGhlYWRlcnMpDQoJew0KCQkvLyBzZXQgdGhlIFVSSSBvYmplY3QNCgkJJHVyaSA9IEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgkdXJsKTsNCgkJJHBhcnRzID0gZXhwbG9kZSgnLycsICR1cmktPmdldFBhdGgoKSk7DQoNCgkJLy8gY2hlY2sgdGhhdCB0aGlzIGlzIG91ciBBUEkNCgkJaWYgKCR1cmktPmdldEhvc3QoKSA9PSAnW1tbZ2l0ZWFfdXJsXV1dJyAmJiBpbl9hcnJheSgnW1tbZ2l0ZWFfcGFja2FnZV9uYW1lXV1dJywgJHBhcnRzKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSB0b2tlbiBpZiBzZXQNCgkJCSR0b2tlbiA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdnaXRlYV90b2tlbicsIGZhbHNlKTsNCgkJCS8vIG9ubHkgYWRkIGlmIHRva2VuIGlzIHNldA0KCQkJaWYgKCR0b2tlbikNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHRva2VuDQoJCQkJJHVyaS0+c2V0VmFyKCdhY2Nlc3NfdG9rZW4nLCAkdG9rZW4pOw0KCQkJCS8vIHVwZGF0ZSB0aGUgVVJMDQoJCQkJJHVybCA9ICR1cmktPnRvU3RyaW5nKCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSByZXR1cm4gVVJMDQoJCQkJJHJldHVybiA9IHVybGVuY29kZShiYXNlNjRfZW5jb2RlKChzdHJpbmcpIEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgpKSk7DQoJCQkJLy8gc2V0IHRoZSB1cmxzDQoJCQkJJGdldF9hY2Nlc3NfdG9rZW5fdXJsID0gJyJodHRwczovL1tbW2dpdGVhX3VybF1dXS91c2VyL3NldHRpbmdzL2FwcGxpY2F0aW9ucyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSInIC4gVGV4dDo6XygnR2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciJyAuIEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpyb290KCkgLiAnYWRtaW5pc3RyYXRvci9pbmRleC5waHA/b3B0aW9uPWNvbV9jb25maWcmdmlldz1jb21wb25lbnQmY29tcG9uZW50PWNvbV9bW1tjb21wb25lbnRdXV0mcGF0aD0mcmV0dXJuPScgLiAkcmV0dXJuIC4gJyIgdGl0bGU9IicgLiBUZXh0OjpfKCdTZXQgQWNjZXNzIFRva2VuJykgLiAnIic7DQoJCQkJLy8gbG9hZCB0aGUgbWVzc2FnZQ0KCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKA0KCQkJCQlUZXh0OjpzcHJpbnRmKCJJZiB0aGVyZSB3YXMgYSBkb3dubG9hZC91cGRhdGUgZXJyb3IsIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB0aGUgPGEgaHJlZj0lcyA+QVBJIEFjY2VzcyBUb2tlbjwvYT4gZm9yIHVwZGF0ZXMgb2YgW1tbY29tcG9uZW50XV1dIGhhcyBub3QgYmVlbiBzZXQsIHlvdSBjYW4gc2V0IHRoaXMgYWNjZXNzIHRva2VuIGluIHRoZSA8YSBocmVmPSVzID5nbG9iYWwgb3B0aW9ucyB0YWI8L2E+LiIsDQoJCQkJCQkkZ2V0X2FjY2Vzc190b2tlbl91cmwsDQoJCQkJCQkkc2V0X2FjY2Vzc190b2tlbl91cmwNCgkJCQkJKSwgJ25vdGljZScpOw0KCQkJfQ0KCQl9DQoJfQ0K', 'componentbuilder', '', '', '', 'Ly8gbmVlZHMgZml4', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"39\"},\"property_selection1\":{\"property\":\"37\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev)', '', 1, '', '', 1, '2021-12-08 07:42:39', '2024-03-01 21:17:50', 17, '', 9), -(28, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 'This plugin is used to load PreUpVer on your website. So it adds https://cdn.jsdelivr.net/gh/Llewellynvdm/PreUpVer@1.0.0/dist/js/preupver.min.js to the header of your website. See: https://git.vdm.dev/Llewellyn/PreUpVer for more details.', '{}', 'dd6580c4-6bbb-4d13-a868-0b38fbb6a66e', 'dXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXEh0bWxcSFRNTEhlbHBlcjsNCg==', 8, '{\"method_selection0\":{\"method\":\"122\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBoZWFkIGlzIGNvbXBpbGVkIGFuZCBhbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBoZWFkIGRhdGEuDQoJICogSW4gdGhpcyBjYXNlLCBpdCdzIHVzZWQgdG8gYWRkIGEgSmF2YVNjcmlwdCBmaWxlIHRvIHRoZSBmcm9udCBlbmQgb2YgdGhlIEpvb21sYSBzaXRlLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMy4wLjANCgkgKiBAdGhyb3dzICBFeGNlcHRpb24gb24gZXJyb3IuDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQmVmb3JlQ29tcGlsZUhlYWQoKQ0KCXsNCgkJLy8gQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBzaXRlIGFwcGxpY2F0aW9uDQoJCWlmICgkdGhpcy0+YXBwLT5pc0NsaWVudCgnc2l0ZScpKSB7DQoJCQlIVE1MSGVscGVyOjpfKCdzY3JpcHQnLCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0xsZXdlbGx5bnZkbS9QcmVVcFZlckAxLjAuMC9kaXN0L2pzL3ByZXVwdmVyLm1pbi5qcycsIFsndmVyc2lvbicgPT4gJ2F1dG8nXSk7DQoJCX0NCgl9', 'PreUpVerLoader', '', '', '', 'CQkJJGp2ZXJzaW9uID0gbmV3IEpWZXJzaW9uKCk7DQoJCQlpZiAoISRqdmVyc2lvbi0+aXNDb21wYXRpYmxlKCczLjEwLjAnKSkgew0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgdXBncmFkZSB0byBhdCBsZWFzdCBKb29tbGEhIDMuMTAgYmVmb3JlIGNvbnRpbnVpbmchJywgJ2Vycm9yJyk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0K', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"25\"}}', 'IyBQcmVVcFZlciBMb2FkZXIgKFtbW3BsdWdpbi52ZXJzaW9uXV1dKQ0KDQojIyBJbnRyb2R1Y3Rpb24NCg0KUHJlVXBWZXIgaXMgYSB2ZXJzYXRpbGUgSmF2YVNjcmlwdCBsaWJyYXJ5IGRlc2lnbmVkIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlcnMgb2YgbGlicmFyeSBzY3JpcHRzIGluIHlvdXIgZG9jdW1lbnRhdGlvbi4gSXQgaWRlbnRpZmllcyBzcGVjaWZpYyBgPHByZT5gIHRhZ3Mgb24geW91ciB3ZWJwYWdlIGFuZCB1cGRhdGVzIHRoZW0gd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gdGFnIGZldGNoZWQgZnJvbSBhIHNwZWNpZmllZCByZXBvc2l0b3J5LCBlbnN1cmluZyB5b3VyIGRvY3VtZW50YXRpb24gYWx3YXlzIGRpc3BsYXlzIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uDQoNCiMjIEhvdyBJdCBXb3Jrcw0KDQpQcmVVcFZlciBvcGVyYXRlcyBieSBzZWFyY2hpbmcgZm9yIGA8cHJlPmAgdGFncyB3aXRoIGEgZGVzaWduYXRlZCBjbGFzcyAoYHByZXVwdmVyYCkgYW5kIHVzaW5nIHRoZWlyIGRhdGEgYXR0cmlidXRlcyB0byBwZXJmb3JtIHZlcnNpb24gdXBkYXRlcy4gSXQgc2ltcGxpZmllcyB0aGUgcHJvY2VzcyBvZiBrZWVwaW5nIHlvdXIgbGlicmFyeSByZWZlcmVuY2VzIHVwLXRvLWRhdGUgaW4gZG9jdW1lbnRhdGlvbi4NCg0KIyMjIEF1dG9tYXRpYyBEZXRlY3Rpb24gYW5kIFVwZGF0aW5nDQoNCldoZW4gdGhlIHdlYnBhZ2UgbG9hZHMsIFByZVVwVmVyIGZpbmRzIGFsbCBgPHByZT5gIHRhZ3MgbWFya2VkIHdpdGggdGhlIGBwcmV1cHZlcmAgY2xhc3MuIEl0IHRoZW4gZXh0cmFjdHMgbmVjZXNzYXJ5IGRldGFpbHMgZnJvbSB0aGVpciBkYXRhIGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZXMgZWFjaCB0YWcgd2l0aCB0aGUgbGF0ZXN0IGxpYnJhcnkgdmVyc2lvbi4NCg0KIyMjIFVzYWdlDQoNCjEuICoqTWFya2luZyBgPHByZT5gIFRhZ3M6KioNCg0KICAgQWRkIHRoZSBgY2xhc3M9InByZXVwdmVyImAgdG8gYDxwcmU+YCB0YWdzIGluIHlvdXIgSFRNTCBhbmQgZGVmaW5lIHRoZSByZXF1aXJlZCBkYXRhIGF0dHJpYnV0ZXMgZm9yIGF1dG9tYXRpYyB1cGRhdGluZzoNCg0KICAgYGBgaHRtbA0KICAgPHByZSBpZD0idW5pcXVlLWlkIiBjbGFzcz0icHJldXB2ZXIiDQogICAgICAgIGRhdGEtYXBpLXVybD0iaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy91c2VybmFtZS9saWJyYXJ5L3RhZ3MiDQogICAgICAgIGRhdGEtZGVzY3JpcHRpb249IkRlc2NyaXB0aW9uIG9mIHRoZSBsaWJyYXJ5IHNjcmlwdCINCiAgICAgICAgZGF0YS11cmw9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC91c2VybmFtZS9saWJyYXJ5QCR7dmVyc2lvbn0vZGlzdC9saWJyYXJ5Lm1pbi5qcyI+DQogICA8L3ByZT4NCiAgIGBgYA0KDQogICBSZXBsYWNlIGB1bmlxdWUtaWRgLCBgdXNlcm5hbWVgLCBgbGlicmFyeWAsIGFuZCBvdGhlciBwbGFjZWhvbGRlcnMgd2l0aCB5b3VyIHNwZWNpZmljIGRldGFpbHMuDQoNCjIuICoqQXR0cmlidXRlcyBFeHBsYWluZWQ6KioNCg0KICAgLSBgaWRgOiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYDxwcmU+YCB0YWcuDQogICAtIGBkYXRhLWFwaS11cmxgOiBUaGUgQVBJIFVSTCB0byBmZXRjaCB0aGUgbGF0ZXN0IGxpYnJhcnkgdmVyc2lvbi4NCiAgIC0gYGRhdGEtZGVzY3JpcHRpb25gOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBsaWJyYXJ5IHNjcmlwdC4NCiAgIC0gYGRhdGEtdXJsYDogVGhlIFVSTCBvZiB0aGUgc2NyaXB0LCB3aGVyZSBgJHt2ZXJzaW9ufWAgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBudW1iZXIuDQoNCiMjIyBFeGFtcGxlDQoNCkNoZWNrIG91dCB0aGUgW3Rlc3RzXShodHRwczovL2dpdC52ZG0uZGV2L0xsZXdlbGx5bi9QcmVVcFZlci9zcmMvYnJhbmNoL21hc3Rlci90ZXN0cy8pIGZvbGRlciBmb3IgdGhlIGV4YW1wbGVzIHdlIHVzZSB0byB0ZXN0IGlmIHRoaXMgbGlicmFyeSB3b3JrcyBhcyBleHBlY3RlZC4NCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkF1dGhvcio6IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQorICpOYW1lKjogW1ByZVVwVmVyIExvYWRlcl0oaHR0cHM6Ly9naXQudmRtLmRldi9MbGV3ZWxseW4vUHJlVXBWZXIpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6IFtbW3BsdWdpbi52ZXJzaW9uXV1dDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCj4gVGhpcyAqKnBsdWdpbioqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', '', '', '', 'PreUpVer Loader', '', 1, '', '', 1, '2023-11-28 09:01:02', '2023-11-28 11:27:32', 5, '', 2); - --- --- Dumping data for table `#__componentbuilder_joomla_power` --- - -INSERT INTO `#__componentbuilder_joomla_power` (`id`, `description`, `guid`, `settings`, `system_name`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES -(1, 'The Joomla Factory class', '39403062-84fb-46e0-bac4-0023f766e827', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Factory\",\"joomla_version\":\"0\"}}', 'JFactory', '', 1, '2024-04-09 15:00:24', '0000-00-00 00:00:00', 1, '', 1, 1), -(2, 'The core Joomla Text class.', 'ba6326ef-cb79-4348-80f4-ab086082e3c5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Text\",\"joomla_version\":\"0\"}}', 'JText', '', 1, '2024-04-09 15:01:16', '0000-00-00 00:00:00', 1, '', 1, 2), -(3, 'The Joomla core component helper class.', 'aeb8e463-291f-4445-9ac4-34b637c12dbd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\ComponentHelper\",\"joomla_version\":\"0\"}}', 'JComponentHelper', '', 1, '2024-04-09 15:02:09', '0000-00-00 00:00:00', 1, '', 1, 3), -(4, 'The Joomla core session class.', '5ba38513-5c4f-4b0d-935e-49e986a6bce8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Session\\\\Session\",\"joomla_version\":\"0\"}}', 'JSession', '', 1, '2024-04-09 15:03:18', '0000-00-00 00:00:00', 1, '', 1, 4), -(5, 'The Joomla core uri class.', 'eecc143e-b5cf-4c33-ba4d-97da1df61422', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Uri\\\\Uri\",\"joomla_version\":\"0\"}}', 'JUri', '', 1, '2024-04-09 15:04:32', '0000-00-00 00:00:00', 1, '', 1, 5), -(6, 'HTTP client class.', '8417ac0e-2abd-4452-91fd-4ca6493d55f2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\Http\",\"joomla_version\":\"0\"}}', 'JHttp', '', 1, '2024-04-27 11:59:57', '0000-00-00 00:00:00', 1, '', 1, 6), -(7, 'Route handling class', 'd4c76099-4c32-408a-8701-d0a724484dfd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Router\\\\Route\",\"joomla_version\":\"0\"}}', 'JRoute', '', 1, '2024-04-27 12:01:46', '0000-00-00 00:00:00', 1, '', 1, 7), -(8, 'Class to create and parse routes', '4efa4c21-5114-472a-b1f8-48aa9bd14900', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Router\\\\Router\",\"joomla_version\":\"0\"}}', 'JRouter', '', 1, '2024-04-27 12:02:16', '0000-00-00 00:00:00', 1, '', 1, 7), -(9, 'This is an abstracted input class used to manage retrieving data from the application environment.', '59106b64-dd51-4280-be0a-1b9b9ebb7161', '{\"settings0\":{\"namespace\":\"Joomla\\\\Input\\\\Input\",\"joomla_version\":\"0\"},\"settings1\":{\"namespace\":\"Joomla\\\\CMS\\\\Input\\\\Input\",\"joomla_version\":\"3\"}}', 'JInput', '', 1, '2024-04-27 12:04:55', '2024-05-18 09:27:32', 2, '', 1, 8), -(10, 'Helper to render a Layout object, storing a base path', '7ab82272-0b3d-4bb1-af35-e63a096cfe0b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Layout\\\\LayoutHelper\",\"joomla_version\":\"0\"}}', 'JLayoutHelper', '', 1, '2024-04-27 12:06:33', '0000-00-00 00:00:00', 1, '', 1, 9), -(11, 'Utility class for all HTML drawing classes', '34690c75-1090-47eb-8c06-7228dc7eedd6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\HTMLHelper\",\"joomla_version\":\"0\"}}', 'JHtml', '', 1, '2024-04-27 12:07:27', '0000-00-00 00:00:00', 1, '', 1, 10), -(12, 'Class that handles all access authorisation routines.', '2d513d69-8c7c-4dab-bb84-c5ecafb91a9d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Access\",\"joomla_version\":\"0\"}}', 'JAccess', '', 1, '2024-04-27 12:56:41', '0000-00-00 00:00:00', 1, '', 1, 11), -(13, 'Access rules class.', '80425d73-1789-4f59-b49d-1a712611a77a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Rules\",\"joomla_version\":\"0\"}}', 'JRules', '', 1, '2024-04-27 12:57:12', '0000-00-00 00:00:00', 1, '', 1, 11), -(14, 'Rule class.', 'b07d4be5-bbbe-48c9-a2ab-843090a1c0de', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Rule\",\"joomla_version\":\"0\"}}', 'JRule', '', 1, '2024-04-27 12:57:34', '0000-00-00 00:00:00', 1, '', 1, 11), -(15, 'JDate is a class that stores a date and provides logic to manipulate and render that date in a variety of formats.', '3864fa33-ab10-48d5-98ea-5e1397e6a191', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Date\\\\Date\",\"joomla_version\":\"0\"}}', 'JDate', '', 1, '2024-04-27 12:58:11', '0000-00-00 00:00:00', 1, '', 1, 11), -(16, '', 'b32954a3-05c3-41a0-8238-85262ad46246', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Folder\",\"joomla_version\":\"0\"}}', 'JFolder', '', 1, '2024-05-06 05:29:46', '2024-05-18 09:32:35', 2, '', 1, 12), -(17, '', '55e9e8f0-3c5e-483a-a063-7c7565b00ed7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\File\",\"joomla_version\":\"0\"}}', 'JFile', '', 1, '2024-05-18 09:22:26', '0000-00-00 00:00:00', 1, '', 1, 12), -(18, '', 'a87c432d-b5b4-428e-b7ff-14b51664c624', '{\"settings0\":{\"namespace\":\"Joomla\\\\Registry\\\\Registry\",\"joomla_version\":\"0\"}}', 'JRegistry', '', 1, '2024-05-18 09:33:30', '0000-00-00 00:00:00', 1, '', 1, 13), -(19, '', 'c2ec5cd7-4272-42de-820a-277a935981ed', '{\"settings0\":{\"namespace\":\"Joomla\\\\Registry\\\\AbstractRegistryFormat\",\"joomla_version\":\"0\"}}', 'JRegistryFormat', '', 1, '2024-05-18 09:33:47', '0000-00-00 00:00:00', 1, '', 1, 14), -(20, '', '9f8a11fe-a1e5-4b91-8af7-b62943692616', '{\"settings0\":{\"namespace\":\"Joomla\\\\Registry\\\\Format\\\\Ini\",\"joomla_version\":\"0\"}}', 'JRegistryFormatIni', '', 1, '2024-05-18 09:34:04', '0000-00-00 00:00:00', 1, '', 1, 15), -(21, '', '005224a7-00a1-402a-8818-7ccaf7cdf65c', '{\"settings0\":{\"namespace\":\"Joomla\\\\Registry\\\\Format\\\\Json\",\"joomla_version\":\"0\"}}', 'JRegistryFormatJson', '', 1, '2024-05-18 09:34:29', '0000-00-00 00:00:00', 1, '', 1, 16), -(22, '', '28e671b6-6d4a-4fc8-8588-ad7f46fd68a3', '{\"settings0\":{\"namespace\":\"Joomla\\\\Registry\\\\Format\\\\Php\",\"joomla_version\":\"0\"}}', 'JRegistryFormatPhp', '', 1, '2024-05-18 09:34:47', '0000-00-00 00:00:00', 1, '', 1, 17), -(23, '', '8ae32459-1a0a-4e07-97a5-e1e7aed6e311', '{\"settings0\":{\"namespace\":\"Joomla\\\\Registry\\\\Format\\\\Xml\",\"joomla_version\":\"0\"}}', 'JRegistryFormatXml', '', 1, '2024-05-18 09:35:02', '0000-00-00 00:00:00', 1, '', 1, 18), -(24, '', '0b0a3a94-d3c4-4960-8f6c-1fe928e866ab', '{\"settings0\":{\"namespace\":\"Joomla\\\\String\\\\Inflector\",\"joomla_version\":\"0\"}}', 'JStringInflector', '', 1, '2024-05-18 09:35:19', '0000-00-00 00:00:00', 1, '', 1, 19), -(25, '', 'acb6d6f1-44b2-43ae-88d0-17c5f1fc5ff7', '{\"settings0\":{\"namespace\":\"Joomla\\\\String\\\\Normalise\",\"joomla_version\":\"0\"}}', 'JStringNormalise', '', 1, '2024-05-18 09:35:37', '0000-00-00 00:00:00', 1, '', 1, 20), -(26, '', '4ec5ce19-d42e-461b-89a2-4e9f77c482e6', '{\"settings0\":{\"namespace\":\"Joomla\\\\Data\\\\DataObject\",\"joomla_version\":\"0\"}}', 'JData', '', 1, '2024-05-18 09:35:52', '0000-00-00 00:00:00', 1, '', 1, 21), -(27, '', '9dbdb40d-0e80-4de0-9401-45f09bae4f00', '{\"settings0\":{\"namespace\":\"Joomla\\\\Data\\\\DataSet\",\"joomla_version\":\"0\"}}', 'JDataSet', '', 1, '2024-05-18 09:36:18', '0000-00-00 00:00:00', 1, '', 1, 22), -(28, '', '5ca5e9c5-21c0-4702-af46-f42f2d7ffc4f', '{\"settings0\":{\"namespace\":\"Joomla\\\\Data\\\\DumpableInterface\",\"joomla_version\":\"0\"}}', 'JDataDumpable', '', 1, '2024-05-18 09:36:35', '0000-00-00 00:00:00', 1, '', 1, 23), -(29, '', '038f1396-bba2-4f2c-aad9-94b954fe52f9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\AdministratorApplication\",\"joomla_version\":\"0\"}}', 'JApplicationAdministrator', '', 1, '2024-05-18 09:36:53', '0000-00-00 00:00:00', 1, '', 1, 24), -(30, '', '081cdfea-37d6-47d4-a658-ad92e4055da6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\ApplicationHelper\",\"joomla_version\":\"0\"}}', 'JApplicationHelper', '', 1, '2024-05-18 09:37:11', '0000-00-00 00:00:00', 1, '', 1, 25), -(31, '', '64b2a378-24f6-42ab-909e-9fd9f7219f88', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\BaseApplication\",\"joomla_version\":\"0\"}}', 'JApplicationBase', '', 1, '2024-05-18 09:37:27', '0000-00-00 00:00:00', 1, '', 1, 26), -(32, '', '2a129ee4-54b9-489e-b6bc-673ebad4a77f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\CliApplication\",\"joomla_version\":\"0\"}}', 'JApplicationCli', '', 1, '2024-05-18 09:37:44', '0000-00-00 00:00:00', 1, '', 1, 27), -(33, '', 'c05365c0-9ceb-4bac-b271-e50c19a278f9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\CMSApplication\",\"joomla_version\":\"0\"}}', 'JApplicationCms', '', 1, '2024-05-18 09:38:03', '0000-00-00 00:00:00', 1, '', 1, 28), -(34, '', '27251fb5-d5eb-4662-ad07-75085bda322b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\DaemonApplication\",\"joomla_version\":\"0\"}}', 'JApplicationDaemon', '', 1, '2024-05-18 09:39:18', '0000-00-00 00:00:00', 1, '', 1, 29), -(35, '', 'f82894b5-d83a-4f44-a921-08848bae979c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\SiteApplication\",\"joomla_version\":\"0\"}}', 'JApplicationSite', '', 1, '2024-05-18 09:39:26', '0000-00-00 00:00:00', 1, '', 1, 30), -(36, '', '2405b210-b10e-40e0-92f4-5783875f56cf', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\WebApplication\",\"joomla_version\":\"0\"}}', 'JApplicationWeb', '', 1, '2024-05-18 09:39:34', '0000-00-00 00:00:00', 1, '', 1, 31), -(37, '', 'af98ae86-763a-41c2-9b05-50da4b0e4eb9', '{\"settings0\":{\"namespace\":\"Joomla\\\\Application\\\\Web\\\\WebClient\",\"joomla_version\":\"0\"}}', 'JApplicationWebClient', '', 1, '2024-05-18 09:39:44', '0000-00-00 00:00:00', 1, '', 1, 32), -(38, '', '8c57a999-92f6-4cd4-b2a8-0711d902343e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\DaemonApplication\",\"joomla_version\":\"0\"}}', 'JDaemon', '', 1, '2024-05-18 09:40:05', '0000-00-00 00:00:00', 1, '', 1, 33), -(39, '', '508c69b1-eb0d-4ae1-8979-bf3ecb596ac9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\CliApplication\",\"joomla_version\":\"0\"}}', 'JCli', '', 1, '2024-05-18 09:40:37', '0000-00-00 00:00:00', 1, '', 1, 34), -(40, '', 'd57b084b-bfba-45d2-9131-bcc40f16deaf', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Application\\\\WebApplication\",\"joomla_version\":\"0\"}}', 'JWeb', '', 1, '2024-05-18 09:40:47', '0000-00-00 00:00:00', 1, '', 1, 35), -(41, '', '32ad40f6-cec1-48a6-8316-962714f08af9', '{\"settings0\":{\"namespace\":\"Joomla\\\\Application\\\\Web\\\\WebClient\",\"joomla_version\":\"0\"}}', 'JWebClient', '', 1, '2024-05-18 09:40:57', '0000-00-00 00:00:00', 1, '', 1, 36), -(42, '', 'db2b366c-0319-4509-85e2-df2b49e1f4d8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\Model\\\\AdminModel\",\"joomla_version\":\"0\"}}', 'JModelAdmin', '', 1, '2024-05-18 09:41:06', '0000-00-00 00:00:00', 1, '', 1, 37), -(43, '', 'd1cd87a5-84d4-4068-929d-a431caaa3106', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\Model\\\\FormModel\",\"joomla_version\":\"0\"}}', 'JModelForm', '', 1, '2024-05-18 09:41:16', '0000-00-00 00:00:00', 1, '', 1, 38), -(44, '', 'df684d65-fc00-4927-b5e4-71b19cb17816', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\Model\\\\ItemModel\",\"joomla_version\":\"0\"}}', 'JModelItem', '', 1, '2024-05-18 09:41:26', '0000-00-00 00:00:00', 1, '', 1, 39), -(45, '', 'afc402b6-1082-4aeb-bd12-27d63df8a736', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\Model\\\\ListModel\",\"joomla_version\":\"0\"}}', 'JModelList', '', 1, '2024-05-18 09:41:36', '0000-00-00 00:00:00', 1, '', 1, 40), -(46, '', '6dce7a1b-cfc3-4c2a-837d-be9cbc902446', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\Model\\\\BaseDatabaseModel\",\"joomla_version\":\"0\"}}', 'JModelLegacy', '', 1, '2024-05-18 09:41:48', '0000-00-00 00:00:00', 1, '', 1, 41), -(47, '', 'a0d15871-8694-48cc-9eee-4b42f867836f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\View\\\\CategoriesView\",\"joomla_version\":\"0\"}}', 'JViewCategories', '', 1, '2024-05-18 09:41:58', '0000-00-00 00:00:00', 1, '', 1, 42), -(48, '', '1b7c899c-af04-4090-8f29-cf76e9976d89', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\View\\\\CategoryView\",\"joomla_version\":\"0\"}}', 'JViewCategory', '', 1, '2024-05-18 09:42:07', '0000-00-00 00:00:00', 1, '', 1, 43), -(49, '', '1e72b813-344e-487e-90b2-8a949f586d26', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\View\\\\CategoryFeedView\",\"joomla_version\":\"0\"}}', 'JViewCategoryfeed', '', 1, '2024-05-18 09:42:19', '0000-00-00 00:00:00', 1, '', 1, 44), -(50, '', '3cca7cc5-481b-4f21-944c-4f85ec4b1b05', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\View\\\\HtmlView\",\"joomla_version\":\"0\"}}', 'JViewLegacy', '', 1, '2024-05-18 09:42:28', '0000-00-00 00:00:00', 1, '', 1, 45), -(51, '', '10c86913-be3b-4642-ad75-d7e98e297859', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\Controller\\\\AdminController\",\"joomla_version\":\"0\"}}', 'JControllerAdmin', '', 1, '2024-05-18 09:42:39', '0000-00-00 00:00:00', 1, '', 1, 46), -(52, '', '1a101bb6-f02b-4629-9379-c7c0d0df90f2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\Controller\\\\BaseController\",\"joomla_version\":\"0\"}}', 'JControllerLegacy', '', 1, '2024-05-18 09:42:51', '0000-00-00 00:00:00', 1, '', 1, 47), -(53, '', '907ccae5-57a9-44b9-a8aa-5b905d1cd70f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\MVC\\\\Controller\\\\FormController\",\"joomla_version\":\"0\"}}', 'JControllerForm', '', 1, '2024-05-18 09:42:59', '0000-00-00 00:00:00', 1, '', 1, 48), -(54, '', '3c00255b-9da8-4917-9381-d5e327d61cfb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\TableInterface\",\"joomla_version\":\"0\"}}', 'JTableInterface', '', 1, '2024-05-18 09:43:11', '0000-00-00 00:00:00', 1, '', 1, 49), -(55, '', '7ac01b46-d981-4c48-a574-382c20da780b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Table\",\"joomla_version\":\"0\"}}', 'JTable', '', 1, '2024-05-18 09:43:25', '0000-00-00 00:00:00', 1, '', 1, 50), -(56, '', 'e1f27169-946a-4798-bc33-40c3573643b1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Nested\",\"joomla_version\":\"0\"}}', 'JTableNested', '', 1, '2024-05-18 09:43:35', '0000-00-00 00:00:00', 1, '', 1, 51), -(57, '', 'ad69bc17-d1e6-4eb9-a67f-158da8586b43', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Asset\",\"joomla_version\":\"0\"}}', 'JTableAsset', '', 1, '2024-05-18 09:43:48', '0000-00-00 00:00:00', 1, '', 1, 52), -(58, '', '5d108832-c7aa-4b39-8c40-c9a118e731d9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Extension\",\"joomla_version\":\"0\"}}', 'JTableExtension', '', 1, '2024-05-18 09:43:58', '0000-00-00 00:00:00', 1, '', 1, 53), -(59, '', 'c216b7ff-40cb-49be-a9ea-83d7cd5f7efe', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Language\",\"joomla_version\":\"0\"}}', 'JTableLanguage', '', 1, '2024-05-18 09:44:10', '0000-00-00 00:00:00', 1, '', 1, 54), -(60, '', '7d6daa00-491e-4e4c-9ee1-ad16eb5374ea', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Update\",\"joomla_version\":\"0\"}}', 'JTableUpdate', '', 1, '2024-05-18 09:44:19', '0000-00-00 00:00:00', 1, '', 1, 55), -(61, '', 'bebd821b-b81c-47be-b3fc-e1e1206921d3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\UpdateSite\",\"joomla_version\":\"0\"}}', 'JTableUpdatesite', '', 1, '2024-05-18 09:44:28', '0000-00-00 00:00:00', 1, '', 1, 56), -(62, '', '11accf54-fcb9-4ba0-a645-7c80ce14e224', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\User\",\"joomla_version\":\"0\"}}', 'JTableUser', '', 1, '2024-05-18 09:44:37', '0000-00-00 00:00:00', 1, '', 1, 57), -(63, '', '91b54f35-f2c7-4914-aa48-a523fac6833c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Usergroup\",\"joomla_version\":\"0\"}}', 'JTableUsergroup', '', 1, '2024-05-18 09:44:55', '0000-00-00 00:00:00', 1, '', 1, 58), -(64, '', '9bf4628e-8dc5-4557-a2ae-0dda581e3163', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\ViewLevel\",\"joomla_version\":\"0\"}}', 'JTableViewlevel', '', 1, '2024-05-18 09:45:19', '0000-00-00 00:00:00', 1, '', 1, 59), -(65, '', '2173d123-2a16-4628-b262-e93d1cbd391b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\ContentHistory\",\"joomla_version\":\"0\"}}', 'JTableContenthistory', '', 1, '2024-05-18 09:45:28', '0000-00-00 00:00:00', 1, '', 1, 60), -(66, '', '62c93780-efe8-44f3-8e6e-2d507cd5ccaa', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\ContentType\",\"joomla_version\":\"0\"}}', 'JTableContenttype', '', 1, '2024-05-18 09:45:37', '0000-00-00 00:00:00', 1, '', 1, 61), -(67, '', '3a4f6683-b71a-4539-80fc-a4150a64e4f8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\CoreContent\",\"joomla_version\":\"0\"}}', 'JTableCorecontent', '', 1, '2024-05-18 09:45:46', '0000-00-00 00:00:00', 1, '', 1, 62), -(68, '', 'eb18f368-4122-42ee-95ab-95ec78dc0c19', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Ucm\",\"joomla_version\":\"0\"}}', 'JTableUcm', '', 1, '2024-05-18 09:45:55', '0000-00-00 00:00:00', 1, '', 1, 63), -(69, '', 'e6cc78b2-848c-4b17-ae46-a3bc08a5ab90', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Category\",\"joomla_version\":\"0\"}}', 'JTableCategory', '', 1, '2024-05-18 09:46:03', '0000-00-00 00:00:00', 1, '', 1, 64), -(70, '', '69574867-d64f-4ef1-b785-fb6e69cb2339', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Content\",\"joomla_version\":\"0\"}}', 'JTableContent', '', 1, '2024-05-18 09:46:13', '0000-00-00 00:00:00', 1, '', 1, 65), -(71, '', '840f0c60-81ee-46ba-9ce5-50cfb2d33594', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Menu\",\"joomla_version\":\"0\"}}', 'JTableMenu', '', 1, '2024-05-18 09:46:25', '0000-00-00 00:00:00', 1, '', 1, 66), -(72, '', '7488bc11-3224-4a3a-938c-0ebdfad38935', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\MenuType\",\"joomla_version\":\"0\"}}', 'JTableMenuType', '', 1, '2024-05-18 09:46:33', '0000-00-00 00:00:00', 1, '', 1, 67), -(73, '', '102ef6e3-7e85-41b1-b702-0b464cc879f5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Module\",\"joomla_version\":\"0\"}}', 'JTableModule', '', 1, '2024-05-18 09:46:42', '0000-00-00 00:00:00', 1, '', 1, 68), -(74, '', 'b8c64f3f-ca63-4897-a9e1-8afc64220079', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Observer\\\\AbstractObserver\",\"joomla_version\":\"0\"}}', 'JTableObserver', '', 1, '2024-05-18 09:46:51', '0000-00-00 00:00:00', 1, '', 1, 69), -(75, '', '9ac794c2-f96d-4522-8acf-b8d48c4f51c5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Observer\\\\ContentHistory\",\"joomla_version\":\"0\"}}', 'JTableObserverContenthistory', '', 1, '2024-05-18 09:46:59', '0000-00-00 00:00:00', 1, '', 1, 70), -(76, '', 'fe63add8-0a40-4b3d-b548-f735fa6072fb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Table\\\\Observer\\\\Tags\",\"joomla_version\":\"0\"}}', 'JTableObserverTags', '', 1, '2024-05-18 09:47:09', '0000-00-00 00:00:00', 1, '', 1, 71), -(77, '', '1e77d689-78b9-4418-809b-923edc4cb21b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Rule\",\"joomla_version\":\"0\"}}', 'JAccessRule', '', 1, '2024-05-18 09:47:20', '2024-05-18 13:22:44', 2, '', 1, 72), -(78, '', 'd3fe9cbd-ff84-4501-9298-bbd213b8a348', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Rules\",\"joomla_version\":\"0\"}}', 'JAccessRules', '', 1, '2024-05-18 09:47:46', '0000-00-00 00:00:00', 1, '', 1, 73), -(79, '', 'fd33274b-d900-47a0-8676-5beadc31331f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Wrapper\\\\Access\",\"joomla_version\":\"0\"}}', 'JAccessWrapperAccess', '', 1, '2024-05-18 09:50:55', '0000-00-00 00:00:00', 1, '', 1, 74), -(80, '', '2fa1c08d-c4ff-4cb0-8338-7221e95c1fe4', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Exception\\\\NotAllowed\",\"joomla_version\":\"0\"}}', 'JAccessExceptionNotallowed', '', 1, '2024-05-18 09:51:57', '0000-00-00 00:00:00', 1, '', 1, 75), -(81, '', '85ddedfc-d44d-485d-ae2a-0c81b2e77d89', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Help\\\\Help\",\"joomla_version\":\"0\"}}', 'JHelp', '', 1, '2024-05-18 09:52:19', '0000-00-00 00:00:00', 1, '', 1, 76), -(82, '', '201d8d3c-3ba9-4237-911a-106a70d559e1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Captcha\\\\Captcha\",\"joomla_version\":\"0\"}}', 'JCaptcha', '', 1, '2024-05-18 09:52:29', '0000-00-00 00:00:00', 1, '', 1, 77), -(83, '', '4486fa2e-643f-4ab3-b52d-c85972b9853c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Associations\",\"joomla_version\":\"0\"}}', 'JLanguageAssociations', '', 1, '2024-05-18 09:52:40', '0000-00-00 00:00:00', 1, '', 1, 78), -(84, '', '4256a427-9bfa-4572-b539-cc699ab8f18b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Language\",\"joomla_version\":\"0\"}}', 'JLanguage', '', 1, '2024-05-18 09:52:50', '0000-00-00 00:00:00', 1, '', 1, 79), -(85, '', 'f1bd5f92-0eb0-40d3-ab90-920df3e25a3d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\LanguageHelper\",\"joomla_version\":\"0\"}}', 'JLanguageHelper', '', 1, '2024-05-18 09:52:59', '0000-00-00 00:00:00', 1, '', 1, 80), -(86, '', 'c76d192b-1bed-44c8-9a29-27d73a014d3b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\LanguageStemmer\",\"joomla_version\":\"0\"}}', 'JLanguageStemmer', '', 1, '2024-05-18 09:53:10', '0000-00-00 00:00:00', 1, '', 1, 81), -(87, '', 'cc8224bd-07f2-46f1-a69b-d3f8afd5438f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Multilanguage\",\"joomla_version\":\"0\"}}', 'JLanguageMultilang', '', 1, '2024-05-18 09:53:21', '0000-00-00 00:00:00', 1, '', 1, 82), -(88, '', 'a643b662-7ec9-491a-ae28-de34667f0ea5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Transliterate\",\"joomla_version\":\"0\"}}', 'JLanguageTransliterate', '', 1, '2024-05-18 09:53:31', '0000-00-00 00:00:00', 1, '', 1, 83), -(89, '', 'b98da7dc-0aa0-4a10-9441-ae6039f369ba', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Stemmer\\\\Porteren\",\"joomla_version\":\"0\"}}', 'JLanguageStemmerPorteren', '', 1, '2024-05-18 09:53:41', '0000-00-00 00:00:00', 1, '', 1, 84), -(90, '', 'f9b5df00-4690-4ae7-99f2-30bd05a5ad9b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Wrapper\\\\JTextWrapper\",\"joomla_version\":\"0\"}}', 'JLanguageWrapperText', '', 1, '2024-05-18 09:53:50', '0000-00-00 00:00:00', 1, '', 1, 85), -(91, '', '161f1710-dc19-4e8a-8299-0519ae5809d3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Wrapper\\\\LanguageHelperWrapper\",\"joomla_version\":\"0\"}}', 'JLanguageWrapperHelper', '', 1, '2024-05-18 09:54:01', '0000-00-00 00:00:00', 1, '', 1, 86), -(92, '', '2fbbf4bc-3627-4b63-a879-1c675cee4cf2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Wrapper\\\\TransliterateWrapper\",\"joomla_version\":\"0\"}}', 'JLanguageWrapperTransliterate', '', 1, '2024-05-18 09:54:09', '0000-00-00 00:00:00', 1, '', 1, 87), -(93, '', '5255b942-8d9a-4984-8091-9fffea8d12dc', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\ComponentRecord\",\"joomla_version\":\"0\"}}', 'JComponentRecord', '', 1, '2024-05-18 09:54:21', '0000-00-00 00:00:00', 1, '', 1, 88), -(94, '', '77b5e594-3e89-47f6-96e0-91dcf095083d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Exception\\\\MissingComponentException\",\"joomla_version\":\"0\"}}', 'JComponentExceptionMissing', '', 1, '2024-05-18 09:54:38', '0000-00-00 00:00:00', 1, '', 1, 89), -(95, '', '1a993901-ded0-47d1-90cb-e00134a252d8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\RouterBase\",\"joomla_version\":\"0\"}}', 'JComponentRouterBase', '', 1, '2024-05-18 09:54:52', '2024-05-18 09:55:16', 2, '', 1, 88), -(96, '', '60ef2eac-e1bf-4f02-9e00-406988dceb7c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\RouterInterface\",\"joomla_version\":\"0\"}}', 'JComponentRouterInterface', '', 1, '2024-05-18 09:55:30', '2024-05-18 09:55:16', 1, '', 1, 88), -(97, '', '5b8498be-e8a6-4941-b0e7-16e12020d7fd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\RouterLegacy\",\"joomla_version\":\"0\"}}', 'JComponentRouterLegacy', '', 1, '2024-05-18 09:55:43', '2024-05-18 09:55:16', 1, '', 1, 88), -(98, '', '5c7d19b6-315f-49b5-9d79-da33e83251d8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\RouterView\",\"joomla_version\":\"0\"}}', 'JComponentRouterView', '', 1, '2024-05-18 09:56:09', '2024-05-18 09:55:16', 1, '', 1, 88), -(99, '', '7bbeef79-a79c-4a1d-8a46-e2063136a648', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\RouterViewConfiguration\",\"joomla_version\":\"0\"}}', 'JComponentRouterViewconfiguration', '', 1, '2024-05-18 09:56:34', '2024-05-18 09:55:16', 1, '', 1, 88), -(100, '', '81b80eaa-0854-41a1-9304-3d858cbb8dd7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\Rules\\\\MenuRules\",\"joomla_version\":\"0\"}}', 'JComponentRouterRulesMenu', '', 1, '2024-05-18 09:56:47', '2024-05-18 09:55:16', 1, '', 1, 88), -(101, '', '4f6f2089-8ff4-42ff-a3c5-44ac26f03d72', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\Rules\\\\NomenuRules\",\"joomla_version\":\"0\"}}', 'JComponentRouterRulesNomenu', '', 1, '2024-05-18 09:56:57', '2024-05-18 09:55:16', 1, '', 1, 88), -(102, '', '3a9cfc8e-d596-4144-943e-b0e40ef940e7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\Rules\\\\RulesInterface\",\"joomla_version\":\"0\"}}', 'JComponentRouterRulesInterface', '', 1, '2024-05-18 09:57:08', '2024-05-18 09:55:16', 1, '', 1, 88), -(103, '', '3c55de55-8cc0-446c-bfd9-f3d80239ccf3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\Router\\\\Rules\\\\StandardRules\",\"joomla_version\":\"0\"}}', 'JComponentRouterRulesStandard', '', 1, '2024-05-18 09:57:21', '2024-05-18 09:55:16', 1, '', 1, 88), -(104, '', '9d3f65ab-4635-48b4-8456-dc7b61ee8d4a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Editor\\\\Editor\",\"joomla_version\":\"0\"}}', 'JEditor', '', 1, '2024-05-18 09:57:33', '2024-05-18 09:55:16', 1, '', 1, 88), -(105, '', '52d5da48-8711-4b36-bd18-fb126e900acc', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Exception\\\\ExceptionHandler\",\"joomla_version\":\"0\"}}', 'JErrorPage', '', 1, '2024-05-18 09:57:45', '2024-05-18 09:55:16', 1, '', 1, 88), -(106, '', 'c6b045d1-06b5-406f-b05c-87a9e3465603', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\AuthenticationHelper\",\"joomla_version\":\"0\"}}', 'JAuthenticationHelper', '', 1, '2024-05-18 09:57:59', '2024-05-18 09:55:16', 1, '', 1, 88), -(107, '', '7bc1ad97-b165-4804-b243-396eb5d7d300', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\CMSHelper\",\"joomla_version\":\"0\"}}', 'JHelper', '', 1, '2024-05-18 09:58:19', '2024-05-18 09:55:16', 1, '', 1, 88), -(108, '', '3aa6094c-0c87-437d-b301-e2f2547d6fdd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\ContentHelper\",\"joomla_version\":\"0\"}}', 'JHelperContent', '', 1, '2024-05-18 09:58:30', '2024-05-18 09:55:16', 1, '', 1, 88), -(109, '', '1cb6e8f7-e3a6-499a-972b-dcfbd9dd1c51', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\ContentHistoryHelper\",\"joomla_version\":\"0\"}}', 'JHelperContenthistory', '', 1, '2024-05-18 09:58:40', '2024-05-18 09:55:16', 1, '', 1, 88), -(110, '', 'e736158d-3e8f-4cbd-80f5-1e9152f1119b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\LibraryHelper\",\"joomla_version\":\"0\"}}', 'JLibraryHelper', '', 1, '2024-05-18 09:58:49', '2024-05-18 09:55:16', 1, '', 1, 88), -(111, '', 'b2f0313b-4535-4080-85f2-2f6f0f327215', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\MediaHelper\",\"joomla_version\":\"0\"}}', 'JHelperMedia', '', 1, '2024-05-18 09:58:59', '2024-05-18 09:55:16', 1, '', 1, 88), -(112, '', 'f15d556d-33dd-4ee3-a0f7-0653e4a7a1e4', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\ModuleHelper\",\"joomla_version\":\"0\"}}', 'JModuleHelper', '', 1, '2024-05-18 09:59:11', '2024-05-18 09:55:16', 1, '', 1, 88), -(113, '', '291ce84f-34fd-4a2a-a5d9-2e8cc7470250', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\RouteHelper\",\"joomla_version\":\"0\"}}', 'JHelperRoute', '', 1, '2024-05-18 09:59:34', '0000-00-00 00:00:00', 1, '', 1, 90), -(114, '', '30d4027a-50b2-45bf-9121-278fdd09ba1d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\SearchHelper\",\"joomla_version\":\"0\"}}', 'JSearchHelper', '', 1, '2024-05-18 10:01:51', '0000-00-00 00:00:00', 1, '', 1, 91), -(115, '', '9726b24c-d6e2-4e5c-bbf6-fc4aeb9616be', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\TagsHelper\",\"joomla_version\":\"0\"}}', 'JHelperTags', '', 1, '2024-05-18 10:02:01', '0000-00-00 00:00:00', 1, '', 1, 92), -(116, '', '49fe3fd8-a9a4-458c-98b6-2437d18552e9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Helper\\\\UserGroupsHelper\",\"joomla_version\":\"0\"}}', 'JHelperUsergroups', '', 1, '2024-05-18 10:02:11', '0000-00-00 00:00:00', 1, '', 1, 93), -(117, '', '6014e278-94ca-4a20-9118-deae8bb0ddc9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Layout\\\\BaseLayout\",\"joomla_version\":\"0\"}}', 'JLayoutBase', '', 1, '2024-05-18 10:02:21', '0000-00-00 00:00:00', 1, '', 1, 94), -(118, '', '2dc653cd-4f87-4028-be2b-40fc9676d762', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Layout\\\\FileLayout\",\"joomla_version\":\"0\"}}', 'JLayoutFile', '', 1, '2024-05-18 10:02:35', '0000-00-00 00:00:00', 1, '', 1, 95), -(119, '', '6cb426a4-a026-425d-9078-7973c5c5c627', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Layout\\\\LayoutInterface\",\"joomla_version\":\"0\"}}', 'JLayout', '', 1, '2024-05-18 10:02:54', '0000-00-00 00:00:00', 1, '', 1, 96), -(120, '', 'ac193072-cd64-4423-9cc3-18d10080c995', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Response\\\\JsonResponse\",\"joomla_version\":\"0\"}}', 'JResponseJson', '', 1, '2024-05-18 10:03:03', '0000-00-00 00:00:00', 1, '', 1, 97), -(121, '', '98de0895-76eb-406f-99be-bd3eeaeff388', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Plugin\\\\CMSPlugin\",\"joomla_version\":\"0\"}}', 'JPlugin', '', 1, '2024-05-18 10:03:12', '0000-00-00 00:00:00', 1, '', 1, 98), -(122, '', '7934665b-e432-4ec6-b38d-27bf32730eb9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Plugin\\\\PluginHelper\",\"joomla_version\":\"0\"}}', 'JPluginHelper', '', 1, '2024-05-18 10:03:20', '0000-00-00 00:00:00', 1, '', 1, 99), -(123, '', 'd7168e2e-eda9-43b5-8b90-fb488ff39d81', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Menu\\\\AbstractMenu\",\"joomla_version\":\"0\"}}', 'JMenu', '', 1, '2024-05-18 10:03:30', '0000-00-00 00:00:00', 1, '', 1, 100), -(124, '', '37611ab6-f672-4e7c-b5d4-8bdf8ab701ed', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Menu\\\\AdministratorMenu\",\"joomla_version\":\"0\"}}', 'JMenuAdministrator', '', 1, '2024-05-18 10:03:39', '0000-00-00 00:00:00', 1, '', 1, 101), -(125, '', '97cf0325-76e1-4463-a900-f18ea74a6867', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Menu\\\\MenuItem\",\"joomla_version\":\"0\"}}', 'JMenuItem', '', 1, '2024-05-18 10:03:47', '0000-00-00 00:00:00', 1, '', 1, 102), -(126, '', 'ce5b2139-00e7-4d20-b33f-567848c954ff', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Menu\\\\SiteMenu\",\"joomla_version\":\"0\"}}', 'JMenuSite', '', 1, '2024-05-18 10:03:55', '0000-00-00 00:00:00', 1, '', 1, 103), -(127, '', '2ede2a45-7cfb-4ddd-a12c-f6fe0f22c6c7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Pagination\\\\Pagination\",\"joomla_version\":\"0\"}}', 'JPagination', '', 1, '2024-05-18 10:04:04', '0000-00-00 00:00:00', 1, '', 1, 104), -(128, '', 'b12288c5-6c95-4251-b2ff-51f1ff00365d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Pagination\\\\PaginationObject\",\"joomla_version\":\"0\"}}', 'JPaginationObject', '', 1, '2024-05-18 10:04:13', '0000-00-00 00:00:00', 1, '', 1, 105), -(129, '', '1dcda3f6-245e-4a3e-9235-6f1d3079a731', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Pathway\\\\Pathway\",\"joomla_version\":\"0\"}}', 'JPathway', '', 1, '2024-05-18 10:04:22', '0000-00-00 00:00:00', 1, '', 1, 106), -(130, '', '8a9d4936-c63c-481c-9c75-e533954c441e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Pathway\\\\SitePathway\",\"joomla_version\":\"0\"}}', 'JPathwaySite', '', 1, '2024-05-18 10:04:31', '0000-00-00 00:00:00', 1, '', 1, 107), -(131, '', '27682053-11d2-46aa-b2f1-00e66eb43f9c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Schema\\\\ChangeItem\",\"joomla_version\":\"0\"}}', 'JSchemaChangeitem', '', 1, '2024-05-18 10:04:40', '0000-00-00 00:00:00', 1, '', 1, 108), -(132, '', '25b32eb9-2728-45b3-80e7-9619e969c210', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Schema\\\\ChangeSet\",\"joomla_version\":\"0\"}}', 'JSchemaChangeset', '', 1, '2024-05-18 10:04:50', '0000-00-00 00:00:00', 1, '', 1, 109), -(133, '', '1d2df8c9-d6ca-444f-8fa0-c21df077b4e9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Schema\\\\ChangeItem\\\\MysqlChangeItem\",\"joomla_version\":\"0\"}}', 'JSchemaChangeitemMysql', '', 1, '2024-05-18 10:04:59', '0000-00-00 00:00:00', 1, '', 1, 110), -(134, '', 'd100cd9b-d633-456a-8bf7-9a8dd350011f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Schema\\\\ChangeItem\\\\PostgresqlChangeItem\",\"joomla_version\":\"0\"}}', 'JSchemaChangeitemPostgresql', '', 1, '2024-05-18 10:05:11', '0000-00-00 00:00:00', 1, '', 1, 111), -(135, '', 'b04a740a-8a32-4ac6-8197-f87078608323', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Schema\\\\ChangeItem\\\\SqlsrvChangeItem\",\"joomla_version\":\"0\"}}', 'JSchemaChangeitemSqlsrv', '', 1, '2024-05-18 10:05:21', '0000-00-00 00:00:00', 1, '', 1, 112), -(136, '', '717cd776-fc89-4e57-a187-67911316e874', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\UCM\\\\UCM\",\"joomla_version\":\"0\"}}', 'JUcm', '', 1, '2024-05-18 10:05:31', '0000-00-00 00:00:00', 1, '', 1, 113), -(137, '', 'ba90ea14-ae54-4a58-8b67-5774f0bf4704', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\UCM\\\\UCMBase\",\"joomla_version\":\"0\"}}', 'JUcmBase', '', 1, '2024-05-18 10:05:40', '0000-00-00 00:00:00', 1, '', 1, 114), -(138, '', 'a0ab1d29-3e80-418a-8762-dfd30b6bdfdb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\UCM\\\\UCMContent\",\"joomla_version\":\"0\"}}', 'JUcmContent', '', 1, '2024-05-18 10:05:56', '0000-00-00 00:00:00', 1, '', 1, 115), -(139, '', '8949b206-0589-4468-8ae1-ea17edeaa909', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\UCM\\\\UCMType\",\"joomla_version\":\"0\"}}', 'JUcmType', '', 1, '2024-05-18 10:06:07', '0000-00-00 00:00:00', 1, '', 1, 116), -(140, '', '47ee1f2b-9902-4f26-a856-04930ac9ddc3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Toolbar\",\"joomla_version\":\"0\"}}', 'JToolbar', '', 1, '2024-05-18 10:06:16', '0000-00-00 00:00:00', 1, '', 1, 117), -(141, '', 'b044eae7-c8c8-4632-add5-1cdada77dbe8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\ToolbarButton\",\"joomla_version\":\"0\"}}', 'JToolbarButton', '', 1, '2024-05-18 10:06:25', '0000-00-00 00:00:00', 1, '', 1, 118), -(142, '', '262219a3-c599-4f73-9256-ffe38968e0df', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Button\\\\ConfirmButton\",\"joomla_version\":\"0\"}}', 'JToolbarButtonConfirm', '', 1, '2024-05-18 10:06:35', '0000-00-00 00:00:00', 1, '', 1, 119), -(143, '', '0f7e94e1-0480-4192-b8a5-1f53f5bfd984', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Button\\\\CustomButton\",\"joomla_version\":\"0\"}}', 'JToolbarButtonCustom', '', 1, '2024-05-18 10:06:43', '0000-00-00 00:00:00', 1, '', 1, 120), -(144, '', 'a8f3658a-8be1-48cd-95ba-4209950046c7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Button\\\\HelpButton\",\"joomla_version\":\"0\"}}', 'JToolbarButtonHelp', '', 1, '2024-05-18 10:06:53', '0000-00-00 00:00:00', 1, '', 1, 121), -(145, '', '948a32c1-a87d-48a0-9914-b0b7ad8308ed', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Button\\\\LinkButton\",\"joomla_version\":\"0\"}}', 'JToolbarButtonLink', '', 1, '2024-05-18 10:07:03', '0000-00-00 00:00:00', 1, '', 1, 122), -(146, '', '3761e315-c940-4f54-adc2-94d73fe4cb05', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Button\\\\PopupButton\",\"joomla_version\":\"0\"}}', 'JToolbarButtonPopup', '', 1, '2024-05-18 10:07:11', '0000-00-00 00:00:00', 1, '', 1, 123), -(147, '', '6d3a8457-e9a8-4d05-ae98-a89e7aef7fd0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Button\\\\SeparatorButton\",\"joomla_version\":\"0\"}}', 'JToolbarButtonSeparator', '', 1, '2024-05-18 10:07:19', '0000-00-00 00:00:00', 1, '', 1, 124), -(148, '', '13aa9ff9-93eb-4ee6-ba27-f451fe027f28', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Button\\\\SliderButton\",\"joomla_version\":\"0\"}}', 'JToolbarButtonSlider', '', 1, '2024-05-18 10:07:30', '0000-00-00 00:00:00', 1, '', 1, 125), -(149, '', 'fe490f72-816d-4771-a915-2bec9440754f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\Button\\\\StandardButton\",\"joomla_version\":\"0\"}}', 'JToolbarButtonStandard', '', 1, '2024-05-18 10:07:39', '0000-00-00 00:00:00', 1, '', 1, 126), -(150, '', '0c1a176a-304f-433a-8233-37d01ff87815', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\ToolbarHelper\",\"joomla_version\":\"0\"}}', 'JToolbarHelper', '', 1, '2024-05-18 10:07:48', '0000-00-00 00:00:00', 1, '', 1, 127), -(151, '', '98c24e3e-4ffd-47fe-aae1-7216d364c69b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Toolbar\\\\ToolbarButton\",\"joomla_version\":\"0\"}}', 'JButton', '', 1, '2024-05-18 10:07:57', '0000-00-00 00:00:00', 1, '', 1, 128), -(152, '', '703937e1-abd9-4373-8c5c-07e29ea4b2c5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Version\",\"joomla_version\":\"0\"}}', 'JVersion', '', 1, '2024-05-18 10:08:07', '0000-00-00 00:00:00', 1, '', 1, 129), -(153, '', 'e7193dd0-5839-4e5f-9f86-1d2cb29f2116', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Authentication\\\\Authentication\",\"joomla_version\":\"0\"}}', 'JAuthentication', '', 1, '2024-05-18 10:08:17', '0000-00-00 00:00:00', 1, '', 1, 130), -(154, '', 'd2f1e6b1-7f62-4f2f-9f0a-8378d1da654b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Authentication\\\\AuthenticationResponse\",\"joomla_version\":\"0\"}}', 'JAuthenticationResponse', '', 1, '2024-05-18 10:08:27', '0000-00-00 00:00:00', 1, '', 1, 131), -(155, '', 'c5dd6a36-c4ab-4d66-9ec5-c97cc5b96858', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Environment\\\\Browser\",\"joomla_version\":\"0\"}}', 'JBrowser', '', 1, '2024-05-18 10:08:36', '0000-00-00 00:00:00', 1, '', 1, 132), -(156, '', '1046fbd3-859f-40b6-8cd9-4f2a0f91413a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Association\\\\AssociationExtensionInterface\",\"joomla_version\":\"0\"}}', 'JAssociationExtensionInterface', '', 1, '2024-05-18 10:08:47', '0000-00-00 00:00:00', 1, '', 1, 133), -(157, '', 'e88e262d-b08f-43f3-9f0d-adf352030ddd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Association\\\\AssociationExtensionHelper\",\"joomla_version\":\"0\"}}', 'JAssociationExtensionHelper', '', 1, '2024-05-18 10:08:55', '0000-00-00 00:00:00', 1, '', 1, 134), -(158, '', 'f0198edb-6be6-4ca5-9e1d-9ec899939a32', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Document\",\"joomla_version\":\"0\"}}', 'JDocument', '', 1, '2024-05-18 10:09:04', '0000-00-00 00:00:00', 1, '', 1, 135), -(159, '', 'f340c858-e0a7-4db6-9a4c-7919e0e27ee4', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\ErrorDocument\",\"joomla_version\":\"0\"}}', 'JDocumentError', '', 1, '2024-05-18 10:09:12', '0000-00-00 00:00:00', 1, '', 1, 136), -(160, '', '07796eb3-5ac1-4f1f-8ebb-5a4009bdc64b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\FeedDocument\",\"joomla_version\":\"0\"}}', 'JDocumentFeed', '', 1, '2024-05-18 10:09:21', '0000-00-00 00:00:00', 1, '', 1, 137), -(161, '', 'b81aea75-742b-4b0f-8182-ce50a3c4a98f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\HtmlDocument\",\"joomla_version\":\"0\"}}', 'JDocumentHtml', '', 1, '2024-05-18 10:09:30', '0000-00-00 00:00:00', 1, '', 1, 138), -(162, '', '2e066e66-ace9-4a38-91f1-2c7cdd3bcbde', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\ImageDocument\",\"joomla_version\":\"0\"}}', 'JDocumentImage', '', 1, '2024-05-18 10:09:39', '0000-00-00 00:00:00', 1, '', 1, 139), -(163, '', 'df2ca2b1-1474-4e76-8a89-6213121d6642', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\JsonDocument\",\"joomla_version\":\"0\"}}', 'JDocumentJson', '', 1, '2024-05-18 10:09:47', '0000-00-00 00:00:00', 1, '', 1, 140), -(164, '', 'df1c4e45-d5cd-493b-a7f8-68d5fe257790', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\OpensearchDocument\",\"joomla_version\":\"0\"}}', 'JDocumentOpensearch', '', 1, '2024-05-18 10:09:56', '0000-00-00 00:00:00', 1, '', 1, 141), -(165, '', '51facd6c-7dbd-49b4-98b6-eab01d638d72', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\RawDocument\",\"joomla_version\":\"0\"}}', 'JDocumentRaw', '', 1, '2024-05-18 10:10:05', '0000-00-00 00:00:00', 1, '', 1, 142), -(166, '', 'e9d9761f-0c10-4c4a-a2f7-9c365805c2d5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\DocumentRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRenderer', '', 1, '2024-05-18 10:10:14', '0000-00-00 00:00:00', 1, '', 1, 143), -(167, '', 'ad7918a0-a784-42a8-8bd6-4584075c2f91', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\XmlDocument\",\"joomla_version\":\"0\"}}', 'JDocumentXml', '', 1, '2024-05-18 10:10:23', '0000-00-00 00:00:00', 1, '', 1, 144), -(168, '', '9f778aa1-9f63-4734-a326-e62e649c9669', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Feed\\\\AtomRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererFeedAtom', '', 1, '2024-05-18 10:10:31', '0000-00-00 00:00:00', 1, '', 1, 145), -(169, '', '9292ee49-e310-47ea-ac3f-3d23bf454bb9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Feed\\\\RssRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererFeedRss', '', 1, '2024-05-18 10:10:46', '0000-00-00 00:00:00', 1, '', 1, 146), -(170, '', 'de6c54e2-b040-4a14-8de5-317d03c0dd30', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\ComponentRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererHtmlComponent', '', 1, '2024-05-18 10:10:54', '0000-00-00 00:00:00', 1, '', 1, 147), -(171, '', '0733e243-c078-4647-be3b-a57aa6c8da5e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\HeadRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererHtmlHead', '', 1, '2024-05-18 10:11:04', '0000-00-00 00:00:00', 1, '', 1, 148), -(172, '', '73642c41-abb6-45fa-96c9-a32e8c8ae5ec', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\MessageRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererHtmlMessage', '', 1, '2024-05-18 10:11:17', '0000-00-00 00:00:00', 1, '', 1, 149), -(173, '', '2cae3c40-1f83-449e-92e8-3ef7a073694e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\ModuleRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererHtmlModule', '', 1, '2024-05-18 10:11:27', '0000-00-00 00:00:00', 1, '', 1, 150), -(174, '', '2b616377-af1c-42cf-8645-8b63fd65ac4f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\ModulesRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererHtmlModules', '', 1, '2024-05-18 10:11:35', '0000-00-00 00:00:00', 1, '', 1, 151), -(175, '', '34b75849-7d6e-407e-9f16-dd3c1c58ddfc', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Feed\\\\AtomRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererAtom', '', 1, '2024-05-18 10:11:44', '0000-00-00 00:00:00', 1, '', 1, 152), -(176, '', '515e4335-e131-4fed-8e41-832e3477ffd8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Feed\\\\RssRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererRSS', '', 1, '2024-05-18 10:11:53', '0000-00-00 00:00:00', 1, '', 1, 153), -(177, '', 'a4f78bba-c3a5-4e62-a565-7e011665ed95', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\ComponentRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererComponent', '', 1, '2024-05-18 10:12:04', '0000-00-00 00:00:00', 1, '', 1, 154), -(178, '', '876058a8-106f-498d-a1fb-1a30000915f3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\HeadRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererHead', '', 1, '2024-05-18 10:12:17', '0000-00-00 00:00:00', 1, '', 1, 155), -(179, '', 'd2fb6e55-4ff3-41e2-ace2-f049abff35c2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\MessageRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererMessage', '', 1, '2024-05-18 10:12:37', '0000-00-00 00:00:00', 1, '', 1, 156), -(180, '', 'fadc3f46-11df-4800-beb0-43edc3c0a1bd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\ModuleRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererModule', '', 1, '2024-05-18 10:12:59', '0000-00-00 00:00:00', 1, '', 1, 157), -(181, '', 'e9b2281e-0abc-48c7-9cf4-7d4f71d331a3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Renderer\\\\Html\\\\ModulesRenderer\",\"joomla_version\":\"0\"}}', 'JDocumentRendererModules', '', 1, '2024-05-18 10:13:07', '0000-00-00 00:00:00', 1, '', 1, 158), -(182, '', 'd1ff6ed5-1dce-4ec4-be9d-aa687a332103', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Feed\\\\FeedEnclosure\",\"joomla_version\":\"0\"}}', 'JFeedEnclosure', '', 1, '2024-05-18 10:13:17', '0000-00-00 00:00:00', 1, '', 1, 159), -(183, '', 'b6d8fbd2-4873-4a76-b8d5-7b219bd85fb3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Feed\\\\FeedImage\",\"joomla_version\":\"0\"}}', 'JFeedImage', '', 1, '2024-05-18 10:13:29', '0000-00-00 00:00:00', 1, '', 1, 160), -(184, '', '7310b31c-a886-4e81-a3b4-c74f41da071b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Feed\\\\FeedItem\",\"joomla_version\":\"0\"}}', 'JFeedItem', '', 1, '2024-05-18 10:13:39', '0000-00-00 00:00:00', 1, '', 1, 161), -(185, '', 'e0870b1b-8df0-4a63-955a-6edcffb8f95c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Opensearch\\\\OpensearchImage\",\"joomla_version\":\"0\"}}', 'JOpenSearchImage', '', 1, '2024-05-18 10:13:48', '0000-00-00 00:00:00', 1, '', 1, 162), -(186, '', 'be23edb4-a948-46ea-aa4d-06a5d176d184', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Document\\\\Opensearch\\\\OpensearchUrl\",\"joomla_version\":\"0\"}}', 'JOpenSearchUrl', '', 1, '2024-05-18 10:13:56', '0000-00-00 00:00:00', 1, '', 1, 163), -(187, '', '193deb3e-0c3e-4610-8e55-450e463095b4', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filter\\\\InputFilter\",\"joomla_version\":\"0\"}}', 'JFilterInput', '', 1, '2024-05-18 10:14:06', '0000-00-00 00:00:00', 1, '', 1, 164), -(188, '', '6c5e67f8-44ff-4376-b531-ffd3a2f4ed74', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filter\\\\OutputFilter\",\"joomla_version\":\"0\"}}', 'JFilterOutput', '', 1, '2024-05-18 10:14:14', '0000-00-00 00:00:00', 1, '', 1, 165), -(189, '', '7caf5bfe-bf21-4664-bf3d-f8584418a1aa', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filter\\\\Wrapper\\\\OutputFilterWrapper\",\"joomla_version\":\"0\"}}', 'JFilterWrapperOutput', '', 1, '2024-05-18 10:14:22', '0000-00-00 00:00:00', 1, '', 1, 166), -(190, '', 'd6c6b007-de51-484a-a6fb-d0773b929bb9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\HttpFactory\",\"joomla_version\":\"0\"}}', 'JHttpFactory', '', 1, '2024-05-18 10:14:36', '0000-00-00 00:00:00', 1, '', 1, 167), -(191, '', 'b23db2d7-208b-466f-91cc-d2a1c8e91da9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\Response\",\"joomla_version\":\"0\"}}', 'JHttpResponse', '', 1, '2024-05-18 10:14:45', '0000-00-00 00:00:00', 1, '', 1, 168), -(192, '', '12bad63b-715a-4a9c-8627-79f8f39ac4a2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\TransportInterface\",\"joomla_version\":\"0\"}}', 'JHttpTransport', '', 1, '2024-05-18 10:14:54', '0000-00-00 00:00:00', 1, '', 1, 169), -(193, '', '67b0223d-e19d-41ed-9253-21afbb3702ad', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\Transport\\\\CurlTransport\",\"joomla_version\":\"0\"}}', 'JHttpTransportCurl', '', 1, '2024-05-18 10:15:03', '0000-00-00 00:00:00', 1, '', 1, 170), -(194, '', 'b637202b-b1ac-4c99-81c6-03eda33c8ed5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\Transport\\\\SocketTransport\",\"joomla_version\":\"0\"}}', 'JHttpTransportSocket', '', 1, '2024-05-18 10:15:12', '0000-00-00 00:00:00', 1, '', 1, 171), -(195, '', '82e96434-4855-4086-9ab1-060c9538b21e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\Transport\\\\StreamTransport\",\"joomla_version\":\"0\"}}', 'JHttpTransportStream', '', 1, '2024-05-18 10:15:21', '0000-00-00 00:00:00', 1, '', 1, 172), -(196, '', '4c0c71c8-4604-4cc2-ae57-b4a6d12878bf', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\Wrapper\\\\FactoryWrapper\",\"joomla_version\":\"0\"}}', 'JHttpWrapperFactory', '', 1, '2024-05-18 10:15:30', '0000-00-00 00:00:00', 1, '', 1, 173), -(197, '', 'fca8b0ad-5975-46a7-a741-91f399fce0bb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Installer\",\"joomla_version\":\"0\"}}', 'JInstaller', '', 1, '2024-05-18 10:15:43', '0000-00-00 00:00:00', 1, '', 1, 174), -(198, '', '774d62a7-0b4e-461a-952d-f23f04e6ae0b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\InstallerAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapter', '', 1, '2024-05-18 10:15:57', '0000-00-00 00:00:00', 1, '', 1, 175), -(199, '', '9b50b6fa-4eee-45f8-8476-805de083d048', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\InstallerExtension\",\"joomla_version\":\"0\"}}', 'JInstallerExtension', '', 1, '2024-05-18 10:16:07', '0000-00-00 00:00:00', 1, '', 1, 176), -(200, '', '70f7a0f0-a9f5-4e3f-9862-f41ffedaaa82', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\InstallerExtension\",\"joomla_version\":\"0\"}}', 'JExtension', '', 1, '2024-05-18 10:16:16', '0000-00-00 00:00:00', 1, '', 1, 177), -(201, '', '686af399-4ddb-4167-adfe-23350cce0c5f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\InstallerHelper\",\"joomla_version\":\"0\"}}', 'JInstallerHelper', '', 1, '2024-05-18 10:16:25', '0000-00-00 00:00:00', 1, '', 1, 178), -(202, '', '8072b858-8ce5-4b41-b44f-3ecb8eff1a99', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\InstallerScript\",\"joomla_version\":\"0\"}}', 'JInstallerScript', '', 1, '2024-05-18 10:16:34', '0000-00-00 00:00:00', 1, '', 1, 179), -(203, '', 'ebe650ad-0e99-435d-b414-d32089f7583e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Manifest\",\"joomla_version\":\"0\"}}', 'JInstallerManifest', '', 1, '2024-05-18 10:16:44', '0000-00-00 00:00:00', 1, '', 1, 180), -(204, '', '40f1fa2c-5141-4daf-bfbc-3d8ae5a29e20', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\ComponentAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapterComponent', '', 1, '2024-05-18 10:16:53', '0000-00-00 00:00:00', 1, '', 1, 181), -(205, '', 'ede39863-0c16-42f8-8f88-fe043590d7f2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\ComponentAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerComponent', '', 1, '2024-05-18 10:17:02', '0000-00-00 00:00:00', 1, '', 1, 182), -(206, '', 'aaba374e-f882-4bf1-bb5d-de5777fd4c57', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\FileAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapterFile', '', 1, '2024-05-18 10:17:10', '0000-00-00 00:00:00', 1, '', 1, 183), -(207, '', 'aef5c56a-599f-428d-ab9f-1616f784f398', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\FileAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerFile', '', 1, '2024-05-18 10:17:18', '0000-00-00 00:00:00', 1, '', 1, 184), -(208, '', '0adc132e-a1e8-4292-87bb-1419a9957d8d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\LanguageAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapterLanguage', '', 1, '2024-05-18 10:17:34', '0000-00-00 00:00:00', 1, '', 1, 185), -(209, '', '3c1658da-be38-4d96-bdc7-cfe5769ca9a7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\LanguageAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerLanguage', '', 1, '2024-05-18 10:18:29', '0000-00-00 00:00:00', 1, '', 1, 186), -(210, '', '7c43334d-a0e3-449c-b6e9-82212ecc5c91', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\LibraryAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapterLibrary', '', 1, '2024-05-18 10:19:45', '0000-00-00 00:00:00', 1, '', 1, 187), -(211, '', '27afff9f-e18d-46b1-bcca-9b6481071fe0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\LibraryAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerLibrary', '', 1, '2024-05-18 10:19:55', '0000-00-00 00:00:00', 1, '', 1, 188), -(212, '', '14ef559b-5741-4133-87a4-6b871ca61977', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\ModuleAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapterModule', '', 1, '2024-05-18 10:20:03', '0000-00-00 00:00:00', 1, '', 1, 189), -(213, '', 'a67bc372-981e-438c-9000-0fb1a80dccd7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\ModuleAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerModule', '', 1, '2024-05-18 10:20:11', '0000-00-00 00:00:00', 1, '', 1, 190), -(214, '', '08cf8605-309d-4722-9cb0-71d7e8701e0a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\PackageAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapterPackage', '', 1, '2024-05-18 10:20:20', '0000-00-00 00:00:00', 1, '', 1, 191), -(215, '', '1a71e699-ee4a-44c2-a14d-e3a5e0b42c6b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\PackageAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerPackage', '', 1, '2024-05-18 10:20:29', '0000-00-00 00:00:00', 1, '', 1, 192), -(216, '', '141913e7-a24f-4313-9fa2-86460de87622', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\PluginAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapterPlugin', '', 1, '2024-05-18 10:20:38', '0000-00-00 00:00:00', 1, '', 1, 193), -(217, '', '0f195d54-7266-420d-992b-ff3fffc89db9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\PluginAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerPlugin', '', 1, '2024-05-18 10:20:50', '0000-00-00 00:00:00', 1, '', 1, 194), -(218, '', '15f59c5b-40e8-4f48-a4f4-eb14754167f9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\TemplateAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerAdapterTemplate', '', 1, '2024-05-18 10:21:24', '0000-00-00 00:00:00', 1, '', 1, 195), -(219, '', 'c7126375-b30d-4cf2-8a47-2964675195e5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Adapter\\\\TemplateAdapter\",\"joomla_version\":\"0\"}}', 'JInstallerTemplate', '', 1, '2024-05-18 10:21:34', '0000-00-00 00:00:00', 1, '', 1, 196), -(220, '', 'dda3aaa6-fbeb-47be-9a26-1de4d3b28d01', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Manifest\\\\LibraryManifest\",\"joomla_version\":\"0\"}}', 'JInstallerManifestLibrary', '', 1, '2024-05-18 10:21:44', '0000-00-00 00:00:00', 1, '', 1, 197), -(221, '', '8612f700-f4f2-4306-89d4-5264f77855c6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Installer\\\\Manifest\\\\PackageManifest\",\"joomla_version\":\"0\"}}', 'JInstallerManifestPackage', '', 1, '2024-05-18 10:32:03', '0000-00-00 00:00:00', 1, '', 1, 198), -(222, '', 'f76b5c78-317a-4938-92ce-20d4c97cbabc', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Router\\\\AdministratorRouter\",\"joomla_version\":\"0\"}}', 'JRouterAdministrator', '', 1, '2024-05-18 10:32:15', '0000-00-00 00:00:00', 1, '', 1, 199), -(223, '', '4f18f44f-e64a-4f5b-9706-4fd0837c2e68', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Router\\\\SiteRouter\",\"joomla_version\":\"0\"}}', 'JRouterSite', '', 1, '2024-05-18 10:32:24', '0000-00-00 00:00:00', 1, '', 1, 200), -(224, '', '2b9896a1-6a0d-4900-a3bf-f85c48ec0a5e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Categories\\\\Categories\",\"joomla_version\":\"0\"}}', 'JCategories', '', 1, '2024-05-18 10:32:32', '0000-00-00 00:00:00', 1, '', 1, 201), -(225, '', '504a968d-6621-4c8e-b0a3-d9da70d2e00c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Categories\\\\CategoryNode\",\"joomla_version\":\"0\"}}', 'JCategoryNode', '', 1, '2024-05-18 10:32:53', '0000-00-00 00:00:00', 1, '', 1, 202), -(226, '', 'b8246a5d-54eb-4e3d-83c2-d7bed1270062', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Log\",\"joomla_version\":\"0\"}}', 'JLog', '', 1, '2024-05-18 10:33:01', '0000-00-00 00:00:00', 1, '', 1, 203), -(227, '', 'a2b54e8c-db60-4bb4-b361-258bc7ff65cb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\LogEntry\",\"joomla_version\":\"0\"}}', 'JLogEntry', '', 1, '2024-05-18 10:33:11', '0000-00-00 00:00:00', 1, '', 1, 204), -(228, '', 'bddca947-7f73-4ce3-bf45-edfe8193c134', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\",\"joomla_version\":\"0\"}}', 'JLogLogger', '', 1, '2024-05-18 10:49:07', '0000-00-00 00:00:00', 1, '', 1, 205), -(229, '', '90434d94-46bd-4262-abd7-050993eb1ce8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\",\"joomla_version\":\"0\"}}', 'JLogger', '', 1, '2024-05-18 10:49:46', '0000-00-00 00:00:00', 1, '', 1, 206), -(230, '', 'a4d15f01-b749-4424-a721-1ac509a057f8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\\\\CallbackLogger\",\"joomla_version\":\"0\"}}', 'JLogLoggerCallback', '', 1, '2024-05-18 10:50:10', '0000-00-00 00:00:00', 1, '', 1, 207), -(231, '', 'ff42eeea-cd66-461c-beff-85212d420df0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\\\\DatabaseLogger\",\"joomla_version\":\"0\"}}', 'JLogLoggerDatabase', '', 1, '2024-05-18 10:53:34', '0000-00-00 00:00:00', 1, '', 1, 208), -(232, '', '2de66116-3618-4c91-ab20-808cb7e3a15d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\\\\EchoLogger\",\"joomla_version\":\"0\"}}', 'JLogLoggerEcho', '', 1, '2024-05-18 10:54:14', '0000-00-00 00:00:00', 1, '', 1, 209), -(233, '', '7a4e2111-dfe4-4c4f-9b64-cf03997b0809', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\\\\FormattedtextLogger\",\"joomla_version\":\"0\"}}', 'JLogLoggerFormattedtext', '', 1, '2024-05-18 10:55:20', '0000-00-00 00:00:00', 1, '', 1, 210), -(234, '', 'f6008b54-d2c0-4c93-b74d-2e18b0789737', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\\\\MessagequeueLogger\",\"joomla_version\":\"0\"}}', 'JLogLoggerMessagequeue', '', 1, '2024-05-18 10:56:02', '0000-00-00 00:00:00', 1, '', 1, 211), -(235, '', 'b1842de9-196d-4078-8a13-6425dbb35766', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\\\\SyslogLogger\",\"joomla_version\":\"0\"}}', 'JLogLoggerSyslog', '', 1, '2024-05-18 10:56:32', '0000-00-00 00:00:00', 1, '', 1, 212), -(236, '', '6a789af7-bd8d-4431-b1f3-7df40ace53ee', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Log\\\\Logger\\\\W3cLogger\",\"joomla_version\":\"0\"}}', 'JLogLoggerW3c', '', 1, '2024-05-18 10:57:03', '0000-00-00 00:00:00', 1, '', 1, 213), -(237, '', '90c09a0a-9b2e-4fbc-b317-5dc7d97cc061', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Profiler\\\\Profiler\",\"joomla_version\":\"0\"}}', 'JProfiler', '', 1, '2024-05-18 10:57:53', '0000-00-00 00:00:00', 1, '', 1, 214), -(238, '', 'f3f4adfb-f742-465f-9e8d-3d1615f2a5d6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Cache\",\"joomla_version\":\"0\"}}', 'JCache', '', 1, '2024-05-18 10:58:46', '0000-00-00 00:00:00', 1, '', 1, 215), -(239, '', '8cf4ef54-307e-4939-9d94-ef9d20c22555', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\CacheController\",\"joomla_version\":\"0\"}}', 'JCacheController', '', 1, '2024-05-18 10:59:14', '0000-00-00 00:00:00', 1, '', 1, 216), -(240, '', '8ad3c42e-894d-48d6-a5fa-654f482517ab', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\CacheStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorage', '', 1, '2024-05-18 10:59:45', '0000-00-00 00:00:00', 1, '', 1, 217), -(241, '', '4166425f-552f-4763-adcc-ca443ff4bbd4', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Controller\\\\CallbackController\",\"joomla_version\":\"0\"}}', 'JCacheControllerCallback', '', 1, '2024-05-18 11:00:21', '0000-00-00 00:00:00', 1, '', 1, 218), -(242, '', '4f386749-bf3f-4e36-b4ea-6d1f0ce7df6e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Controller\\\\OutputController\",\"joomla_version\":\"0\"}}', 'JCacheControllerOutput', '', 1, '2024-05-18 11:00:47', '0000-00-00 00:00:00', 1, '', 1, 219), -(243, '', '644a3808-a1af-45fc-945f-4a6b7a8a14a0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Controller\\\\PageController\",\"joomla_version\":\"0\"}}', 'JCacheControllerPage', '', 1, '2024-05-18 11:01:16', '0000-00-00 00:00:00', 1, '', 1, 220), -(244, '', '393966ad-4fe2-403f-af93-5e239b6ad22d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Controller\\\\ViewController\",\"joomla_version\":\"0\"}}', 'JCacheControllerView', '', 1, '2024-05-18 11:01:42', '0000-00-00 00:00:00', 1, '', 1, 221), -(245, '', '346d1e4e-358b-4c88-8690-2b21daf30bb8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\ApcStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageApc', '', 1, '2024-05-18 11:02:10', '0000-00-00 00:00:00', 1, '', 1, 222), -(246, '', '665c8d8f-14dd-4e32-93b8-b5530a1b653a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\ApcuStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageApcu', '', 1, '2024-05-18 11:02:35', '0000-00-00 00:00:00', 1, '', 1, 223), -(247, '', '54013086-a3fc-4189-a05f-f8f9697d6382', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\CacheStorageHelper\",\"joomla_version\":\"0\"}}', 'JCacheStorageHelper', '', 1, '2024-05-18 11:03:05', '0000-00-00 00:00:00', 1, '', 1, 224), -(248, '', 'd35e8d75-e238-49a9-9e88-442339def271', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\CacheliteStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageCachelite', '', 1, '2024-05-18 11:03:31', '0000-00-00 00:00:00', 1, '', 1, 225), -(249, '', '5c5c7493-c6ee-4b65-9b1c-dfbc2751e7bd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\FileStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageFile', '', 1, '2024-05-18 11:03:56', '0000-00-00 00:00:00', 1, '', 1, 226), -(250, '', 'c9c39cde-0e2b-4423-86ed-6558c0927474', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\MemcachedStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageMemcached', '', 1, '2024-05-18 11:04:35', '0000-00-00 00:00:00', 1, '', 1, 227), -(251, '', '41b7f904-cd24-46d2-aa81-52fb1a067a14', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\MemcacheStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageMemcache', '', 1, '2024-05-18 11:04:59', '0000-00-00 00:00:00', 1, '', 1, 228), -(252, '', 'a93f314d-e648-48ea-a0dd-3cb6798a8692', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\RedisStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageRedis', '', 1, '2024-05-18 11:05:24', '0000-00-00 00:00:00', 1, '', 1, 229), -(253, '', '7135fb75-1249-49e0-9ef3-e102639046bd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\WincacheStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageWincache', '', 1, '2024-05-18 11:05:48', '0000-00-00 00:00:00', 1, '', 1, 230), -(254, '', '64bfbdcf-18f0-479f-9632-28666c04d345', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Storage\\\\XcacheStorage\",\"joomla_version\":\"0\"}}', 'JCacheStorageXcache', '', 1, '2024-05-18 11:06:16', '0000-00-00 00:00:00', 1, '', 1, 231), -(255, '', '3655e717-79d0-4cef-925f-61a7341eb8be', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Exception\\\\CacheExceptionInterface\",\"joomla_version\":\"0\"}}', 'JCacheException', '', 1, '2024-05-18 11:06:36', '0000-00-00 00:00:00', 1, '', 1, 232), -(256, '', 'e2926512-e86d-4d0b-b532-0cb4733233d6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Exception\\\\CacheConnectingException\",\"joomla_version\":\"0\"}}', 'JCacheExceptionConnecting', '', 1, '2024-05-18 11:07:00', '0000-00-00 00:00:00', 1, '', 1, 233), -(257, '', '52cb7255-a68e-4ba7-910a-c5ebb0de1eaa', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Cache\\\\Exception\\\\UnsupportedCacheException\",\"joomla_version\":\"0\"}}', 'JCacheExceptionUnsupported', '', 1, '2024-05-18 11:07:26', '0000-00-00 00:00:00', 1, '', 1, 234), -(258, '', '4517efb1-f395-4000-9221-f31910acb2c0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Session\\\\Exception\\\\UnsupportedStorageException\",\"joomla_version\":\"0\"}}', 'JSessionExceptionUnsupported', '', 1, '2024-05-18 11:08:00', '0000-00-00 00:00:00', 1, '', 1, 235), -(259, '', 'effdaf6d-2275-425d-9f52-d4952e564d34', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\User\\\\User\",\"joomla_version\":\"0\"}}', 'JUser', '', 1, '2024-05-18 11:08:29', '0000-00-00 00:00:00', 1, '', 1, 236), -(260, '', '47107a0a-cdfd-4841-9b2d-7c59404784bd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\User\\\\UserHelper\",\"joomla_version\":\"0\"}}', 'JUserHelper', '', 1, '2024-05-18 11:08:50', '0000-00-00 00:00:00', 1, '', 1, 237), -(261, '', 'e38236a2-67c6-4dfd-86d8-649645bfe4fd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\User\\\\UserWrapper\",\"joomla_version\":\"0\"}}', 'JUserWrapperHelper', '', 1, '2024-05-18 11:09:10', '0000-00-00 00:00:00', 1, '', 1, 238), -(262, '', 'c4fe7377-f891-4218-b7e3-a40bc99c0a61', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Form\",\"joomla_version\":\"0\"}}', 'JForm', '', 1, '2024-05-18 11:09:26', '0000-00-00 00:00:00', 1, '', 1, 239), -(263, '', '8ae86b41-2690-46f0-bf68-0478f997d61d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\FormField\",\"joomla_version\":\"0\"}}', 'JFormField', '', 1, '2024-05-18 11:09:56', '0000-00-00 00:00:00', 1, '', 1, 240), -(264, '', '571422c4-0340-49f8-b846-5729c7af6ed7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\FormHelper\",\"joomla_version\":\"0\"}}', 'JFormHelper', '', 1, '2024-05-18 11:10:22', '0000-00-00 00:00:00', 1, '', 1, 241), -(265, '', '7c931501-6650-4efd-be81-ccdbbef8f372', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\FormRule\",\"joomla_version\":\"0\"}}', 'JFormRule', '', 1, '2024-05-18 11:10:57', '0000-00-00 00:00:00', 1, '', 1, 242), -(266, '', 'dd78f485-1018-4b6a-8ac5-8bd05a6b9f82', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\FormWrapper\",\"joomla_version\":\"0\"}}', 'JFormWrapper', '', 1, '2024-05-18 11:11:26', '0000-00-00 00:00:00', 1, '', 1, 243), -(267, '', 'e3a4cfbd-02af-454f-ad05-fae7938638ba', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\AuthorField\",\"joomla_version\":\"0\"}}', 'JFormFieldAuthor', '', 1, '2024-05-18 11:11:46', '0000-00-00 00:00:00', 1, '', 1, 244), -(268, '', 'b32a2a13-2caa-48b7-b15c-12302b287752', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\CaptchaField\",\"joomla_version\":\"0\"}}', 'JFormFieldCaptcha', '', 1, '2024-05-18 11:12:12', '0000-00-00 00:00:00', 1, '', 1, 245), -(269, '', '3061ee38-a449-4ceb-95bf-ba0c999c9023', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ChromestyleField\",\"joomla_version\":\"0\"}}', 'JFormFieldChromeStyle', '', 1, '2024-05-18 11:12:37', '0000-00-00 00:00:00', 1, '', 1, 246), -(270, '', '636d48f0-8575-4a78-a8af-e9368ceb59aa', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ContenthistoryField\",\"joomla_version\":\"0\"}}', 'JFormFieldContenthistory', '', 1, '2024-05-18 11:12:58', '0000-00-00 00:00:00', 1, '', 1, 247), -(271, '', '95838506-662b-4e79-bbd3-dcf47d15e81d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ContentlanguageField\",\"joomla_version\":\"0\"}}', 'JFormFieldContentlanguage', '', 1, '2024-05-18 11:13:18', '0000-00-00 00:00:00', 1, '', 1, 248), -(272, '', '92f8e58c-29b7-44b2-8be7-76b7a403591b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ContenttypeField\",\"joomla_version\":\"0\"}}', 'JFormFieldContenttype', '', 1, '2024-05-18 11:13:34', '2024-05-18 11:19:19', 2, '', 1, 249), -(273, '', '3c6bb160-422c-4e86-8709-61a647418c5a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\EditorField\",\"joomla_version\":\"0\"}}', 'JFormFieldEditor', '', 1, '2024-05-18 11:19:45', '0000-00-00 00:00:00', 1, '', 1, 250), -(274, '', '4a0bd64c-2739-4206-b7f3-1c91061509c5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\FrontendlanguageField\",\"joomla_version\":\"0\"}}', 'JFormFieldFrontend_Language', '', 1, '2024-05-18 11:20:10', '0000-00-00 00:00:00', 1, '', 1, 251), -(275, '', '2eb90029-9209-48e0-96f7-47ba8e66129c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\HeadertagField\",\"joomla_version\":\"0\"}}', 'JFormFieldHeadertag', '', 1, '2024-05-18 11:20:33', '0000-00-00 00:00:00', 1, '', 1, 252), -(276, '', 'bf3ecce9-65c3-4a9f-a0da-d3f7f17e14e1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\HelpsiteField\",\"joomla_version\":\"0\"}}', 'JFormFieldHelpsite', '', 1, '2024-05-18 11:20:58', '0000-00-00 00:00:00', 1, '', 1, 253), -(277, '', '32514363-e6c2-42b3-9d3f-4c3278bf0dcc', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\LastvisitdaterangeField\",\"joomla_version\":\"0\"}}', 'JFormFieldLastvisitDateRange', '', 1, '2024-05-18 11:21:25', '0000-00-00 00:00:00', 1, '', 1, 254), -(278, '', '4d509ca3-e38d-4bb1-a190-c73bc0d8fbfd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\LimitboxField\",\"joomla_version\":\"0\"}}', 'JFormFieldLimitbox', '', 1, '2024-05-18 11:21:49', '0000-00-00 00:00:00', 1, '', 1, 255), -(279, '', '87d2e4fb-8a68-4a70-92f1-eb33b853288c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\MediaField\",\"joomla_version\":\"0\"}}', 'JFormFieldMedia', '', 1, '2024-05-18 11:22:15', '0000-00-00 00:00:00', 1, '', 1, 256), -(280, '', '2455bac2-ed24-4c40-9bd2-2c8c89d25d76', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\MenuField\",\"joomla_version\":\"0\"}}', 'JFormFieldMenu', '', 1, '2024-05-18 11:22:42', '0000-00-00 00:00:00', 1, '', 1, 257), -(281, '', 'dc182776-50b8-4761-b40a-838a6235d157', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\MenuitemField\",\"joomla_version\":\"0\"}}', 'JFormFieldMenuitem', '', 1, '2024-05-18 11:23:00', '0000-00-00 00:00:00', 1, '', 1, 258), -(282, '', '630643bf-9fb7-4c58-b60d-41567a5534f6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ModuleorderField\",\"joomla_version\":\"0\"}}', 'JFormFieldModuleOrder', '', 1, '2024-05-18 11:23:25', '0000-00-00 00:00:00', 1, '', 1, 259), -(283, '', '74b22117-c4a3-4adc-be20-3f60e9e22847', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ModulepositionField\",\"joomla_version\":\"0\"}}', 'JFormFieldModulePosition', '', 1, '2024-05-18 11:23:55', '0000-00-00 00:00:00', 1, '', 1, 260), -(284, '', 'a374f963-c5b6-4126-8d66-5163be2654ca', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ModuletagField\",\"joomla_version\":\"0\"}}', 'JFormFieldModuletag', '', 1, '2024-05-18 11:24:16', '0000-00-00 00:00:00', 1, '', 1, 261), -(285, '', '10bb0c15-34df-49e5-9e75-e6e6888d1ad9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\OrderingField\",\"joomla_version\":\"0\"}}', 'JFormFieldOrdering', '', 1, '2024-05-18 11:24:32', '0000-00-00 00:00:00', 1, '', 1, 262), -(286, '', 'bc4e1526-6911-40a0-aa4b-c34ce3e3c1ac', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\PluginstatusField\",\"joomla_version\":\"0\"}}', 'JFormFieldPlugin_Status', '', 1, '2024-05-18 11:24:58', '0000-00-00 00:00:00', 1, '', 1, 263), -(287, '', 'ddfd9953-12b5-457d-b0f4-ee3f4037f1c8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\RedirectStatusField\",\"joomla_version\":\"0\"}}', 'JFormFieldRedirect_Status', '', 1, '2024-05-18 11:25:16', '0000-00-00 00:00:00', 1, '', 1, 264), -(288, '', '5740ef5d-ad58-45c6-b63a-d9b3be84852e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\RegistrationdaterangeField\",\"joomla_version\":\"0\"}}', 'JFormFieldRegistrationDateRange', '', 1, '2024-05-18 11:25:36', '0000-00-00 00:00:00', 1, '', 1, 265), -(289, '', 'a3ca4b07-c3ad-405c-aeb5-640e06e0007f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\StatusField\",\"joomla_version\":\"0\"}}', 'JFormFieldStatus', '', 1, '2024-05-18 11:25:54', '0000-00-00 00:00:00', 1, '', 1, 266), -(290, '', '33f12f0a-37d6-4eb8-8c93-a5df4ddf639e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\TagField\",\"joomla_version\":\"0\"}}', 'JFormFieldTag', '', 1, '2024-05-18 11:26:14', '0000-00-00 00:00:00', 1, '', 1, 267), -(291, '', '81400858-9b44-4899-beaf-34932880e62d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\TemplatestyleField\",\"joomla_version\":\"0\"}}', 'JFormFieldTemplatestyle', '', 1, '2024-05-18 11:26:36', '0000-00-00 00:00:00', 1, '', 1, 268), -(292, '', 'b4f358e7-9fb5-443b-8287-4a4138c02135', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\UseractiveField\",\"joomla_version\":\"0\"}}', 'JFormFieldUserActive', '', 1, '2024-05-18 11:26:59', '0000-00-00 00:00:00', 1, '', 1, 269), -(293, '', 'd35304f8-b5d8-4604-8aac-a292eaa4d7a8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\UsergrouplistField\",\"joomla_version\":\"0\"}}', 'JFormFieldUserGroupList', '', 1, '2024-05-18 11:27:16', '0000-00-00 00:00:00', 1, '', 1, 270), -(294, '', '98b18db8-7eb9-412f-a785-5c3735ffd870', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\UserstateField\",\"joomla_version\":\"0\"}}', 'JFormFieldUserState', '', 1, '2024-05-18 11:27:35', '0000-00-00 00:00:00', 1, '', 1, 271), -(295, '', '37e3ef8d-4631-47ee-91f1-43f4d7fc4a12', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\UserField\",\"joomla_version\":\"0\"}}', 'JFormFieldUser', '', 1, '2024-05-18 11:27:58', '0000-00-00 00:00:00', 1, '', 1, 272), -(296, '', '7e5b7df9-f893-46c1-a750-7afdd0b191bf', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\BooleanRule\",\"joomla_version\":\"0\"}}', 'JFormRuleBoolean', '', 1, '2024-05-18 11:28:22', '0000-00-00 00:00:00', 1, '', 1, 273), -(297, '', 'a0d9471b-b7f2-4878-9d0d-cf1aa2554cd0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\CalendarRule\",\"joomla_version\":\"0\"}}', 'JFormRuleCalendar', '', 1, '2024-05-18 11:29:16', '0000-00-00 00:00:00', 1, '', 1, 274), -(298, '', '95ac2316-6e45-49b6-a699-43c27c574e98', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\CaptchaRule\",\"joomla_version\":\"0\"}}', 'JFormRuleCaptcha', '', 1, '2024-05-18 11:29:42', '0000-00-00 00:00:00', 1, '', 1, 275), -(299, '', 'c878d3bd-34ba-48cf-8b5d-81b69658a666', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\ColorRule\",\"joomla_version\":\"0\"}}', 'JFormRuleColor', '', 1, '2024-05-18 11:30:04', '0000-00-00 00:00:00', 1, '', 1, 276), -(300, '', '3402dda1-8406-4f80-8330-46952879ab66', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\EmailRule\",\"joomla_version\":\"0\"}}', 'JFormRuleEmail', '', 1, '2024-05-18 11:30:25', '0000-00-00 00:00:00', 1, '', 1, 277), -(301, '', 'c8a86e8f-a573-4906-8f82-f8d0e369c16a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\EqualsRule\",\"joomla_version\":\"0\"}}', 'JFormRuleEquals', '', 1, '2024-05-18 11:30:53', '0000-00-00 00:00:00', 1, '', 1, 278), -(302, '', '5cb3c5c8-b350-4a3b-8dab-e0b7252bc687', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\NotequalsRule\",\"joomla_version\":\"0\"}}', 'JFormRuleNotequals', '', 1, '2024-05-18 11:31:11', '0000-00-00 00:00:00', 1, '', 1, 279), -(303, '', 'b3455c2b-5ed7-4a2a-bb11-7b085331b712', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\NumberRule\",\"joomla_version\":\"0\"}}', 'JFormRuleNumber', '', 1, '2024-05-18 11:31:30', '0000-00-00 00:00:00', 1, '', 1, 280), -(304, '', '7ee396f8-0c95-4a79-8157-0804f34fcb16', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\OptionsRule\",\"joomla_version\":\"0\"}}', 'JFormRuleOptions', '', 1, '2024-05-18 11:31:55', '0000-00-00 00:00:00', 1, '', 1, 281), -(305, '', '2bffaaff-58a2-4f14-be5b-d3548de6cbbb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\PasswordRule\",\"joomla_version\":\"0\"}}', 'JFormRulePassword', '', 1, '2024-05-18 11:32:15', '0000-00-00 00:00:00', 1, '', 1, 282), -(306, '', 'c5205116-78c0-4d8b-863b-b0fd32f0cb9d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\RulesRule\",\"joomla_version\":\"0\"}}', 'JFormRuleRules', '', 1, '2024-05-18 11:32:39', '0000-00-00 00:00:00', 1, '', 1, 283), -(307, '', '757b02fe-4149-45bc-b110-2ebaeae66f17', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\TelRule\",\"joomla_version\":\"0\"}}', 'JFormRuleTel', '', 1, '2024-05-18 11:33:06', '0000-00-00 00:00:00', 1, '', 1, 284), -(308, '', '9214cd9a-d08e-407a-8c6f-d6b49aec82a8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\UrlRule\",\"joomla_version\":\"0\"}}', 'JFormRuleUrl', '', 1, '2024-05-18 11:33:29', '0000-00-00 00:00:00', 1, '', 1, 285), -(309, '', '577ce475-83a3-4a2e-b69f-dcd0703aec70', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Rule\\\\UsernameRule\",\"joomla_version\":\"0\"}}', 'JFormRuleUsername', '', 1, '2024-05-18 11:33:51', '0000-00-00 00:00:00', 1, '', 1, 286), -(310, '', 'c8219b24-374a-4cb3-8faf-3c23b129ceba', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Microdata\\\\Microdata\",\"joomla_version\":\"0\"}}', 'JMicrodata', '', 1, '2024-05-18 11:34:12', '0000-00-00 00:00:00', 1, '', 1, 287), -(311, '', 'a5f433b4-de43-45ad-b6aa-ed7e2b4524b1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Mail\\\\Mail\",\"joomla_version\":\"0\"}}', 'JMail', '', 1, '2024-05-18 11:34:29', '0000-00-00 00:00:00', 1, '', 1, 288), -(312, '', 'e2695146-82f9-4f4e-ae24-a2e28c9aa692', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Mail\\\\MailHelper\",\"joomla_version\":\"0\"}}', 'JMailHelper', '', 1, '2024-05-18 11:34:47', '0000-00-00 00:00:00', 1, '', 1, 289), -(313, '', '8f87732c-ae41-4685-b9e3-381c8ee277f5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Mail\\\\MailWrapper\",\"joomla_version\":\"0\"}}', 'JMailWrapperHelper', '', 1, '2024-05-18 11:35:14', '0000-00-00 00:00:00', 1, '', 1, 290), -(314, '', '01f9f992-adc3-4529-abc8-ed1e0fb1f88e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Client\\\\ClientHelper\",\"joomla_version\":\"0\"}}', 'JClientHelper', '', 1, '2024-05-18 11:35:38', '0000-00-00 00:00:00', 1, '', 1, 291), -(315, '', '06286fff-ee87-4b45-9f9f-9b77dbf3dde1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Client\\\\ClientWrapper\",\"joomla_version\":\"0\"}}', 'JClientWrapperHelper', '', 1, '2024-05-18 11:35:59', '0000-00-00 00:00:00', 1, '', 1, 292), -(316, '', 'ba0b2e6c-54c1-472b-8164-2977eff95530', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Client\\\\FtpClient\",\"joomla_version\":\"0\"}}', 'JClientFtp', '', 1, '2024-05-18 11:36:19', '0000-00-00 00:00:00', 1, '', 1, 293), -(317, '', 'e8fccc29-e48c-4c4c-94c5-338db3ac0ec2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Client\\\\FtpClient\",\"joomla_version\":\"0\"}}', 'JFTP', '', 1, '2024-05-18 11:36:53', '0000-00-00 00:00:00', 1, '', 1, 294), -(318, '', '93ff2bec-b4b7-4f53-aec1-c22e68fe83a4', '{\"settings0\":{\"namespace\":\"Joomla\\\\Ldap\\\\LdapClient\",\"joomla_version\":\"0\"}}', 'JClientLdap', '', 1, '2024-05-18 11:37:14', '0000-00-00 00:00:00', 1, '', 1, 295), -(319, '', '13ff417a-8633-4b8c-949a-97e35a0d03ff', '{\"settings0\":{\"namespace\":\"Joomla\\\\Ldap\\\\LdapClient\",\"joomla_version\":\"0\"}}', 'JLDAP', '', 1, '2024-05-18 11:37:36', '0000-00-00 00:00:00', 1, '', 1, 296), -(320, '', 'f27df948-aff9-484d-a38d-7e7a16b26050', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Updater\\\\Update\",\"joomla_version\":\"0\"}}', 'JUpdate', '', 1, '2024-05-18 11:37:58', '0000-00-00 00:00:00', 1, '', 1, 297), -(321, '', '6368b71b-1848-41ea-a83b-6594214c67c2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Updater\\\\UpdateAdapter\",\"joomla_version\":\"0\"}}', 'JUpdateAdapter', '', 1, '2024-05-18 11:38:20', '0000-00-00 00:00:00', 1, '', 1, 298), -(322, '', '4e0f3ff1-ded0-4d9e-851c-d10701b9155e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Updater\\\\Updater\",\"joomla_version\":\"0\"}}', 'JUpdater', '', 1, '2024-05-18 11:38:46', '0000-00-00 00:00:00', 1, '', 1, 299), -(323, '', 'a64019e0-eb96-4991-b302-6feccd025586', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Updater\\\\Adapter\\\\CollectionAdapter\",\"joomla_version\":\"0\"}}', 'JUpdaterCollection', '', 1, '2024-05-18 11:39:10', '0000-00-00 00:00:00', 1, '', 1, 300), -(324, '', 'c96caaab-5a9b-4d0f-8927-5c5fcf23b6f4', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Updater\\\\Adapter\\\\ExtensionAdapter\",\"joomla_version\":\"0\"}}', 'JUpdaterExtension', '', 1, '2024-05-18 11:39:31', '0000-00-00 00:00:00', 1, '', 1, 301), -(325, '', 'bfc1b531-2c63-45a2-93bd-9b968bdef8c0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Crypt\",\"joomla_version\":\"0\"}}', 'JCrypt', '', 1, '2024-05-18 11:39:54', '0000-00-00 00:00:00', 1, '', 1, 302), -(326, '', '76d2f1c4-e213-40ee-9811-be0d2d0ca00a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\CipherInterface\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\Crypt\\\\CipherInterface\",\"joomla_version\":\"0\"}}', 'JCryptCipher', '', 1, '2024-05-18 11:40:10', '2024-05-18 17:37:14', 2, '', 1, 303), -(327, '', '19a95b7a-af63-4fb1-b8b3-7a5370629981', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Key\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\Crypt\\\\Key\",\"joomla_version\":\"0\"}}', 'JCryptKey', '', 1, '2024-05-18 11:40:31', '2024-05-18 17:39:17', 2, '', 1, 304), -(328, '', 'a4b1a2f8-0ea2-44e2-b633-0270af3bc594', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\CryptPassword\",\"joomla_version\":\"0\"}}', 'JCryptPassword', '', 1, '2024-05-18 11:40:55', '0000-00-00 00:00:00', 1, '', 1, 305), -(329, '', '774cb055-f1bf-46d7-a102-bbce2de1c8c3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Cipher\\\\BlowfishCipher\",\"joomla_version\":\"0\"}}', 'JCryptCipherBlowfish', '', 1, '2024-05-18 11:41:16', '0000-00-00 00:00:00', 1, '', 1, 306), -(330, '', '062bb518-0559-47f3-aed3-d47536df1cab', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Cipher\\\\CryptoCipher\",\"joomla_version\":\"0\"}}', 'JCryptCipherCrypto', '', 1, '2024-05-18 11:41:43', '0000-00-00 00:00:00', 1, '', 1, 307), -(331, '', '2407b5c1-a3ed-4c5b-9044-09011aaf6751', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Cipher\\\\McryptCipher\",\"joomla_version\":\"0\"}}', 'JCryptCipherMcrypt', '', 1, '2024-05-18 11:42:08', '0000-00-00 00:00:00', 1, '', 1, 308), -(332, '', '758de6d8-4d77-4877-a0d2-d7cd23232dc0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Cipher\\\\Rijndael256Cipher\",\"joomla_version\":\"0\"}}', 'JCryptCipherRijndael256', '', 1, '2024-05-18 11:42:41', '0000-00-00 00:00:00', 1, '', 1, 309), -(333, '', '65669775-fbcd-4fd4-8b14-636c26a59b18', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Cipher\\\\SimpleCipher\",\"joomla_version\":\"0\"}}', 'JCryptCipherSimple', '', 1, '2024-05-18 11:43:07', '0000-00-00 00:00:00', 1, '', 1, 310), -(334, '', '2a5ea144-20f9-4ce6-b0ea-193dd7292e1b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Cipher\\\\SodiumCipher\",\"joomla_version\":\"0\"}}', 'JCryptCipherSodium', '', 1, '2024-05-18 11:43:31', '0000-00-00 00:00:00', 1, '', 1, 311), -(335, '', 'b0d18c3a-c9fc-4fed-b63d-7f441ee7e0ee', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Cipher\\\\TripleDesCipher\",\"joomla_version\":\"0\"}}', 'JCryptCipher3Des', '', 1, '2024-05-18 11:43:56', '0000-00-00 00:00:00', 1, '', 1, 312), -(336, '', '4a5e397d-32cc-4cf3-8721-fd5e9c554021', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Crypt\\\\Password\\\\SimpleCryptPassword\",\"joomla_version\":\"0\"}}', 'JCryptPasswordSimple', '', 1, '2024-05-18 11:44:32', '0000-00-00 00:00:00', 1, '', 1, 313), -(337, '', 'b6882f3d-a8bc-4d82-ae7b-5f0fede36979', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\String\\\\PunycodeHelper\",\"joomla_version\":\"0\"}}', 'JStringPunycode', '', 1, '2024-05-18 11:45:00', '0000-00-00 00:00:00', 1, '', 1, 314), -(338, '', '3970e758-a029-48c3-87df-5898010963ba', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Utility\\\\BufferStreamHandler\",\"joomla_version\":\"0\"}}', 'JBuffer', '', 1, '2024-05-18 11:45:22', '0000-00-00 00:00:00', 1, '', 1, 315), -(339, '', '0823882c-5fc2-4c6a-ac6d-6e35e85067af', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Utility\\\\Utility\",\"joomla_version\":\"0\"}}', 'JUtility', '', 1, '2024-05-18 11:45:44', '0000-00-00 00:00:00', 1, '', 1, 316), -(340, '', '0d1b3cc4-7093-498f-8599-521a555e9cd6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Input\\\\Cli\",\"joomla_version\":\"0\"}}', 'JInputCli', '', 1, '2024-05-18 11:46:26', '0000-00-00 00:00:00', 1, '', 1, 317), -(341, '', 'e46476c4-9bd1-4197-aadf-b3fb5249febf', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Input\\\\Cookie\",\"joomla_version\":\"0\"}}', 'JInputCookie', '', 1, '2024-05-18 11:46:53', '0000-00-00 00:00:00', 1, '', 1, 318), -(342, '', '7247ce0b-e13f-4f23-9851-2d34b9bd9e23', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Input\\\\Files\",\"joomla_version\":\"0\"}}', 'JInputFiles', '', 1, '2024-05-18 11:47:28', '0000-00-00 00:00:00', 1, '', 1, 319), -(343, '', 'b72e6a7a-85a2-401e-80e3-e57e28a157e3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Input\\\\Json\",\"joomla_version\":\"0\"}}', 'JInputJSON', '', 1, '2024-05-18 11:47:45', '0000-00-00 00:00:00', 1, '', 1, 320), -(344, '', 'e4d24f01-125c-4a42-980f-952cb176740f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\Feed\",\"joomla_version\":\"0\"}}', 'JFeed', '', 1, '2024-05-18 11:48:04', '0000-00-00 00:00:00', 1, '', 1, 321), -(345, '', '83c45c5a-51b7-4475-a91b-693a1ce519c3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\FeedEntry\",\"joomla_version\":\"0\"}}', 'JFeedEntry', '', 1, '2024-05-18 11:48:21', '0000-00-00 00:00:00', 1, '', 1, 322), -(346, '', '5141d728-204c-400c-8648-77eb7f59f9ff', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\FeedFactory\",\"joomla_version\":\"0\"}}', 'JFeedFactory', '', 1, '2024-05-18 11:48:40', '0000-00-00 00:00:00', 1, '', 1, 323), -(347, '', '99679894-a0e2-4299-927e-26413d23e28c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\FeedLink\",\"joomla_version\":\"0\"}}', 'JFeedLink', '', 1, '2024-05-18 11:48:59', '0000-00-00 00:00:00', 1, '', 1, 324), -(348, '', '7f6c2c10-4672-463d-832c-1d686db339c0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\FeedParser\",\"joomla_version\":\"0\"}}', 'JFeedParser', '', 1, '2024-05-18 11:49:24', '0000-00-00 00:00:00', 1, '', 1, 325), -(349, '', '5f4d46e9-8f94-44ff-ad76-14477d357f77', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\FeedPerson\",\"joomla_version\":\"0\"}}', 'JFeedPerson', '', 1, '2024-05-18 11:50:27', '0000-00-00 00:00:00', 1, '', 1, 326), -(350, '', 'bd9884f1-33d4-4a27-beb0-be229285c03c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\Parser\\\\AtomParser\",\"joomla_version\":\"0\"}}', 'JFeedParserAtom', '', 1, '2024-05-18 11:50:47', '0000-00-00 00:00:00', 1, '', 1, 327), -(351, '', '47aab0ce-f4e7-4b7e-896d-0acfa5bd44b5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\Parser\\\\NamespaceParserInterface\",\"joomla_version\":\"0\"}}', 'JFeedParserNamespace', '', 1, '2024-05-18 11:51:12', '0000-00-00 00:00:00', 1, '', 1, 328), -(352, '', '307f6a22-e7cb-4cf3-9cdd-c504a214fb97', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\Parser\\\\RssParser\",\"joomla_version\":\"0\"}}', 'JFeedParserRss', '', 1, '2024-05-18 11:51:34', '0000-00-00 00:00:00', 1, '', 1, 329), -(353, '', 'f94d1eff-ffd0-4809-a27f-0c52ca37585a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\Parser\\\\Rss\\\\ItunesRssParser\",\"joomla_version\":\"0\"}}', 'JFeedParserRssItunes', '', 1, '2024-05-18 11:52:01', '0000-00-00 00:00:00', 1, '', 1, 330), -(354, '', '20d4459b-a6ad-400a-8529-ccc016465392', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Feed\\\\Parser\\\\Rss\\\\MediaRssParser\",\"joomla_version\":\"0\"}}', 'JFeedParserRssMedia', '', 1, '2024-05-18 11:52:25', '0000-00-00 00:00:00', 1, '', 1, 331), -(355, '', '5957958d-1249-49af-98ad-51f4bca471a8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\Image\",\"joomla_version\":\"0\"}}', 'JImage', '', 1, '2024-05-18 11:52:50', '0000-00-00 00:00:00', 1, '', 1, 332), -(356, '', '3e5c8d3e-f54a-4ca0-9926-7b43530f5260', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\ImageFilter\",\"joomla_version\":\"0\"}}', 'JImageFilter', '', 1, '2024-05-18 11:53:07', '0000-00-00 00:00:00', 1, '', 1, 333), -(357, '', 'c5fa10fc-b5bc-4b75-80f5-879314ca744c', '{\"settings0\":{\"namespace\":\"Joomla\\\\Image\\\\Filter\\\\Backgroundfill\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\Filter\\\\Backgroundfill\",\"joomla_version\":\"0\"}}', 'JImageFilterBackgroundfill', '', 1, '2024-05-18 11:53:28', '2024-05-18 19:24:35', 2, '', 1, 334), -(358, '', 'a31af1d6-6ddd-4b52-94a0-c19719938bfe', '{\"settings0\":{\"namespace\":\"Joomla\\\\Image\\\\Filter\\\\Brightness\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\Filter\\\\Brightness\",\"joomla_version\":\"0\"}}', 'JImageFilterBrightness', '', 1, '2024-05-18 11:53:48', '2024-05-18 19:25:00', 2, '', 1, 335), -(359, '', 'fc1c1b94-af75-4df0-8ff2-dd628cdd2fd6', '{\"settings0\":{\"namespace\":\"Joomla\\\\Image\\\\Filter\\\\Contrast\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\Filter\\\\Contrast\",\"joomla_version\":\"0\"}}', 'JImageFilterContrast', '', 1, '2024-05-18 11:54:19', '2024-05-18 19:25:33', 2, '', 1, 336), -(360, '', '2a1bf749-aee1-4ca5-8435-431eca453a38', '{\"settings0\":{\"namespace\":\"Joomla\\\\Image\\\\Filter\\\\Edgedetect\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\Filter\\\\Edgedetect\",\"joomla_version\":\"0\"}}', 'JImageFilterEdgedetect', '', 1, '2024-05-18 11:54:43', '2024-05-18 19:25:58', 2, '', 1, 337), -(361, '', 'b08f9da5-f177-420b-8717-bb3d0b526f03', '{\"settings0\":{\"namespace\":\"Joomla\\\\Image\\\\Filter\\\\Emboss\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\Filter\\\\Emboss\",\"joomla_version\":\"0\"}}', 'JImageFilterEmboss', '', 1, '2024-05-18 11:55:00', '2024-05-18 19:26:15', 2, '', 1, 338), -(362, '', 'fbdce191-84f3-42c7-9c47-cc52796627bf', '{\"settings0\":{\"namespace\":\"Joomla\\\\Image\\\\Filter\\\\Negate\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\Filter\\\\Negate\",\"joomla_version\":\"0\"}}', 'JImageFilterNegate', '', 1, '2024-05-18 11:55:25', '2024-05-18 19:26:40', 2, '', 1, 339), -(363, '', 'fca5f2e5-47db-48b6-a28d-43732cc180a9', '{\"settings0\":{\"namespace\":\"Joomla\\\\Image\\\\Filter\\\\Sketchy\",\"joomla_version\":\"0\"}}', 'JImageFilterSketchy', '', 1, '2024-05-18 11:55:45', '0000-00-00 00:00:00', 1, '', 1, 340), -(364, '', '16e40573-2dca-4e1a-b021-ddb68e71594b', '{\"settings0\":{\"namespace\":\"Joomla\\\\Image\\\\Filter\\\\Smooth\",\"joomla_version\":\"3\"},\"settings1\":{\"namespace\":\"Joomla\\\\CMS\\\\Image\\\\Filter\\\\Smooth\",\"joomla_version\":\"0\"}}', 'JImageFilterSmooth', '', 1, '2024-05-18 11:56:13', '2024-05-18 19:26:57', 2, '', 1, 341), -(365, '', 'ac166443-eb68-4b57-8a3c-63bcf4aaeb2a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Object\\\\CMSObject\",\"joomla_version\":\"0\"}}', 'JObject', '', 1, '2024-05-18 11:56:34', '0000-00-00 00:00:00', 1, '', 1, 342), -(366, '', 'fdf6b2b2-1561-4ccf-bf66-2d05b0b956aa', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Extension\\\\ExtensionHelper\",\"joomla_version\":\"0\"}}', 'JExtensionHelper', '', 1, '2024-05-18 11:56:56', '0000-00-00 00:00:00', 1, '', 1, 343), -(367, '', '93a098fc-58b6-4f1b-978a-0a5d31bba09f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\FilesystemHelper\",\"joomla_version\":\"0\"}}', 'JFilesystemHelper', '', 1, '2024-05-18 11:57:24', '0000-00-00 00:00:00', 1, '', 1, 344), -(368, '', '48e08187-e797-4072-a6e7-bd0d6dcb32c5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Patcher\",\"joomla_version\":\"0\"}}', 'JFilesystemPatcher', '', 1, '2024-05-18 11:57:52', '0000-00-00 00:00:00', 1, '', 1, 345), -(369, '', '97b81dcd-93cb-4b52-804a-23f2af8d0e2d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Path\",\"joomla_version\":\"0\"}}', 'JPath', '', 1, '2024-05-18 11:58:18', '0000-00-00 00:00:00', 1, '', 1, 346), -(370, '', '3b625fe9-b66d-4d0c-af3b-b657fa279cd2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Stream\",\"joomla_version\":\"0\"}}', 'JStream', '', 1, '2024-05-18 11:58:42', '0000-00-00 00:00:00', 1, '', 1, 347), -(371, '', 'fdc5c1aa-7dce-49ce-b35c-917155aa4d53', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Streams\\\\StreamString\",\"joomla_version\":\"0\"}}', 'JStreamString', '', 1, '2024-05-18 11:59:01', '0000-00-00 00:00:00', 1, '', 1, 348), -(372, '', '9c1997f5-592a-471f-a6a6-ec205bf20b58', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Support\\\\StringController\",\"joomla_version\":\"0\"}}', 'JStringController', '', 1, '2024-05-18 11:59:41', '0000-00-00 00:00:00', 1, '', 1, 349), -(373, '', 'cad536bf-a916-439b-b814-adbb9c8d11ef', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Wrapper\\\\FileWrapper\",\"joomla_version\":\"0\"}}', 'JFilesystemWrapperFile', '', 1, '2024-05-18 11:59:58', '0000-00-00 00:00:00', 1, '', 1, 350), -(374, '', '648adc06-9a7e-459e-8af1-5cf7d1c3a0ca', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Wrapper\\\\FolderWrapper\",\"joomla_version\":\"0\"}}', 'JFilesystemWrapperFolder', '', 1, '2024-05-18 12:00:22', '0000-00-00 00:00:00', 1, '', 1, 351), -(375, '', 'eb19e279-1649-4c1a-9a50-b9a22108383f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Filesystem\\\\Wrapper\\\\PathWrapper\",\"joomla_version\":\"0\"}}', 'JFilesystemWrapperPath', '', 1, '2024-05-18 12:00:50', '0000-00-00 00:00:00', 1, '', 1, 352), -(376, '', '2ef6137d-d122-4769-94ca-2eb991e30fb1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Adapter\\\\Adapter\",\"joomla_version\":\"0\"}}', 'JAdapter', '', 1, '2024-05-18 12:01:10', '0000-00-00 00:00:00', 1, '', 1, 353), -(377, '', 'ae56c9d7-2c2a-446a-a4b0-9f979da47f3b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Adapter\\\\AdapterInstance\",\"joomla_version\":\"0\"}}', 'JAdapterInstance', '', 1, '2024-05-18 12:01:30', '0000-00-00 00:00:00', 1, '', 1, 354), -(378, '', '8af6f6e0-7fe4-40f4-be49-d40e2bed9570', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\AccesslevelField\",\"joomla_version\":\"0\"}}', 'JFormFieldAccessLevel', '', 1, '2024-05-18 15:44:58', '0000-00-00 00:00:00', 1, '', 1, 355), -(379, '', '5d897103-1522-48b9-aa85-bae53e1160f5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\AliastagField\",\"joomla_version\":\"0\"}}', 'JFormFieldAliastag', '', 1, '2024-05-18 15:46:16', '0000-00-00 00:00:00', 1, '', 1, 356), -(380, '', '80f32455-afc5-42f9-a307-ee357b0dd6fe', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\CachehandlerField\",\"joomla_version\":\"0\"}}', 'JFormFieldCacheHandler', '', 1, '2024-05-18 15:48:15', '0000-00-00 00:00:00', 1, '', 1, 357), -(381, '', '80a6e469-8999-414c-b292-debcdbc41815', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\CalendarField\",\"joomla_version\":\"0\"}}', 'JFormFieldCalendar', '', 1, '2024-05-18 15:49:06', '0000-00-00 00:00:00', 1, '', 1, 358), -(382, '', 'a56c632d-5bec-45c2-a8a2-40c6a12b545f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\CategoryField\",\"joomla_version\":\"0\"}}', 'JFormFieldCategory', '', 1, '2024-05-18 15:51:00', '0000-00-00 00:00:00', 1, '', 1, 359), -(383, '', '5f83b06a-e133-4305-9a55-acb9c663856a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\CheckboxField\",\"joomla_version\":\"0\"}}', 'JFormFieldCheckbox', '', 1, '2024-05-18 15:51:50', '0000-00-00 00:00:00', 1, '', 1, 360), -(384, '', 'e60f4fbf-e94d-44e8-a1b6-d17f05033eac', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\CheckboxesField\",\"joomla_version\":\"0\"}}', 'JFormFieldCheckboxes', '', 1, '2024-05-18 15:53:42', '0000-00-00 00:00:00', 1, '', 1, 361), -(385, '', '521a1a08-97b5-46fa-adf1-49a2295ab883', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ColorField\",\"joomla_version\":\"0\"}}', 'JFormFieldColor', '', 1, '2024-05-18 15:56:03', '0000-00-00 00:00:00', 1, '', 1, 362), -(386, '', '55be30ee-0823-480a-aba8-e0bc2cb64503', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ComboField\",\"joomla_version\":\"0\"}}', 'JFormFieldCombo', '', 1, '2024-05-18 15:56:48', '0000-00-00 00:00:00', 1, '', 1, 363), -(387, '', 'cf5e4e33-3822-46fa-bd59-d8b8dd84fe0a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ComponentlayoutField\",\"joomla_version\":\"0\"}}', 'JFormFieldComponentlayout', '', 1, '2024-05-18 15:57:49', '0000-00-00 00:00:00', 1, '', 1, 364), -(388, '', '3582a327-292f-48a4-b3e1-970bbc078411', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ComponentsField\",\"joomla_version\":\"0\"}}', 'JFormFieldComponents', '', 1, '2024-05-18 15:59:07', '0000-00-00 00:00:00', 1, '', 1, 365), -(389, '', 'e42ffd96-0c63-43c3-9d96-f40ba67628c0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\DatabaseconnectionField\",\"joomla_version\":\"0\"}}', 'JFormFieldDatabaseConnection', '', 1, '2024-05-18 16:02:20', '0000-00-00 00:00:00', 1, '', 1, 366), -(390, '', '8024b772-6bfe-47cf-b776-39c883789e48', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\EmailField\",\"joomla_version\":\"0\"}}', 'JFormFieldEMail', '', 1, '2024-05-18 16:03:59', '0000-00-00 00:00:00', 1, '', 1, 367), -(391, '', '1ce01a05-7010-427d-a333-37dcd3947f56', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\FileField\",\"joomla_version\":\"0\"}}', 'JFormFieldFile', '', 1, '2024-05-18 16:05:07', '0000-00-00 00:00:00', 1, '', 1, 368), -(392, '', 'ff395590-ed93-4e39-8636-c9084325de96', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\FilelistField\",\"joomla_version\":\"0\"}}', 'JFormFieldFileList', '', 1, '2024-05-18 16:06:01', '0000-00-00 00:00:00', 1, '', 1, 369), -(393, '', 'c5e03fd6-4919-4463-9a86-82033763d649', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\FolderlistField\",\"joomla_version\":\"0\"}}', 'JFormFieldFolderList', '', 1, '2024-05-18 16:06:51', '0000-00-00 00:00:00', 1, '', 1, 370), -(394, '', '92eb5c12-48f4-4b2c-8f2f-08f95019ecc7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\GroupedlistField\",\"joomla_version\":\"0\"}}', 'JFormFieldGroupedList', '', 1, '2024-05-18 16:08:29', '0000-00-00 00:00:00', 1, '', 1, 371), -(395, '', 'fe2d12c0-a6e3-4a85-b2e6-1e792d2ed774', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\HiddenField\",\"joomla_version\":\"0\"}}', 'JFormFieldHidden', '', 1, '2024-05-18 16:10:07', '0000-00-00 00:00:00', 1, '', 1, 372), -(396, '', '1e403041-66cc-424b-a435-b82538036a44', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ImagelistField\",\"joomla_version\":\"0\"}}', 'JFormFieldImageList', '', 1, '2024-05-18 16:10:50', '0000-00-00 00:00:00', 1, '', 1, 373), -(397, '', 'ccb4a7a6-67f6-4db5-b89c-324bfbed3981', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\IntegerField\",\"joomla_version\":\"0\"}}', 'JFormFieldInteger', '', 1, '2024-05-18 16:11:35', '0000-00-00 00:00:00', 1, '', 1, 374), -(398, '', 'fa54b2bf-61fd-401e-8e89-96adb3d919bf', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\LanguageField\",\"joomla_version\":\"0\"}}', 'JFormFieldLanguage', '', 1, '2024-05-18 16:12:31', '0000-00-00 00:00:00', 1, '', 1, 375), -(399, '', '960bb57d-eafc-4aa8-830d-f74898b7a546', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ListField\",\"joomla_version\":\"0\"}}', 'JFormFieldList', '', 1, '2024-05-18 16:15:17', '0000-00-00 00:00:00', 1, '', 1, 376), -(400, '', 'd9b4d9a1-f6e5-46ef-ac46-6f91969a4139', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\MeterField\",\"joomla_version\":\"0\"}}', 'JFormFieldMeter', '', 1, '2024-05-18 16:18:18', '0000-00-00 00:00:00', 1, '', 1, 377), -(401, '', 'ab56b96f-8904-4d0e-af60-29f8b4bc6252', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\ModulelayoutField\",\"joomla_version\":\"0\"}}', 'JFormFieldModulelayout', '', 1, '2024-05-18 16:19:14', '0000-00-00 00:00:00', 1, '', 1, 378), -(402, '', '4c4bc84e-e324-4064-83e5-282d854d3a22', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\NoteField\",\"joomla_version\":\"0\"}}', 'JFormFieldNote', '', 1, '2024-05-18 16:22:23', '0000-00-00 00:00:00', 1, '', 1, 379), -(403, '', 'e1659b22-2f96-49fa-a26f-84dab3001abe', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\NumberField\",\"joomla_version\":\"0\"}}', 'JFormFieldNumber', '', 1, '2024-05-18 16:23:13', '0000-00-00 00:00:00', 1, '', 1, 380), -(404, '', 'b190bdbe-1868-4c7c-bbb8-af66e1d78191', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\PasswordField\",\"joomla_version\":\"0\"}}', 'JFormFieldPassword', '', 1, '2024-05-18 16:24:57', '0000-00-00 00:00:00', 1, '', 1, 381), -(405, '', 'd88ab2ea-70d2-4da5-8a8f-44adc308f223', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\PluginsField\",\"joomla_version\":\"0\"}}', 'JFormFieldPlugins', '', 1, '2024-05-18 16:26:10', '0000-00-00 00:00:00', 1, '', 1, 382), -(406, '', '8d5d180e-257e-4c57-8205-6c04771f6999', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\PredefinedListField\",\"joomla_version\":\"0\"}}', 'JFormFieldPredefinedList', '', 1, '2024-05-18 16:27:32', '0000-00-00 00:00:00', 1, '', 1, 383), -(407, '', '0b2a2152-d48a-490d-a147-5dbb194fe2af', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\RadioField\",\"joomla_version\":\"0\"}}', 'JFormFieldRadio', '', 1, '2024-05-18 16:28:29', '0000-00-00 00:00:00', 1, '', 1, 384), -(408, '', '4abb8168-ee77-42c0-8cb4-9d7c1ec85ce6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\RangeField\",\"joomla_version\":\"0\"}}', 'JFormFieldRange', '', 1, '2024-05-18 16:29:15', '0000-00-00 00:00:00', 1, '', 1, 385), -(409, '', 'aa4a472d-3791-48a8-bb28-6c335a858adc', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\RulesField\",\"joomla_version\":\"0\"}}', 'JFormFieldRules', '', 1, '2024-05-18 16:32:48', '0000-00-00 00:00:00', 1, '', 1, 386), -(410, '', '81edbf8f-308c-40c3-95e0-6026815e6ccb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\SessionhandlerField\",\"joomla_version\":\"0\"}}', 'JFormFieldSessionHandler', '', 1, '2024-05-18 16:33:29', '0000-00-00 00:00:00', 1, '', 1, 387), -(411, '', 'b6059797-0263-4f94-b313-81f76a80e1cb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\SpacerField\",\"joomla_version\":\"0\"}}', 'JFormFieldSpacer', '', 1, '2024-05-18 16:34:11', '0000-00-00 00:00:00', 1, '', 1, 388), -(412, '', '1afe394e-e066-4f96-98c0-d78f38d66638', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\SqlField\",\"joomla_version\":\"0\"}}', 'JFormFieldSQL', '', 1, '2024-05-18 16:35:06', '0000-00-00 00:00:00', 1, '', 1, 389), -(413, '', 'b3319bad-a2b4-4762-af28-7942bea822bd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\SubformField\",\"joomla_version\":\"0\"}}', 'JFormFieldSubform', '', 1, '2024-05-18 16:36:31', '0000-00-00 00:00:00', 1, '', 1, 390), -(414, '', '62abd5ac-95d8-4263-abd4-29aba234bed9', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\TelephoneField\",\"joomla_version\":\"0\"}}', 'JFormFieldTel', '', 1, '2024-05-18 16:38:04', '0000-00-00 00:00:00', 1, '', 1, 391), -(415, '', 'd977aed1-4935-4e7e-982c-399b5c7bdb9e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\TextField\",\"joomla_version\":\"0\"}}', 'JFormFieldText', '', 1, '2024-05-18 16:39:32', '0000-00-00 00:00:00', 1, '', 1, 392), -(416, '', '305617a7-c828-4a8c-ac77-8c88f0535549', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\TextareaField\",\"joomla_version\":\"0\"}}', 'JFormFieldTextarea', '', 1, '2024-05-18 16:40:19', '0000-00-00 00:00:00', 1, '', 1, 393), -(417, '', '2c1cbfcd-55ea-40b9-9cd3-5ec02d8093cd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\TimezoneField\",\"joomla_version\":\"0\"}}', 'JFormFieldTimezone', '', 1, '2024-05-18 16:41:29', '0000-00-00 00:00:00', 1, '', 1, 394), -(418, '', '59636bef-ad63-46a6-b3d0-1b5a57bb85fa', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Field\\\\UrlField\",\"joomla_version\":\"0\"}}', 'JFormFieldUrl', '', 1, '2024-05-18 16:42:06', '0000-00-00 00:00:00', 1, '', 1, 395), -(419, '', 'ec78bf74-f80c-42df-85cc-6c1ecd2417fc', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\DatabaseDriver\",\"joomla_version\":\"0\"}}', 'JDatabaseDriver', '', 1, '2024-05-18 16:59:32', '0000-00-00 00:00:00', 1, '', 1, 396), -(420, '', 'ed39669e-c163-43c7-b942-2aa16f0bcebd', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\DatabaseExporter\",\"joomla_version\":\"0\"}}', 'JDatabaseExporter', '', 1, '2024-05-18 17:00:33', '0000-00-00 00:00:00', 1, '', 1, 397), -(421, '', 'fe666da1-eebe-41e0-9b05-f2b747d2bc8f', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\DatabaseFactory\",\"joomla_version\":\"0\"}}', 'JDatabaseFactory', '', 1, '2024-05-18 17:01:32', '0000-00-00 00:00:00', 1, '', 1, 398), -(422, '', '837bb77a-c85b-480d-ae8c-93c95e9c34d0', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\DatabaseImporter\",\"joomla_version\":\"0\"}}', 'JDatabaseImporter', '', 1, '2024-05-18 17:02:20', '0000-00-00 00:00:00', 1, '', 1, 399), -(423, '', '7bd29d76-73c9-4c07-a5da-4f7a32aff78f', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\DatabaseInterface\",\"joomla_version\":\"0\"}}', 'JDatabaseInterface', '', 1, '2024-05-18 17:03:02', '0000-00-00 00:00:00', 1, '', 1, 400), -(424, '', 'f9c17662-8434-4819-85bd-e62c59c8ce25', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\DatabaseIterator\",\"joomla_version\":\"0\"}}', 'JDatabaseIterator', '', 1, '2024-05-18 17:03:43', '0000-00-00 00:00:00', 1, '', 1, 401), -(425, '', 'cf86ed0d-bbe6-4451-aeb8-c63ee4d0fc14', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\DatabaseQuery\",\"joomla_version\":\"0\"}}', 'JDatabaseQuery', '', 1, '2024-05-18 17:04:31', '0000-00-00 00:00:00', 1, '', 1, 402), -(426, '', 'c8bd9af6-7821-4a12-b7bf-f04b492e03c3', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Mysqli\\\\MysqliDriver\",\"joomla_version\":\"0\"}}', 'JDatabaseDriverMysqli', '', 1, '2024-05-18 17:05:06', '0000-00-00 00:00:00', 1, '', 1, 403), -(427, '', '33aed640-4fd5-4b93-b5ee-7bc98499e97a', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Pdo\\\\PdoDriver\",\"joomla_version\":\"0\"}}', 'JDatabaseDriverPdo', '', 1, '2024-05-18 17:05:55', '0000-00-00 00:00:00', 1, '', 1, 404), -(428, '', '40c148a2-0fb1-424e-b5f9-f9edf1130f85', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Mysql\\\\MysqlDriver\",\"joomla_version\":\"0\"}}', 'JDatabaseDriverPdomysql', '', 1, '2024-05-18 17:06:39', '0000-00-00 00:00:00', 1, '', 1, 405), -(429, '', '3a7db958-21dd-4fd6-acca-077be8dcb534', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Pgsql\\\\PgsqlDriver\",\"joomla_version\":\"0\"}}', 'JDatabaseDriverPgsql', '', 1, '2024-05-18 17:07:16', '0000-00-00 00:00:00', 1, '', 1, 406), -(430, '', '52e8fced-b8a6-4ab8-b249-55acd61504c2', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Sqlazure\\\\SqlazureDriver\",\"joomla_version\":\"0\"}}', 'JDatabaseDriverSqlazure', '', 1, '2024-05-18 17:08:03', '0000-00-00 00:00:00', 1, '', 1, 407), -(431, '', '325ac31d-c4bc-4f83-88e0-0cd4cd233f7f', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Sqlite\\\\SqliteDriver\",\"joomla_version\":\"0\"}}', 'JDatabaseDriverSqlite', '', 1, '2024-05-18 17:08:48', '0000-00-00 00:00:00', 1, '', 1, 408), -(432, '', '76965fed-18ce-41da-b89c-43bd5fd40f92', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Sqlsrv\\\\SqlsrvDriver\",\"joomla_version\":\"0\"}}', 'JDatabaseDriverSqlsrv', '', 1, '2024-05-18 17:09:23', '0000-00-00 00:00:00', 1, '', 1, 409), -(433, '', '4ea4e196-9c69-4eb1-ae7e-d09d8b1a9bed', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Exception\\\\ConnectionFailureException\",\"joomla_version\":\"0\"}}', 'JDatabaseExceptionConnecting', '', 1, '2024-05-18 17:10:18', '0000-00-00 00:00:00', 1, '', 1, 410), -(434, '', '54c9fc90-5f76-42fa-bf63-d3bfa56c3ad0', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Exception\\\\ExecutionFailureException\",\"joomla_version\":\"0\"}}', 'JDatabaseExceptionExecuting', '', 1, '2024-05-18 17:11:04', '0000-00-00 00:00:00', 1, '', 1, 411), -(435, '', '62f11ab3-7903-4e1d-b899-cf6df3b32467', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Exception\\\\UnsupportedAdapterException\",\"joomla_version\":\"0\"}}', 'JDatabaseExceptionUnsupported', '', 1, '2024-05-18 17:11:40', '0000-00-00 00:00:00', 1, '', 1, 412), -(436, '', 'a5bade51-4131-40db-9dbe-0fd81ff8c627', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Mysqli\\\\MysqliExporter\",\"joomla_version\":\"0\"}}', 'JDatabaseExporterMysqli', '', 1, '2024-05-18 17:12:18', '0000-00-00 00:00:00', 1, '', 1, 413), -(437, '', '30864f36-704e-4d28-a1b5-49d24b2ffe5e', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Mysql\\\\MysqlExporter\",\"joomla_version\":\"0\"}}', 'JDatabaseExporterPdomysql', '', 1, '2024-05-18 17:12:55', '0000-00-00 00:00:00', 1, '', 1, 414), -(438, '', '3ae5f3d6-5916-4319-983f-193654d9a821', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Pgsql\\\\PgsqlExporter\",\"joomla_version\":\"0\"}}', 'JDatabaseExporterPgsql', '', 1, '2024-05-18 17:13:37', '0000-00-00 00:00:00', 1, '', 1, 415), -(439, '', 'cc6e5cc3-19c8-4cab-b10b-9825aa142ead', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Mysqli\\\\MysqliImporter\",\"joomla_version\":\"0\"}}', 'JDatabaseImporterMysqli', '', 1, '2024-05-18 17:14:33', '0000-00-00 00:00:00', 1, '', 1, 416), -(440, '', '4481898b-7cdc-496a-b717-a245d494de64', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Mysql\\\\MysqlImporter\",\"joomla_version\":\"0\"}}', 'JDatabaseImporterPdomysql', '', 1, '2024-05-18 17:15:12', '0000-00-00 00:00:00', 1, '', 1, 417), -(441, '', '84f05d10-31ed-44ce-bffe-04d7c12c350a', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Pgsql\\\\PgsqlImporter\",\"joomla_version\":\"0\"}}', 'JDatabaseImporterPgsql', '', 1, '2024-05-18 17:16:07', '0000-00-00 00:00:00', 1, '', 1, 418), -(442, '', 'e5a0df6b-c0a7-485e-acee-091d8c610fc1', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Query\\\\QueryElement\",\"joomla_version\":\"0\"}}', 'JDatabaseQueryElement', '', 1, '2024-05-18 17:17:04', '0000-00-00 00:00:00', 1, '', 1, 419), -(443, '', 'e23ccf34-2cf2-4ae7-8a73-adb2fc1d2493', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Query\\\\LimitableInterface\",\"joomla_version\":\"0\"}}', 'JDatabaseQueryLimitable', '', 1, '2024-05-18 17:18:06', '0000-00-00 00:00:00', 1, '', 1, 420), -(444, '', 'f46f02b4-e39e-40c3-ba1a-c590f52ea467', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Query\\\\PreparableInterface\",\"joomla_version\":\"0\"}}', 'JDatabaseQueryPreparable', '', 1, '2024-05-18 17:18:54', '0000-00-00 00:00:00', 1, '', 1, 421), -(445, '', 'ecacda91-6902-4c19-9cbd-101f8faacc1c', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Mysqli\\\\MysqliQuery\",\"joomla_version\":\"0\"}}', 'JDatabaseQueryMysqli', '', 1, '2024-05-18 17:19:30', '0000-00-00 00:00:00', 1, '', 1, 422), -(446, '', '943e39bf-87a2-45fa-9fc6-07d784212358', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Pdo\\\\PdoQuery\",\"joomla_version\":\"0\"}}', 'JDatabaseQueryPdo', '', 1, '2024-05-18 17:20:46', '0000-00-00 00:00:00', 1, '', 1, 423), -(447, '', '52cd1c83-a2ec-47c6-9c3c-7d316165addc', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Mysql\\\\MysqlQuery\",\"joomla_version\":\"0\"}}', 'JDatabaseQueryPdomysql', '', 1, '2024-05-18 17:21:15', '0000-00-00 00:00:00', 1, '', 1, 424), -(448, '', 'ec48cc53-4a90-47a4-bb8f-6b496cfacf43', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Pgsql\\\\PgsqlQuery\",\"joomla_version\":\"0\"}}', 'JDatabaseQueryPgsql', '', 1, '2024-05-18 17:22:09', '0000-00-00 00:00:00', 1, '', 1, 425), -(449, '', '7d4657c9-5896-410f-9c13-7348588018e8', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Sqlazure\\\\SqlazureQuery\",\"joomla_version\":\"0\"}}', 'JDatabaseQuerySqlazure', '', 1, '2024-05-18 17:23:02', '0000-00-00 00:00:00', 1, '', 1, 426), -(450, '', '3e3c8caa-822e-4f9f-b395-a14a3f6f31e4', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Sqlite\\\\SqliteQuery\",\"joomla_version\":\"0\"}}', 'JDatabaseQuerySqlite', '', 1, '2024-05-18 17:23:55', '0000-00-00 00:00:00', 1, '', 1, 427), -(451, '', '5e22cd09-33e9-43d7-8cfa-3225822296a1', '{\"settings0\":{\"namespace\":\"Joomla\\\\Database\\\\Sqlsrv\\\\SqlsrvQuery\",\"joomla_version\":\"0\"}}', 'JDatabaseQuerySqlsrv', '', 1, '2024-05-18 17:24:47', '0000-00-00 00:00:00', 1, '', 1, 428), -(452, '', '0e589f1c-7288-4c5e-ada0-3b8593875de0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Autoload\\\\ClassLoader\",\"joomla_version\":\"0\"}}', 'JClassLoader', '', 1, '2024-05-18 18:40:34', '0000-00-00 00:00:00', 1, '', 1, 429), -(453, '', '28dee7b7-346d-4aec-8585-62752f502f1a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Form\\\\Filter\\\\IntarrayFilter\",\"joomla_version\":\"0\"}}', 'JFormFilterInt_Array', '', 1, '2024-05-18 18:41:13', '0000-00-00 00:00:00', 1, '', 1, 430), -(454, '', 'b649640e-d8d7-45be-bde9-3593b7a99a56', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Access\",\"joomla_version\":\"0\"}}', 'JHtmlAccess', '', 1, '2024-05-18 18:43:19', '0000-00-00 00:00:00', 1, '', 1, 431), -(455, '', '290f32aa-71d4-4ebc-9be5-5f8e305bc7e5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\ActionsDropdown\",\"joomla_version\":\"0\"}}', 'JHtmlActionsDropdown', '', 1, '2024-05-18 18:44:01', '0000-00-00 00:00:00', 1, '', 1, 432), -(456, '', '2f610b1b-799e-4318-8e05-efaa3aa3de0b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\AdminLanguage\",\"joomla_version\":\"0\"}}', 'JHtmlAdminLanguage', '', 1, '2024-05-18 18:44:39', '0000-00-00 00:00:00', 1, '', 1, 433), -(457, '', '172b70b8-8b24-4f07-8b1c-d7e7eb4618f0', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Behavior\",\"joomla_version\":\"0\"}}', 'JHtmlBehavior', '', 1, '2024-05-18 18:45:22', '0000-00-00 00:00:00', 1, '', 1, 434), -(458, '', '524a8f19-1be0-44f7-8d8e-024f13919151', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Bootstrap\",\"joomla_version\":\"0\"}}', 'JHtmlBootstrap', '', 1, '2024-05-18 18:45:55', '0000-00-00 00:00:00', 1, '', 1, 435), -(459, '', 'd1a074b7-ab65-46a1-8e55-f2cf8da4b8a2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Category\",\"joomla_version\":\"0\"}}', 'JHtmlCategory', '', 1, '2024-05-18 18:46:28', '0000-00-00 00:00:00', 1, '', 1, 436), -(460, '', 'aa3544be-235f-43e5-850c-7bad5862b741', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Content\",\"joomla_version\":\"0\"}}', 'JHtmlContent', '', 1, '2024-05-18 18:47:13', '0000-00-00 00:00:00', 1, '', 1, 437), -(461, '', '305d5b6f-6ebf-40f1-b9f5-b44aa27c3925', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\ContentLanguage\",\"joomla_version\":\"0\"}}', 'JHtmlContentlanguage', '', 1, '2024-05-18 18:48:09', '0000-00-00 00:00:00', 1, '', 1, 438), -(462, '', 'b1c4364a-7cf7-420b-b200-2997b0bfb2eb', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Date\",\"joomla_version\":\"0\"}}', 'JHtmlDate', '', 1, '2024-05-18 18:49:19', '0000-00-00 00:00:00', 1, '', 1, 439), -(463, '', '966aae72-5e2e-4844-a34b-af7ad670208e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Debug\",\"joomla_version\":\"0\"}}', 'JHtmlDebug', '', 1, '2024-05-18 18:50:08', '0000-00-00 00:00:00', 1, '', 1, 440), -(464, '', 'c603424a-da38-4e7c-92fa-3e8ee35792c1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\DraggableList\",\"joomla_version\":\"0\"}}', 'JHtmlDraggablelist', '', 1, '2024-05-18 18:51:58', '0000-00-00 00:00:00', 1, '', 1, 441), -(465, '', '6e5a6bbf-3ae1-4264-b3a6-db6c0b20c048', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Dropdown\",\"joomla_version\":\"0\"}}', 'JHtmlDropdown', '', 1, '2024-05-18 18:52:48', '0000-00-00 00:00:00', 1, '', 1, 442), -(466, '', '679a9d06-c5ff-4fd0-824c-9e26c3cb890f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Email\",\"joomla_version\":\"0\"}}', 'JHtmlEmail', '', 1, '2024-05-18 18:53:57', '0000-00-00 00:00:00', 1, '', 1, 443), -(467, '', 'f07f4d81-4528-4221-ae1d-c28089ad38b5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Form\",\"joomla_version\":\"0\"}}', 'JHtmlForm', '', 1, '2024-05-18 18:54:47', '0000-00-00 00:00:00', 1, '', 1, 444), -(468, '', '46d11f95-d0cb-48a0-bf44-eb5985f81395', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\FormBehavior\",\"joomla_version\":\"0\"}}', 'JHtmlFormbehavior', '', 1, '2024-05-18 18:55:28', '0000-00-00 00:00:00', 1, '', 1, 445), -(469, '', 'ff31ae41-8106-4863-97b0-bb4bf6e3ebf4', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Grid\",\"joomla_version\":\"0\"}}', 'JHtmlGrid', '', 1, '2024-05-18 18:56:17', '0000-00-00 00:00:00', 1, '', 1, 446), -(470, '', '7ef9f6f2-59e0-463d-bd3a-f31e2ee85451', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Icons\",\"joomla_version\":\"0\"}}', 'JHtmlIcons', '', 1, '2024-05-18 18:57:39', '0000-00-00 00:00:00', 1, '', 1, 447), -(471, '', '8c1ad286-fdbe-49b3-b4de-555b56425cb3', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\JGrid\",\"joomla_version\":\"0\"}}', 'JHtmlJGrid', '', 1, '2024-05-18 18:59:04', '0000-00-00 00:00:00', 1, '', 1, 448), -(472, '', '8ed6b791-f434-4407-9d55-498b7ec1ddbf', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Jquery\",\"joomla_version\":\"0\"}}', 'JHtmlJquery', '', 1, '2024-05-18 19:06:38', '0000-00-00 00:00:00', 1, '', 1, 449), -(473, '', '3474f0cb-43dc-4e0f-b05d-7ff934d443c7', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Links\",\"joomla_version\":\"0\"}}', 'JHtmlLinks', '', 1, '2024-05-18 19:07:17', '0000-00-00 00:00:00', 1, '', 1, 450), -(474, '', '87db9ce7-c772-407f-b154-f2b9a649fdc4', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\ListHelper\",\"joomla_version\":\"0\"}}', 'JHtmlList', '', 1, '2024-05-18 19:08:10', '0000-00-00 00:00:00', 1, '', 1, 451), -(475, '', '1f53a674-7173-472a-9fde-679b68266a3f', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Menu\",\"joomla_version\":\"0\"}}', 'JHtmlMenu', '', 1, '2024-05-18 19:09:09', '0000-00-00 00:00:00', 1, '', 1, 452), -(476, '', '4cd834ca-7b73-4105-9058-28fd15a1605e', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Number\",\"joomla_version\":\"0\"}}', 'JHtmlNumber', '', 1, '2024-05-18 19:10:23', '0000-00-00 00:00:00', 1, '', 1, 453), -(477, '', '4081570d-1a8a-4c56-9454-347e060bc630', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\SearchTools\",\"joomla_version\":\"0\"}}', 'JHtmlSearchtools', '', 1, '2024-05-18 19:11:01', '0000-00-00 00:00:00', 1, '', 1, 454), -(478, '', '8097574b-722e-4b8c-b5b2-7bf8dff6535c', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Select\",\"joomla_version\":\"0\"}}', 'JHtmlSelect', '', 1, '2024-05-18 19:11:53', '0000-00-00 00:00:00', 1, '', 1, 455), -(479, '', 'ca5456e1-552c-45fb-bf4c-b751ba6e9fa1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Sidebar\",\"joomla_version\":\"0\"}}', 'JHtmlSidebar', '', 1, '2024-05-18 19:12:27', '0000-00-00 00:00:00', 1, '', 1, 456), -(480, '', '9d461911-59c1-4b2a-9abb-5bc83d268974', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\SortableList\",\"joomla_version\":\"0\"}}', 'JHtmlSortableList', '', 1, '2024-05-18 19:13:01', '0000-00-00 00:00:00', 1, '', 1, 457), -(481, '', '86a9e60d-ae43-4e29-8f33-78b9206e2145', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\StringHelper\",\"joomla_version\":\"0\"}}', 'JHtmlString', '', 1, '2024-05-18 19:13:31', '0000-00-00 00:00:00', 1, '', 1, 458), -(482, '', 'e10e9448-0b0c-4101-80c2-abe8f41c6a81', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Tag\",\"joomla_version\":\"0\"}}', 'JHtmlTag', '', 1, '2024-05-18 19:14:20', '0000-00-00 00:00:00', 1, '', 1, 459), -(483, '', '80303734-98f9-4436-8e57-e73542abf4c1', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\Telephone\",\"joomla_version\":\"0\"}}', 'JHtmlTel', '', 1, '2024-05-18 19:15:17', '0000-00-00 00:00:00', 1, '', 1, 460), -(484, '', '40a7483f-87c9-4272-ac72-236b0f773b02', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\Helpers\\\\User\",\"joomla_version\":\"0\"}}', 'JHtmlUser', '', 1, '2024-05-18 19:15:52', '0000-00-00 00:00:00', 1, '', 1, 461); +(25, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'For easy update of [[[Component]]]', '{}', '5565c7ce-bbbc-48c6-992a-9842046d28db', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuDQoJICoNCgkgKiBGb3IgbW9kaWZpY2F0aW9uIG9mIFVSTCBhbmQgaGVhZGVycyBiZWZvcmUgcGFja2FnZSBkb3dubG9hZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkKCYkdXJsLCAmJGhlYWRlcnMpDQoJew0KCQkvLyBzZXQgdGhlIFVSSSBvYmplY3QNCgkJJHVyaSA9IEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgkdXJsKTsNCgkJJHBhcnRzID0gZXhwbG9kZSgnLycsICR1cmktPmdldFBhdGgoKSk7DQoNCgkJLy8gY2hlY2sgdGhhdCB0aGlzIGlzIG91ciBBUEkNCgkJaWYgKCR1cmktPmdldEhvc3QoKSA9PSAnW1tbZ2l0ZWFfdXJsXV1dJyAmJiBpbl9hcnJheSgnW1tbZ2l0ZWFfcGFja2FnZV9uYW1lXV1dJywgJHBhcnRzKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSB0b2tlbiBpZiBzZXQgKHdlIGFkZGVkIHRoZSBkZWZhdWx0IHB1YmxpYyB0b2tlbikNCgkJCSR0b2tlbiA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdnaXRlYV90b2tlbicsICcxZjRkMGY0ZTRjNjNkNDcwYzJiYjRjMzM3YjdlNzNlYjU4ZWNiOTcyJyk7DQoJCQkvLyBvbmx5IGFkZCBpZiB0b2tlbiBpcyBzZXQNCgkJCWlmICgkdG9rZW4pDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSB0b2tlbg0KCQkJCSR1cmktPnNldFZhcignYWNjZXNzX3Rva2VuJywgJHRva2VuKTsNCgkJCQkvLyB1cGRhdGUgdGhlIFVSTA0KCQkJCSR1cmwgPSAkdXJpLT50b1N0cmluZygpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgcmV0dXJuIFVSTA0KCQkJCSRyZXR1cm4gPSB1cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgoc3RyaW5nKSBKb29tbGFfX19lZWNjMTQzZV9iNWNmXzRjMzNfYmE0ZF85N2RhMWRmNjE0MjJfX19Qb3dlcjo6Z2V0SW5zdGFuY2UoKSkpOw0KCQkJCS8vIHNldCB0aGUgdXJscw0KCQkJCSRnZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciaHR0cHM6Ly9bW1tnaXRlYV91cmxdXV0vdXNlci9zZXR0aW5ncy9hcHBsaWNhdGlvbnMiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iJyAuIFRleHQ6Ol8oJ0dldCBBY2Nlc3MgVG9rZW4nKSAuICciJzsNCgkJCQkkc2V0X2FjY2Vzc190b2tlbl91cmwgPSAnIicgLiBKb29tbGFfX19lZWNjMTQzZV9iNWNmXzRjMzNfYmE0ZF85N2RhMWRmNjE0MjJfX19Qb3dlcjo6cm9vdCgpIC4gJ2FkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fY29uZmlnJnZpZXc9Y29tcG9uZW50JmNvbXBvbmVudD1jb21fW1tbY29tcG9uZW50XV1dJnBhdGg9JnJldHVybj0nIC4gJHJldHVybiAuICciIHRpdGxlPSInIC4gVGV4dDo6XygnU2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCS8vIGxvYWQgdGhlIG1lc3NhZ2UNCgkJCQkkdGhpcy0+YXBwLT5lbnF1ZXVlTWVzc2FnZSgNCgkJCQkJVGV4dDo6c3ByaW50ZigiSWYgdGhlcmUgd2FzIGEgZG93bmxvYWQvdXBkYXRlIGVycm9yLCBpdCdzIHByb2JhYmx5IGJlY2F1c2UgdGhlIDxhIGhyZWY9JXMgPkFQSSBBY2Nlc3MgVG9rZW48L2E+IGZvciB1cGRhdGVzIG9mIFtbW2NvbXBvbmVudF1dXSBoYXMgbm90IGJlZW4gc2V0LCB5b3UgY2FuIHNldCB0aGlzIGFjY2VzcyB0b2tlbiBpbiB0aGUgPGEgaHJlZj0lcyA+Z2xvYmFsIG9wdGlvbnMgdGFiPC9hPi4iLA0KCQkJCQkJJGdldF9hY2Nlc3NfdG9rZW5fdXJsLA0KCQkJCQkJJHNldF9hY2Nlc3NfdG9rZW5fdXJsDQoJCQkJCSksICdub3RpY2UnKTsNCgkJCX0NCgkJfQ0KCX0NCg==', 'componentbuilder_public', '', '', '', 'Ly8=', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"39\"},\"property_selection1\":{\"property\":\"37\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev - public)', '', 1, '', '', 1, '2021-12-20 16:18:59', '2024-03-01 21:17:07', 5, '', 9), +(26, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'This plugin is used to set dynamic gets class headers.', '{\"fields0\":{\"file\":\"dynamic_get\",\"fields_name\":\"params.dynamic_get_headers\",\"fieldset\":\"dynamic_get_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2855\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2859\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2963\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2981\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2980\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2962\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2890\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2887\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2993\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2854\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2860\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2961\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2856\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2858\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2960\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2982\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2979\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2959\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2889\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2888\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2994\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2853\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2857\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2958\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"2866\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"2862\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"2971\",\"custom_value\":\"\"},\"fields27\":{\"field\":\"2990\",\"custom_value\":\"\"},\"fields28\":{\"field\":\"2991\",\"custom_value\":\"\"},\"fields29\":{\"field\":\"2957\",\"custom_value\":\"\"},\"fields30\":{\"field\":\"2893\",\"custom_value\":\"\"},\"fields31\":{\"field\":\"2892\",\"custom_value\":\"\"},\"fields32\":{\"field\":\"2998\",\"custom_value\":\"\"},\"fields33\":{\"field\":\"2867\",\"custom_value\":\"\"},\"fields34\":{\"field\":\"2861\",\"custom_value\":\"\"},\"fields35\":{\"field\":\"2956\",\"custom_value\":\"\"},\"fields36\":{\"field\":\"2865\",\"custom_value\":\"\"},\"fields37\":{\"field\":\"2863\",\"custom_value\":\"\"},\"fields38\":{\"field\":\"2955\",\"custom_value\":\"\"},\"fields39\":{\"field\":\"2989\",\"custom_value\":\"\"},\"fields40\":{\"field\":\"2992\",\"custom_value\":\"\"},\"fields41\":{\"field\":\"2954\",\"custom_value\":\"\"},\"fields42\":{\"field\":\"2894\",\"custom_value\":\"\"},\"fields43\":{\"field\":\"2891\",\"custom_value\":\"\"},\"fields44\":{\"field\":\"2997\",\"custom_value\":\"\"},\"fields45\":{\"field\":\"2868\",\"custom_value\":\"\"},\"fields46\":{\"field\":\"2864\",\"custom_value\":\"\"},\"fields47\":{\"field\":\"2953\",\"custom_value\":\"\"},\"fields48\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields49\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields50\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'd44a5259-8dc9-4214-aa1d-e436ccc1f50c', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsgDQo=', 3, '{}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnMrZHluYW1pY19nZXRd', '[[[Component]]] Dynamic Get Headers Tabs', '', '', '', 'W0NVU1RPTUNPREU9akNCUHJvUmVxdWlyZWQrMywwLDE0XQ==', '', '', '', '2.0.2', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Dynamic Get Headers Tabs', '', 1, '', '', 1, '2022-01-10 03:11:11', '2024-03-10 12:09:40', 23, '', 2), +(27, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 'This plugin is used to load scripture on your website. So it adds https://cdn.jsdelivr.net/gh/getbible/loader@3.1.0/dist/js/getBible.min.js to the header of your website. See: https://getbible.net/loader for more details.', '{}', '3d7c1a27-54ca-418d-a77a-6590147cf901', 'dXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXEh0bWxcSFRNTEhlbHBlcjsNCg==', 8, '{\"method_selection0\":{\"method\":\"122\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBoZWFkIGlzIGNvbXBpbGVkIGFuZCBhbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBoZWFkIGRhdGEuDQoJICogSW4gdGhpcyBjYXNlLCBpdCdzIHVzZWQgdG8gYWRkIGEgSmF2YVNjcmlwdCBmaWxlIHRvIHRoZSBmcm9udCBlbmQgb2YgdGhlIEpvb21sYSBzaXRlLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMy4wLjANCgkgKiBAdGhyb3dzICBFeGNlcHRpb24gb24gZXJyb3IuDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQmVmb3JlQ29tcGlsZUhlYWQoKQ0KCXsNCgkJLy8gQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBzaXRlIGFwcGxpY2F0aW9uDQoJCWlmICgkdGhpcy0+YXBwLT5pc0NsaWVudCgnc2l0ZScpKSB7DQoJCQlIVE1MSGVscGVyOjpfKCdzY3JpcHQnLCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL2dldGJpYmxlL2xvYWRlckAzLjEuMC9kaXN0L2pzL2dldEJpYmxlLm1pbi5qcycsIFsndmVyc2lvbicgPT4gJ2F1dG8nXSk7DQoJCX0NCgl9', 'GetBibleLoader', '', '', '', 'CQkJJGp2ZXJzaW9uID0gbmV3IEpWZXJzaW9uKCk7DQoJCQlpZiAoISRqdmVyc2lvbi0+aXNDb21wYXRpYmxlKCczLjEwLjAnKSkgew0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgdXBncmFkZSB0byBhdCBsZWFzdCBKb29tbGEhIDMuMTAgYmVmb3JlIGNvbnRpbnVpbmchJywgJ2Vycm9yJyk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0K', '', '', '', '3.1.0', '{\"property_selection0\":{\"property\":\"25\"}}', 'IyBnZXRCaWJsZSBMb2FkZXIgKFtbW3BsdWdpbi52ZXJzaW9uXV1dKQ0KDQojIyMgVGhlIEpvb21sYSBwbHVnaW4gZnJvbSBbZ2V0QmlibGUubmV0XShodHRwczovL2dldGJpYmxlLm5ldC9qb29tbGEpIHRvIGxvYWQgb2YgdGhlIFNjcmlwdHVyZXMgaW4geW91ciB3ZWJzaXRlIGNvbnRlbnQuDQoNCkFkaW5nIHRoZSBbZ2V0QmlibGUgTG9hZGVyIFNjcmlwdF0oaHR0cHM6Ly9naXQudmRtLmRldi9nZXRCaWJsZS9sb2FkZXIpIHRoZSB0aGUgaGVhZGVyIG9mIHlvdXIgd2Vic2l0ZSwgd2UgYXJlIGFkZGluZyB0aGUgYWJpbGl0eSB0byB5b3VyIEpvb21sYSB3ZWJzaXRlIHRvIGFkZCBTY3JpcHR1cmVzIHRvIHlvdXIgY29udGVudCB2ZXJ5IGVhc2lseS4NCg0KIyMgSG93Pw0KDQotIERvd25sb2FkIHRoZSBwbHVnaW4gW2hlcmVdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvbG9hZGVyLXBsdWdpbi9hcmNoaXZlL21hc3Rlci56aXApLg0KLSBJbnN0YWxsIHRoZSBwbHVnaW4gb24geW91ciBKb29tbGEgMy80LzUgd2Vic2l0ZS4NCi0gQWRkIGEgY2xhc3MgYGdldEJpYmxlYCB0byBhbnkgZWxlbWVudCAoaW4geW91ciBjb250ZW50KSB0aGF0IGNvbnRhaW5zIGEgU2NyaXB0dXJlIHJlZmVyZW5jZXMgbGlrZSB0aGlzOg0KDQogICBgYGBodG1sDQogICA8dWw+DQogICAgIDxsaSBjbGFzcz0iZ2V0QmlibGUiPkpvaG4gMzoxNjwvbGk+DQogICAgIDxsaSBjbGFzcz0iZ2V0QmlibGUiPjEgSm9obiAzOjE2LTE5LDIyPC9saT4NCiAgICAgPCEtLSBBZGQgbW9yZSBlbGVtZW50cyBhcyBuZWVkZWQgLS0+DQogICA8L3VsPg0KICAgYGBgDQotIEZvbGxvdyB0aGVzZSBbcmVmZXJlbmNlIG5hbWluZ10oaHR0cHM6Ly9naXQudmRtLmRldi9nZXRCaWJsZS9sb2FkZXIjc2NyaXB0dXJlLXJlZmVyZW5jZS1mb3JtYXR0aW5nKSBjb252ZW50aW9ucy4NCi0gVGhlcmUgaXMgYWxzbyBbY3VzdG9taXphdGlvbiBvcHRpb25dKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvbG9hZGVyI3V0aWxpemluZy1kYXRhLWF0dHJpYnV0ZXMpIGF2YWlsYWJsZS4NCi0gRm9yIG1vcmUgZGV0YWlscyBnb3QgdG8gdGhlIFtCaWJsZWtpdCBkb2N1bWVudGF0aW9uXShodHRwczovL2dldGJpYmxlLm5ldC9sb2FkZXIpIHBhZ2UuDQoNCj4gU3VwcG9ydCBjYW4gYmUgZm91bmQgYXQgb3VyIFtjb21tdW5pdHkgc3VwcG9ydCBhcmVhXShodHRwczovL2dpdC52ZG0uZGV2L2dldEJpYmxlL3N1cHBvcnQpLg0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbZ2V0QmlibGUgTG9hZGVyXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiBbW1twbHVnaW4udmVyc2lvbl1dXQ0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQo+IFRoaXMgKipwbHVnaW4qKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ==', '', '', '', 'GetBible Loader', '', 1, '', '', 1, '2023-07-26 05:24:37', '2024-03-19 21:44:59', 39, '', 2), +(28, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 'This plugin is used to load PreUpVer on your website. So it adds https://cdn.jsdelivr.net/gh/Llewellynvdm/PreUpVer@1.0.0/dist/js/preupver.min.js to the header of your website. See: https://git.vdm.dev/Llewellyn/PreUpVer for more details.', '{}', 'dd6580c4-6bbb-4d13-a868-0b38fbb6a66e', 'dXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXEh0bWxcSFRNTEhlbHBlcjsNCg==', 8, '{\"method_selection0\":{\"method\":\"122\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBoZWFkIGlzIGNvbXBpbGVkIGFuZCBhbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBoZWFkIGRhdGEuDQoJICogSW4gdGhpcyBjYXNlLCBpdCdzIHVzZWQgdG8gYWRkIGEgSmF2YVNjcmlwdCBmaWxlIHRvIHRoZSBmcm9udCBlbmQgb2YgdGhlIEpvb21sYSBzaXRlLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMy4wLjANCgkgKiBAdGhyb3dzICBFeGNlcHRpb24gb24gZXJyb3IuDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQmVmb3JlQ29tcGlsZUhlYWQoKQ0KCXsNCgkJLy8gQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBzaXRlIGFwcGxpY2F0aW9uDQoJCWlmICgkdGhpcy0+YXBwLT5pc0NsaWVudCgnc2l0ZScpKSB7DQoJCQlIVE1MSGVscGVyOjpfKCdzY3JpcHQnLCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0xsZXdlbGx5bnZkbS9QcmVVcFZlckAxLjAuMC9kaXN0L2pzL3ByZXVwdmVyLm1pbi5qcycsIFsndmVyc2lvbicgPT4gJ2F1dG8nXSk7DQoJCX0NCgl9', 'PreUpVerLoader', '', '', '', 'CQkJJGp2ZXJzaW9uID0gbmV3IEpWZXJzaW9uKCk7DQoJCQlpZiAoISRqdmVyc2lvbi0+aXNDb21wYXRpYmxlKCczLjEwLjAnKSkgew0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgdXBncmFkZSB0byBhdCBsZWFzdCBKb29tbGEhIDMuMTAgYmVmb3JlIGNvbnRpbnVpbmchJywgJ2Vycm9yJyk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0K', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"25\"}}', 'IyBQcmVVcFZlciBMb2FkZXIgKFtbW3BsdWdpbi52ZXJzaW9uXV1dKQ0KDQojIyBJbnRyb2R1Y3Rpb24NCg0KUHJlVXBWZXIgaXMgYSB2ZXJzYXRpbGUgSmF2YVNjcmlwdCBsaWJyYXJ5IGRlc2lnbmVkIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlcnMgb2YgbGlicmFyeSBzY3JpcHRzIGluIHlvdXIgZG9jdW1lbnRhdGlvbi4gSXQgaWRlbnRpZmllcyBzcGVjaWZpYyBgPHByZT5gIHRhZ3Mgb24geW91ciB3ZWJwYWdlIGFuZCB1cGRhdGVzIHRoZW0gd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gdGFnIGZldGNoZWQgZnJvbSBhIHNwZWNpZmllZCByZXBvc2l0b3J5LCBlbnN1cmluZyB5b3VyIGRvY3VtZW50YXRpb24gYWx3YXlzIGRpc3BsYXlzIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uDQoNCiMjIEhvdyBJdCBXb3Jrcw0KDQpQcmVVcFZlciBvcGVyYXRlcyBieSBzZWFyY2hpbmcgZm9yIGA8cHJlPmAgdGFncyB3aXRoIGEgZGVzaWduYXRlZCBjbGFzcyAoYHByZXVwdmVyYCkgYW5kIHVzaW5nIHRoZWlyIGRhdGEgYXR0cmlidXRlcyB0byBwZXJmb3JtIHZlcnNpb24gdXBkYXRlcy4gSXQgc2ltcGxpZmllcyB0aGUgcHJvY2VzcyBvZiBrZWVwaW5nIHlvdXIgbGlicmFyeSByZWZlcmVuY2VzIHVwLXRvLWRhdGUgaW4gZG9jdW1lbnRhdGlvbi4NCg0KIyMjIEF1dG9tYXRpYyBEZXRlY3Rpb24gYW5kIFVwZGF0aW5nDQoNCldoZW4gdGhlIHdlYnBhZ2UgbG9hZHMsIFByZVVwVmVyIGZpbmRzIGFsbCBgPHByZT5gIHRhZ3MgbWFya2VkIHdpdGggdGhlIGBwcmV1cHZlcmAgY2xhc3MuIEl0IHRoZW4gZXh0cmFjdHMgbmVjZXNzYXJ5IGRldGFpbHMgZnJvbSB0aGVpciBkYXRhIGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZXMgZWFjaCB0YWcgd2l0aCB0aGUgbGF0ZXN0IGxpYnJhcnkgdmVyc2lvbi4NCg0KIyMjIFVzYWdlDQoNCjEuICoqTWFya2luZyBgPHByZT5gIFRhZ3M6KioNCg0KICAgQWRkIHRoZSBgY2xhc3M9InByZXVwdmVyImAgdG8gYDxwcmU+YCB0YWdzIGluIHlvdXIgSFRNTCBhbmQgZGVmaW5lIHRoZSByZXF1aXJlZCBkYXRhIGF0dHJpYnV0ZXMgZm9yIGF1dG9tYXRpYyB1cGRhdGluZzoNCg0KICAgYGBgaHRtbA0KICAgPHByZSBpZD0idW5pcXVlLWlkIiBjbGFzcz0icHJldXB2ZXIiDQogICAgICAgIGRhdGEtYXBpLXVybD0iaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy91c2VybmFtZS9saWJyYXJ5L3RhZ3MiDQogICAgICAgIGRhdGEtZGVzY3JpcHRpb249IkRlc2NyaXB0aW9uIG9mIHRoZSBsaWJyYXJ5IHNjcmlwdCINCiAgICAgICAgZGF0YS11cmw9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC91c2VybmFtZS9saWJyYXJ5QCR7dmVyc2lvbn0vZGlzdC9saWJyYXJ5Lm1pbi5qcyI+DQogICA8L3ByZT4NCiAgIGBgYA0KDQogICBSZXBsYWNlIGB1bmlxdWUtaWRgLCBgdXNlcm5hbWVgLCBgbGlicmFyeWAsIGFuZCBvdGhlciBwbGFjZWhvbGRlcnMgd2l0aCB5b3VyIHNwZWNpZmljIGRldGFpbHMuDQoNCjIuICoqQXR0cmlidXRlcyBFeHBsYWluZWQ6KioNCg0KICAgLSBgaWRgOiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYDxwcmU+YCB0YWcuDQogICAtIGBkYXRhLWFwaS11cmxgOiBUaGUgQVBJIFVSTCB0byBmZXRjaCB0aGUgbGF0ZXN0IGxpYnJhcnkgdmVyc2lvbi4NCiAgIC0gYGRhdGEtZGVzY3JpcHRpb25gOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBsaWJyYXJ5IHNjcmlwdC4NCiAgIC0gYGRhdGEtdXJsYDogVGhlIFVSTCBvZiB0aGUgc2NyaXB0LCB3aGVyZSBgJHt2ZXJzaW9ufWAgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBudW1iZXIuDQoNCiMjIyBFeGFtcGxlDQoNCkNoZWNrIG91dCB0aGUgW3Rlc3RzXShodHRwczovL2dpdC52ZG0uZGV2L0xsZXdlbGx5bi9QcmVVcFZlci9zcmMvYnJhbmNoL21hc3Rlci90ZXN0cy8pIGZvbGRlciBmb3IgdGhlIGV4YW1wbGVzIHdlIHVzZSB0byB0ZXN0IGlmIHRoaXMgbGlicmFyeSB3b3JrcyBhcyBleHBlY3RlZC4NCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkF1dGhvcio6IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQorICpOYW1lKjogW1ByZVVwVmVyIExvYWRlcl0oaHR0cHM6Ly9naXQudmRtLmRldi9MbGV3ZWxseW4vUHJlVXBWZXIpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6IFtbW3BsdWdpbi52ZXJzaW9uXV1dDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCj4gVGhpcyAqKnBsdWdpbioqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', '', '', '', 'PreUpVer Loader', '', 1, '', '', 1, '2023-11-28 09:01:02', '2023-11-28 11:27:32', 5, '', 2), +(29, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set component dashboard class custom headers.', '{\"fields0\":{\"file\":\"component_dashboard\",\"fields_name\":\"params.component_dashboard_headers\",\"fieldset\":\"component_dashboard_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3010\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"3014\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3006\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"3011\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"3015\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"3007\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"3012\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"3016\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"3008\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"3013\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"3017\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"3009\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'e682b390-810c-4c47-b5b8-8ebd3621aecf', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7DQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStjb21wb25lbnRfZGFzaGJvYXJkXQ==', '[[[Component]]] Component Dashboard Headers Tabs', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Component Dashboard Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:01', '2024-03-10 21:38:43', 3, '', 2), +(30, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to build the power autoloader plugin for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Global Autoloader\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2977\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2680\",\"custom_value\":\"\"}}}}', 'c5be15b5-cf71-47ed-89fc-6ee2150084aa', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 11, '{\"method_selection0\":{\"method\":\"117\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBjb21wb25lbnQgbmVlZHMgYSBwb3dlciBhdXRvbG9hZGVyIHBsdWdpbiBsb2FkZWQNCgkJaWYgKFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5hZGRfcG93ZXIgJiYgJHRoaXMtPmNvbXBvbmVudEFjdGl2ZSgpKQ0KCQl7DQoJCQkvLyBub3cgZ2V0IHRoZSBwbHVnaW4gSUQgaWYgc2V0DQoJCQlpZiAoKCRpZCA9IChpbnQpICR0aGlzLT5wYXJhbXMtPmdldCgncGx1Z2luJywgMCkpICE9PSAwKQ0KCQkJew0KCQkJCS8vIGxvYWQgdGhlIHBvd2VyIGF1dG9sb2FkZXIgcGx1Z2luDQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnSm9vbWxhcGx1Z2luLkRhdGEnKS0+c2V0KCRpZCk7DQoJCQkJLy8gbm93IHNldCB0aGUgcGx1Z2luIHBvd2VycyBwbGFjZWhvbGRlcg0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+c2V0KCdQTFVHSU5fUE9XRVJfQVVUT0xPQURFUicsICcnKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpfKCdZb3UgZG8gbm90IGhhdmUgYSBnbG9iYWwgcG93ZXIgcGx1Z2luIHNldHVwLCBzbyB0aGUgcG93ZXJzIHBsdWdpbiBhdXRvbG9hZGVyIGNvdWxkIG5vdCBiZSBhZGRlZC4nKSwgJ1dhcm5pbmcnKTsNCgkJCX0NCgkJfQ0KCX0NCltDVVNUT01DT0RFPWNvbXBvbmVudEFjdGl2ZV0=', '[[[Component]]] Powers Autoloader Compiler', '', '', '', '', '', '', '', '2.0.1', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Powers Autoloader Compiler J5', '', 1, '', '', 1, '2024-03-10 15:54:15', '2024-05-26 20:14:27', 5, '', 3), +(31, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set component class custom headers.', '{\"fields0\":{\"file\":\"joomla_component\",\"fields_name\":\"params.joomla_component_headers\",\"fieldset\":\"joomla_component_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2871\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2872\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2974\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2873\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2874\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2975\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2878\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2877\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2973\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2875\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2876\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2972\",\"custom_value\":\"\"}}}}', '5a37b156-fec3-4b56-b748-69f4ecff5ca1', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStqb29tbGFfY29tcG9uZW50XQ==', '[[[Component]]] Component Headers Tabs', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Component Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:18', '2024-03-10 20:59:13', 6, '', 2), +(32, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set custom admin class custom headers.', '{\"fields0\":{\"file\":\"custom_admin_view\",\"fields_name\":\"params.custom_admin_view_headers\",\"fieldset\":\"custom_admin_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2866\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2862\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2971\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2990\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2991\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2957\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2893\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2892\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2998\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2867\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2861\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2956\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2865\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2863\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2955\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2989\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2992\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2954\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2894\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2891\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2997\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2868\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2864\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2953\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', '69c4c213-5ef7-4ebf-b51f-c723edb1643b', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7DQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStjdXN0b21fYWRtaW5fdmlld10=', '[[[Component]]] Custom Admin Headers Tabs', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Custom Admin Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:22', '2024-03-10 21:00:26', 4, '', 2), +(33, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set site class custom headers.', '{\"fields0\":{\"file\":\"site_view\",\"fields_name\":\"params.site_view_headers\",\"fieldset\":\"site_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2855\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2859\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2963\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2981\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2980\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2962\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2890\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2887\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2993\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2854\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2860\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2961\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2856\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2858\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2960\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2982\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2979\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2959\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2889\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2888\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2994\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2853\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2857\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2958\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', '1628a6a8-926c-4d91-a1da-cc9e096514fc', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7DQo=', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStzaXRlX3ZpZXdd', '[[[Component]]] Site Headers Tabs', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Site Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:32', '2024-03-10 21:01:36', 3, '', 2), +(34, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set admin class custom headers.', '{\"fields0\":{\"file\":\"admin_view\",\"fields_name\":\"params.admin_view_headers\",\"fieldset\":\"admin_view_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2849\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2846\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2969\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2983\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2985\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2968\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2886\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2884\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2995\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2850\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2845\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2967\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2844\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2847\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2966\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2984\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2986\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2965\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2885\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2883\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2996\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2851\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2848\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2964\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"2895\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"2896\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"2970\",\"custom_value\":\"\"},\"fields27\":{\"field\":\"2987\",\"custom_value\":\"\"},\"fields28\":{\"field\":\"2988\",\"custom_value\":\"\"},\"fields29\":{\"field\":\"2952\",\"custom_value\":\"\"},\"fields30\":{\"field\":\"2897\",\"custom_value\":\"\"},\"fields31\":{\"field\":\"2898\",\"custom_value\":\"\"},\"fields32\":{\"field\":\"2999\",\"custom_value\":\"\"},\"fields33\":{\"field\":\"3088\",\"custom_value\":\"\"},\"fields34\":{\"field\":\"3089\",\"custom_value\":\"\"},\"fields35\":{\"field\":\"3090\",\"custom_value\":\"\"},\"fields36\":{\"field\":\"3091\",\"custom_value\":\"\"},\"fields37\":{\"field\":\"3092\",\"custom_value\":\"\"},\"fields38\":{\"field\":\"3093\",\"custom_value\":\"\"},\"fields39\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields40\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields41\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', 'b14309ee-f0e0-4250-ac14-d8e2f635cbad', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZSthZG1pbl92aWV3XQ==', '[[[Component]]] Admin Headers Tabs', '', '', '', '', '', '', '', '3.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Admin Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:34', '2024-03-11 14:38:37', 3, '', 2), +(35, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set the custom headers for your classes during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to set your code where you would like to set Custom Headers.', '{}', '3584933e-d2a1-48a4-a92d-119ae8d32135', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCg==', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"},\"method_selection2\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEdsb2JhbCBzd2l0Y2ggdG8gc2VlIGlmIGEgZmlsZSBoYXMgY3VzdG9tIGhlYWRlcnMuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRsb2FkSGVhZGVycyA9IGZhbHNlOw0KDQoJLyoqDQoJICogVGhlIGFjdGl2ZSBoZWFkZXJzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuOA0KCSAqLw0KCXByb3RlY3RlZCAkYWN0aXZlSGVhZGVycyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIGNvbXBpbGVyIHBsYWNlaG9sZGVycyB2YWx1ZXMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC42DQoJICovDQoJcHJvdGVjdGVkICRwbGFjZWhvbGRlcnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogVGhlIHBvd2VycyB0byBpbmNsdWRlIGluIHByb2plY3QNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC42DQoJICovDQoJcHJvdGVjdGVkICRsaW5rZWRQb3dlcnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogVGhlIFRhcmdldHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC44DQoJICovDQoJcHJvdGVjdGVkICR0YXJnZXRzID0gYXJyYXkoDQoJCSdhZG1pbl92aWV3X2hlYWRlcnMnICAgICAgICAgID0+DQoJCQlhcnJheSgNCgkJCQknYWRkX2FkbWluX3ZpZXdfbW9kZWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXcubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfc2luZ2xlJw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3JyAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3JywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX3NpbmdsZScNCgkJCQkpLA0KCQkJCSdhZGRfYWRtaW5fdmlld19odG1sJyAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fdmlld19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfc2luZ2xlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX2FkbWluX3ZpZXdfaHRtbCcgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS5hZG1pbi52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfc2luZ2xlJw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3X2NvbnRyb2xsZXInICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ2FkbWluLnZpZXcuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9zaW5nbGUnDQoJCQkJKSwNCgkJCQknYWRkX2FqYXhfbW9kZWwnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FqYXhfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FqYXguYWRtaW4ubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2FqYXgnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX3ZpZXdzX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3cy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3cycgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3cycsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4udmlld3MnLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfbGlzdCcNCgkJCQkpLA0KCQkJCSdhZGRfYWRtaW5fdmlld3NfaHRtbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5fdmlld3NfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4udmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSksDQoJCQkJJ2FkZF9hZG1pbl92aWV3c19jb250cm9sbGVyJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhZG1pbl92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi52aWV3cy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICduYW1lX2xpc3QnDQoJCQkJKSwNCgkJCQknYWRkX2ltcG9ydF9jdXN0b21fY29udHJvbGxlcicgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnaW1wb3J0X2N1c3RvbV9jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdpbXBvcnQuY3VzdG9tLmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ25hbWVfbGlzdCcNCgkJCQkpLA0KCQkJCSdhZGRfaW1wb3J0X2N1c3RvbV9tb2RlbCcgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnaW1wb3J0X2N1c3RvbV9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnaW1wb3J0LmN1c3RvbS5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnbmFtZV9saXN0Jw0KCQkJCSkNCgkJCSksDQoJCSdzaXRlX3ZpZXdfaGVhZGVycycgICAgICAgICAgID0+DQoJCQlhcnJheSgNCgkJCQknYWRkX3NpdGVfdmlld19tb2RlbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXcubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlldycgICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXcnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld19odG1sJyAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdfY29udHJvbGxlcicgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXcuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19tb2RlbCcgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXdzLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzJyAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3MnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3NfaHRtbCcgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3c19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXdzLmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3NfY29udHJvbGxlcicgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLnZpZXdzLmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2FqYXhfbW9kZWwnICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWpheF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWpheC5zaXRlLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdhamF4Jw0KCQkJCSkNCgkJCSksDQoJCSdjdXN0b21fYWRtaW5fdmlld19oZWFkZXJzJyAgID0+DQoJCQlhcnJheSgNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X21vZGVsJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXcubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3JyAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlldycsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXcnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X2h0bWwnICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5odG1sJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19jb250cm9sbGVyJyAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXcuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXdzLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3MnICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19odG1sJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3NfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXdzLmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19jb250cm9sbGVyJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3NfY29udHJvbGxlcicsDQoJCQkJCSdjb250ZXh0JyA9PiAnY3VzdG9tLmFkbWluLnZpZXdzLmNvbnRyb2xsZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2FqYXhfbW9kZWwnICAgICAgICAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdhamF4X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhamF4LmFkbWluLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdhamF4Jw0KCQkJCSkNCgkJCSksDQoJCSdkeW5hbWljX2dldF9oZWFkZXJzJyAgICAgICAgICAgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfc2l0ZV92aWV3X21vZGVsJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3JyAgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXcnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3X2h0bWwnICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdfaHRtbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld19jb250cm9sbGVyJyAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX3ZpZXdzX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfdmlld3NfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX3NpdGVfdmlld3MnICAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnc2l0ZV92aWV3cycsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19odG1sJyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV92aWV3c19jb250cm9sbGVyJyA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknY29udGV4dCcgPT4gJ3NpdGUudmlld3MuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfbW9kZWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXcnICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3JywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X2NvbnRyb2xsZXInICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlldy5jb250cm9sbGVyJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdjb2RlJw0KCQkJCSksDQoJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2NvZGUnDQoJCQkJKSwNCgkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3cycgICAgICAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdjdXN0b21fYWRtaW5fdmlld3MnLA0KCQkJCQknY29udGV4dCcgPT4gJ2N1c3RvbS5hZG1pbi52aWV3cycsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19odG1sJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MuaHRtbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2N1c3RvbV9hZG1pbl92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdjdXN0b20uYWRtaW4udmlld3MuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnY29kZScNCgkJCQkpLA0KCQkJCSdhZGRfYWpheF9tb2RlbCcgICAgICAgICAgICAgICAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FqYXhfbW9kZWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2FqYXguYWRtaW4ubW9kZWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2FqYXgnDQoJCQkJKQ0KCQkJKSwNCgkJJ2NvbXBvbmVudF9kYXNoYm9hcmRfaGVhZGVycycgPT4NCgkJCWFycmF5KA0KCQkJCSdhZGRfZGFzaGJvYXJkX21vZGVsJyAgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2Rhc2hib2FyZF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnZGFzaGJvYXJkLm1vZGVsJywNCgkJCQkJJ3ZpZXcnICAgID0+ICdkYXNoYm9hcmQnDQoJCQkJKSwNCgkJCQknYWRkX2Rhc2hib2FyZF92aWV3JyAgICAgICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdkYXNoYm9hcmRfdmlldycsDQoJCQkJCSdjb250ZXh0JyA9PiAnZGFzaGJvYXJkLnZpZXcnLA0KCQkJCQkndmlldycgICAgPT4gJ2Rhc2hib2FyZCcNCgkJCQkpLA0KCQkJCSdhZGRfZGFzaGJvYXJkX3ZpZXdfaHRtbCcgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2Rhc2hib2FyZF92aWV3X2h0bWwnLA0KCQkJCQknY29udGV4dCcgPT4gJ2Rhc2hib2FyZC52aWV3Lmh0bWwnLA0KCQkJCQkndmlldycgICAgPT4gJ2Rhc2hib2FyZCcNCgkJCQkpLA0KCQkJCSdhZGRfZGFzaGJvYXJkX2NvbnRyb2xsZXInID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2Rhc2hib2FyZF9jb250cm9sbGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdkYXNoYm9hcmQuY29udHJvbGxlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnZGFzaGJvYXJkJw0KCQkJCSksDQoJCQkJJ2FkZF9hamF4X21vZGVsJyAgICAgICAgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWpheF9tb2RlbCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWpheC5hZG1pbi5tb2RlbCcsDQoJCQkJCSd2aWV3JyAgICA9PiAnYWpheCcNCgkJCQkpDQoJCQkpLA0KCQknam9vbWxhX2NvbXBvbmVudF9oZWFkZXJzJyAgICA9Pg0KCQkJYXJyYXkoDQoJCQkJJ2FkZF9hZG1pbl9jb21wb25lbnQnID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ2FkbWluX2NvbXBvbmVudCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnYWRtaW4uY29tcG9uZW50JywNCgkJCQkJJ3ZpZXcnICAgID0+ICdhZG1pbicNCgkJCQkpLA0KCQkJCSdhZGRfc2l0ZV9jb21wb25lbnQnICA9PiBhcnJheSgNCgkJCQkJJ2ZpZWxkJyAgID0+ICdzaXRlX2NvbXBvbmVudCcsDQoJCQkJCSdjb250ZXh0JyA9PiAnc2l0ZS5jb21wb25lbnQnLA0KCQkJCQkndmlldycgICAgPT4gJ3NpdGUnDQoJCQkJKSwNCgkJCQknYWRkX2FkbWluX2hlbHBlcicgICAgPT4gYXJyYXkoDQoJCQkJCSdmaWVsZCcgICA9PiAnYWRtaW5faGVscGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdhZG1pbi5oZWxwZXInLA0KCQkJCQkndmlldycgICAgPT4gJ2FkbWluJw0KCQkJCSksDQoJCQkJJ2FkZF9zaXRlX2hlbHBlcicgICAgID0+IGFycmF5KA0KCQkJCQknZmllbGQnICAgPT4gJ3NpdGVfaGVscGVyJywNCgkJCQkJJ2NvbnRleHQnID0+ICdzaXRlLmhlbHBlcicsDQoJCQkJCSd2aWV3JyAgICA9PiAnc2l0ZScNCgkJCQkpDQoJCQkpDQoJKTsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxWaWV3RGF0YSgmJHZpZXcpDQoJew0KCQkvLyBjaGVjayB0aGF0IHRoZSBwYXJhbXMgYXJlIHNldA0KCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtcykpDQoJCXsNCgkJCS8vIGFkZCB0aGUgaGVhZGVycyBmb3IgdGhlIEFkbWluIFZpZXdzDQoJCQkkdGhpcy0+c2V0SGVhZGVycygkdmlldy0+cGFyYW1zLCAkdmlldywgJ2FkbWluX3ZpZXdfaGVhZGVycycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIEN1c3RvbSBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbEN1c3RvbVZpZXdEYXRhKCYkdmlldywgJiRpZCwgJiR0YWJsZSkNCgl7DQoJCS8vIGNoZWNrIHRoYXQgdGhlIHBhcmFtcyBhcmUgc2V0DQoJCWlmIChpc3NldCgkdmlldy0+cGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgU2l0ZSBWaWV3cw0KCQkJJHRoaXMtPnNldEhlYWRlcnMoJHZpZXctPnBhcmFtcywgJHZpZXcsICdzaXRlX3ZpZXdfaGVhZGVycycpOw0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgQ3VzdG9tIEFkbWluIFZpZXdzDQoJCQkkdGhpcy0+c2V0SGVhZGVycygkdmlldy0+cGFyYW1zLCAkdmlldywgJ2N1c3RvbV9hZG1pbl92aWV3X2hlYWRlcnMnKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBEeW5hbWljIEdldCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjEwDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZU1vZGVsRHluYW1pY0dldERhdGEoJiRkeW5hbWljR2V0LCAmJGlkLCAmJGNvZGUsICYkYXJlYSkNCgl7DQoJCS8vIGNoZWNrIHRoYXQgdGhlIHBhcmFtcyBhcmUgc2V0DQoJCWlmIChpc3NldCgkZHluYW1pY0dldC0+cGFyYW1zKSkNCgkJew0KCQkJLy8gYWRkIHRoZSBoZWFkZXJzIGZvciB0aGUgU2l0ZSBWaWV3cw0KCQkJJHRoaXMtPnNldER5bmFtaWNIZWFkZXJzKCRkeW5hbWljR2V0LT5wYXJhbXMsICRjb2RlLCAnZHluYW1pY19nZXRfaGVhZGVycycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxDb21wb25lbnREYXRhKCYkY29tcG9uZW50KQ0KCXsNCgkJLy8gY2hlY2sgdGhhdCB0aGUgcGFyYW1zIGFyZSBzZXQNCgkJaWYgKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtcykpDQoJCXsNCgkJCS8vIGFkZCB0aGUgaGVhZGVycyBmb3IgdGhlIEpvb21sYSBDb21wb25lbnQNCgkJCSR0aGlzLT5zZXRIZWFkZXJzKCRjb21wb25lbnQtPnBhcmFtcywgJGNvbXBvbmVudCwgJ2pvb21sYV9jb21wb25lbnRfaGVhZGVycycpOw0KCQl9DQoJCS8vIGNoZWNrIHRoYXQgdGhlIGRhc2hib2FyZCBwYXJhbXMgYXJlIHNldA0KCQlpZiAoaXNzZXQoJGNvbXBvbmVudC0+ZGFzaGJvYXJkX3BhcmFtcykpDQoJCXsNCgkJCS8vIGFkZCB0aGUgaGVhZGVycyBmb3IgdGhlIENvbXBvbmVudCBEYXNoYm9hcmQNCgkJCSR0aGlzLT5zZXRIZWFkZXJzKCRjb21wb25lbnQtPmRhc2hib2FyZF9wYXJhbXMsICRjb21wb25lbnQsICdjb21wb25lbnRfZGFzaGJvYXJkX2hlYWRlcnMnKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIHNldCBDbGFzcyBIZWFkZXJdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX3NldENsYXNzSGVhZGVyKCYkZXZlbnRfY29udGV4dCwgJiR2aWV3X25hbWUsICYkaGVhZGVycykNCgl7DQoJCWlmICgkdGhpcy0+bG9hZEhlYWRlcnMgJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUhlYWRlcnNbJHZpZXdfbmFtZV0pDQoJCQkmJiBpc3NldCgkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZXZlbnRfY29udGV4dF0pDQoJCQkmJiBpc19hcnJheSgkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZXZlbnRfY29udGV4dF0pKQ0KCQl7DQoJCQkvLyB3b3JrIHdpdGggdGhlIGhlYWRlciB2YWx1ZXMgYXMga2V5cw0KCQkJJF9oZWFkZXJzID0gYXJyYXlfZmxpcCgkaGVhZGVycyk7DQoNCgkJCS8vIG5ldyBoZWFkZXJzDQoJCQkkbmV3ID0gJHRoaXMtPmFjdGl2ZUhlYWRlcnNbJHZpZXdfbmFtZV1bJGV2ZW50X2NvbnRleHRdOw0KDQoJCQkvLyBub3cgYWRkIHRoZSBuZXcgaGVhZGVycw0KCQkJZm9yZWFjaCAoJG5ldyBhcyAkbiA9PiAkaGVhZGVyKQ0KCQkJew0KCQkJCS8vIGlmIGFuIGVtcHR5IGxpbmUgaXMgZm91bmQganVzdCBza2lwIGl0IA0KCQkJCS8vIHdlIGNoZWNrIGlmIHRoaXMgaGVhZGVyIGlzIGFscmVhZHkgc2V0DQoJCQkJaWYgKGVtcHR5KCRoZWFkZXIpIHx8IGlzc2V0KCRfaGVhZGVyc1skaGVhZGVyXSkpDQoJCQkJew0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJJGhlYWRlcnNbXSA9ICRoZWFkZXI7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgR2V0IENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjYNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlR2V0Q29tcG9uZW50RGF0YSgpDQoJew0KCQkvLyBnZXQgcGxhY2Vob2xkZXJzIGZyb20gdGhlIGNvbXBpbGVyDQoJCSR0aGlzLT5wbGFjZWhvbGRlcnMgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21wb25lbnQuUGxhY2Vob2xkZXInKS0+Z2V0KCk7DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQWZ0ZXIgR2V0IENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjYNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXRDb21wb25lbnREYXRhKCkNCgl7DQoJCS8vIGFkZCB0aGUgcG93ZXJzIHRvIHRoZSBjb21wb25lbnQNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5saW5rZWRQb3dlcnMsIHRydWUpKQ0KCQl7DQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdQb3dlcicpLT5sb2FkKCR0aGlzLT5saW5rZWRQb3dlcnMpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogc2V0IHRoZSBoZWFkZXJzDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjAuOA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRIZWFkZXJzKCYkcGFyYW1zLCAmJG9iaiwgJGtleSkNCgl7DQoJCS8vIGFkZCB0aGUgaGVhZGVycw0KCQkkcGFyYW1zID0gKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRwYXJhbXMpKSA/IGpzb25fZGVjb2RlKCRwYXJhbXMsIHRydWUpIDogJHBhcmFtczsNCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGtleXMgdmFsdWVzIGluIHRoZSBwYXJhbXMgYXJlYQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBhcmFtcykgJiYgaXNzZXQoJHBhcmFtc1ska2V5XSkNCgkJCSYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwYXJhbXNbJGtleV0pKQ0KCQl7DQoJCQlmb3JlYWNoICgkdGhpcy0+dGFyZ2V0c1ska2V5XSBhcyAkdGFyZ2V0ID0+ICRldmVudCkNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJHBhcmFtc1ska2V5XVskdGFyZ2V0XSkNCgkJCQkJJiYgJHBhcmFtc1ska2V5XVskdGFyZ2V0XSA9PSAxKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBoZWFkZXIgc3RyaW5nIGlmIHNldA0KCQkJCQkkdGhpcy0+Z2V0SGVhZGVycygNCgkJCQkJCSRwYXJhbXNbJGtleV0sDQoJCQkJCQkkZXZlbnQsDQoJCQkJCQkkdGhpcy0+Z2V0Vmlld05hbWUoDQoJCQkJCQkJJG9iaiwNCgkJCQkJCQkkZXZlbnRbJ3ZpZXcnXQ0KCQkJCQkJKQ0KCQkJCQkpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIHNldCB0aGUgZHluYW1pYyBnZXQgaGVhZGVycw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjEwDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldER5bmFtaWNIZWFkZXJzKCRwYXJhbXMsICRjb2RlLCAka2V5KQ0KCXsNCgkJLy8gYWRkIHRoZSBoZWFkZXJzDQoJCSRwYXJhbXMgPSAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHBhcmFtcykpID8ganNvbl9kZWNvZGUoJHBhcmFtcywgdHJ1ZSkgOiAkcGFyYW1zOw0KCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUga2V5cyB2YWx1ZXMgaW4gdGhlIHBhcmFtcyBhcmVhDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zKSAmJiBpc3NldCgkcGFyYW1zWyRrZXldKQ0KCQkJJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBhcmFtc1ska2V5XSkpDQoJCXsNCgkJCWZvcmVhY2ggKCR0aGlzLT50YXJnZXRzWyRrZXldIGFzICR0YXJnZXQgPT4gJGV2ZW50KQ0KCQkJew0KCQkJCWlmIChpc3NldCgkcGFyYW1zWyRrZXldWyR0YXJnZXRdKQ0KCQkJCQkmJiAkcGFyYW1zWyRrZXldWyR0YXJnZXRdID09IDEpDQoJCQkJew0KCQkJCQkvLyBnZXQgdGhlIGhlYWRlciBzdHJpbmcgaWYgc2V0DQoJCQkJCSR0aGlzLT5nZXRIZWFkZXJzKA0KCQkJCQkJJHBhcmFtc1ska2V5XSwNCgkJCQkJCSRldmVudCwNCgkJCQkJCSRjb2RlDQoJCQkJCSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBoZWFkZXJzDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGVhZGVycygmJHBhcmFtcywgJiRnZXQsICR2aWV3X25hbWUpDQoJew0KCQkvLyB3ZSBmaXJzdCBjaGVjayBpZiB0aGUgdmFsdWUgaXMgc2V0DQoJCWlmIChpc3NldCgkcGFyYW1zWyRnZXRbJ2ZpZWxkJ11dKSB8fCBpc3NldCgkcGFyYW1zWydwb3dlcl8nIC4gJGdldFsnZmllbGQnXV0pKQ0KCQl7DQoJCQkvLyBzdGFydCBsaXR0bGUgaGVhZGVycyBidWNrZXQNCgkJCSRoZWFkZXJzID0gW107DQoNCgkJCS8vIGxvYWQgdGhlIGhlYWRlcnMgaWYgcG93ZXINCgkJCWlmIChpc3NldCgkcGFyYW1zWydwb3dlcl8nIC4gJGdldFsnZmllbGQnXV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwYXJhbXNbJ3Bvd2VyXycgLiAkZ2V0WydmaWVsZCddXSwgdHJ1ZSkNCgkJCQkmJiAoJHBvd2VycyA9ICR0aGlzLT5nZXRQb3dlcnMoJHBhcmFtc1sncG93ZXJfJyAuICRnZXRbJ2ZpZWxkJ11dKSkgIT09IG51bGwpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHBvd2VycyBhcyAkcG93ZXIpDQoJCQkJew0KCQkJCQkkcG93ZXIgPSB0cmltKCRwb3dlcik7DQoJCQkJCSRoZWFkZXJzWyRwb3dlcl0gPSAkcG93ZXI7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBsb2FkIHRoZSBoZWFkZXJzIGlmIHRleHQNCgkJCWlmIChpc3NldCgkcGFyYW1zWyRnZXRbJ2ZpZWxkJ11dKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcGFyYW1zWyRnZXRbJ2ZpZWxkJ11dKSkNCgkJCXsNCgkJCQlpZiAoKCRfaGVhZGVycyA9IGV4cGxvZGUoUEhQX0VPTCwgJHBhcmFtc1skZ2V0WydmaWVsZCddXSkpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJF9oZWFkZXJzIGFzICRoZWFkZXIpDQoJCQkJCXsNCgkJCQkJCSRoZWFkZXIgPSB0cmltKCRoZWFkZXIpOw0KCQkJCQkJaWYgKGVtcHR5KCRoZWFkZXIpKQ0KCQkJCQkJew0KCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJfQ0KCQkJCQkJJGhlYWRlcnNbJGhlYWRlcl0gPSAkaGVhZGVyOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBjaGVjayBpZiB3ZSBmb3VuZCBzb21lIGhlYWRlciB2YWx1ZXMNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaGVhZGVycywgdHJ1ZSkpDQoJCQl7DQoJCQkJLy8gYWN0aXZhdGUgdGhlIGxvYWQgb2YgdGhlIGhlYWRlcnMNCgkJCQkkdGhpcy0+bG9hZEhlYWRlcnMgPSB0cnVlOw0KCQkJCS8vIGNoZWNrIGlmIHRoaXMgYWN0aXZlIGhlYWRlciBpcyBhbHJlYWR5IHNldA0KCQkJCWlmICghaXNzZXQoJHRoaXMtPmFjdGl2ZUhlYWRlcnNbJHZpZXdfbmFtZV1bJGdldFsnY29udGV4dCddXSkpDQoJCQkJew0KCQkJCQkvLyBzdGFydCB0aGUgYWN0aXZlIGhlYWRlcg0KCQkJCQkkdGhpcy0+YWN0aXZlSGVhZGVyc1skdmlld19uYW1lXVskZ2V0Wydjb250ZXh0J11dID0gW107DQoJCQkJfQ0KCQkJCS8vIGxvYWQgdGhlIGZvdW5kIGhlYWRlcnMgYW5kIGF2b2lkIGFkZGluZyB0aGUgc2FtZSBoZWFkZXIgdHdpY2UNCgkJCQlmb3JlYWNoICgkaGVhZGVycyBhcyAkaGVhZGVyKQ0KCQkJCXsNCgkJCQkJJGhlYWRlciA9IHRyaW0oJGhlYWRlcik7DQoJCQkJCSR0aGlzLT5hY3RpdmVIZWFkZXJzWyR2aWV3X25hbWVdWyRnZXRbJ2NvbnRleHQnXV1bJGhlYWRlcl0gPSAkaGVhZGVyOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgdmlldyBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMC44DQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdOYW1lKCYkdmlldywgJiRnZXQpDQoJew0KCQlpZiAoJGdldCA9PT0gJ3NpdGUnIHx8ICRnZXQgPT09ICdhZG1pbicgfHwgJGdldCA9PT0gJ2FqYXgnIHx8ICRnZXQgPT09ICdkYXNoYm9hcmQnKQ0KCQl7DQoJCQkvLyBzdGF0aWMga2V5IG5hbWUNCgkJCXJldHVybiAkZ2V0Ow0KCQl9DQoJCWVsc2VpZiAoaXNzZXQoJHZpZXctPnskZ2V0fSkpDQoJCXsNCgkJCXJldHVybiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKA0KCQkJCSR2aWV3LT57JGdldH0NCgkJCSk7DQoJCX0NCgkJcmV0dXJuICdfZXJyb3InOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgcG93ZXJzIGhlYWRlciB1c2Ugc3RyaW5ncw0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqDQoJICogQHNpbmNlICAgMS4wLjYNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UG93ZXJzKCRyb3dzKTogP2FycmF5DQoJew0KCQkvLyBsb2FkIHRoZSBhY3RpdmUgcG93ZXJzDQoJCSRwb3dlcnMgPSBhcnJheV9maWx0ZXIoDQoJCQkvLyBnZXQgdGhlIHBvd2VyIG5hbWVzcGFjZQ0KCQkJYXJyYXlfbWFwKGZ1bmN0aW9uICgkcm93KSB7DQoJCQkJaWYgKCgkcG93ZXIgPSBTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjppdGVtKCRyb3dbJ3Bvd2VyJ10sICdwb3dlcicsIFsnYS5ndWlkJywgJ2EubmFtZXNwYWNlJ10pKSAhPT0gbnVsbCkNCgkJCQl7DQoJCQkJCQkkcG93ZXItPmJ1aWxkID0gKGludCkgJHJvd1snYnVpbGQnXTsNCgkJCQkJCSRwb3dlci0+YXMgPSAoc3RyaW5nKSAkcm93WydhcyddOw0KDQoJCQkJCQlyZXR1cm4gJHBvd2VyOw0KCQkJCX0NCgkJCQllbHNlaWYgKFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1N1cGVycG93ZXInKS0+bG9hZCgkcm93Wydwb3dlciddLCAgWydyZW1vdGUnXSkpDQoJCQkJew0KCQkJCQlpZiAoKCRwb3dlciA9IFN1cGVyX19fOWM1MTNiYWZfYjI3OV80M2ZkX2FlMjlfYTU4NWM4Y2JjNGYwX19fUG93ZXI6Oml0ZW0oJHJvd1sncG93ZXInXSwgJ3Bvd2VyJywgWydhLmd1aWQnLCAnYS5uYW1lc3BhY2UnXSkpICE9PSBudWxsKQ0KCQkJCQl7DQoJCQkJCQkkcG93ZXItPmJ1aWxkID0gKGludCkgJHJvd1snYnVpbGQnXTsNCgkJCQkJCSRwb3dlci0+YXMgPSAoc3RyaW5nKSAkcm93WydhcyddOw0KDQoJCQkJCQlyZXR1cm4gJHBvd2VyOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0sICRyb3dzKSwNCgkJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSB2YWxpZCBwb3dlcnMNCgkJCWZ1bmN0aW9uICgkcm93KSB7DQoJCQkJcmV0dXJuIGlzX29iamVjdCgkcm93KSAmJiBpc3NldCgkcm93LT5ndWlkKTsNCgkJCX0NCgkJKTsNCgkJLy8gYWRkIHRvIGFjdGl2ZSBwb3dlcnMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwb3dlcnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBkb3RzIHRvIG5hbWVzcGFjZQ0KCQkJcmV0dXJuIGFycmF5X21hcChmdW5jdGlvbiAoJHBvd2VyKSB7DQoJCQkJLy8gYWRkIHRvIGNvbXBpbGVyICh0byBidWlsZCkNCgkJCQlpZiAoJHBvd2VyLT5idWlsZCAhPSA2KQ0KCQkJCXsNCgkJCQkJLy8gc2VjdXJlIHRoYXQgYWx3YXlzIHdpbGwgcmVtYWluIGFsd2F5cyBldmVuIGlmIG9ubHkgc2V0IHRoYXQgd2F5IG9uY2UNCgkJCQkJaWYgKGVtcHR5KCR0aGlzLT5saW5rZWRQb3dlcnNbJHBvd2VyLT5ndWlkXSkgfHwgJHBvd2VyLT5idWlsZCA9PSAxKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+bGlua2VkUG93ZXJzWyRwb3dlci0+Z3VpZF0gPSAkcG93ZXItPmJ1aWxkOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIHRoZSBuYW1lc3BhY2UNCgkJCQkkbmFtZXNwYWNlID0gU3VwZXJfX19jZThjZjgzNF82YmFjXzQ0ZmJfOTQxY184NjFmN2UwNDZjYzBfX19Qb3dlcjo6c2FmZSgNCgkJCQkJc3RyX3JlcGxhY2UoDQoJCQkJCQlhcnJheV9rZXlzKCR0aGlzLT5wbGFjZWhvbGRlcnMpLA0KCQkJCQkJYXJyYXlfdmFsdWVzKCR0aGlzLT5wbGFjZWhvbGRlcnMpLA0KCQkJCQkJc3RyX3JlcGxhY2UoJy4nLCAnXFwnLCAkcG93ZXItPm5hbWVzcGFjZSkNCgkJCQkJKQ0KCQkJCSk7DQoJCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGFuIEFTIG9wdGlvbg0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcG93ZXItPmFzKSAmJiAkcG93ZXItPmFzICE9PSAnZGVmYXVsdCcpDQoJCQkJew0KCQkJCQlyZXR1cm4gJ3VzZSAnIC4gJG5hbWVzcGFjZSAuICcgYXMgJyAuICRwb3dlci0+YXMgLiAnOyc7DQoJCQkJfQ0KCQkJCXJldHVybiAndXNlICcgLiAkbmFtZXNwYWNlIC4gJzsnOw0KCQkJfSwgJHBvd2Vycyk7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9', '[[[Component]]] Headers Compiler', '', '', '', '', '', '', '', '3.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Headers Compiler J5', '', 1, '', '', 1, '2024-03-10 15:54:36', '2024-03-10 21:09:59', 3, '', 3), +(36, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set the ordring for your component views during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to set your admin views where you would like to use Field Ordering.', '{}', 'abf99084-bcfe-45b2-9b7a-c8621defc69c', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTs=', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"}}', 'CS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlTW9kZWxWaWV3RGF0YSgmJHZpZXcpDQoJew0KCQkvLyBhZGQgdGhlIHByaXZhY3kNCgkJJHZpZXctPnBhcmFtcyA9IChpc3NldCgkdmlldy0+cGFyYW1zKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zKSkgPyBqc29uX2RlY29kZSgkdmlldy0+cGFyYW1zLCB0cnVlKSA6ICR2aWV3LT5wYXJhbXM7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zKSAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXNbJ2ZpZWxkb3JkZXJpbmcnXSkpDQoJCXsNCgkJCWlmICgkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ11bJ2FkZF9hZG1pbl9vcmRlcmluZyddID09IDENCgkJCQl8fCAkdmlldy0+cGFyYW1zWydmaWVsZG9yZGVyaW5nJ11bJ2FkZF9saW5rZWRfb3JkZXJpbmcnXSA9PSAxKQ0KCQkJew0KCQkJCS8vIHNldHVwIHRoZSB2aWV3IGtleSBuYW1lDQoJCQkJJG5hbWVfbGlzdCAgID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCQkvLyBsb2FkIHRoZSBhZG1pbiB2aWV3IGRldGFpbHMNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLlZpZXdzLkRlZmF1bHQuT3JkZXJpbmcnKS0+c2V0KCRuYW1lX2xpc3QsICR2aWV3LT5wYXJhbXNbJ2ZpZWxkb3JkZXJpbmcnXSk7DQoJCQl9DQoJCX0NCgl9', '[[[Component]]] Field Ordering Compiler', '', '', '', '', '', '', '', '2.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Field Ordering Compiler J5', '', 1, '', '', 1, '2024-03-10 15:54:48', '2024-03-10 21:11:31', 3, '', 3), +(37, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set custom ordering to fields in the JCB list views.', '{\"fields0\":{\"file\":\"admin_view\",\"fields_name\":\"params.fieldordering\",\"fieldset\":\"fieldordering\",\"label\":\"Field Ordering\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2751\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2753\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2749\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2754\",\"custom_value\":\"\"}}}}', 'd0e386d6-02ea-4fd9-a67e-ca369bac88f6', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCg==', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3VyLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIFJ1bnMgb24gY29udGVudCBwcmVwYXJhdGlvbiBvZiBmb3JtLg0KCSAqDQoJICogQHBhcmFtICAgSkZvcm0gICAgICRmb3JtICBUaGUgZm9ybQ0KCSAqIEBwYXJhbSAgIHN0ZENsYXNzICAkZGF0YSAgVGhlIGRhdGENCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRQcmVwYXJlRm9ybShGb3JtICRmb3JtLCAkZGF0YSkNCgl7DQoJCSRjb250ZXh0ID0gJGZvcm0tPmdldE5hbWUoKTsNCg0KCQkvLyBXaGVuIHRoaXMgaXMgW1tbY29tcG9uZW50XV1dIGFkbWluIHZpZXcNCgkJaWYgKHN0cnBvcygkY29udGV4dCwgJ2NvbV9bW1tjb21wb25lbnRdXV0uYWRtaW5fdmlldycpID09PSAwKQ0KCQl7DQoJCQkvLyBBZGQgdGhlIGZvcm1zIHBhdGgNCgkJCUZvcm06OmFkZEZvcm1QYXRoKF9fRElSX18gLiAnL2Zvcm1zJyk7DQoJCQkvLyBhZGQgdGhlIGFkbWluIHZpZXcgcGFyYW1zIGZvciBwcml2YWN5IGludGVncmF0aW9uDQoJCQkkZm9ybS0+bG9hZEZpbGUoJ2FkbWluX3ZpZXcnKTsNCgkJfQ0KDQoJCXJldHVybiB0cnVlOw0KCX0=', '[[[Component]]] Field Ordering Tabs', '', '', '', '', '', '', '', '2.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Field Ordering Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:52', '2024-03-10 21:12:56', 3, '', 2), +(38, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to link your components to the language packaging and extending options, so you can set all the required details for the integration.', '{\"fields0\":{\"file\":\"joomla_component\",\"fields_name\":\"params.language_options\",\"fieldset\":\"language_options\",\"label\":\"Language Options\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2740\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2604\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2746\",\"custom_value\":\"1\"},\"fields3\":{\"field\":\"2745\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2742\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2741\",\"custom_value\":\"\"}}}}', 'c0a2a497-bd72-4524-8c83-713108b4b3ce', 'dXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCg==', 3, '{\"method_selection0\":{\"method\":\"113\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3VyLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIFJ1bnMgb24gY29udGVudCBwcmVwYXJhdGlvbiBvZiBmb3JtLg0KCSAqDQoJICogQHBhcmFtICAgRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgXHN0ZENsYXNzICAkZGF0YSAgVGhlIGRhdGENCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRQcmVwYXJlRm9ybShGb3JtICRmb3JtLCAkZGF0YSkNCgl7DQoJCSRjb250ZXh0ID0gJGZvcm0tPmdldE5hbWUoKTsNCg0KCQkvLyBXaGVuIHRoaXMgaXMgW1tbY29tcG9uZW50XV1dIGFkbWluIHZpZXcNCgkJaWYgKHN0cnBvcygkY29udGV4dCwgJ2NvbV9bW1tjb21wb25lbnRdXV0uam9vbWxhX2NvbXBvbmVudCcpID09PSAwKQ0KCQl7DQoJCQkvLyBBZGQgdGhlIGZvcm1zIHBhdGgNCgkJCUZvcm06OmFkZEZvcm1QYXRoKF9fRElSX18gLiAnL2Zvcm1zJyk7DQoJCQkvLyBhZGQgdGhlIGFkbWluIHZpZXcgcGFyYW1zIGZvciBwcml2YWN5IGludGVncmF0aW9uDQoJCQkkZm9ybS0+bG9hZEZpbGUoJ2pvb21sYV9jb21wb25lbnQnKTsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQo=', '[[[Component]]] Language Tabs', '', '', '', '', '', '', '', '2.0.0', '{\"property_selection0\":{\"property\":\"9\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Language Tabs J5', '', 1, '', '', 1, '2024-03-10 15:54:57', '2024-03-10 21:14:37', 3, '', 2), +(39, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to add packaging (bundling of extentions) to JCB. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{}', 'c1e7d932-3fc5-45bc-ba13-28889af29f56', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 11, '{}', '', '[[[Component]]] Extention Packaging', '', '', '', '', '', '', '', '2.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'REUSE', '', 1, '', '', 1, '2024-03-10 15:55:00', '2024-03-10 21:20:27', 2, '', 2), +(40, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to add language packaging to JCB. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.', '{}', '0b8a7133-b2ff-4b7b-a5c5-0bbf039f0544', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxDTVNcRmlsZXN5c3RlbVxGb2xkZXI7', 11, '{\"method_selection0\":{\"method\":\"88\"},\"method_selection1\":{\"method\":\"55\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBEYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEB2YXIgICAgRGF0YWJhc2VEcml2ZXINCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkZGI7DQoNCgkvKioNCgkgKiBBcHBsaWNhdGlvbiBvYmplY3QNCgkgKg0KCSAqIEB2YXIgICAgQ01TQXBwbGljYXRpb24NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXBwOw0KDQoJLyoqDQoJICogVGhlIHBlcmNlbnRhZ2UgYmVmb3JlIGEgbGFuZ3VhZ2UgY2FuIGJlIGFkZGVkDQoJICogDQoJICogQHZhciAgICAgaW50DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcGVyY2VudGFnZUxhbmd1YWdlQWRkOw0KDQoJLyoqDQoJICogVGhlIHBlcmNlbnRhZ2UgYmVmb3JlIGEgbGFuZ3VhZ2UgY2FuIGJlIGFkZGVkDQoJICogDQoJICogQHZhciAgICAgaW50DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcGVyY2VudGFnZUxhbmd1YWdlQWRkT3ZlcmlkZSA9IDIwMDsNCg0KCS8qKg0KCSAqIFRoZSBsYW5ndWFnZXMgbmFtZXMNCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGxhbmd1YWdlTmFtZXMgPSBbXTsNCg0KCS8qKg0KCSAqIFRoZSBsYW5ndWFnZSBidWlsZGluZyB0cmFja2VyDQoJICogDQoJICogQHZhciAgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRsYW5ndWFnZVRyYWNrZXIgPSBbXTsNCg0KCS8qKg0KCSAqIFRoZSBzaG91bGQgdGhlIHNpdGUgZm9sZGVyIGJlIHJlbW92ZWQNCgkgKiANCgkgKiBAdmFyICAgICBib29sDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcmVtb3ZlU2l0ZUZvbGRlcjsNCg0KCS8qKg0KCSAqIFRoZSBzaG91bGQgdGhlIHNpdGUgZm9sZGVyIGJlIHJlbW92ZWQNCgkgKiANCgkgKiBAdmFyICAgICBib29sDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkcmVtb3ZlU2l0ZUVkaXRGb2xkZXI7DQoNCgkvKioNCgkgKiBUaGUgY29tcG9uZW50IHBhdGgNCgkgKiANCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRjb21wb25lbnRQYXRoOw0KDQoJLyoqDQoJICogVGhlIGNvbXBpbGVyIHBhdGgNCgkgKiANCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICRjb21waWxlclBhdGg7DQoNCgkvKioNCgkgKiBUaGUgdGVtcG9yYWwgcGF0aA0KCSAqIA0KCSAqIEB2YXIgICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJHRlbXBQYXRoOw0KDQoJLyoqDQoJICogVGhlIGpvb21sYSB2ZXJzaW9uDQoJICogDQoJICogQHZhciAgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkam9vbWxhVmVyc2lvbjsNCg0KCS8qKg0KCSAqIFRoZSBjb21wb25lbnQgdmVyc2lvbg0KCSAqIA0KCSAqIEB2YXIgICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGNvbXBvbmVudF92ZXJzaW9uOw0KDQoJLyoqDQoJICogVGhlIGNvbXBvbmVudCBuYW1lDQoJICogDQoJICogQHZhciAgICAgc3RyaW5nDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkY29tcG9uZW50Q29kZU5hbWU7DQoNCgkvKioNCgkgKiBUaGUgZmlsZSBjb250ZW50IHN0YXRpYyB2YWx1ZXMNCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgJGZpbGVDb250ZW50U3RhdGljOw0KDQoJLyoNCgkgKiBUaGUgbGluZSBudW1iZXJzIFN3aXRjaA0KCSAqIA0KCSAqIEB2YXIgICAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAkZGVidWdMaW5lbnIgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIFRoZSBBY3RpdmUgQ29tcG9uZW50cw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhY3RpdmVDb21wb25lbnRzID0gW107DQoNCgkvKioNCgkgKiBUaGUgQWN0aXZlIENvbXBvbmVudHMgTmFtZXMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYWN0aXZlQ29tcG9uZW50c05hbWVzID0gW107DQoNCgkvKioNCgkgKiBUaGUgTGFuZ3VhZ2VzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGxhbmd1YWdlcyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIExhbmd1YWdlIGJ1aWxkIGRldGFpbHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYnVpbGREZXRhaWxzID0gW107DQoNCgkvKioNCgkgKiBUaGUgRXhjbHVkZWQgTGFuZ3VhZ2VzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGV4Y2x1ZGVkTGFuZyA9IFtdOw0KDQoJLyoqDQoJICogVGhlIEFjdGl2ZSBMYW5ndWFnZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkbGFuZ1RhZzsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBNb2RlbCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbENvbXBvbmVudERhdGEoJiRjb21wb25lbnQpDQoJew0KCQkvLyBhZGQgdGhlIHByaXZhY3kNCgkJJGNvbXBvbmVudC0+cGFyYW1zID0gKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtcykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudC0+cGFyYW1zKSkgPyBqc29uX2RlY29kZSgkY29tcG9uZW50LT5wYXJhbXMsIHRydWUpIDogJGNvbXBvbmVudC0+cGFyYW1zOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudC0+cGFyYW1zKSAmJiBpc3NldCgkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXSkgJiYNCgkJCWlzc2V0KCRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydhY3RpdmF0ZSddKSAmJiAkY29tcG9uZW50LT5wYXJhbXNbJ2xhbmd1YWdlX29wdGlvbnMnXVsnYWN0aXZhdGUnXSA9PSAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBhZG1pbiBjb21wb25lbnQgZGV0YWlscw0KCQkJJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGNvbXBvbmVudC0+aWRdID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9jb250ZXh0Ow0KCQkJJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNOYW1lc1skY29tcG9uZW50LT5pZF0gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRjb21wb25lbnQtPm5hbWVfY29kZSk7DQoJCQkkdGhpcy0+YWN0aXZlQ29tcG9uZW50c1JlYWxOYW1lc1skY29tcG9uZW50LT5pZF0gPSAkY29tcG9uZW50LT5uYW1lOw0KCQkJLy8gYWRkIGV4Y2x1ZGVkIGxpc3Qgb2YgbGFuZ3VhZ2VzDQoJCQlpZiAoaXNzZXQoJGNvbXBvbmVudC0+cGFyYW1zWydsYW5ndWFnZV9vcHRpb25zJ11bJ2xhbmd1YWdlcyddKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXhjbHVkZWRMYW5nWyRjb21wb25lbnQtPmlkXSA9ICRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydsYW5ndWFnZXMnXTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXhjbHVkZWRMYW5nWyRjb21wb25lbnQtPmlkXSA9IGFycmF5KCk7DQoJCQl9DQoJCQkvLyBub3cgc2V0IHRoZSBjb21wb25lbnQgYWRkIGxhbmd1YWdlcyBpZiB3ZSBzaG91bGQgdXNlIGxvY2FsICgyKQ0KCQkJaWYgKGlzc2V0KCRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWyd1c2VfcGVyY2VudGFnZWxhbmd1YWdlYWRkJ10pICYmICRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWyd1c2VfcGVyY2VudGFnZWxhbmd1YWdlYWRkJ10gPT0gMikNCgkJCXsNCgkJCQkkdGhpcy0+cGVyY2VudGFnZUxhbmd1YWdlQWRkT3ZlcmlkZSA9ICRjb21wb25lbnQtPnBhcmFtc1snbGFuZ3VhZ2Vfb3B0aW9ucyddWydwZXJjZW50YWdlbGFuZ3VhZ2VhZGQnXTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldF0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldCgpDQoJew0KCQkvLyBnZXQgY29tcG9uZW50IGlkDQoJCSRpZCA9IChpbnQpIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5jb21wb25lbnRfaWQ7DQoJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIGFjdGl2ZQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHMpDQoJCQkmJiBpc3NldCgkdGhpcy0+YWN0aXZlQ29tcG9uZW50c1skaWRdKSAmJiAkdGhpcy0+cGVyY2VudGFnZUxhbmd1YWdlQWRkT3ZlcmlkZSAhPSAyMDApDQoJCXsNCgkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5zZXQoJ3BlcmNlbnRhZ2VfbGFuZ3VhZ2VfYWRkJywgJHRoaXMtPnBlcmNlbnRhZ2VMYW5ndWFnZUFkZE92ZXJpZGUpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBMYW5nIEZpbGUgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRMYW5nRmlsZURhdGEoKQ0KCXsNCgkJLy8gbGV0cyBtYXAgc29tZSBhcnJheXMgdG8gdGhlIHBsdWdpbiBmb3IgbGF0ZXIgdXNlDQoJCSR0aGlzLT5jb21waWxlclBhdGggPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+Y29tcGlsZXJfcGF0aDsNCgkJJHRoaXMtPnRlbXBQYXRoID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnRtcF9wYXRoOw0KCQkkdGhpcy0+bGFuZ1RhZyA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZzsNCgkJJHRoaXMtPmRlYnVnTGluZW5yID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmdldCgnZGVidWdfbGluZV9ucicsIGZhbHNlKTsNCgkJJHRoaXMtPmNvbXBvbmVudF92ZXJzaW9uID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmdldCgnY29tcG9uZW50X3ZlcnNpb24nLCAnMS4wLjAnKTsNCgkJJHRoaXMtPmpvb21sYVZlcnNpb24gPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+am9vbWxhX3ZlcnNpb247DQoJCSR0aGlzLT5wZXJjZW50YWdlTGFuZ3VhZ2VBZGQgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+cGVyY2VudGFnZV9sYW5ndWFnZV9hZGQ7DQoJCSR0aGlzLT5yZW1vdmVTaXRlRm9sZGVyID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnJlbW92ZV9zaXRlX2ZvbGRlcjsNCgkJJHRoaXMtPnJlbW92ZVNpdGVFZGl0Rm9sZGVyID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnJlbW92ZV9zaXRlX2VkaXRfZm9sZGVyOw0KCQkkdGhpcy0+Y29tcG9uZW50UGF0aCA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1V0aWxpdGllcy5QYXRocycpLT5jb21wb25lbnRfcGF0aDsNCgkJJHRoaXMtPmNvbXBvbmVudENvZGVOYW1lID0gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9jb2RlX25hbWU7DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIEJ1aWxkIFBsdWdpbiBMYW5nIEZpbGVzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZUJ1aWxkUGx1Z2luTGFuZ0ZpbGVzKCYkcGx1Z2luLCAmJGxhbmd1YWdlcykNCgl7DQoJCS8vIGdldCBjb21wb25lbnQgaWQNCgkJJGlkID0gKGludCkgU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9pZDsNCgkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgYWN0aXZlDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+YWN0aXZlQ29tcG9uZW50cykgJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGlkXSkpDQoJCXsNCgkJCS8vIHNldCBmaWxlIG5hbWUNCgkJCSRmaWxlX25hbWUgPSAncGxnXycgLiBzdHJ0b2xvd2VyKCRwbHVnaW4tPmdyb3VwKSAuICdfJyAuIHN0cnRvbG93ZXIoJHBsdWdpbi0+Y29kZV9uYW1lKTsNCgkJCS8vIGV4dHJ1ZGUgdGhlIGxhbmd1YWdlcyB0aGF0IHNob3VsZCBub3QgcmVtYWluIGluIHRoZSBwbHVnaW4NCgkJCSR0aGlzLT5leHRydWRlTGFuZ3VhZ2VzKCRpZCwgJGxhbmd1YWdlcywgU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmxhbmdfdGFnLCAkZmlsZV9uYW1lLCAnYWRtaW4nKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBNb2R1bGUgTGFuZyBGaWxlc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVCdWlsZE1vZHVsZUxhbmdGaWxlcygmJG1vZHVsZSwgJiRsYW5ndWFnZXMpDQoJew0KCQkvLyBnZXQgY29tcG9uZW50IGlkDQoJCSRpZCA9IChpbnQpIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5jb21wb25lbnRfaWQ7DQoJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIGFjdGl2ZQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHMpICYmIGlzc2V0KCR0aGlzLT5hY3RpdmVDb21wb25lbnRzWyRpZF0pKQ0KCQl7DQoJCQkvLyBleHRydWRlIHRoZSBsYW5ndWFnZXMgdGhhdCBzaG91bGQgbm90IHJlbWFpbiBpbiB0aGUgbW9kdWxlDQoJCQkkdGhpcy0+ZXh0cnVkZUxhbmd1YWdlcygkaWQsICRsYW5ndWFnZXMsIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZywgJG1vZHVsZS0+ZmlsZV9uYW1lLCAkbW9kdWxlLT50YXJnZXRfY2xpZW50KTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBCdWlsZCBBbGwgTGFuZyBGaWxlc10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVCdWlsZEFsbExhbmdGaWxlcygmJGxhbmd1YWdlcykNCgl7DQoJCS8vIGdldCBjb21wb25lbnQgaWQNCgkJJGlkID0gKGludCkgU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmNvbXBvbmVudF9pZDsNCgkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgYWN0aXZlDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+YWN0aXZlQ29tcG9uZW50cykgJiYgaXNzZXQoJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNbJGlkXSkpDQoJCXsNCgkJCS8vIHNldCBmaWxlIG5hbWUNCgkJCSRmaWxlX25hbWUgPSAnY29tXycgLiAkdGhpcy0+YWN0aXZlQ29tcG9uZW50c05hbWVzWyRpZF07DQoJCQkvLyBleHRydWRlIHRoZSBsYW5ndWFnZXMgdGhhdCBzaG91bGQgbm90IHJlbWFpbiBpbiB0aGUgbW9kdWxlDQoJCQkkdGhpcy0+ZXh0cnVkZUxhbmd1YWdlcygkaWQsICRsYW5ndWFnZXMsIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZywgJGZpbGVfbmFtZSk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIGxhbmd1YWdlIHBhY2thZ2VzDQoJCSR0aGlzLT5idWlsZExhbmd1YWdlcygkaWQsIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5sYW5nX3RhZyk7DQoJfQ0KDQoJLyoqDQoJICogRXh0cnVkZXIgb2YgdGhlIGxhbmd1YWdlcw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGV4dHJ1ZGVMYW5ndWFnZXMoJiRpZCwgJiRsYW5ndWFnZXMsICRsYW5nVGFnLCAmJGZpbGVfbmFtZSwgJHRhcmdldF9jbGllbnQgPSAnYm90aCcpDQoJew0KCQkkbWFpbkxhbmdMb2FkZXIgPSBbXTsNCgkJLy8gY2hlY2sgaWYgdGhpcyBpZCB3YXMgc2V0IGJlZm9yZQ0KCQlpZiAoIWlzc2V0KCR0aGlzLT5sYW5ndWFnZXNbJGlkXSkpDQoJCXsNCgkJCSR0aGlzLT5sYW5ndWFnZXNbJGlkXSA9IFtdOw0KCQkJJHRoaXMtPmJ1aWxkRGV0YWlsc1skaWRdID0gW107DQoJCX0NCgkJLy8gY2hlY2sgaWYgdGhpcyBmaWxlIG5hbWUgd2FzIHNldCBiZWZvcmUNCgkJaWYgKCFpc3NldCgkdGhpcy0+bGFuZ3VhZ2VzWyRpZF1bJGZpbGVfbmFtZV0pKQ0KCQl7DQoJCQkkdGhpcy0+bGFuZ3VhZ2VzWyRpZF1bJGZpbGVfbmFtZV0gPSBbXTsNCgkJfQ0KCQkvLyBzZXQgYWxsIHRoZSBleHRyYSBsYW5ndWFnZXMgbm90IGV4Y2x1ZGVkDQoJCWZvcmVhY2ggKCRsYW5ndWFnZXMgYXMgJGtleSA9PiAkbGFuZ3VhZ2UpDQoJCXsNCgkJCWlmICgka2V5ICE9PSAkbGFuZ1RhZyAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGFuZ3VhZ2UpICYmICghaXNzZXQoJHRoaXMtPmV4Y2x1ZGVkTGFuZ1skaWRdKSB8fCAhaW5fYXJyYXkoJGtleSwgJHRoaXMtPmV4Y2x1ZGVkTGFuZ1skaWRdKSkpDQoJCQl7DQoJCQkJLy8gYWRkIHRvIG91ciBidWNrZXQNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VzWyRpZF1bJGZpbGVfbmFtZV1bJGtleV0gPSAkbGFuZ3VhZ2U7DQoJCQkJLy8gcmVtb3ZlIGZyb20gdGhlIEpDQiBidWlsZA0KCQkJCXVuc2V0KCRsYW5ndWFnZXNbJGtleV0pOw0KCQkJfQ0KCQkJLy8gY291bnQgdGhlIGFyZWEgc3RyaW5ncw0KCQkJaWYgKCRsYW5nVGFnID09PSAka2V5KQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRsYW5ndWFnZSBhcyAkYXJlYSA9PiAkbGFuZ3VhZ2VTdHJpbmdzKQ0KCQkJCXsNCgkJCQkJJG1haW5MYW5nTG9hZGVyWyRhcmVhXSA9IGNvdW50KCRsYW5ndWFnZVN0cmluZ3MpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBzdG9yZSBkZXRhaWxzIGZvciBidWlsZA0KCQkkdGhpcy0+YnVpbGREZXRhaWxzWyRpZF1bJGZpbGVfbmFtZV0gPSBbJGxhbmdUYWcgPT4gJG1haW5MYW5nTG9hZGVyLCAndGFyZ2V0X2NsaWVudCcgPT4gJHRhcmdldF9jbGllbnRdOw0KCX0NCg0KCS8qKg0KCSAqIFN0YXJ0IHRoZSBidWlsZGluZyBvZiB0aGUgbGFuZ3VhZ2VzIHBhY2thZ2VzDQoJICogDQoJICogQHJldHVybiAgdm9pZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBidWlsZExhbmd1YWdlcygmJGlkLCAkbGFuZ1RhZykNCgl7DQoJCWlmIChpc3NldCgkdGhpcy0+bGFuZ3VhZ2VzWyRpZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5sYW5ndWFnZXNbJGlkXSkpDQoJCXsNCgkJCS8vIHJlc3QgeG1sIGFycmF5DQoJCQkkbGFuZ1hNTCA9IFtdOw0KCQkJJGxhbmdOYW1lcyA9IFtdOw0KCQkJJGxhbmdQYWNrYWdlcyA9IFtdOw0KCQkJJGxhbmdaSVBOYW1lcyA9IFtdOw0KCQkJJGxhbmdYTUxOYW1lcyA9IFtdOw0KCQkJJHZlcnNpb25OYW1lID0gJHRoaXMtPmFjdGl2ZUNvbXBvbmVudHNOYW1lc1skaWRdIC4gJ192JyAuIHN0cl9yZXBsYWNlKCcuJywgJ18nLCAkdGhpcy0+Y29tcG9uZW50X3ZlcnNpb24gLiAnX19KJyAuICR0aGlzLT5qb29tbGFWZXJzaW9uKTsNCgkJCWZvcmVhY2ggKCR0aGlzLT5sYW5ndWFnZXNbJGlkXSBhcyAkZmlsZV9uYW1lID0+ICRsYW5ndWFnZXMpDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsYW5ndWFnZXMpICYmIGlzc2V0KCR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVskbGFuZ1RhZ10pKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBtYWluIGxhbmcgbG9hZGVyDQoJCQkJCSRtYWluTGFuZ0xvYWRlciA9ICR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVskbGFuZ1RhZ107DQoJCQkJCS8vIGdldCB0aGUgdGFyZ2V0IGNsaWVudA0KCQkJCQkkdGFyZ2V0X2NsaWVudCA9ICR0aGlzLT5idWlsZERldGFpbHNbJGlkXVskZmlsZV9uYW1lXVsndGFyZ2V0X2NsaWVudCddOw0KCQkJCQlmb3JlYWNoICgkbGFuZ3VhZ2VzIGFzICR0YWcgPT4gJGFyZWFzKQ0KCQkJCQl7DQoJCQkJCQkvLyB0cmltIHRoZSB0YWcNCgkJCQkJCSR0YWcgPSB0cmltKCR0YWcpOw0KCQkJCQkJLy8gZ2V0IGxhbmd1YWdlIG5hbWUNCgkJCQkJCSRsYW5nTmFtZSA9ICR0aGlzLT5nZXRMYW5ndWFnZU5hbWUoJHRhZyk7DQoJCQkJCQkkbGFuZ0NvZGVOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkbGFuZ05hbWUsICdGJyk7DQoJCQkJCQkvLyBzZXQgdGhlIGZpbGUgZm9sZGVyIG5hbWUNCgkJCQkJCSRsYW5nRm9sZGVyRmlsZU5hbWUgPSAkbGFuZ0NvZGVOYW1lIC4gJ18nIC4gJHZlcnNpb25OYW1lOw0KCQkJCQkJLy8gc2V0IHRoZSBtYWluIGZvbGRlciBwYXRoDQoJCQkJCQkkbWFpbl9wYXRoID0gJHRoaXMtPmNvbXBpbGVyUGF0aCAuICcvJyAuICRsYW5nRm9sZGVyRmlsZU5hbWUgLiAnLyc7DQoJCQkJCQkvLyBzZXQgdGhlIGxhbmd1YWdlIG5hbWUgZm9yIGxhdGVyDQoJCQkJCQkkbGFuZ05hbWVzWyRtYWluX3BhdGhdID0gJGxhbmdOYW1lOw0KCQkJCQkJLy8gc2V0IHRoZSBsYW5nIHppcCBuYW1lIGZvciBsYXRlcg0KCQkJCQkJJGxhbmdaSVBOYW1lc1skbWFpbl9wYXRoXSA9ICRsYW5nRm9sZGVyRmlsZU5hbWU7DQoJCQkJCQkvLyBzZXQgdGhlIGxhbmcgeG1sIG5hbWUgZm9yIGxhdGVyDQoJCQkJCQkkbGFuZ1hNTE5hbWVzWyRtYWluX3BhdGhdID0gJGxhbmdDb2RlTmFtZSAuICdfJyAuICR0aGlzLT5hY3RpdmVDb21wb25lbnRzTmFtZXNbJGlkXSA7DQoJCQkJCQkvLyB3ZSBtdXN0IGNoZWNrIGlmIG9sZCBmb2xkZXIgaXMgZm91bmQgYW5kIHJlbW92ZSBpdA0KCQkJCQkJaWYgKCFpc3NldCgkdGhpcy0+bGFuZ3VhZ2VUcmFja2VyWyRtYWluX3BhdGhdKSAmJiBGb2xkZXI6OmV4aXN0cygkbWFpbl9wYXRoKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyByZW1vdmUgdGhlIG1haW4gZm9sZGVyDQoJCQkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnVXRpbGl0aWVzLkZvbGRlcicpLT5yZW1vdmUoJG1haW5fcGF0aCk7DQoJCQkJCQkJLy8gZG8gbm90IHJlbW92ZSBpdCBhZ2Fpbg0KCQkJCQkJCSR0aGlzLT5sYW5ndWFnZVRyYWNrZXJbJG1haW5fcGF0aF0gPSB0cnVlOw0KCQkJCQkJfQ0KCQkJCQkJLy8gY2hlY2sgaWYgZXhpc3QgYW5kIGNyZWF0ZSBpZiBub3QNCgkJCQkJCWlmICghRm9sZGVyOjpleGlzdHMoJG1haW5fcGF0aCkpDQoJCQkJCQl7DQoJCQkJCQkJRm9sZGVyOjpjcmVhdGUoJG1haW5fcGF0aCk7DQoJCQkJCQkJLy8gY291bnQgdGhlIGZvbGRlciBjcmVhdGVkDQoJCQkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnVXRpbGl0aWVzLkNvdW50ZXInKS0+Zm9sZGVyKys7DQoJCQkJCQl9DQoJCQkJCQlmb3JlYWNoICgkYXJlYXMgYXMgJGFyZWEgPT4gJGxhbmd1YWdlU3RyaW5ncykNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIGZpbGUgbmFtZQ0KCQkJCQkJCSRmaWxlTmFtZSA9ICR0aGlzLT5nZXRMYW5ndWFnZUZpbGVOYW1lKCRmaWxlX25hbWUsICR0YWcsICRhcmVhKTsNCgkJCQkJCQkvLyBjaGVjayBpZiBsYW5ndWFnZSBzaG91bGQgYmUgYWRkZWQNCgkJCQkJCQlpZiAoJHRoaXMtPnNob3VsZExhbmd1YWdlQmVBZGRlZCgkdGFnLCAkbGFuZ3VhZ2VTdHJpbmdzLCAkbWFpbkxhbmdMb2FkZXJbJGFyZWFdLCAkZmlsZU5hbWUpICYmICgkYWN0aW9ucyA9ICR0aGlzLT5nZXRMYW5nQWN0aW9ucygkZmlsZV9uYW1lLCAkdGFnLCAkYXJlYSwgJHRhcmdldF9jbGllbnQpKSAhPT0gZmFsc2UpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBzZXQgdGhlIGxhbmd1YWdlIGRhdGENCgkJCQkJCQkJJGxhbmcgPSBhcnJheV9tYXAoDQoJCQkJCQkJCQlmdW5jdGlvbiAoJGxhbmdzdHJpbmcsICRwbGFjZWhvbGRlcikgew0KCQkJCQkJCQkJCXJldHVybiAkcGxhY2Vob2xkZXIgLiAnPSInIC4gJGxhbmdzdHJpbmcgLiAnIic7DQoJCQkJCQkJCQl9LCBhcnJheV92YWx1ZXMoJGxhbmd1YWdlU3RyaW5ncyksDQoJCQkJCQkJCQlhcnJheV9rZXlzKCRsYW5ndWFnZVN0cmluZ3MpDQoJCQkJCQkJCSk7DQoJCQkJCQkJCS8vIHNldCB0aGUgbGluZSBjb3VudGVyDQoJCQkJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1V0aWxpdGllcy5Db3VudGVyJyktPmxpbmUgKz0gY291bnQoDQoJCQkJCQkJCQkoYXJyYXkpICRsYW5nDQoJCQkJCQkJCSk7DQoJCQkJCQkJCS8vIGNoZWNrIHRoYXQgdGhlIG1haW4gZm9sZGVyIGV4aXN0DQoJCQkJCQkJCWZvcmVhY2ggKCRhY3Rpb25zIGFzICRhY3QpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRjbGllbnRfcGF0aCA9ICRtYWluX3BhdGggLiAkYWN0Wyd0YXJnZXRfY2xpZW50J10gLiAnLyc7DQoJCQkJCQkJCQkvLyBjaGVjayBpZiBleGlzdCBhbmQgY3JlYXRlIGlmIG5vdA0KCQkJCQkJCQkJaWYgKCFGb2xkZXI6OmV4aXN0cygkY2xpZW50X3BhdGgpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCUZvbGRlcjo6Y3JlYXRlKCRjbGllbnRfcGF0aCk7DQoJCQkJCQkJCQkJLy8gY291bnQgdGhlIGZvbGRlciBjcmVhdGVkDQoJCQkJCQkJCQkJJHRoaXMtPmZvbGRlckNvdW50Kys7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkvLyB3cml0ZSB0aGUgbGFuZ3VhZ2UgZGF0YSB0byBhIGZpbGUNCgkJCQkJCQkJCVN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OndyaXRlKA0KCQkJCQkJCQkJCSRjbGllbnRfcGF0aCAuICRhY3RbJ2ZpbGVfbmFtZSddLCBpbXBsb2RlKFBIUF9FT0wsICRsYW5nKQ0KCQkJCQkJCQkJKTsNCgkJCQkJCQkJCS8vIGNvdW50IHRoZSBmaWxlIGNyZWF0ZWQNCgkJCQkJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1V0aWxpdGllcy5Db3VudGVyJyktPmxpbmUrKzsNCgkJCQkJCQkJCS8vIGJ1aWxkIHhtbCBzdHJpbmdzDQoJCQkJCQkJCQlpZiAoIWlzc2V0KCRsYW5nWE1MWyRtYWluX3BhdGhdKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkbGFuZ1hNTFskbWFpbl9wYXRoXSA9IGFycmF5KCk7DQoJCQkJCQkJCQkJJGxhbmdQYWNrYWdlc1skbWFpbl9wYXRoXSA9IGFycmF5KCk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoIWlzc2V0KCRsYW5nWE1MWyRtYWluX3BhdGhdWyRhY3RbJ3RhcmdldF9jbGllbnQnXV0pKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRsYW5nWE1MWyRtYWluX3BhdGhdWyRhY3RbJ3RhcmdldF9jbGllbnQnXV0gPSBhcnJheSgpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gc2V0IHRoZSBwYWNrYWdlIHRhcmdldHMNCgkJCQkJCQkJCSRsYW5nUGFja2FnZXNbJG1haW5fcGF0aF1bJGFjdFsndGFyZ2V0X2NsaWVudCddXSA9ICRhY3RbJ3RhcmdldCddOw0KCQkJCQkJCQkJJGxhbmdYTUxbJG1haW5fcGF0aF1bJGFjdFsndGFyZ2V0X2NsaWVudCddXVtdID0gJGFjdFsnZmlsZV9uYW1lJ107DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gY2xlYXIgbWVtb3J5DQoJCQkJCQkJCXVuc2V0KCRsYW5nKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIGxvYWQgdGhlIGxhbmcgeG1sDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGxhbmdYTUwpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRsYW5nWE1MIGFzICRtYWluX3BhdGggPT4gJHRhcmdldF9jbGllbnRzKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBYTUwNCgkJCQkJJHhtbCA9IHN0cl9yZXBsYWNlKA0KCQkJCQkJCWFycmF5X2tleXMoU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hbGxBY3RpdmUoKSksDQoJCQkJCQkJYXJyYXlfdmFsdWVzKFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWxsQWN0aXZlKCkpLA0KCQkJCQkJCSR0aGlzLT5nZXRMYW5ndWFnZVhNTCgkdGFyZ2V0X2NsaWVudHMsICRsYW5nUGFja2FnZXNbJG1haW5fcGF0aF0sICRsYW5nTmFtZXNbJG1haW5fcGF0aF0pDQoJCQkJCQkpOw0KCQkJCQkvLyBnZXQgdGhlIFhNTCBGaWxlIE5hbWUNCgkJCQkJJHhtbEZpbGVOYW1lID0gJGxhbmdYTUxOYW1lc1skbWFpbl9wYXRoXSAuICcueG1sJzsNCgkJCQkJLy8gd3JpdGUgdGhlIGxhbmd1YWdlIGRhdGEgdG8gYSBmaWxlDQoJCQkJCVN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OndyaXRlKA0KCQkJCQkJJG1haW5fcGF0aCAuICR4bWxGaWxlTmFtZSwgJHhtbA0KCQkJCQkpOw0KCQkJCQkvLyBzZXQgdGhlIHppcCBmdWxsIHBhdGgNCgkJCQkJJHppcFBhdGggPSAkdGhpcy0+dGVtcFBhdGggLiAnLycgLiAkbGFuZ1pJUE5hbWVzWyRtYWluX3BhdGhdIC4gJy56aXAnOw0KCQkJCQkvLyBub3cgemlwIHRoZSBwYWNrYWdlDQoJCQkJCWlmIChTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjp6aXAoDQoJCQkJCQkkbWFpbl9wYXRoLCAkemlwUGF0aA0KCQkJCQkpKQ0KCQkJCQl7DQoJCQkJCQkvLyBub3cgcmVtb3ZlIHRoZSBwYWNrYWdlDQoJCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdVdGlsaXRpZXMuRm9sZGVyJyktPnJlbW92ZSgkbWFpbl9wYXRoKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgbGFuZ3VhZ2UgeG1sDQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExhbmd1YWdlWE1MKCYkdGFyZ2V0X2NsaWVudHMsICYkdGFyZ2V0cywgJiRsYW5ndWFnZSkNCgl7DQoJCSR4bWwgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiAnPGV4dGVuc2lvbiB0eXBlPSJmaWxlIiB2ZXJzaW9uPSIzLjIiIG1ldGhvZD0idXBncmFkZSI+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8bmFtZT4nIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6X2goJ0NvbXBvbmVudCcpIC4gJyAtICcgLiAkbGFuZ3VhZ2UgLiAnIExhbmd1YWdlIFBhY2s8L25hbWU+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8Y3JlYXRpb25EYXRlPicgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfaCgnQlVJTEREQVRFJykgLiAnPC9jcmVhdGlvbkRhdGU+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8YXV0aG9yPicgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfaCgnQVVUSE9SJykgLiAnPC9hdXRob3I+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8YXV0aG9yRW1haWw+JyAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol9oKCdBVVRIT1JFTUFJTCcpIC4gJzwvYXV0aG9yRW1haWw+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8YXV0aG9yVXJsPicgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfaCgnQVVUSE9SV0VCU0lURScpIC4gJzwvYXV0aG9yVXJsPic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAnPGNvcHlyaWdodD4nIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6X2goJ0NPUFlSSUdIVCcpIC4gJzwvY29weXJpZ2h0Pic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAnPGxpY2Vuc2U+JyAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol9oKCdMSUNFTlNFJykgLiAnPC9saWNlbnNlPic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAnPHZlcnNpb24+JyAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol9oKCdBQ1RVQUxWRVJTSU9OJykgLiAnPC92ZXJzaW9uPic7DQoJCSR4bWwgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAnPGRlc2NyaXB0aW9uPicgLiAkbGFuZ3VhZ2UgLiAnIExhbmd1YWdlIFBhY2sgLSAnIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6X2goJ1NIT1JUX0RFU0NSSVBUSU9OJykgLiAnPC9kZXNjcmlwdGlvbj4nOw0KCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gJzxmaWxlc2V0Pic7DQoJCWZvcmVhY2ggKCR0YXJnZXRfY2xpZW50cyBhcyAkdGFyZ2V0X2NsaWVudCA9PiAkZmlsZXMpDQoJCXsNCgkJCSR4bWwgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAnPGZpbGVzIGZvbGRlcj0iJyAuICR0YXJnZXRfY2xpZW50IC4gJyIgdGFyZ2V0PSInIC4gJHRhcmdldHNbJHRhcmdldF9jbGllbnRdIC4gJyI+JzsNCgkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkNCgkJCXsNCgkJCQkkeG1sIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gJzxmaWxlbmFtZT4nIC4gJGZpbGUgLiAnPC9maWxlbmFtZT4nOw0KCQkJfQ0KCQkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICc8L2ZpbGVzPic7DQoJCX0NCgkJJHhtbCAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICc8L2ZpbGVzZXQ+JzsNCgkJJHhtbCAuPSBQSFBfRU9MIC4gJzwvZXh0ZW5zaW9uPic7DQoNCgkJcmV0dXJuICR4bWw7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBsYW5ndWFnZSBuYW1lDQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExhbmd1YWdlTmFtZSgmJHRhZykNCgl7DQoJCWlmICghaXNzZXQoJHRoaXMtPmxhbmd1YWdlTmFtZXNbJHRhZ10pKQ0KCQl7DQoJCQlpZiAoKCRuYW1lID0gU3VwZXJfX19kYjg3YzMzOV81YmI2XzQyOTFfYTdlZl8yYzQ4ZWExYjA2YmNfX19Qb3dlcjo6dmFyKCdsYW5ndWFnZScsICR0YWcsICdsYW5ndGFnJywgJ25hbWUnKSkgIT09IGZhbHNlKQ0KCQkJew0KCQkJCSR0aGlzLT5sYW5ndWFnZU5hbWVzWyR0YWddID0gJG5hbWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmxhbmd1YWdlTmFtZXNbJHRhZ10gPSAkdGFnOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkdGhpcy0+bGFuZ3VhZ2VOYW1lc1skdGFnXTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIGxhbmd1YWdlIGFjdGlvbnMNCgkgKiANCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRMYW5nQWN0aW9ucygmJGZpbGVfbmFtZSwgJiR0YWcsICYkYXJlYSwgJiR0YXJnZXRfY2xpZW50KQ0KCXsNCgkJLy8gY29tcG9uZW50IGV4dGVudGlvbiB0eXBlDQoJCWlmIChzdHJwb3MoJGZpbGVfbmFtZSwgJ2NvbV8nKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSR0YXJnZXRfY2xpZW50ID0gJ2FkbWluJzsNCgkJCSR0YXJnZXQgPSAnYWRtaW5pc3RyYXRvci9sYW5ndWFnZS8nOw0KCQkJaWYgKHN0cnBvcygkYXJlYSwgJ3NpdGUnKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJHRhcmdldF9jbGllbnQgPSAnc2l0ZSc7DQoJCQkJJHRhcmdldCA9ICdsYW5ndWFnZS8nOw0KCQkJfQ0KCQkJcmV0dXJuIGFycmF5KA0KCQkJCWFycmF5KA0KCQkJCQkndGFyZ2V0X2NsaWVudCcgPT4gJHRhcmdldF9jbGllbnQsDQoJCQkJCSd0YXJnZXQnID0+ICR0YXJnZXQgLiAkdGFnLA0KCQkJCQknZmlsZV9uYW1lJyA9PiAkdGhpcy0+Z2V0TGFuZ3VhZ2VGaWxlTmFtZSgkZmlsZV9uYW1lLCAkdGFnLCAkYXJlYSkNCgkJCQkpDQoJCQkpOw0KCQl9DQoJCWVsc2VpZiAoJ2FkbWluJyA9PT0gJHRhcmdldF9jbGllbnQpDQoJCXsNCgkJCSR0YXJnZXQgPSAnYWRtaW5pc3RyYXRvci9sYW5ndWFnZS8nOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRhcmdldCA9ICdsYW5ndWFnZS8nOw0KCQl9DQoJCS8vIG1vZHVsZS9wbHVnaW4gZXh0ZW5zaW9uIHR5cGUgKFRPRE8gd2UgcmV0dXJuIGJvdGggZm9yIG5vdykNCgkJcmV0dXJuIGFycmF5KA0KCQkJYXJyYXkoDQoJCQkJJ3RhcmdldF9jbGllbnQnID0+ICR0YXJnZXRfY2xpZW50LA0KCQkJCSd0YXJnZXQnID0+ICR0YXJnZXQgLiAkdGFnLA0KCQkJCSdmaWxlX25hbWUnID0+ICR0aGlzLT5nZXRMYW5ndWFnZUZpbGVOYW1lKCRmaWxlX25hbWUsICR0YWcsICRhcmVhKQ0KCQkJKSwNCgkJCWFycmF5KA0KCQkJCSd0YXJnZXRfY2xpZW50JyA9PiAkdGFyZ2V0X2NsaWVudCwNCgkJCQkndGFyZ2V0JyA9PiAkdGFyZ2V0IC4gJHRhZywNCgkJCQknZmlsZV9uYW1lJyA9PiAkdGhpcy0+Z2V0TGFuZ3VhZ2VGaWxlTmFtZSgkZmlsZV9uYW1lLCAkdGFnLCAkYXJlYSwgJy5zeXMnKQ0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgbGFuZ3VhZ2UgZmlsZSBuYW1lDQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExhbmd1YWdlRmlsZU5hbWUoJiRmaWxlX25hbWUsICYkdGFnLCAmJGFyZWEsICR0eXBlID0gJycpDQoJew0KCQkvLyBjb21wb25lbnQgZXh0ZW5zaW9uIHR5cGUNCgkJaWYgKHN0cnBvcygkZmlsZV9uYW1lLCAnY29tXycpICE9PSBmYWxzZSkNCgkJew0KCQkJaWYgKHN0cnBvcygkYXJlYSwgJ3N5cycpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkdHlwZSA9ICcuc3lzJzsNCgkJCX0NCgkJfQ0KCQkvLyBmaWxlIG5hbWUNCgkJcmV0dXJuICR0YWcgLiAnLicgLiAkZmlsZV9uYW1lIC4gJHR5cGUgLiAnLmluaSc7DQoJfQ0KDQoJLyoqDQoJICogY2hlY2sgaWYgYSB0cmFuc2xhdGlvbiBzaG91bGQgYmUgYWRkZWQNCgkgKiANCgkgKiBAcmV0dXJuICBib29sDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNob3VsZExhbmd1YWdlQmVBZGRlZCgmJHRhZywgJiRsYW5ndWFnZVN0cmluZ3MsICYkdG90YWwsICYkZmlsZV9uYW1lKQ0KCXsNCgkJLy8gb25seSBsb2cgbWVzc2FnZXMgZm9yIG5vbmUgJHRoaXMtPmxhbmdUYWcgdHJhbnNsYXRpb25zDQoJCWlmICgkdGhpcy0+bGFuZ1RhZyAhPT0gJHRhZykNCgkJew0KCQkJJGxhbmdTdHJpbmdOciAgPSBjb3VudCgkbGFuZ3VhZ2VTdHJpbmdzKTsNCgkJCSRsYW5nU3RyaW5nU3VtID0gU3VwZXJfX18xNTJjODc5M184Yjc1XzQ3MTVfOTk2YV8yNTdiOWY2NTQ1MWNfX19Qb3dlcjo6YmMoDQoJCQkJJ211bCcsICRsYW5nU3RyaW5nTnIsIDEwMA0KCQkJKTsNCgkJCSRwZXJjZW50YWdlICAgID0gU3VwZXJfX18xNTJjODc5M184Yjc1XzQ3MTVfOTk2YV8yNTdiOWY2NTQ1MWNfX19Qb3dlcjo6YmMoDQoJCQkJJ2RpdicsICRsYW5nU3RyaW5nU3VtLCAkdG90YWwNCgkJCSk7DQoJCQkkc3RyaW5nTkFtZSAgICA9ICgkbGFuZ1N0cmluZ05yID09IDEpID8gJyhzdHJpbmcgJw0KCQkJCS4gJHRhZyAuICcgdHJhbnNsYXRlZCknDQoJCQkJOiAnKHN0cmluZ3MgJyAuICR0YWcgLiAnIHRyYW5zbGF0ZWQpJzsNCg0KCQkJLy8gZm9yY2UgbG9hZCBpZiBkZWJ1ZyBsaW5lcyBhcmUgYWRkZWQNCgkJCWlmICghJHRoaXMtPmRlYnVnTGluZW5yKQ0KCQkJew0KCQkJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCBpbnN0YWxsIHRoaXMgdHJhbnNsYXRpb24NCgkJCQlpZiAoJHBlcmNlbnRhZ2UgPCAkdGhpcy0+cGVyY2VudGFnZUxhbmd1YWdlQWRkKQ0KCQkJCXsNCgkJCQkJLy8gZG9udCBhZGQNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5MYW5ndWFnZS5NZXNzYWdlcycpLT5zZXQoImV4Y2x1ZGUuJGZpbGVfbmFtZSIsDQoJCQkJCQknPGI+JyAuICR0b3RhbCAuICc8L2I+KHRvdGFsICcNCgkJCQkJCS4gJHRoaXMtPmxhbmdUYWcgLiAnIHN0cmluZ3MpIG9ubHkgPGI+Jw0KCQkJCQkJLiAkbGFuZ1N0cmluZ05yIC4gJzwvYj4nIC4gJHN0cmluZ05BbWUNCgkJCQkJCS4gJyA9ICcgLiAkcGVyY2VudGFnZQ0KCQkJCQkpOw0KDQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIHNob3cgaWYgaXQgd2FzIGFkZGVkIGFzIHdlbGwNCgkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuTGFuZ3VhZ2UuTWVzc2FnZXMnKS0+c2V0KCJpbmNsdWRlLiRmaWxlX25hbWUiLA0KCQkJCSc8Yj4nIC4gJHRvdGFsIC4gJzwvYj4odG90YWwgJw0KCQkJCS4gJHRoaXMtPmxhbmdUYWcgLiAnIHN0cmluZ3MpIGFuZCA8Yj4nDQoJCQkJLiAkbGFuZ1N0cmluZ05yIC4gJzwvYj4nIC4gJHN0cmluZ05BbWUgLiAnID0gJw0KCQkJCS4gJHBlcmNlbnRhZ2UNCgkJCSk7DQoJCX0NCg0KCQlyZXR1cm4gdHJ1ZTsNCgl9', '[[[Component]]] Language Packaging', '', '', '', '', '', '', '', '2.0.0', '{\"property_selection0\":{\"property\":\"34\"},\"property_selection1\":{\"property\":\"35\"},\"property_selection2\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Language Packaging J5', '', 1, '', '', 1, '2024-03-10 15:55:07', '2024-03-10 21:36:38', 3, '', 2), +(41, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to improve your action log integration with Joomla for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\n/// not ready', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"activate\",\"label\":\"Component Activation\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2680\",\"custom_value\":\"\"}}}}', '3d324afb-3de8-40cb-868d-7b59ad50aeda', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw0KdXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTsNCg0KSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCg0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxGYWN0b3J5IGFzIENGYWN0b3J5Ow0KdXNlIFZETVxKb29tbGFcQ29tcG9uZW50YnVpbGRlclxDb21waWxlclxVdGlsaXRpZXNcUGxhY2VmaXg7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xJbmRlbnQ7DQp1c2UgVkRNXEpvb21sYVxDb21wb25lbnRidWlsZGVyXENvbXBpbGVyXFV0aWxpdGllc1xMaW5lOw0K', 11, '{\"method_selection0\":{\"method\":\"59\"},\"method_selection1\":{\"method\":\"120\"},\"method_selection2\":{\"method\":\"79\"},\"method_selection3\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoqDQoJICogVGhlIFNjcmlwdHMNCgkgKiANCgkgKiBAdmFyICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJHNjcmlwdHNBcnJheSA9IFsnUE9TVElOU1RBTExTQ1JJUFQnID0+IFtdLCAnUE9TVFVQREFURVNDUklQVCcgPT4gW10sICdVTklOU1RBTExTQ1JJUFQnID0+IFtdXTsNCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIEdldCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldENvbXBvbmVudERhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+bGFuZ3VhZ2VBcnJheSkpDQoJCXsNCgkJCWZvcmVhY2goJHRoaXMtPmxhbmd1YWdlQXJyYXkgYXMgJGtleSA9PiAkc3RyaW5nKQ0KCQkJew0KCQkJCUNGYWN0b3J5OjpfKCdMYW5ndWFnZScpLT5zZXQoJ2FkbWluJywgJGtleSwgJHN0cmluZyk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBCdWlsZCBGaWxlcyBDb250ZW50XQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkFmdGVyQnVpbGRGaWxlc0NvbnRlbnQoKQ0KCXsNCgkJaWYgKCR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSkNCgkJew0KCQkJJGZ1bmN0aW9uX25hbWUgPSAnZ2V0TWFpbkozJzsNCgkJCWlmIChDRmFjdG9yeTo6XygnQ29uZmlnJyktPmdldCgnam9vbWxhX3ZlcnNpb24nLCAzKSAhPSAzKQ0KCQkJew0KCQkJCSRmdW5jdGlvbl9uYW1lID0gJ2dldE1haW5KNCc7DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgc2NyaXB0IHN0cmluZ3MgdG8gdGhlICBjb21wb25lbnQNCgkJCWZvcmVhY2ggKCR0aGlzLT5zY3JpcHRzQXJyYXkgYXMgJHRhcmdldCA9PiAmJGJ1Y2tldCkNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIGNvbXBvbmVudCBtYWluIHRhcmdldCBzY3JpcHQNCgkJCQlDRmFjdG9yeTo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hZGQoJHRhcmdldCwgJHRoaXMtPnskZnVuY3Rpb25fbmFtZSAuICR0YXJnZXR9KCkpOw0KCQkJCS8vIGFkZCB0aGUgY29tcG9uZW50IHZpZXdzIHRhcmdldCBzY3JpcHRzDQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCXsNCgkJCQkJQ0ZhY3Rvcnk6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+YWRkKCR0YXJnZXQsIGltcGxvZGUoJycsICRidWNrZXQpKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBNb2RlbCBWaWV3IERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGFkZCB0aGUgYmV0dGVyIGludGVncmF0aW9uIHdpdGggYWN0aW9uIGxvZw0KCQlpZiAoJHRoaXMtPmNvbXBvbmVudEFjdGl2ZSgpICYmU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPmZpZWxkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCR2aWV3LT5maWVsZHMgYXMgJGZpZWxkKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkZmllbGRbJ3RpdGxlJ10pICYmICRmaWVsZFsndGl0bGUnXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJHRpdGxlX2hvbGRlciA9ICRmaWVsZFsnYmFzZV9uYW1lJ107DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGlmIG5vdCBmb3VuZCB0cnkgYWdhaW4NCgkJCWlmICghaXNzZXQoJHRpdGxlX2hvbGRlcikpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHZpZXctPmZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJGZpZWxkWydsaXN0J10pICYmICRmaWVsZFsnbGlzdCddID09IDEgJiYNCgkJCQkJCWlzc2V0KCRmaWVsZFsnb3JkZXJfbGlzdCddKSAmJiAkZmllbGRbJ29yZGVyX2xpc3QnXSA9PSAxICYmDQoJCQkJCQlpc3NldCgkZmllbGRbJ2xpbmsnXSkgJiYgJGZpZWxkWydsaW5rJ10gPT0gMSkNCgkJCQkJew0KCQkJCQkJJHRpdGxlX2hvbGRlciA9ICRmaWVsZFsnYmFzZV9uYW1lJ107DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gaWYgZm91bmQgdXBkYXRlIHBsYWNlaG9sZGVyDQoJCQlpZiAoaXNzZXQoJHRpdGxlX2hvbGRlcikpDQoJCQl7DQoJCQkJLy8gc2V0IG1haW4gdGl0bGUNCgkJCQlDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+c2V0KCc8PDxNQUlOX1RJVExFPj4+JywgJHRpdGxlX2hvbGRlciwgZmFsc2UpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGZhbGwgYmFjayBvbiBJRA0KCQkJCUNGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5zZXQoJzw8PE1BSU5fVElUTEU+Pj4nLCAnaWQnLCBmYWxzZSk7DQoJCQl9DQoNCgkJCSRmdW5jdGlvbl9uYW1lID0gJ2dldFZpZXdKMyc7DQoJCQlpZiAoQ0ZhY3Rvcnk6Ol8oJ0NvbmZpZycpLT5nZXQoJ2pvb21sYV92ZXJzaW9uJywgMykgIT0gMykNCgkJCXsNCgkJCQkkZnVuY3Rpb25fbmFtZSA9ICdnZXRWaWV3SjQnOw0KCQkJfQ0KDQoJCQkvLyBub3cgbG9hZCB0aGUgc2NyaXB0IHN0cmluZ3MNCgkJCWZvcmVhY2ggKCR0aGlzLT5zY3JpcHRzQXJyYXkgYXMgJHRhcmdldCA9PiAmJGJ1Y2tldCkNCgkJCXsNCgkJCQkkYnVja2V0W10gPSAkdGhpcy0+eyRmdW5jdGlvbl9uYW1lIC4gJHRhcmdldH0oKTsNCgkJCX0NCg0KCQkJLy8ganVzdCByZW1vdmUgaXQgYWdhaW4NCgkJCUNGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5yZW1vdmUoJzw8PE1BSU5fVElUTEU+Pj4nKTsNCg0KCQkJLy8gc2V0IGxhbmd1YWdlIHN0cmluZw0KCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPmdldF8oIkxBTkdfUFJFRklYIikgLiAnX1RZUEVfJyAuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT5nZXRfKCJWSUVXIildID0gJHZpZXctPm5hbWVfc2luZ2xlOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFBvc3QgSW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozUE9TVElOU1RBTExTQ1JJUFQoKQ0KCXsNCgkJJHNjcmlwdCA9IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCBkYiBpZiBub3Qgc2V0IGFscmVhZHkuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImlmICghaXNzZXQoXCRkYikpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCRkYiA9IEZhY3Rvcnk6OmdldERibygpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ3JlYXRlIHRoZSAiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIiBhY3Rpb24gbG9ncyBleHRlbnNpb25zIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIl9hY3Rpb25fbG9nc19leHRlbnNpb25zID0gbmV3IFxzdGRDbGFzcygpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMtPmV4dGVuc2lvbiA9ICdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgdGhlIG9iamVjdCBpbnRvIHRoZSBhY3Rpb24gbG9ncyBleHRlbnNpb25zIHRhYmxlLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnNfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnLCBcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBQb3N0IEluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKM1BPU1RJTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSB0aGUgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX3RpdGxlID0gJyIgLiBQbGFjZWZpeDo6XygiVklFVyIpIC4gIic7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZy0+aWRfaG9sZGVyID0gJ2lkJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRpdGxlX2hvbGRlciA9ICc8PDxNQUlOX1RJVExFPj4+JzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRhYmxlX25hbWUgPSAnI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRleHRfcHJlZml4ID0gJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgdGhlIG9iamVjdCBpbnRvIHRoZSBhY3Rpb24gbG9nIGNvbmZpZyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dfY29uZmlnJywgXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgTWFpbiBQb3N0IFVwZGF0ZSBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozUE9TVFVQREFURVNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgU2V0IGRiIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiaWYgKCFpc3NldChcJGRiKSkiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIn0iOw0KDQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDcmVhdGUgdGhlICIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgb2JqZWN0LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucy0+ZXh0ZW5zaW9uID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIic7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENoZWNrIGlmICIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiIGFjdGlvbiBsb2cgZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gYWN0aW9uIGxvZ3MgZXh0ZW5zaW9ucyBEQi4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRxdWVyeSA9IFwkZGItPmdldFF1ZXJ5KHRydWUpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT5zZWxlY3QoXCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcpKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnktPmZyb20oXCRkYi0+cXVvdGVOYW1lKCcjX19hY3Rpb25fbG9nc19leHRlbnNpb25zJykpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2V4dGVuc2lvbicpIC4gJyBMSUtFICcuIFwkZGItPnF1b3RlKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucy0+ZXh0ZW5zaW9uKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGRiLT5leGVjdXRlKCk7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCB0aGUgb2JqZWN0IGludG8gdGhlIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUgaWYgbm90IGZvdW5kLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIVwkZGItPmdldE51bVJvd3MoKSkiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAieyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnNfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnLCBcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFBvc3QgVXBkYXRlIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3SjNQT1NUVVBEQVRFU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSB0aGUgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIG9iamVjdC4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcgPSBuZXcgXHN0ZENsYXNzKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT5pZCA9IG51bGw7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX3RpdGxlID0gJyIgLiBQbGFjZWZpeDo6XygiVklFVyIpIC4gIic7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzID0gJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZy0+aWRfaG9sZGVyID0gJ2lkJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRpdGxlX2hvbGRlciA9ICc8PDxNQUlOX1RJVExFPj4+JzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRhYmxlX25hbWUgPSAnI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJzsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPnRleHRfcHJlZml4ID0gJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuICBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIGFjdGlvbiBsb2cgY29uZmlnIGlzIGFscmVhZHkgaW4gYWN0aW9uX2xvZ19jb25maWcgREIuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRxdWVyeS0+c2VsZWN0KFwkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnKSkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHF1ZXJ5LT5mcm9tKFwkZGItPnF1b3RlTmFtZSgnI19fYWN0aW9uX2xvZ19jb25maWcnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkcXVlcnktPndoZXJlKFwkZGItPnF1b3RlTmFtZSgndHlwZV9hbGlhcycpIC4gJyBMSUtFICcuIFwkZGItPnF1b3RlKFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLT50eXBlX2FsaWFzKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJGRiLT5leGVjdXRlKCk7IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFNldCB0aGUgb2JqZWN0IGludG8gdGhlIGNvbnRlbnQgdHlwZXMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gImlmIChcJGRiLT5nZXROdW1Sb3dzKCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWctPmlkID0gXCRkYi0+bG9hZFJlc3VsdCgpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZ19VcGRhdGVkID0gXCRkYi0+dXBkYXRlT2JqZWN0KCcjX19hY3Rpb25fbG9nX2NvbmZpZycsIFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnLCAnaWQnKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJlbHNlIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWdfSW5zZXJ0ZWQgPSBcJGRiLT5pbnNlcnRPYmplY3QoJyNfX2FjdGlvbl9sb2dfY29uZmlnJywgXCQiIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICJfYWN0aW9uX2xvZ19jb25maWcpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbkozVU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgYXBwIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFpc3NldChcJGFwcCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiIGZyb20gdGhlIGFjdGlvbl9sb2dzX2V4dGVuc2lvbnMgdGFibGUiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCQiIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIl9hY3Rpb25fbG9nc19leHRlbnNpb25zID0gYXJyYXkoIFwkZGItPnF1b3RlTmFtZSgnZXh0ZW5zaW9uJykgLiAnID0gJyAuIFwkZGItPnF1b3RlKCdjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICInKSApOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPmRlbGV0ZShcJGRiLT5xdW90ZU5hbWUoJyNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnMnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfYWN0aW9uX2xvZ3NfZXh0ZW5zaW9ucyk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpOyI7DQoNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4ZWN1dGUgdGhlIHF1ZXJ5IHRvIHJlbW92ZSAiIC4gUGxhY2VmaXg6Ol8oIkNvbXBvbmVudCIpIC4gIiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJCIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiX3JlbW92ZWRfZG9uZSA9IFwkZGItPmV4ZWN1dGUoKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKFwkIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfcmVtb3ZlZF9kb25lKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIElmIHN1Y2Nlc3NmdWxseSByZW1vdmUgIiAuIFBsYWNlZml4OjpfKCJDb21wb25lbnQiKSAuICIgYWRkIHF1ZXVlZCBzdWNjZXNzIG1lc3NhZ2UuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZSIgLiAieHQ6Ol8oJ1RoZSBjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIgZXh0ZW5zaW9uIHdhcyByZW1vdmVkIGZyb20gdGhlIDxiPiNfX2FjdGlvbl9sb2dzX2V4dGVuc2lvbnM8L2I+IHRhYmxlJykpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Vmlld0ozVU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgZGIgaWYgbm90IHNldCBhbHJlYWR5LiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJpZiAoIWlzc2V0KFwkZGIpKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAifSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTZXQgYXBwIGlmIG5vdCBzZXQgYWxyZWFkeS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiaWYgKCFpc3NldChcJGFwcCkpIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gInsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOyI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ9IjsNCg0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiBmcm9tIHRoZSBhY3Rpb25fbG9nX2NvbmZpZyB0YWJsZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZyA9IGFycmF5KCBcJGRiLT5xdW90ZU5hbWUoJ3R5cGVfYWxpYXMnKSAuICcgPSAnLiBcJGRiLT5xdW90ZSgnY29tXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiLiIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicpICk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnkgPSBcJGRiLT5nZXRRdWVyeSh0cnVlKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRxdWVyeS0+ZGVsZXRlKFwkZGItPnF1b3RlTmFtZSgnI19fYWN0aW9uX2xvZ19jb25maWcnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkcXVlcnktPndoZXJlKFwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnKTsiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiXCRkYi0+c2V0UXVlcnkoXCRxdWVyeSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEV4ZWN1dGUgdGhlIHF1ZXJ5IHRvIHJlbW92ZSBjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIuIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiX2FjdGlvbl9sb2dfY29uZmlnX2RvbmUgPSBcJGRiLT5leGVjdXRlKCk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gImlmIChcJCIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIl9hY3Rpb25fbG9nX2NvbmZpZ19kb25lKSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICJ7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIElmIHN1Y2Nlc3NmdWxseSByZW1vdmVkICIgLiBQbGFjZWZpeDo6XygiQ29tcG9uZW50IikgLiAiICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiBhZGQgcXVldWVkIHN1Y2Nlc3MgbWVzc2FnZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCRhcHAtPmVucXVldWVNZXNzYWdlKFRlIiAuICJ4dDo6XygnVGhlIGNvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICIgdHlwZSBhbGlhcyB3YXMgcmVtb3ZlZCBmcm9tIHRoZSA8Yj4jX19hY3Rpb25fbG9nX2NvbmZpZzwvYj4gdGFibGUnKSk7IjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIn0iOw0KDQoJCXJldHVybiBDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkc2NyaXB0KTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIE1haW4gUG9zdCBJbnN0YWxsIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRNYWluSjRQT1NUSU5TVEFMTFNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKQ0KCQkJLiAiIEFkZCBjb21wb25lbnQgdG8gdGhlIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIlwkdGhpcy0+c2V0QWN0aW9uTG9nc0V4dGVuc2lvbnMoKTsiOw0KDQoJCXJldHVybiAkc2NyaXB0Ow0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBQb3N0IEluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKNFBPU1RJTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgQWRkICIgLiBQbGFjZWZpeDo6XygiVmlldyIpIC4gIiB0byB0aGUgYWN0aW9uIGxvZ3MgY29uZmlnIHRhYmxlLiI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICJcJHRoaXMtPnNldEFjdGlvbkxvZ0NvbmZpZygiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdHlwZVRpdGxlIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIiciIC4gUGxhY2VmaXg6Ol8oIlZJRVciKSAuICInLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0eXBlQWxpYXMiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJ2NvbV8iIC4gUGxhY2VmaXg6Ol8oImNvbXBvbmVudCIpIC4gIi4iIC4gUGxhY2VmaXg6Ol8oInZpZXciKSAuICInLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBpZEhvbGRlciI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInaWQnLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0aXRsZUhvbGRlciI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInPDw8TUFJTl9USVRMRT4+PicsIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRhYmxlTmFtZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInI19fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICJfIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGV4dFByZWZpeCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInIiAuIFBsYWNlZml4OjpfKCJMQU5HX1BSRUZJWCIpIC4gIiciOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiKTsiOw0KDQoJCXJldHVybiBDRmFjdG9yeTo6XygnUGxhY2Vob2xkZXInKS0+dXBkYXRlXygkc2NyaXB0KTsNCgl9DQoNCgkvKioNCgkgKiBnZXQgdGhlIE1haW4gUG9zdCBVcGRhdGUgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE1haW5KNFBPU1RVUERBVEVTQ1JJUFQoKQ0KCXsNCgkJJHNjcmlwdCA9IFBIUF9FT0wgLiBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykNCgkJCS4gIiBBZGQvVXBkYXRlIGNvbXBvbmVudCBpbiB0aGUgYWN0aW9uIGxvZ3MgZXh0ZW5zaW9ucyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0aGlzLT5zZXRBY3Rpb25Mb2dzRXh0ZW5zaW9ucygpOyI7DQoNCgkJcmV0dXJuICRzY3JpcHQ7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBWaWV3IFBvc3QgVXBkYXRlIFNjcmlwdA0KCSAqIA0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRWaWV3SjRQT1NUVVBEQVRFU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygzKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgQWRkL1VwZGF0ZSAiIC4gUGxhY2VmaXg6Ol8oIlZpZXciKSAuICIgaW4gdGhlIGFjdGlvbiBsb2dzIGNvbmZpZyB0YWJsZS4iOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMykgLiAiXCR0aGlzLT5zZXRBY3Rpb25Mb2dDb25maWcoIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHR5cGVUaXRsZSI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICInIiAuIFBsYWNlZml4OjpfKCJWSUVXIikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdHlwZUFsaWFzIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIidjb21fIiAuIFBsYWNlZml4OjpfKCJjb21wb25lbnQiKSAuICIuIiAuIFBsYWNlZml4OjpfKCJ2aWV3IikgLiAiJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgaWRIb2xkZXIiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJ2lkJywiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgdGl0bGVIb2xkZXIiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJzw8PE1BSU5fVElUTEU+Pj4nLCI7DQoJCSRzY3JpcHQgLj0gUEhQX0VPTCAuIEluZGVudDo6Xyg0KSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiB0YWJsZU5hbWUiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJyNfXyIgLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiXyIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicsIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDQpIC4gIi8vIiAuIExpbmU6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRleHRQcmVmaXgiOw0KCQkkc2NyaXB0IC49IFBIUF9FT0wgLiBJbmRlbnQ6Ol8oNCkgLiAiJyIgLiBQbGFjZWZpeDo6XygiTEFOR19QUkVGSVgiKSAuICInIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDMpIC4gIik7IjsNCg0KCQlyZXR1cm4gQ0ZhY3Rvcnk6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHNjcmlwdCk7DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBNYWluIFVuaW5zdGFsbCBTY3JpcHQNCgkgKiANCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TWFpbko0VU5JTlNUQUxMU0NSSVBUKCkNCgl7DQoJCSRzY3JpcHQgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIEluZGVudDo6XygyKSAuICIvLyIgLiBMaW5lOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pDQoJCQkuICIgUmVtb3ZlIGNvbXBvbmVudCBmcm9tIGFjdGlvbiBsb2dzIGV4dGVuc2lvbnMgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkdGhpcy0+cmVtb3ZlQWN0aW9uTG9nc0V4dGVuc2lvbnMoKTsiOw0KDQoJCXJldHVybiAkc2NyaXB0Ow0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgVmlldyBVbmluc3RhbGwgU2NyaXB0DQoJICogDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZpZXdKNFVOSU5TVEFMTFNDUklQVCgpDQoJew0KCQkkc2NyaXB0ID0gUEhQX0VPTCAuIFBIUF9FT0wgLiBJbmRlbnQ6Ol8oMikgLiAiLy8iIC4gTGluZTo6XyhfX0xpbmVfXywgX19DbGFzc19fKQ0KCQkJLiAiIFJlbW92ZSAiIC4gUGxhY2VmaXg6Ol8oIlZpZXciKSAuICIgZnJvbSBhY3Rpb24gbG9ncyBjb25maWcgdGFibGUuIjsNCgkJJHNjcmlwdCAuPSBQSFBfRU9MIC4gSW5kZW50OjpfKDIpIC4gIlwkdGhpcy0+cmVtb3ZlQWN0aW9uTG9nQ29uZmlnKCdjb21fIg0KCQkJLiBQbGFjZWZpeDo6XygiY29tcG9uZW50IikgLiAiLiIgLiBQbGFjZWZpeDo6XygidmlldyIpIC4gIicpOyI7DQoNCgkJcmV0dXJuIENGYWN0b3J5OjpfKCdQbGFjZWhvbGRlcicpLT51cGRhdGVfKCRzY3JpcHQpOw0KCX0NCg0KW0NVU1RPTUNPREU9Y29tcG9uZW50QWN0aXZlXQ==', '[[[Component]]] ActionLog Compiler', '', '', '', '', '', '', '', '2.0.0', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB ActionLog Compiler J5', '', 1, '', '', 1, '2024-03-10 15:55:10', '2024-03-11 14:59:18', 3, '', 3), +(42, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to tweak the export options for your components during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\nAlso be sure to activate the component/s that should be targeted with this added export feature under the Component Activation tab.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Settings\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2679\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2680\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2681\",\"custom_value\":\"\"}}}}', '3b8434ed-2727-4c74-85c2-e439b6a7b637', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 11, '{\"method_selection0\":{\"method\":\"92\"},\"method_selection1\":{\"method\":\"56\"},\"method_selection2\":{\"method\":\"121\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogVGhlIGxhbmd1YWdlIHN0cmluZyBidWlsZGVyDQoJICogDQoJICogQHZhciAgICAgYXJyYXkNCgkgKi8NCglwcm90ZWN0ZWQgJGxhbmd1YWdlQXJyYXkgPSBbXTsNCg0KCS8qDQoJICogVGhlIEV4cG9ydCBUZXh0IE9ubHkgc3dpdGNoDQoJICogDQoJICogQHZhciAgICAgIGludA0KCSAqLw0KCXByb3RlY3RlZCAkZXhwb3J0VGV4dE9ubHkgPSAwOw0KDQoJLyoNCgkgKiBUaGUgU3RyaWN0IEZpZWxkIEV4cG9ydCBQZXJtaXNzaW9ucyBzd2l0Y2gNCgkgKiANCgkgKiBAdmFyICAgICAgYm9vbA0KCSAqLw0KCXByb3RlY3RlZCAkc3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IGZhbHNlOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIEdldCBDb21wb25lbnQgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25BZnRlckdldENvbXBvbmVudERhdGEoKQ0KCXsNCgkJaWYgKCR0aGlzLT5leHBvcnRUZXh0T25seSAmJiAkdGhpcy0+Y29tcG9uZW50QWN0aXZlKCkpDQoJCXsNCgkJCS8vIGFjdGl2YXRlIGV4cG9ydCB0ZXh0IG9ubHkNCgkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5zZXQoJ2V4cG9ydF90ZXh0X29ubHknLCAoaW50KSAkdGhpcy0+ZXhwb3J0VGV4dE9ubHkpOw0KDQoJCQkvLyBhY3RpdmF0ZSBzdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGQgaWYgc2V0IGluIHBsdWdpbiAoZGVmYXVsdCB0cnVlKQ0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnNldCgncGVybWlzc2lvbl9zdHJpY3RfcGVyX2ZpZWxkJywgKGJvb2wpICR0aGlzLT5zdHJpY3RGaWVsZEV4cG9ydFBlcm1pc3Npb25zKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEFmdGVyIE1vZGVsIENvbXBvbmVudCBEYXRhXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkFmdGVyTW9kZWxDb21wb25lbnREYXRhKCYkY29tcG9uZW50KQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBleHBvcnQgZm9yIGFueSB2aWV3DQoJCWlmICgkdGhpcy0+Y29tcG9uZW50QWN0aXZlKCkpDQoJCXsNCgkJCS8vIHNldCB0aGUgZXhwb3J0L2ltcG9ydCBvcHRpb24NCgkJCWlmIChpc3NldCgkY29tcG9uZW50LT5hZG1pbl92aWV3cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudC0+YWRtaW5fdmlld3MpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRjb21wb25lbnQtPmFkbWluX3ZpZXdzIGFzICR2aWV3KQ0KCQkJCXsNCgkJCQkJaWYgKCEkdGhpcy0+ZXhwb3J0VGV4dE9ubHkgJiYgKGlzc2V0KCR2aWV3Wydwb3J0J10pICYmICR2aWV3Wydwb3J0J10gfHwgMSA9PSAkdmlld1snc2V0dGluZ3MnXS0+YWRkX2N1c3RvbV9pbXBvcnQpKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+ZXhwb3J0VGV4dE9ubHkgPSAxOw0KCQkJCQkJJHRoaXMtPnN0cmljdEZpZWxkRXhwb3J0UGVybWlzc2lvbnMgPSAoYm9vbCkgJHRoaXMtPnBhcmFtcy0+Z2V0KCdzdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGQnLCAxKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBTZXQgTGFuZyBGaWxlIERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlU2V0TGFuZ0ZpbGVEYXRhKCkNCgl7DQoJCWlmICgkdGhpcy0+ZXhwb3J0VGV4dE9ubHkgJiYgJHRoaXMtPmNvbXBvbmVudEFjdGl2ZSgpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzLT5sYW5ndWFnZUFycmF5KSkNCgkJew0KCQkJZm9yZWFjaCgkdGhpcy0+bGFuZ3VhZ2VBcnJheSBhcyAka2V5ID0+ICRzdHJpbmcpDQoJCQl7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnTGFuZ3VhZ2UnKS0+c2V0KCdhZG1pbnN5cycsICRrZXksICRzdHJpbmcpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIFNldCBDb25maWcgRmllbGQgc2V0c10NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVTZXRDb25maWdGaWVsZHNldHMoJiR0aW1lcikNCgl7DQoJCS8vIG9ubHkgYWRkIGZpZWxkcyBhZnRlciBzZWNvbmQgdGltZQ0KCQlpZiAoJHRoaXMtPmV4cG9ydFRleHRPbmx5ICYmICR0aGlzLT5jb21wb25lbnRBY3RpdmUoKSAmJiAkdGltZXIgPT0gMikNCgkJew0KCQkJLy8gbWFpbiBsYW5nIHByZWZpeA0KCQkJJGxhbmcgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+bGFuZ19wcmVmaXggLiAnX0NPTkZJRyc7DQoJCQkvLyBzdGFydCBidWlsZGluZyBmaWVsZCBzZXQgZm9yIGNvbmZpZw0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICI8ZmllbGRzZXQiKTsNCgkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAnbmFtZT0iZXhwb3J0X3RleHRfb25seV9jb25maWciJyk7DQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gJ2xhYmVsPSInIC4gJGxhbmcgLiAnX0VYUE9SVF9URVhUX09OTFlfVEFCX0xBQkVMIicpOw0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICdkZXNjcmlwdGlvbj0iJyAuICRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX1RBQl9ERVNDUklQVElPTiI+Jyk7DQoJCQkvLyBzZXR1cCBsYW5nDQoJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfRVhQT1JUX1RFWFRfT05MWV9UQUJfTEFCRUwnXSA9ICJFeHBvcnQgT3B0aW9ucyI7DQoJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfRVhQT1JUX1RFWFRfT05MWV9UQUJfREVTQ1JJUFRJT04nXSA9ICJIZXJlIGFyZSBzb21lIGV4dHJhIG9wdGlvbiB0byBhZGp1c3QgdGhlIGV4cG9ydCBiZWhhdmlvdXIgb2YgYWRtaW4gdmlld3MuIjsNCgkJCS8vIGFkZCBjdXN0b20gRXhwb3J0IE9wdGlvbnMNCgkJCWlmIChpc3NldCgkY29uZmlnRmllbGRTZXRzQ3VzdG9tRmllbGRbJ0V4cG9ydCBPcHRpb25zJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb25maWdGaWVsZFNldHNDdXN0b21GaWVsZFsnRXhwb3J0IE9wdGlvbnMnXSkpDQoJCQl7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgaW1wbG9kZSgiIiwgJGNvbmZpZ0ZpZWxkU2V0c0N1c3RvbUZpZWxkWydFeHBvcnQgT3B0aW9ucyddKSk7DQoJCQkJdW5zZXQoJGNvbmZpZ0ZpZWxkU2V0c0N1c3RvbUZpZWxkWydFeHBvcnQgT3B0aW9ucyddKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfRVhQT1JUX1RFWFRfT05MWV9MQUJFTCddID0gIkV4cG9ydCBUZXh0IE9ubHkiOw0KCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19FWFBPUlRfVEVYVF9PTkxZX0RFU0NSSVBUSU9OJ10gPSAiVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZXhwb3J0IG9mIHN0cmluZy90ZXh0IGluc3RlYWQgb2YgbGlua2VkIElEcyBpbiBhbGwgYWRtaW4gdmlld3MgdGhhdCBoYXZlIGFuIGV4cG9ydCBvcHRpb24uIjsNCg0KCQkJCSR0aGlzLT5sYW5ndWFnZUFycmF5WyRsYW5nIC4gJ19BQ1RJVkFURSddID0gIkFjdGl2YXRlIjsNCgkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfREVBQ1RJVkFURSddID0gIkRlYWN0aXZhdGUiOw0KDQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiPCEtLSIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBFeHBvcnQgVGV4dCBPbmx5IEZpZWxkLiBUeXBlOiBSYWRpby4gKGpvb21sYSkgLS0+Iik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICI8ZmllbGQiKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInR5cGU9XCJyYWRpb1wiIik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJuYW1lPVwiZXhwb3J0X3RleHRfb25seVwiIik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJsYWJlbD1cIiIgLiAkbGFuZyAuICJfRVhQT1JUX1RFWFRfT05MWV9MQUJFTFwiIik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJkZXNjcmlwdGlvbj1cIiIgLiAkbGFuZyAuICJfRVhQT1JUX1RFWFRfT05MWV9ERVNDUklQVElPTlwiIik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAteWVzbm9cIiIpOw0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiZGVmYXVsdD1cIjBcIj4iKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIjwhLS0iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgT3B0aW9uIFNldC4gLS0+Iik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICI8b3B0aW9uIHZhbHVlPVwiMVwiPiIpOw0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAkbGFuZyAuICJfQUNUSVZBVEU8L29wdGlvbj4iKTsNCgkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIjxvcHRpb24gdmFsdWU9XCIwXCI+Iik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICRsYW5nIC4gIl9ERUFDVElWQVRFPC9vcHRpb24+Iik7DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICI8L2ZpZWxkPiIpOw0KDQoJCQkJLy8gYWRkICBzdHJpY3QgRmllbGQgRXhwb3J0IFBlcm1pc3Npb25zIGZpZWxkDQoJCQkJaWYgKCR0aGlzLT5zdHJpY3RGaWVsZEV4cG9ydFBlcm1pc3Npb25zKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbJGxhbmcgLiAnX1NUUklDVF9QRVJNSVNTSU9OX1BFUl9GSUVMRF9MQUJFTCddID0gIlVzZSBTdHJpY3QgUGVybWlzc2lvbiBwZXIvZmllbGQiOw0KCQkJCQkkdGhpcy0+bGFuZ3VhZ2VBcnJheVskbGFuZyAuICdfU1RSSUNUX1BFUk1JU1NJT05fUEVSX0ZJRUxEX0RFU0NSSVBUSU9OJ10gPSAiVXNlIHN0cmljdCBwZXJtaXNzaW9ucyBwZXIvZmllbGQgaW4gdGhlIGV4cG9ydCBtZXRob2RzIHdoZXJlIHRoZXJlIGFyZSBmaWVsZHMgcGVybWlzc2lvbnMgaW4gYSB2aWV3LiI7DQoNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiPCEtLSIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBTdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGQgRmllbGQuIFR5cGU6IFJhZGlvLiAoam9vbWxhKSAtLT4iKTsNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICI8ZmllbGQiKTsNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ0eXBlPVwicmFkaW9cIiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIm5hbWU9XCJzdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGRcIiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImxhYmVsPVwiIiAuICRsYW5nIC4gIl9TVFJJQ1RfUEVSTUlTU0lPTl9QRVJfRklFTERfTEFCRUxcIiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImRlc2NyaXB0aW9uPVwiIiAuICRsYW5nIC4gIl9TVFJJQ1RfUEVSTUlTU0lPTl9QRVJfRklFTERfREVTQ1JJUFRJT05cIiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC15ZXNub1wiIik7DQoJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiZGVmYXVsdD1cIjFcIj4iKTsNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICI8IS0tIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIE9wdGlvbiBTZXQuIC0tPiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIjxvcHRpb24gdmFsdWU9XCIxXCI+Iik7DQoJCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAkbGFuZyAuICJfQUNUSVZBVEU8L29wdGlvbj4iKTsNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICI8b3B0aW9uIHZhbHVlPVwiMFwiPiIpOw0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5CdWlsZGVyLkNvbmZpZy5GaWVsZHNldHMnKS0+YWRkKCdjb21wb25lbnQnLCBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gJGxhbmcgLiAiX0RFQUNUSVZBVEU8L29wdGlvbj4iKTsNCgkJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db25maWcuRmllbGRzZXRzJyktPmFkZCgnY29tcG9uZW50JywgU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICI8L2ZpZWxkPiIpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGNsb3NlIHRoYXQgZmllbGRzZXQNCgkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29uZmlnLkZpZWxkc2V0cycpLT5hZGQoJ2NvbXBvbmVudCcsIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiPC9maWVsZHNldD4iKTsNCgkJfQ0KCX0NCg0KW0NVU1RPTUNPREU9Y29tcG9uZW50QWN0aXZlXQ==', '[[[Component]]] Export Compiler', '', '', '', '', '', '', '', '2.0.0', '{\"property_selection0\":{\"property\":\"34\"},\"property_selection1\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Export Compiler J5', '', 1, '', '', 1, '2024-03-10 15:55:12', '2024-03-11 15:47:23', 6, '', 2), +(43, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to build the privacy plugin for your component during compilation. To activate it you must first enable it here. Then open your JCB component global options, and under the Global tab, select this plugin in the Activate Compiler Plugins field.\r\n\r\nAlso be sure to link your admin views to the privacy suite of Joomla via our other Content - [[[Component]]] Privacy Tabs plugin.', '{}', 'd13975a2-47d2-451d-bdd8-c44024eef1b8', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xBcHBsaWNhdGlvblxDTVNBcHBsaWNhdGlvbjsNCnVzZSBKb29tbGFcQ01TXFBsdWdpblxDTVNQbHVnaW47DQp1c2UgSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5Ow==', 11, '{\"method_selection0\":{\"method\":\"58\"},\"method_selection1\":{\"method\":\"117\"},\"method_selection2\":{\"method\":\"70\"},\"method_selection3\":{\"method\":\"119\"},\"method_selection4\":{\"method\":\"120\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkYXV0b2xvYWRMYW5ndWFnZSA9IHRydWU7DQoNCgkvKioNCgkgKiBUaGUgbGFuZ3VhZ2Ugc3RyaW5nIGJ1aWxkZXINCgkgKiANCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqLw0KCXByb3RlY3RlZCAkbGFuZ3VhZ2VBcnJheSA9IFtdOw0KDQoJLyoqDQoJICogR2xvYmFsIHN3aXRjaCB0byBzZWUgaWYgY29tcG9uZW50IGhhdmUgbmVlZCBvZiBwcml2YWN5IHBsdWdpbiB0byBiZSBsb2FkZWQuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkbG9hZFByaXZhY3kgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIFRoZSBWaWV3cyBMaW5rZWQgdG8gSm9vbWxhIFVzZXJzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGFjdGl2ZVZpZXdzID0gW107DQoNCgkvKioNCgkgKiBUaGUgVmlld3MgcGVybWlzc2lvbiBmaWVsZHMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMC4wDQoJICovDQoJcHJvdGVjdGVkICAkcGVybWlzc2lvbkZpZWxkcyA9IFtdOw0KDQoJLyoqDQoJICogRXZlbnQgVHJpZ2dlcmVkIGluIHRoZSBjb21waWxlciBbb24gQmVmb3JlIE1vZGVsIFZpZXcgRGF0YV0NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBqY2JfY2Vfb25CZWZvcmVNb2RlbFZpZXdEYXRhKCYkdmlldykNCgl7DQoJCS8vIGFkZCB0aGUgcHJpdmFjeQ0KCQkkdmlldy0+cGFyYW1zID0gKGlzc2V0KCR2aWV3LT5wYXJhbXMpICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXMpKSA/IGpzb25fZGVjb2RlKCR2aWV3LT5wYXJhbXMsIHRydWUpIDogJHZpZXctPnBhcmFtczsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2aWV3LT5wYXJhbXMpICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZpZXctPnBhcmFtc1sncHJpdmFjeSddKSAmJiANCgkJCWlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYWN0aXZhdGUnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhY3RpdmF0ZSddID09IDEpDQoJCXsNCgkJCS8vIGFjdGl2YXRlIHRoZSBsb2FkIG9mIHRoZSBwcml2YWN5IHBsdWdpbg0KCQkJJHRoaXMtPmxvYWRQcml2YWN5ID0gdHJ1ZTsNCgkJCS8vIGxvYWQgdGhlIGFkbWluIHZpZXcgZGV0YWlscw0KCQkJJHRoaXMtPmFjdGl2ZVZpZXdzWyR2aWV3LT5pZF0gPSAkdmlldzsNCgkJCS8vIGFkZCBwZXJtaXNzaW9ucw0KCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zID0gKGlzc2V0KCR2aWV3LT5hZGRwZXJtaXNzaW9ucykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHZpZXctPmFkZHBlcm1pc3Npb25zKSkgPyBqc29uX2RlY29kZSgkdmlldy0+YWRkcGVybWlzc2lvbnMsIHRydWUpIDogbnVsbDsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+YWRkcGVybWlzc2lvbnMpKQ0KCQkJew0KCQkJCSR2aWV3LT5hZGRwZXJtaXNzaW9ucyA9IGFycmF5X3ZhbHVlcygkdmlldy0+YWRkcGVybWlzc2lvbnMpOw0KCQkJCS8vIGFkZCB0aGUgbmV3IHBlcm1pc3Npb25zDQoJCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zW10gPSBbDQoJCQkJCSdhY3Rpb24nID0+ICd2aWV3LnByaXZhY3kuZGVsZXRlJywNCgkJCQkJJ2ltcGxlbWVudGF0aW9uJyA9PiAzLA0KCQkJCQkndGl0bGUnID0+ICR2aWV3LT5uYW1lX2xpc3QgLiAnIFByaXZhY3kgRGVsZXRlJywNCgkJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnIEFsbG93cyB0aGUgdXNlcnMgaW4gdGhpcyBncm91cCB0byByZW1vdmUgdGhlaXIgcGVyc29uYWwgZGF0YSBpbiAnIC4gJHZpZXctPm5hbWVfbGlzdCAuICcgdmlhIHRoZSBKb29tbGEgcHJpdmFjeSBzdWl0ZS4nDQoJCQkJXTsNCgkJCQkkdmlldy0+YWRkcGVybWlzc2lvbnNbXSA9IFsNCgkJCQkJJ2FjdGlvbicgPT4gJ3ZpZXcucHJpdmFjeS5hY2Nlc3MnLA0KCQkJCQknaW1wbGVtZW50YXRpb24nID0+IDMsDQoJCQkJCSd0aXRsZScgPT4gJHZpZXctPm5hbWVfbGlzdCAuICcgUHJpdmFjeSBBY2Nlc3MnLA0KCQkJCQknZGVzY3JpcHRpb24nID0+ICcgQWxsb3dzIHRoZSB1c2VycyBpbiB0aGlzIGdyb3VwIHRvIGFjY2VzcyB0aGVpciBwZXJzb25hbCBkYXRhIGluICcgLiAkdmlldy0+bmFtZV9saXN0IC4gJyB2aWEgdGhlIEpvb21sYSBwcml2YWN5IHN1aXRlLicNCgkJCQldOw0KCQkJCS8vIGNvbnZlcnQgYmFjayB0byBqc29uDQoJCQkJJHZpZXctPmFkZHBlcm1pc3Npb25zID0ganNvbl9lbmNvZGUoJHZpZXctPmFkZHBlcm1pc3Npb25zLCBKU09OX0ZPUkNFX09CSkVDVCk7DQoJCQl9DQoJCQkvLyBhZGQgcGxhY2Vob2xkZXJzIHRvIHZpZXcgaWYgbm90IGFscmVhZHkgc2V0DQoJCQlpZiAoIWlzc2V0KCR0aGlzLT5hY3RpdmVWaWV3c1skdmlldy0+aWRdLT5wbGFjZWhvbGRlcnMpKQ0KCQkJew0KCQkJCSR0aGlzLT5hY3RpdmVWaWV3c1skdmlldy0+aWRdLT5wbGFjZWhvbGRlcnMgPSBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdQbGFjZWhvbGRlcicpLT5hY3RpdmU7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBBZnRlciBHZXRdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQWZ0ZXJHZXQoKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBjb21wb25lbnQgbmVlZHMgYSBwcml2YWN5IHBsdWdpbiBsb2FkZWQNCgkJaWYgKCR0aGlzLT5sb2FkUHJpdmFjeSkNCgkJew0KCQkJJHBsdWdpbiA9IFxKUGx1Z2luSGVscGVyOjpnZXRQbHVnaW4oJ2NvbnRlbnQnLCAnW1tbY29tcG9uZW50XV1dcHJpdmFjeXRhYnMnKTsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMganNvbg0KCQkJaWYgKGlzc2V0KCRwbHVnaW4tPnBhcmFtcykgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHBsdWdpbi0+cGFyYW1zKSkNCgkJCXsNCgkJCQkvLyBDb252ZXJ0IHRoZSBwYXJhbXMgZmllbGQgdG8gYW4gYXJyYXkuDQoJCQkJJHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5Ow0KCQkJCSRyZWdpc3RyeS0+bG9hZFN0cmluZygkcGx1Z2luLT5wYXJhbXMpOw0KCQkJCSRwbHVnaW4tPnBhcmFtcyA9ICRyZWdpc3RyeS0+dG9BcnJheSgpOw0KCQkJfQ0KCQkJLy8gbm93IGdldCB0aGUgcGx1Z2luIElEIGlmIHNldA0KCQkJaWYgKGlzc2V0KCRwbHVnaW4tPnBhcmFtc1sncGx1Z2luJ10pICYmICRwbHVnaW4tPnBhcmFtc1sncGx1Z2luJ10gPiAwKQ0KCQkJew0KCQkJCS8vIGlmIGxpbmtlZCBpdCB3aWxsIG9ubHkgbG9hZCBpdCBvbmNlDQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnSm9vbWxhcGx1Z2luLkRhdGEnKS0+c2V0KCRwbHVnaW4tPnBhcmFtc1sncGx1Z2luJ10pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCUZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmVucXVldWVNZXNzYWdlKFRleHQ6Ol8oJ1lvdSBkbyBub3QgaGF2ZSBhIGdsb2JhbCBwcml2YWN5IHBsdWdpbiBzZXR1cCwgc28gdGhlIGludGVncmF0aW9uIHdpdGggSm9vbWxhIHByaXZhY3kgc3VpdGUgY291bGQgbm90IGJlIGJ1aWxkLicpLCAnV2FybmluZycpOw0KCQkJCSR0aGlzLT5sb2FkUHJpdmFjeT0gZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBFdmVudCBUcmlnZ2VyZWQgaW4gdGhlIGNvbXBpbGVyIFtvbiBCZWZvcmUgVXBkYXRlIEZpbGVzXQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGpjYl9jZV9vbkJlZm9yZVVwZGF0ZUZpbGVzKCRjb21waWxlcikNCgl7DQoJCS8vIGNoZWNrIGlmIHByaXZhY3kgaXMgdG8gYmUgbG9hZGVkDQoJCWlmICgkdGhpcy0+bG9hZFByaXZhY3kgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXMtPmFjdGl2ZVZpZXdzKSkNCgkJew0KCQkJLy8gZ2V0IGNvbXBpbGVyIGRlZmF1bHRzDQoJCQkkc3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5nZXQoJ3Blcm1pc3Npb25fc3RyaWN0X3Blcl9maWVsZCcsIGZhbHNlKTsNCgkJCSRleHBvcnRUZXh0T25seSA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbmZpZycpLT5nZXQoJ2V4cG9ydF90ZXh0X29ubHknLCAxKTsNCg0KCQkJLy8gbG9hZCB0aGUgZ2V0UHJpdmFjeUV4cG9ydCBmdW5jdGlvbnMNCgkJCWZvcmVhY2ggKCR0aGlzLT5hY3RpdmVWaWV3cyBhcyAkaWQgPT4gJiR2aWV3KQ0KCQkJew0KCQkJCS8vIHNldCBwZXJtaXNzaW9ucyBiYXNlZCBvbiB2aWV3DQoJCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsncGVybWlzc2lvbnMnXSkpDQoJCQkJew0KCQkJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+c2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCAoYm9vbCkgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydwZXJtaXNzaW9ucyddKTsNCgkJCQl9DQoNCgkJCQkvLyBhbGxvdyB0ZXh0IG9ubHkgZXhwb3J0DQoJCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPnNldCgnZXhwb3J0X3RleHRfb25seScsIDEpOw0KDQoJCQkJLy8gc2V0IHZpZXcgbGlzdCBuYW1lDQoJCQkJJHZpZXdOYW1lX2xpc3QgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX2xpc3QpOw0KCQkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkJJHZpZXdOYW1lX3NpbmdsZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfc2luZ2xlKTsNCgkJCQkvLyBsb2FkIHRoZSBmdW5jdGlvbg0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5NdWx0aScpLT5hZGQoJHZpZXdOYW1lX2xpc3QgLiAnfE1PREVMRVhQT1JUTUVUSE9EJywNCgkJCQkJJGNvbXBpbGVyLT5zZXRHZXRJdGVtc01vZGVsTWV0aG9kKA0KCQkJCQkJJHZpZXdOYW1lX3NpbmdsZSwNCgkJCQkJCSR2aWV3TmFtZV9saXN0LA0KCQkJCQkJWw0KCQkJCQkJCSdmdW5jdGlvbk5hbWUnID0+ICdnZXRQcml2YWN5RXhwb3J0JywNCgkJCQkJCQknZG9jRGVzYycgPT4gJ01ldGhvZCB0byBnZXQgZGF0YSBkdXJpbmcgYW4gZXhwb3J0IHJlcXVlc3QuJywNCgkJCQkJCQkndHlwZScgPT4gJ3ByaXZhY3knDQoJCQkJCQldDQoJCQkJCSkNCgkJCQkpOw0KCQkJCS8vIGdldCB0aGUgcGVybWlzc2lvbnMgYnVpbGRpbmcgdmFsdWVzIGZvciBsYXRlciBpZiBuZWVkZWQNCgkJCQlpZiAoU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29uZmlnJyktPmdldCgncGVybWlzc2lvbl9zdHJpY3RfcGVyX2ZpZWxkJywgZmFsc2UpICYmDQoJCQkJCWlzc2V0KCRjb21waWxlci0+cGVybWlzc2lvbkZpZWxkc1skdmlld05hbWVfc2luZ2xlXSkgJiYNCgkJCQkJU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBpbGVyLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdKSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdID0gJGNvbXBpbGVyLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gc2V0IGNvbXBpbGVyIGRlZmF1bHRzDQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+c2V0KCdwZXJtaXNzaW9uX3N0cmljdF9wZXJfZmllbGQnLCAkc3RyaWN0RmllbGRFeHBvcnRQZXJtaXNzaW9ucyk7DQoJCQlTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb25maWcnKS0+c2V0KCdleHBvcnRfdGV4dF9vbmx5JywgJGV4cG9ydFRleHRPbmx5KTsNCg0KCQkJLy8gYWRkIGhlbHBlciBjbGFzc2VzDQoJCQkkaGVscGVyX3N0cmluZ3MgPSBbJ0NVU1RPTV9IRUxQRVJfU0NSSVBUJywgJ1NJVEVfQ1VTVE9NX0hFTFBFUl9TQ1JJUFQnLCAnQk9USF9DVVNUT01fSEVMUEVSX1NDUklQVCddOw0KCQkJJHByaXZhY3lfZXZlbnRzID0gWw0KCQkJCSdQcml2YWN5Q2FuUmVtb3ZlRGF0YScgPT4gdHJ1ZSwNCgkJCQknUHJpdmFjeUV4cG9ydFJlcXVlc3QnID0+IHRydWUsDQoJCQkJJ1ByaXZhY3lSZW1vdmVEYXRhJyA9PiB0cnVlDQoJCQldOw0KDQoJCQlmb3JlYWNoICgkaGVscGVyX3N0cmluZ3MgYXMgJGhlbHBlcikNCgkJCXsNCgkJCQlpZiAoKCRoZWxwZXJfY29udGVudCA9IFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkJ1aWxkZXIuQ29udGVudC5PbmUnKS0+Z2V0KCRoZWxwZXIpKSAhPT0gbnVsbCAmJg0KCQkJCQlTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaGVscGVyX2NvbnRlbnQpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJHByaXZhY3lfZXZlbnRzIGFzICRwcml2YWN5X2V2ZW50ID0+ICYkYWRkKQ0KCQkJCQl7DQoJCQkJCQkvLyBjaGVjayBpZiB0aGUgZXZlbiBpcyBvdmVyd3JpdGVuDQoJCQkJCQlpZiAoc3RycG9zKCRoZWxwZXJfY29udGVudCwgJ3B1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb24nIC4gJHByaXZhY3lfZXZlbnQgLiAnKCcpICE9PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkkYWRkID0gZmFsc2U7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIGFkZCB0aGUgZXZlbnRzIHN0aWxsIG5lZWRlZA0KCQkJU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQnVpbGRlci5Db250ZW50Lk9uZScpLT5hZGQoJ0JPVEhfQ1VTVE9NX0hFTFBFUl9TQ1JJUFQnLA0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ1BsYWNlaG9sZGVyJyktPnVwZGF0ZV8oJHRoaXMtPmdldEhlbHBlck1ldGhvZCgkcHJpdmFjeV9ldmVudHMpKQ0KCQkJKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEV2ZW50IFRyaWdnZXJlZCBpbiB0aGUgY29tcGlsZXIgW29uIEJlZm9yZSBTZXQgTGFuZyBGaWxlIERhdGFdDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAxLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gamNiX2NlX29uQmVmb3JlU2V0TGFuZ0ZpbGVEYXRhKCkNCgl7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+bGFuZ3VhZ2VBcnJheSkpDQoJCXsNCgkJCWZvcmVhY2goJHRoaXMtPmxhbmd1YWdlQXJyYXkgYXMgJGtleSA9PiAkc3RyaW5nKQ0KCQkJew0KCQkJCVN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0xhbmd1YWdlJyktPnNldCgnc2l0ZScsICRrZXksICRzdHJpbmcpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBIZWxwZXIgbWV0aG9kcyBuZWVkZWQgdG8gaW50ZWdyYXRlIHdpdGggSm9vbWxhIFByaXZhY3kgU3VpdGUNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkaGVscGVyTWV0aG9kcyAgVGhlIGhlbHBlciBtZXRob2RzIHN0cmluZw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhlbHBlck1ldGhvZCgmJGV2ZW50cykNCgl7DQoJCSRtZXRob2RzID0gJyc7DQoJCWZvcmVhY2ggKCRldmVudHMgYXMgJGV2ZW50ID0+ICRhZGQpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHRoZSBldmVuIHNob3VsZCBiZSBhZGRlZA0KCQkJaWYgKCRhZGQpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSBldmVudA0KCQkJCSR0aGlzLT57J3NldCcuJGV2ZW50fSgkbWV0aG9kcyk7DQoJCQl9DQoJCX0NCgkJLy8gb25seSBhZGQgaGVhZGVyIGlmIHRoZXJlIHdhcyBldmVudHMgYWRkZWQNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRtZXRob2RzKSkNCgkJew0KCQkJJG1ldGhvZHMgPSBQSFBfRU9MIC4gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgPDw8PT09IFByaXZhY3kgaW50ZWdyYXRpb24gd2l0aCBKb29tbGEgUHJpdmFjeSBzdWl0ZSA9PT0+Pj4iIC4gUEhQX0VPTCAuICRtZXRob2RzOw0KCQl9DQoNCgkJcmV0dXJuICRtZXRob2RzOw0KCX0NCg0KCS8qKg0KCSAqIFNldCBQcml2YWN5IENhbiBSZW1vdmUgRGF0YQ0KCSAqIA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRtZXRob2RzICBUaGUgbWV0aG9kcyBzdHJpbmcNCgkgKiANCgkgKiBAcmV0dXJuICB2b2lkDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFByaXZhY3lDYW5SZW1vdmVEYXRhKCYkbWV0aG9kcykNCgl7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHJlbW92ZSBpbmZvcm1hdGlvbiByZXF1ZXN0IGNhbiBiZSBwcm9jZXNzZWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lQbHVnaW4gIFwkcGx1Z2luICBUaGUgcGx1Z2luIGJlaW5nIHByb2Nlc3NlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lSZW1vdmFsU3RhdHVzICBcJHN0YXR1cyAgVGhlIHN0YXR1cyBiZWluZyBzZXQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBQcml2YWN5VGFibGVSZXF1ZXN0ICBcJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICBcJHVzZXIgICAgIFRoZSB1c2VyIGFjY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCBpZiBhdmFpbGFibGUiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEByZXR1cm4gIFByaXZhY3lSZW1vdmFsU3RhdHVzIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICovIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAicHVibGljIHN0YXRpYyBmdW5jdGlvbiBvblByaXZhY3lDYW5SZW1vdmVEYXRhKCZcJHBsdWdpbiwgJlwkc3RhdHVzLCAmXCRyZXF1ZXN0LCAmXCR1c2VyKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBCdWNrZXQgdG8gZ2V0IGFsbCByZWFzb25zIHdoeSByZW1vdmFsIG5vdCBhbGxvd2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiXCRyZWFzb25zID0gYXJyYXkoKTsiOw0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KDQoJCQkvLyBsb2FkIHRoZSBjYW5EbyBmcm9tIGdldEFjdGlvbnMgaGVscGVyIG1ldGhvZA0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBkZWxldGUgIiAuICR2aWV3LT5uYW1lX2xpc3Q7DQoJCQkvLyBzZXQgdGhlIGlmIHN0YXRlbWVudCBiYXNlZCBvbiB0aGUgcGVybWlzc2lvbiBidWlsZGVyDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJpZiAoIVwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5DcmVhdG9yLlBlcm1pc3Npb24nKS0+Z2V0QWN0aW9uKCR2aWV3TmFtZV9zaW5nbGUsICdjb3JlLmRlbGV0ZScpDQoJCQkJLiAiJywgJ2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJykgJiYgIVwkdXNlci0+YXV0aG9yaXNlKCciDQoJCQkJLiBTdXBlcl9fX2Q5MTBkOGI4XzRjMjNfNGYzZV84Y2RhXzQzOGYyZDJiZDdhY19fX1Bvd2VyOjpfKCdDb21waWxlci5DcmVhdG9yLlBlcm1pc3Npb24nKS0+Z2V0QWN0aW9uKCR2aWV3TmFtZV9zaW5nbGUsICdjb3JlLnByaXZhY3kuZGVsZXRlJykNCgkJCQkuICInLCAnY29tXyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICInKSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAieyI7DQoJCQkvLyBzZXQgbGFuZ3VhZ2Uga2V5DQoJCQkkbGFuZ19rZXkgPSAkdmlldy0+cGxhY2Vob2xkZXJzW1N1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oIkxBTkdfUFJFRklYIildIC4gJ19QUklWQUNZX0NBTlRfUkVNT1ZFXycgLiAkdmlldy0+cGxhY2Vob2xkZXJzW1N1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oIlZJRVdTIildOw0KCQkJLy8gc2V0IGxhbmd1YWdlIHN0cmluZw0KCQkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbJGxhbmdfa2V5XSA9ICJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byByZW1vdmUvZGVsZXRlICIuICR2aWV3LT5uYW1lX2xpc3QgLiAiLiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJHJlYXNvbnNbXSA9IEpUZSIgLiAieHQ6Ol8oJyIgLiAkbGFuZ19rZXkgLiAiJyk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KCQkJLy8gc2V0IGxhbmd1YWdlIGtleQ0KCQkJJGxhbmdfa2V5ID0gJHZpZXctPnBsYWNlaG9sZGVyc1tTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJMQU5HX1BSRUZJWCIpXSAuICdfUFJJVkFDWV9DQU5UX1JFTU9WRV9DT05UQUNUX1NVUFBPUlQnOw0KCQl9DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENoZWNrIGlmIGFueSByZWFzb25zIHdlcmUgZm91bmQgbm90IHRvIGFsbG93IHJlbW92YWwiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soXCRyZWFzb25zKSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRzdGF0dXMtPmNhblJlbW92ZSA9IGZhbHNlOyI7DQoJCS8vIHNldCBsYW5ndWFnZSBzdHJpbmcNCgkJJHRoaXMtPmxhbmd1YWdlQXJyYXlbJGxhbmdfa2V5XSA9ICdQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBtb3JlIGRldGFpbHMuJzsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRzdGF0dXMtPnJlYXNvbiA9IGltcGxvZGUoJyAnIC4gUEhQX0VPTCwgXCRyZWFzb25zKSAuICcgJyAuIFBIUF9FT0wgLiBKVGUiIC4gInh0OjpfKCciIC4gJGxhbmdfa2V5IC4gIicpOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJyZXR1cm4gXCRzdGF0dXM7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCX0NCg0KCS8qKg0KCSAqIFNldCBQcml2YWN5IEV4cG9ydCBSZXF1ZXN0DQoJICogDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZHMgIFRoZSBtZXRob2RzIHN0cmluZw0KCSAqIA0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0UHJpdmFjeUV4cG9ydFJlcXVlc3QoJiRtZXRob2RzKQ0KCXsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiLyoqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogUHJvY2Vzc2VzIGFuIGV4cG9ydCByZXF1ZXN0IGZvciBKb29tbGEgY29yZSB1c2VyIGRhdGEiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lQbHVnaW4gIFwkcGx1Z2luICBUaGUgcGx1Z2luIGJlaW5nIHByb2Nlc3NlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIERvbWFpbkFycmF5ICBcJGRvbWFpbnMgIFRoZSBhcnJheSBvZiBkb21haW5zIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgXCRyZXF1ZXN0ICBUaGUgcmVxdWVzdCByZWNvcmQgYmVpbmcgcHJvY2Vzc2VkIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgSlVzZXIgICAgICAgICAgICAgICAgXCR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKi8iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9uUHJpdmFjeUV4cG9ydFJlcXVlc3QoJlwkcGx1Z2luLCAmXCRkb21haW5zLCAmXCRyZXF1ZXN0LCAmXCR1c2VyKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInsiOw0KCQlmb3JlYWNoICgkdGhpcy0+YWN0aXZlVmlld3MgYXMgJHZpZXcpDQoJCXsNCgkJCS8vIHNldCB2aWV3IGxpc3QgbmFtZQ0KCQkJJHZpZXdOYW1lX2xpc3QgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX2xpc3QpOw0KCQkJLy8gc2V0IHZpZXcgc2luZ2xlIG5hbWUNCgkJCSR2aWV3TmFtZV9zaW5nbGUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2aWV3LT5uYW1lX3NpbmdsZSk7DQoJCQkvLyBsb2FkIHRoZSBjYW5EbyBmcm9tIGdldEFjdGlvbnMgaGVscGVyIG1ldGhvZA0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBhY2Nlc3MgIiAuICR2aWV3LT5uYW1lX2xpc3Q7DQoJCQkvLyBzZXQgdGhlIGlmIHN0YXRlbWVudCBiYXNlZCBvbiB0aGUgcGVybWlzc2lvbiBidWlsZGVyDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJpZiAoXCR1c2VyLT5hdXRob3Jpc2UoJyINCgkJCQkuIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRHbG9iYWwoJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUuYWNjZXNzJykNCgkJCQkuICInLCAnY29tXyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICInKSB8fCBcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEdsb2JhbCgkdmlld05hbWVfc2luZ2xlLCAnY29yZS5wcml2YWN5LmFjY2VzcycpDQoJCQkJLiAiJywgJ2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJykpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgR2V0ICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJGRvbWFpbnNbXSA9IHNlbGY6OmNyZWF0ZSIgLiB1Y2ZpcnN0KCR2aWV3TmFtZV9saXN0KSAuICJEb21haW4oXCRwbHVnaW4sIFwkdXNlcik7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KCQl9DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInJldHVybiBcJGRvbWFpbnM7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5hY3RpdmVWaWV3cyBhcyAkdmlldykNCgkJew0KCQkJLy8gc2V0IHZpZXcgbGlzdCBuYW1lDQoJCQkkdmlld05hbWVfbGlzdCA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfbGlzdCk7DQoJCQkvLyBzZXQgdmlldyBzaW5nbGUgbmFtZQ0KCQkJJHZpZXdOYW1lX3NpbmdsZSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZpZXctPm5hbWVfc2luZ2xlKTsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiLyoqIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIENyZWF0ZSB0aGUgZG9tYWluIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZTsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIEpUYWJsZVVzZXIgIFwkdXNlciAgVGhlIEpUYWJsZVVzZXIgb2JqZWN0IHRvIHByb2Nlc3MiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHJldHVybiAgUHJpdmFjeUV4cG9ydERvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKi8iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAicHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRG9tYWluKCZcJHBsdWdpbiwgJlwkdXNlcikiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAieyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBjcmVhdGUgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIGRvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGRvbWFpbiA9IHNlbGY6OmNyZWF0ZURvbWFpbignIiAuICR2aWV3TmFtZV9zaW5nbGUgLiAiJywgJyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICJfIiAuICR2aWV3TmFtZV9zaW5nbGUgLiAiX2RhdGEnKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGRhdGFiYXNlIG9iamVjdCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGdldCBhbGwgaXRlbSBpZHMgb2YgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlciI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLT5zZWxlY3QoJ2lkJykiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLT5mcm9tKFwkZGItPnF1b3RlTmFtZSgnI19fIiAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oJ2NvbXBvbmVudCcpIC4gJ18nIC4gJHZpZXdOYW1lX3NpbmdsZSAuICInKSk7IjsNCgkJCS8vIGdldCB2aWEgY3VzdG9tIHNjcmlwdA0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMykNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkdmlldy0+cGxhY2Vob2xkZXJzKSwgYXJyYXlfdmFsdWVzKCR2aWV3LT5wbGFjZWhvbGRlcnMpLCAkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2N1c3RvbV9saW5rJ10pOw0KCQkJfQ0KCQkJLy8ganVzdCBhbm90aGVyIGZpZWxkDQoJCQllbHNlaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMiAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ290aGVyX3VzZXJfZmllbGQnXSkpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBmaWVsZCBuYW1lDQoJCQkJaWYgKCgkZmllbGRfbmFtZSA9ICR0aGlzLT5nZXRGaWVsZE5hbWUoJHZpZXctPmZpZWxkcywgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydvdGhlcl91c2VyX2ZpZWxkJ10pKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJyIgLiAkZmllbGRfbmFtZSAuICInKSAuICcgPSAnIC4gXCRkYi0+cXVvdGUoXCR1c2VyLT5pZCkpOyI7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2UgKFRPRE8pDQoNCgkJCQkJLy8gc3RvcCBhbnkgZnJvbSBsb2FkaW5nDQoJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiID09PT0gRVJST1IgPT09PT0gRVJST1IgPT09PT09IChmaWVsZCBuYW1lIG5vdCBmb3VuZCkiOw0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gLTInOyAvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA8LS0gdGhpcyB3aWxsIG5ldmVyIHJldHVybiBhbnkgdmFsdWUuIENoZWNrIHlvdXIgW290aGVyIHVzZXIgZmllbGRdIHNlbGVjdGVkIGluIHRoZSBhZG1pbiB2aWV3IHByaXZhY3kgdGFiLiI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZ2V0IGJhc2VkIG9uIGNyZWF0ZWQgYnkNCgkJCWVsc2UNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2NyZWF0ZWRfYnknKSAuICcgPSAnIC4gXCRkYi0+cXVvdGUoXCR1c2VyLT5pZCkpOyI7DQoJCQl9DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgYWxsIGl0ZW1zIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIGRvbWFpbiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHBrcyA9IFwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpLT5sb2FkQ29sdW1uKCk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGdldCB0aGUgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIG1vZGVsIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgnIiAuICR2aWV3TmFtZV9saXN0IC4gIicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tXyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICInKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgR2V0IGFsbCBpdGVtIGRldGFpbHMgb2YgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlciI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGl0ZW1zID0gXCRtb2RlbC0+Z2V0UHJpdmFjeUV4cG9ydChcJHBrcywgXCR1c2VyKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgY2hlY2sgaWYgd2UgaGF2ZSBpdGVtcyBzaW5jZSBwZXJtaXNzaW9ucyBjb3VsZCBibG9jayB0aGUgcmVxdWVzdCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soXCRpdGVtcykpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgUmVtb3ZlICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRlZmF1bHQgY29sdW1ucyI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJmb3JlYWNoIChhcnJheSgncGFyYW1zJywgJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnLCAnY3JlYXRlZCcsICdjcmVhdGVkX2J5JywgJ21vZGlmaWVkJywgJ21vZGlmaWVkX2J5JywgJ3B1Ymxpc2hlZCcsICdvcmRlcmluZycsICdhY2Nlc3MnLCAndmVyc2lvbicsICdoaXRzJykgYXMgXCRjb2x1bW4pIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAiXCRpdGVtcyA9IEFycmF5SGVscGVyOjpkcm9wQ29sdW1uKFwkaXRlbXMsIFwkY29sdW1uKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBsb2FkIHRoZSBpdGVtcyBpbnRvIHRoZSBkb21haW4gb2JqZWN0IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gImZvcmVhY2ggKFwkaXRlbXMgYXMgXCRpdGVtKSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gIlwkZG9tYWluLT5hZGRJdGVtKHNlbGY6OmNyZWF0ZUl0ZW1Gcm9tQXJyYXkoXCRpdGVtLCBcJGl0ZW1bJ2lkJ10pKTsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJ9IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInJldHVybiBcJGRvbWFpbjsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCQl9DQoJCS8vIHdlIG11c3QgYWRkIHRoZXNlIGhlbHBlciBtZXRob2RzDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIENyZWF0ZSBhIG5ldyBkb21haW4gb2JqZWN0IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBzdHJpbmcgIFwkbmFtZSAgICAgICAgIFRoZSBkb21haW4ncyBuYW1lIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgc3RyaW5nICBcJGRlc2NyaXB0aW9uICBUaGUgZG9tYWluJ3MgZGVzY3JpcHRpb24iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEByZXR1cm4gIFByaXZhY3lFeHBvcnREb21haW4iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBzaW5jZSAgIDMuOS4wIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICovIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAicHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVEb21haW4oXCRuYW1lLCBcJGRlc2NyaXB0aW9uID0gJycpIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAieyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkZG9tYWluICAgICAgICAgICAgICA9IG5ldyBQcml2YWN5RXhwb3J0RG9tYWluOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkZG9tYWluLT5uYW1lICAgICAgICA9IFwkbmFtZTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGRvbWFpbi0+ZGVzY3JpcHRpb24gPSBcJGRlc2NyaXB0aW9uOyI7DQoNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInJldHVybiBcJGRvbWFpbjsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJ9IjsNCg0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiLyoqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQ3JlYXRlIGFuIGl0ZW0gb2JqZWN0IGZvciBhbiBhcnJheSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHBhcmFtICAgYXJyYXkgICAgICAgICBcJGRhdGEgICAgVGhlIGFycmF5IGRhdGEgdG8gY29udmVydCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIGludGVnZXJ8bnVsbCAgXCRpdGVtSWQgIFRoZSBJRCBvZiB0aGlzIGl0ZW0iOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEByZXR1cm4gIFByaXZhY3lFeHBvcnRJdGVtIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICoiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAc2luY2UgICAzLjkuMCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqLyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlSXRlbUZyb21BcnJheShhcnJheSBcJGRhdGEsIFwkaXRlbUlkID0gbnVsbCkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiXCRpdGVtID0gbmV3IFByaXZhY3lFeHBvcnRJdGVtOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIlwkaXRlbS0+aWQgPSBcJGl0ZW1JZDsiOw0KDQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJmb3JlYWNoIChcJGRhdGEgYXMgXCRrZXkgPT4gXCR2YWx1ZSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiaWYgKGlzX29iamVjdChcJHZhbHVlKSkiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAiXCR2YWx1ZSA9IChhcnJheSkgXCR2YWx1ZTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ9IjsNCg0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiaWYgKGlzX2FycmF5KFwkdmFsdWUpKSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJcJHZhbHVlID0gcHJpbnRfcihcJHZhbHVlLCB0cnVlKTsiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ9IjsNCg0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRmaWVsZCAgICAgICAgPSBuZXcgUHJpdmFjeUV4cG9ydEZpZWxkOyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIlwkZmllbGQtPm5hbWUgID0gXCRrZXk7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRmaWVsZC0+dmFsdWUgPSBcJHZhbHVlOyI7DQoNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIlwkaXRlbS0+YWRkRmllbGQoXCRmaWVsZCk7IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAifSI7DQoNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInJldHVybiBcJGl0ZW07IjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCX0NCg0KCS8qKg0KCSAqIGdldCB0aGUgZmllbGQgbmFtZQ0KCSAqIA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGZpZWxkcyAgVGhlIGZpZWxkcyBhcnJheQ0KCSAqIEBwYXJhbSAgIGludCAgICAgICAkaWQgICAgICAgVGhlIGZpZWxkIGlkDQoJICogDQoJICogQHJldHVybiAgc3RyaW5nICAgIFRoZSBmaWVsZCBuYW1lDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEZpZWxkTmFtZSgmJGZpZWxkcywgJGlkKQ0KCXsNCgkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCXsNCgkJCWlmICgkZmllbGRbJ2ZpZWxkJ10gPT0gJGlkKQ0KCQkJew0KCQkJCXJldHVybiAkZmllbGRbJ2Jhc2VfbmFtZSddOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBTZXQgUHJpdmFjeSBSZW1vdmUgRGF0YQ0KCSAqIA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRtZXRob2RzICBUaGUgbWV0aG9kcyBzdHJpbmcNCgkgKiANCgkgKiBAcmV0dXJuICB2b2lkDQoJICogDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFByaXZhY3lSZW1vdmVEYXRhKCYkbWV0aG9kcykNCgl7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIi8qKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIFJlbW92ZXMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcmVtb3ZlIGluZm9ybWF0aW9uIHJlcXVlc3QiOw0KCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIFByaXZhY3lUYWJsZVJlcXVlc3QgIFwkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEBwYXJhbSAgIEpVc2VyICAgICAgICAgICAgICAgIFwkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZSI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQHJldHVybiAgdm9pZCI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqLyI7DQoJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb25Qcml2YWN5UmVtb3ZlRGF0YSgmXCRwbHVnaW4sICZcJHJlcXVlc3QsICZcJHVzZXIpIjsNCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAieyI7DQoJCWZvcmVhY2ggKCR0aGlzLT5hY3RpdmVWaWV3cyBhcyAkdmlldykNCgkJew0KCQkJLy8gc2V0IHRoZSBhbm9ueW1pemUgc3dpdGNoDQoJCQkkYW5vbnltaXplID0gZmFsc2U7DQoJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemUnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemUnXSA9PSAxICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplX2ZpZWxkcyddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSwgdHJ1ZSkpDQoJCQl7DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJGFub255bWl6ZSA9IHRydWU7DQoJCQl9DQoJCQkvLyBzZXQgdmlldyBsaXN0IG5hbWUNCgkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KCQkJLy8gbG9hZCB0aGUgY2FuRG8gZnJvbSBnZXRBY3Rpb25zIGhlbHBlciBtZXRob2QNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIENoZWNrIGlmIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gZGVsZXQgIiAuICR2aWV3LT5uYW1lX2xpc3Q7DQoJCQkvLyBzZXQgdGhlIGlmIHN0YXRlbWVudCBiYXNlZCBvbiB0aGUgcGVybWlzc2lvbiBidWlsZGVyDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJpZiAoXCR1c2VyLT5hdXRob3Jpc2UoJyINCgkJCQkuIFN1cGVyX19fZDkxMGQ4YjhfNGMyM180ZjNlXzhjZGFfNDM4ZjJkMmJkN2FjX19fUG93ZXI6Ol8oJ0NvbXBpbGVyLkNyZWF0b3IuUGVybWlzc2lvbicpLT5nZXRBY3Rpb24oJHZpZXdOYW1lX3NpbmdsZSwgJ2NvcmUuZGVsZXRlJykNCgkJCQkuICInLCAnY29tXyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICInKSB8fCBcJHVzZXItPmF1dGhvcmlzZSgnIg0KCQkJCS4gU3VwZXJfX19kOTEwZDhiOF80YzIzXzRmM2VfOGNkYV80MzhmMmQyYmQ3YWNfX19Qb3dlcjo6XygnQ29tcGlsZXIuQ3JlYXRvci5QZXJtaXNzaW9uJyktPmdldEFjdGlvbigkdmlld05hbWVfc2luZ2xlLCAnY29yZS5wcml2YWN5LmRlbGV0ZScpDQoJCQkJLiAiJywgJ2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJykpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInsiOw0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHBsYWluIGRlbGV0ZSwgb3IgaXQgaXMgYSBBbm9ueW1pemUgDQoJCQlpZiAoJGFub255bWl6ZSkNCgkJCXsNCgkJCQkvLyBhbm9ueW1pemUgdGhlIGRhdGENCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBBbm9ueW1pemUgIiAuICR2aWV3LT5uYW1lX3NpbmdsZSAuICIgZGF0YSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAic2VsZjo6YW5vbnltaXplIiAuIHVjZmlyc3QoJHZpZXdOYW1lX2xpc3QpIC4gIkRhdGEoXCRwbHVnaW4sIFwkdXNlcik7IjsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBqdXN0IGR1bXAsIGRlbGV0ZSB0aGUgcm93cw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIFJlbW92ZSAiIC4gJHZpZXctPm5hbWVfc2luZ2xlIC4gIiBkYXRhIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJzZWxmOjpyZW1vdmUiIC4gdWNmaXJzdCgkdmlld05hbWVfbGlzdCkgLiAiRGF0YShcJHBsdWdpbiwgXCR1c2VyKTsiOw0KCQkJfQ0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAifSI7DQoJCX0NCgkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5hY3RpdmVWaWV3cyBhcyAkdmlldykNCgkJew0KCQkJLy8gc2V0IHRoZSBhbm9ueW1pemUgc3dpdGNoDQoJCQkkYW5vbnltaXplID0gZmFsc2U7DQoJCQlpZiAoaXNzZXQoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemUnXSkgJiYgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemUnXSA9PSAxICYmIGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsnYW5vbnltaXplX2ZpZWxkcyddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2Fub255bWl6ZV9maWVsZHMnXSwgdHJ1ZSkpDQoJCQl7DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJGFub255bWl6ZSA9IHRydWU7DQoJCQl9DQoJCQkvLyBzZXQgdmlldyBsaXN0IG5hbWUNCgkJCSR2aWV3TmFtZV9saXN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9saXN0KTsNCgkJCS8vIHNldCB2aWV3IHNpbmdsZSBuYW1lDQoJCQkkdmlld05hbWVfc2luZ2xlID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmlldy0+bmFtZV9zaW5nbGUpOw0KDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIvKioiOw0KDQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgcGxhaW4gZGVsZXRlLCBvciBpdCBpcyBhIEFub255bWl6ZQ0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gQW5vbnltaXplIHRoZSBkYXRhDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICogQW5vbnltaXplIHRoZSAiIC4gJHZpZXctPm5hbWVfc2luZ2xlIC4gIiBkYXRhIjsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBEZWxldGUgdGhlIHJvd3MNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBSZW1vdmUgdGhlICIgLiAkdmlldy0+bmFtZV9zaW5nbGUgLiAiIGRhdGEiOw0KCQkJfQ0KDQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICIgKiBAcGFyYW0gICBKVGFibGVVc2VyICBcJHVzZXIgIFRoZSBKVGFibGVVc2VyIG9iamVjdCB0byBwcm9jZXNzIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gIiAqIEByZXR1cm4gIHZvaWQiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAiICovIjsNCg0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHBsYWluIGRlbGV0ZSwgb3IgaXQgaXMgYSBBbm9ueW1pemUgDQoJCQlpZiAoJGFub255bWl6ZSkNCgkJCXsNCgkJCQkvLyBBbm9ueW1pemUgdGhlIGRhdGENCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygxKSAuICJwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFub255bWl6ZSIgLiB1Y2ZpcnN0KCR2aWV3TmFtZV9saXN0KSAuICJEYXRhKCZcJHBsdWdpbiwgJlwkdXNlcikiOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIERlbGV0ZSB0aGUgcm93cw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlIiAuIHVjZmlyc3QoJHZpZXdOYW1lX2xpc3QpIC4gIkRhdGEoJlwkcGx1Z2luLCAmXCR1c2VyKSI7DQoJCQl9DQoNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDEpIC4gInsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMikgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IGRhdGFiYXNlIG9iamVjdCI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7IjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGdldCBhbGwgaXRlbSBpZHMgb2YgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlciI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5ID0gXCRkYi0+Z2V0UXVlcnkodHJ1ZSkiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLT5zZWxlY3QoJ2lkJykiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLT5mcm9tKFwkZGItPnF1b3RlTmFtZSgnI19fIiAuIFN1cGVyX19fNTAwZjNhN2ZfYzE2ZF80ZGQ0XzgxYjJfMmRmNjc3NmI1Mzg4X19fUG93ZXI6Ol8oJ2NvbXBvbmVudCcpIC4gJ18nIC4gJHZpZXdOYW1lX3NpbmdsZSAuICInKSk7IjsNCgkJCS8vIGdldCB2aWEgY3VzdG9tIHNjcmlwdA0KCQkJaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMykNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkdmlldy0+cGxhY2Vob2xkZXJzKSwgYXJyYXlfdmFsdWVzKCR2aWV3LT5wbGFjZWhvbGRlcnMpLCAkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ2N1c3RvbV9saW5rJ10pOw0KCQkJfQ0KCQkJLy8ganVzdCBhbm90aGVyIGZpZWxkDQoJCQllbHNlaWYgKGlzc2V0KCR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10pICYmICR2aWV3LT5wYXJhbXNbJ3ByaXZhY3knXVsndXNlcl9saW5rJ10gPT0gMiAmJiBpc3NldCgkdmlldy0+cGFyYW1zWydwcml2YWN5J11bJ290aGVyX3VzZXJfZmllbGQnXSkpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBmaWVsZCBuYW1lDQoJCQkJaWYgKCgkZmllbGRfbmFtZSA9ICR0aGlzLT5nZXRGaWVsZE5hbWUoJHZpZXctPmZpZWxkcywgJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydvdGhlcl91c2VyX2ZpZWxkJ10pKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJyIgLiAkZmllbGRfbmFtZSAuICInKSAuICcgPSAnIC4gXCRkYi0+cXVvdGUoXCR1c2VyLT5pZCkpOyI7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2UgKFRPRE8pDQoNCgkJCQkJLy8gc3RvcCBhbnkgZnJvbSBsb2FkaW5nDQoJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiID09PT0gRVJST1IgPT09PT0gRVJST1IgPT09PT09IChmaWVsZCBuYW1lIG5vdCBmb3VuZCkiOw0KCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gLTInOyAvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiA8LS0gdGhpcyB3aWxsIG5ldmVyIHJldHVybiBhbnkgdmFsdWUuIENoZWNrIHlvdXIgW290aGVyIHVzZXIgZmllbGRdIHNlbGVjdGVkIGluIHRoZSBhZG1pbiB2aWV3IHByaXZhY3kgdGFiLiI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZ2V0IGJhc2VkIG9uIGNyZWF0ZWQgYnkNCgkJCWVsc2UNCgkJCXsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHF1ZXJ5LT53aGVyZShcJGRiLT5xdW90ZU5hbWUoJ2NyZWF0ZWRfYnknKSAuICcgPSAnIC4gXCRkYi0+cXVvdGUoXCR1c2VyLT5pZCkpOyI7DQoJCQl9DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgYWxsIGl0ZW1zIGZvciB0aGUgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRhYmxlIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlciI7DQoJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygyKSAuICJcJHBrcyA9IFwkZGItPnNldFF1ZXJ5KFwkcXVlcnkpLT5sb2FkQ29sdW1uKCk7IjsNCg0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuUEhQX0VPTCAuICBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gImlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhcJHBrcykpIjsNCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gInsiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgZ2V0IHRoZSAiIC4gJHZpZXdOYW1lX3NpbmdsZSAuICIgbW9kZWwiOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRtb2RlbCA9IHNlbGY6OmdldE1vZGVsKCciIC4gJHZpZXdOYW1lX3NpbmdsZSAuICInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV8iIC4gU3VwZXJfX181MDBmM2E3Zl9jMTZkXzRkZDRfODFiMl8yZGY2Nzc2YjUzODhfX19Qb3dlcjo6XygiY29tcG9uZW50IikgLiAiJyk7IjsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBwbGFpbiBkZWxldGUsIG9yIGl0IGlzIGEgQW5vbnltaXplIA0KCQkJaWYgKCRhbm9ueW1pemUpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIHBzZXVkb2Fub255bWlzZWQgZGF0YSBhcnJheQ0KCQkJCSRfZGF0YV9idWNrZXQgPSBhcnJheSgpOw0KCQkJCSRfcmFuZG9tX2J1Y2tldCA9IGFycmF5KCk7DQoJCQkJJF9wZXJtaXNzaW9uX2J1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHZpZXctPnBhcmFtc1sncHJpdmFjeSddWydhbm9ueW1pemVfZmllbGRzJ10gYXMgJHJvdykNCgkJCQl7DQoJCQkJCWlmICgoJGZpZWxkX25hbWUgPSAkdGhpcy0+Z2V0RmllbGROYW1lKCR2aWV3LT5maWVsZHMsICRyb3dbJ2ZpZWxkJ10pKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCWlmICAoJ1JBTkRPTScgPT09ICRyb3dbJ3ZhbHVlJ10pIA0KCQkJCQkJew0KCQkJCQkJCSRfcmFuZG9tX2J1Y2tldFskZmllbGRfbmFtZV0gPSA4OyAvLyAoVE9ETykgbWFrZSB0aGUgc2l6ZSBkeW5hbWljDQoJCQkJCQl9DQoJCQkJCQkkX2RhdGFfYnVja2V0W10gPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICInIiAuICRmaWVsZF9uYW1lIC4gIicgPT4gJyIgLiAkcm93Wyd2YWx1ZSddIC4iJyI7DQoJCQkJCQkkX3Blcm1pc3Npb25fYnVja2V0WyRmaWVsZF9uYW1lXSA9ICRmaWVsZF9uYW1lOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIEFub255bWl6ZSB0aGUgZGF0YQ0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHRoaXMgaXMgdGhlIHBzZXVkb2Fub255bWlzZWQgZGF0YSBhcnJheSBmb3IgIiAuICR2aWV3LT5uYW1lX2xpc3Q7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YSA9IGFycmF5KCI7DQoJCQkJJG1ldGhvZHMgLj0gaW1wbG9kZSgnLCcsICRfZGF0YV9idWNrZXQpOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIik7IjsNCg0KCQkJCS8vIGFkZCB0aGUgcGVybWlzc2lvbmFsIHJlbW92YWwgb2YgdmFsdWVzIHRoZSB1c2VyIGhhcyBub3QgcmlnaHQgdG8gdmlldyBvciBhY2Nlc3MNCgkJCQkkaGFzUGVybWlzc2lvbmFsID0gZmFsc2U7DQoJCQkJaWYgKGlzc2V0KCR0aGlzLT5wZXJtaXNzaW9uRmllbGRzWyR2aWV3TmFtZV9zaW5nbGVdKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpcy0+cGVybWlzc2lvbkZpZWxkc1skdmlld05hbWVfc2luZ2xlXSkpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkdGhpcy0+cGVybWlzc2lvbkZpZWxkc1skdmlld05hbWVfc2luZ2xlXSBhcyAkZmllbGROYW1lID0+ICRwZXJtaXNzaW9uX29wdGlvbnMpDQoJCQkJCXsNCgkJCQkJCWlmICghJGhhc1Blcm1pc3Npb25hbCAmJiBpc3NldCgkX3Blcm1pc3Npb25fYnVja2V0WyRmaWVsZE5hbWVdKSkNCgkJCQkJCXsNCgkJCQkJCQlmb3JlYWNoKCRwZXJtaXNzaW9uX29wdGlvbnMgYXMgJHBlcm1pc3Npb25fb3B0aW9uID0+ICRmaWVsZFR5cGUpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoISRoYXNQZXJtaXNzaW9uYWwpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCXN3aXRjaCAoJHBlcm1pc3Npb25fb3B0aW9uKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWNhc2UgJ2FjY2Vzcyc6DQoJCQkJCQkJCQkJY2FzZSAndmlldyc6DQoJCQkJCQkJCQkJY2FzZSAnZWRpdCc6DQoJCQkJCQkJCQkJCSRoYXNQZXJtaXNzaW9uYWwgPSB0cnVlOw0KCQkJCQkJCQkJCWJyZWFrOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0aGUgbm90ZXMgYW5kIGdldCB0aGUgZ2xvYmFsIHN3aXRjaA0KCQkJCQlpZiAoJGhhc1Blcm1pc3Npb25hbCkNCgkJCQkJew0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIEdldCBnbG9iYWwgcGVybWlzc2lvbmFsIGNvbnRyb2wgYWN0aXZhdGlvbi4gKGRlZmF1bHQgaXMgaW5hY3RpdmUpIjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIlwkc3RyaWN0X3Blcm1pc3Npb25fcGVyX2ZpZWxkID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICInKS0+Z2V0KCdzdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGQnLCAwKTsiOw0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiaWYoXCRzdHJpY3RfcGVybWlzc2lvbl9wZXJfZmllbGQpIjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInsiOw0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgcmVtb3ZlIGFsbCBmaWVsZHMgdGhhdCBpcyBub3QgcGVybWl0dGVkIHRvIGJlIGNoYW5nZWQiOw0KCQkJCQkJZm9yZWFjaCAoJHRoaXMtPnBlcm1pc3Npb25GaWVsZHNbJHZpZXdOYW1lX3NpbmdsZV0gYXMgJGZpZWxkTmFtZSA9PiAkcGVybWlzc2lvbl9vcHRpb25zKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChpc3NldCgkX3Blcm1pc3Npb25fYnVja2V0WyRmaWVsZE5hbWVdKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gImlmICgiOw0KCQkJCQkJCQkkX3Blcm1pc3Npb25faWYgPSBhcnJheSgpOw0KCQkJCQkJCQlmb3JlYWNoICgkcGVybWlzc2lvbl9vcHRpb25zIGFzICRwZXJtX2tleSA9PiAkZmllbGRfdHlwcmV3KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkX3Blcm1pc3Npb25faWZbXSA9ICIhXCR1c2VyLT5hdXRob3Jpc2UoJyIgLiAkdmlld05hbWVfc2luZ2xlIC4gIi4iIC4gJHBlcm1fa2V5IC4gIi4iIC4gJGZpZWxkTmFtZSAuICInLCAnY29tXyIgLiBTdXBlcl9fXzUwMGYzYTdmX2MxNmRfNGRkNF84MWIyXzJkZjY3NzZiNTM4OF9fX1Bvd2VyOjpfKCJjb21wb25lbnQiKSAuICInKSI7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJG1ldGhvZHMgLj0gIGltcGxvZGUoJyB8fCAnLCAkX3Blcm1pc3Npb25faWYpOw0KCQkJCQkJCQkkbWV0aG9kcyAuPSAgIikiOw0KCQkJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJ7IjsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNSkgLiAidW5zZXQoXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YVsnIi4gJGZpZWxkTmFtZSAuICInXSk7IjsNCgkJCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAifSI7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoJCQkJCX0NCgkJCQl9DQoNCg0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIGdldCB0aGUgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHRhYmxlIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJHRhYmxlID0gXCRtb2RlbC0+Z2V0VGFibGUoKTsiOw0KDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIHBzZXVkb2Fub255bWlzZWQgZGF0YSBmb3IgIiAuICR2aWV3LT5uYW1lX2xpc3QgLiAiIHNldCI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhcJHBzZXVkb2Fub255bWlzZWREYXRhKSkiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gIi8vIiAuIFN1cGVyX19fNGU2ZmYxMWRfYmViZl80MmY1XzhmZDdfYjJmODgyODU3MjIyX19fUG93ZXI6Ol8oX19MaW5lX18sIF9fQ2xhc3NfXykgLiAiIHN0aWxsIGFyY2hpdmUgYWxsIGl0ZW1zIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJcJHRhYmxlLT5wdWJsaXNoKFwkcGtzLCAyKTsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gInJldHVybiBmYWxzZTsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gIn0iOw0KDQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgSXRlcmF0ZSB0aGUgaXRlbXMgdG8gYW5vbmltaXplIGVhY2ggb25lLiI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiZm9yZWFjaCAoXCRwa3MgYXMgXCRpID0+IFwkcGspIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJ7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJcJHRhYmxlLT5yZXNldCgpOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAiXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YVsnaWQnXSA9IFwkcGs7IjsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJF9yYW5kb21fYnVja2V0KSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRfcmFuZG9tX2J1Y2tldCBhcyAkZmllbGROYW1lID0+ICRzaXplKQ0KCQkJCQl7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJpZiAoaXNzZXQoXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YVsnIiAuICRmaWVsZE5hbWUgLiAiJ10pKSI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJ7IjsNCgkJCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDUpIC4gIlwkcHNldWRvYW5vbnltaXNlZERhdGFbJyIgLiAkZmllbGROYW1lIC4gIiddID0gc2VsZjo6cmFuZG9ta2V5KCIgLiAoaW50KSAkc2l6ZSAuICIpOyI7DQoJCQkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJ9IjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAiaWYgKFwkdGFibGUtPmJpbmQoXCRwc2V1ZG9hbm9ueW1pc2VkRGF0YSkpIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg0KSAuICJ7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6Xyg1KSAuICJcJHRhYmxlLT5zdG9yZSgpOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAifSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBhcmNoaXZlIGFsbCBpdGVtcyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCR0YWJsZS0+cHVibGlzaChcJHBrcywgMik7IjsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBEZWxldGUgdGhlIHJvd3MNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBnZXQgdGhlICIgLiAkdmlldy0+bmFtZV9saXN0IC4gIiB0YWJsZSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiXCR0YWJsZSA9IFwkbW9kZWwtPmdldFRhYmxlKCk7IjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICIvLyIgLiBTdXBlcl9fXzRlNmZmMTFkX2JlYmZfNDJmNV84ZmQ3X2IyZjg4Mjg1NzIyMl9fX1Bvd2VyOjpfKF9fTGluZV9fLCBfX0NsYXNzX18pIC4gIiBJdGVyYXRlIHRoZSBpdGVtcyB0byBkZWxldGUgZWFjaCBvbmUuIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJmb3JlYWNoIChcJHBrcyBhcyBcJGkgPT4gXCRwaykiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDMpIC4gInsiOw0KCQkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDQpIC4gImlmIChcJHRhYmxlLT5sb2FkKFwkcGspKSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAieyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNSkgLiAiXCR0YWJsZS0+ZGVsZXRlKFwkcGspOyI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oNCkgLiAifSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAifSI7DQoJCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMykgLiAiLy8iIC4gU3VwZXJfX180ZTZmZjExZF9iZWJmXzQyZjVfOGZkN19iMmY4ODI4NTcyMjJfX19Qb3dlcjo6XyhfX0xpbmVfXywgX19DbGFzc19fKSAuICIgQ2xlYXIgdGhlIGNvbXBvbmVudCdzIGNhY2hlIjsNCgkJCQkkbWV0aG9kcyAuPSBQSFBfRU9MIC4gU3VwZXJfX19hNjhjMDEwYl9lOTJlXzQ3ZDVfOGE0NF9kMjNjZmRkZWI2YzZfX19Qb3dlcjo6XygzKSAuICJcJG1vZGVsLT5jbGVhbkNhY2hlKCk7IjsNCgkJCX0NCgkJCSRtZXRob2RzIC49IFBIUF9FT0wgLiBTdXBlcl9fX2E2OGMwMTBiX2U5MmVfNDdkNV84YTQ0X2QyM2NmZGRlYjZjNl9fX1Bvd2VyOjpfKDIpIC4gIn0iOw0KCQkJJG1ldGhvZHMgLj0gUEhQX0VPTCAuIFN1cGVyX19fYTY4YzAxMGJfZTkyZV80N2Q1XzhhNDRfZDIzY2ZkZGViNmM2X19fUG93ZXI6Ol8oMSkgLiAifSIgLiBQSFBfRU9MOw0KCQl9DQoJfQ==', '[[[Component]]] Privacy Compiler', '', '', '', '', '', '', '', '2.0.1', '{\"property_selection0\":{\"property\":\"36\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Privacy Compiler J5', '', 1, '', '', 1, '2024-03-10 15:55:15', '2024-05-26 20:14:03', 5, '', 3), +(44, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to link your components to the privacy suite of Joomla by adding a new privacy tab to the JCB admin views, where you can set all the required details for the integration.', '{\"fields0\":{\"plugin\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Global Privacy\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2600\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"}}},\"fields1\":{\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"plugin\",\"label\":\"Plugin\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2600\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2588\",\"custom_value\":\"\"}}},\"fields2\":{\"file\":\"admin_view\",\"fields_name\":\"params.privacy\",\"fieldset\":\"privacy\",\"label\":\"Privacy\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2603\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2604\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2605\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2606\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2607\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2608\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2611\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2612\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2613\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2614\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2615\",\"custom_value\":\"\"}}}}', 'e0da018d-dba8-4ce7-b26c-63630f631a40', 'dXNlIEpvb21sYVxDTVNcQ29tcG9uZW50XENvbXBvbmVudEhlbHBlcjsNCnVzZSBKb29tbGFcQ01TXEFwcGxpY2F0aW9uXENNU0FwcGxpY2F0aW9uOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcUmVnaXN0cnlcUmVnaXN0cnk7DQp1c2UgSm9vbWxhXENNU1xGb3JtXEZvcm07DQp1c2UgSm9vbWxhXENNU1xGYWN0b3J5Ow==', 3, '{\"method_selection0\":{\"method\":\"113\"},\"method_selection1\":{\"method\":\"12\"},\"method_selection2\":{\"method\":\"0\"}}', 'CS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUnVucyBvbiBjb250ZW50IHByZXBhcmF0aW9uIG9mIGZvcm0uDQoJICoNCgkgKiBAcGFyYW0gICBKRm9ybSAgICAgJGZvcm0gIFRoZSBmb3JtDQoJICogQHBhcmFtICAgc3RkQ2xhc3MgICRkYXRhICBUaGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgYm9vbGVhbg0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZXBhcmVGb3JtKEZvcm0gJGZvcm0sICRkYXRhKQ0KCXsNCgkJJGNvbnRleHQgPSAkZm9ybS0+Z2V0TmFtZSgpOw0KDQoJCS8vIFdoZW4gdGhpcyBpcyBbW1tjb21wb25lbnRdXV0gYWRtaW4gdmlldw0KCQlpZiAoc3RycG9zKCRjb250ZXh0LCAnY29tX1tbW2NvbXBvbmVudF1dXS5hZG1pbl92aWV3JykgPT09IDApDQoJCXsNCgkJCS8vIEFkZCB0aGUgZm9ybXMgcGF0aA0KCQkJRm9ybTo6YWRkRm9ybVBhdGgoX19ESVJfXyAuICcvZm9ybXMnKTsNCgkJCS8vIGFkZCB0aGUgYWRtaW4gdmlldyBwYXJhbXMgZm9yIHByaXZhY3kgaW50ZWdyYXRpb24NCgkJCSRmb3JtLT5sb2FkRmlsZSgnYWRtaW5fdmlldycpOw0KCQkJLy8gaWYgdGhlIGdsb2JhbCBwbHVnaW4gaXMgbm90IHNldCwgYWxsb3cgaXQgdG8gYmUgc2V0IGZyb20gdGhlIGFkbWluIHZpZXcNCgkJCWlmICgoJHBsdWdpbiA9ICR0aGlzLT5wYXJhbXMtPmdldCgncGx1Z2luJywgMCkpID09IDApDQoJCQl7DQoJCQkJJGZvcm0tPmxvYWRGaWxlKCdjb25maWcnKTsNCgkJCQkvLyBtYWtlIHRoZSBwbHVnaW4gZmllbGQgcmVxdWlyZWQgKExBVEVSIHdoZW4gd2UgY2FuIGdpdmUgbW9yZSBpbmZvKQ0KCQkJCS8vJGZvcm0tPnNldEZpZWxkQXR0cmlidXRlKCdwbHVnaW4nLCAncmVxdWlyZWQnLCB0cnVlLCAncGFyYW1zLnByaXZhY3knKTsNCgkJCQkvLyRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgncGx1Z2luJywgJ3Nob3dvbicsICdhY3RpdmF0ZToxJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCQkJLy8kZm9ybS0+c2V0RmllbGRBdHRyaWJ1dGUoJ25vdGVfc2VsZWN0X3ByaXZhY3lfcGx1Z2luJywgJ3Nob3dvbicsICdhY3RpdmF0ZToxJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCQl9DQoJCQkvLyB1cGRhdGUgYWxsIGVkaXRvcnMgdG8gdXNlIHRoaXMgY29tcG9uZW50cyBnbG9iYWwgZWRpdG9yDQoJCQkkZ2xvYmFsX2VkaXRvciA9IENvbXBvbmVudEhlbHBlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnZWRpdG9yJywgJ25vbmUnKTsNCgkJCS8vIHNldCB0aGUgZmllbGQgZWRpdG9yIHZhbHVlICh3aXRoIG5vbmUgYXMgZmFsbGJhY2spDQoJCQkkZm9ybS0+c2V0RmllbGRBdHRyaWJ1dGUoJ2N1c3RvbV9saW5rJywgJ2VkaXRvcicsICRnbG9iYWxfZWRpdG9yIC4gJ3xub25lJywgJ3BhcmFtcy5wcml2YWN5Jyk7DQoJCX0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJICogVGhpcyBpcyBhbiBldmVudCB0aGF0IGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGNvbnRlbnQNCgkgKiBpcyBzYXZlZCBpbnRvIHRoZSBkYXRhYmFzZS4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGNvbnRleHQgIFRoZSBjb250ZXh0IG9mIHRoZSBjb250ZW50IHBhc3NlZCB0byB0aGUgcGx1Z2luIChhZGRlZCBpbiAxLjYpLg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGFydGljbGUgIEEgSlRhYmxlQ29udGVudCBvYmplY3QuDQoJICogQHBhcmFtICAgYm9vbCAgICAkaXNOZXcgICAgSWYgdGhlIGNvbnRlbnQgaXMganVzdCBhYm91dCB0byBiZSBjcmVhdGVkLg0KCSAqDQoJICogQHJldHVybiAgdm9pZC4NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRCZWZvcmVTYXZlKCRjb250ZXh0LCAkaXRlbSwgJGlzTmV3LCAkZGF0YSA9IGFycmF5KCkpDQoJew0KCQkvLyBXaGVuIHRoaXMgaXMgW1tbY29tcG9uZW50XV1dIGFkbWluIHZpZXcNCgkJaWYgKCdjb21fW1tbY29tcG9uZW50XV1dLmFkbWluX3ZpZXcnID09PSAkY29udGV4dCkNCgkJew0KCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBqc29uDQoJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPnBhcmFtcykpDQoJCQl7DQoJCQkJLy8gQ29udmVydCB0aGUgcGFyYW1zIGZpZWxkIHRvIGFuIGFycmF5Lg0KCQkJCSRyZWdpc3RyeSA9IG5ldyBSZWdpc3RyeTsNCgkJCQkkcmVnaXN0cnktPmxvYWRTdHJpbmcoJGl0ZW0tPnBhcmFtcyk7DQoJCQkJJGl0ZW0tPnBhcmFtcyA9ICRyZWdpc3RyeS0+dG9BcnJheSgpOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhlIHBsdWdpbiB3YXMgc2V0DQoJCQlpZiAoaXNzZXQoJGl0ZW0tPnBhcmFtc1sncGx1Z2luJ10pICYmICRpdGVtLT5wYXJhbXNbJ3BsdWdpbiddID4gMCkNCgkJCXsNCgkJCQkvLyBmaXJzdCBzZXQgbmV3IHBhcmFtcw0KCQkJCSR0aGlzLT5wYXJhbXMtPnNldCgncGx1Z2luJywgKGludCkgJGl0ZW0tPnBhcmFtc1sncGx1Z2luJ10pOw0KCQkJCS8vIHVwZGF0ZSB0aGUgZ2xvYmFsIHBsdWdpbiBzZXR0aW5ncw0KCQkJCSRleHRlbnNpb25UYWJsZSA9IG5ldyAgXEp0YWJsZUV4dGVuc2lvbihGYWN0b3J5OjpnZXREYm8oKSk7DQoJCQkJJGV4dGVuc2lvblRhYmxlLT5sb2FkKGFycmF5KCdlbGVtZW50JyA9PiAnW1tbY29tcG9uZW50XV1dcHJpdmFjeXRhYnMnKSk7DQoJCQkJLy8gU2F2ZSB0aGUgY2hhbmdlDQoJCQkJJGV4dGVuc2lvblRhYmxlLT5zZXQoJ3BhcmFtcycsICR0aGlzLT5wYXJhbXMtPnRvU3RyaW5nKCkpOw0KCQkJCSRleHRlbnNpb25UYWJsZS0+c2F2ZSgoYXJyYXkpICRleHRlbnNpb25UYWJsZSk7DQoJCQkJLy8gYW5kIHJlbW92ZSB0aGUgdmFsdWUgZnJvbSB0aGUgcGFyYW1zDQoJCQkJdW5zZXQoJGl0ZW0tPnBhcmFtc1sncGx1Z2luJ10pOw0KCQkJCS8vIGNsZWFyIHRoZSBwbHVnaW4gY2FjaGUNCgkJCQkkdGhpcy0+Y2xlYW5DYWNoZSgnY29tX3BsdWdpbnMnLCAwKTsNCgkJCQkkdGhpcy0+Y2xlYW5DYWNoZSgnY29tX3BsdWdpbnMnLCAxKTsNCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYW4gYXJyYXkNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+cGFyYW1zKSkNCgkJCXsNCgkJCQkvLyBDb252ZXJ0IHRoZSBwYXJhbXMgZmllbGQgdG8gYSBzdHJpbmcuDQoJCQkJJHBhcmFtcyA9IG5ldyBSZWdpc3RyeTsNCgkJCQkkcGFyYW1zLT5sb2FkQXJyYXkoJGl0ZW0tPnBhcmFtcyk7DQoJCQkJJGl0ZW0tPnBhcmFtcyA9IChzdHJpbmcpICRwYXJhbXM7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBDbGVhbiB0aGUgY2FjaGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRncm91cCAgICAgIFRoZSBjYWNoZSBncm91cA0KCSAqIEBwYXJhbSAgIGludGVnZXIgICRjbGllbnRfaWQgIFRoZSBJRCBvZiB0aGUgY2xpZW50DQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICoNCgkgKiBAc2luY2UgICAzLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gY2xlYW5DYWNoZSgkZ3JvdXAgPSBudWxsLCAkY2xpZW50X2lkID0gMCkNCgl7DQoJCSRjb25mID0gRmFjdG9yeTo6Z2V0Q29uZmlnKCk7DQoNCgkJJG9wdGlvbnMgPSBbDQoJCQknZGVmYXVsdGdyb3VwJyA9PiAkZ3JvdXAgPzogKGlzc2V0KCR0aGlzLT5vcHRpb24pID8gJHRoaXMtPm9wdGlvbiA6IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmlucHV0LT5nZXQoJ29wdGlvbicpKSwNCgkJCSdjYWNoZWJhc2UnID0+ICRjbGllbnRfaWQgPyBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jYWNoZScgOiAkY29uZi0+Z2V0KCdjYWNoZV9wYXRoJywgSlBBVEhfU0lURSAuICcvY2FjaGUnKSwNCgkJCSdyZXN1bHQnID0+IHRydWUsDQoJCV07DQoNCgkJdHJ5DQoJCXsNCgkJCS8qKiBAdmFyIFxKQ2FjaGVDb250cm9sbGVyQ2FsbGJhY2sgJGNhY2hlICovDQoJCQkkY2FjaGUgPSBcSkNhY2hlOjpnZXRJbnN0YW5jZSgnY2FsbGJhY2snLCAkb3B0aW9ucyk7DQoJCQkkY2FjaGUtPmNsZWFuKCk7DQoJCX0NCgkJY2F0Y2ggKFxKQ2FjaGVFeGNlcHRpb24gJGV4Y2VwdGlvbikNCgkJew0KCQkJJG9wdGlvbnNbJ3Jlc3VsdCddID0gZmFsc2U7DQoJCX0NCg0KCQkvLyBUcmlnZ2VyIHRoZSBvbkNvbnRlbnRDbGVhbkNhY2hlIGV2ZW50Lg0KCQlGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT50cmlnZ2VyRXZlbnQoJ29uQ29udGVudENsZWFuQ2FjaGUnLCAkb3B0aW9ucyk7DQoJfQ==', '[[[Component]]] Privacy Tabs', '', '', '', '', '', '', '', '2.0.2', '{\"property_selection0\":{\"property\":\"9\"},\"property_selection1\":{\"property\":\"7\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Privacy Tabs J5', '', 1, '', '', 1, '2024-03-10 15:55:21', '2024-04-09 10:35:05', 6, '', 2), +(45, 1, '', '', '', '', '', '', '', '', '', '', '', '', 1, 'This plugin is used to set dynamic gets class headers.', '{\"fields0\":{\"file\":\"dynamic_get\",\"fields_name\":\"params.dynamic_get_headers\",\"fieldset\":\"dynamic_get_headers\",\"label\":\"Class Headers\",\"fields_rules_paths\":\"1\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"2855\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"2859\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"2963\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"2981\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"2980\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"2962\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"2890\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"2887\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"2993\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"2854\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"2860\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"2961\",\"custom_value\":\"\"},\"fields12\":{\"field\":\"2856\",\"custom_value\":\"\"},\"fields13\":{\"field\":\"2858\",\"custom_value\":\"\"},\"fields14\":{\"field\":\"2960\",\"custom_value\":\"\"},\"fields15\":{\"field\":\"2982\",\"custom_value\":\"\"},\"fields16\":{\"field\":\"2979\",\"custom_value\":\"\"},\"fields17\":{\"field\":\"2959\",\"custom_value\":\"\"},\"fields18\":{\"field\":\"2889\",\"custom_value\":\"\"},\"fields19\":{\"field\":\"2888\",\"custom_value\":\"\"},\"fields20\":{\"field\":\"2994\",\"custom_value\":\"\"},\"fields21\":{\"field\":\"2853\",\"custom_value\":\"\"},\"fields22\":{\"field\":\"2857\",\"custom_value\":\"\"},\"fields23\":{\"field\":\"2958\",\"custom_value\":\"\"},\"fields24\":{\"field\":\"2866\",\"custom_value\":\"\"},\"fields25\":{\"field\":\"2862\",\"custom_value\":\"\"},\"fields26\":{\"field\":\"2971\",\"custom_value\":\"\"},\"fields27\":{\"field\":\"2990\",\"custom_value\":\"\"},\"fields28\":{\"field\":\"2991\",\"custom_value\":\"\"},\"fields29\":{\"field\":\"2957\",\"custom_value\":\"\"},\"fields30\":{\"field\":\"2893\",\"custom_value\":\"\"},\"fields31\":{\"field\":\"2892\",\"custom_value\":\"\"},\"fields32\":{\"field\":\"2998\",\"custom_value\":\"\"},\"fields33\":{\"field\":\"2867\",\"custom_value\":\"\"},\"fields34\":{\"field\":\"2861\",\"custom_value\":\"\"},\"fields35\":{\"field\":\"2956\",\"custom_value\":\"\"},\"fields36\":{\"field\":\"2865\",\"custom_value\":\"\"},\"fields37\":{\"field\":\"2863\",\"custom_value\":\"\"},\"fields38\":{\"field\":\"2955\",\"custom_value\":\"\"},\"fields39\":{\"field\":\"2989\",\"custom_value\":\"\"},\"fields40\":{\"field\":\"2992\",\"custom_value\":\"\"},\"fields41\":{\"field\":\"2954\",\"custom_value\":\"\"},\"fields42\":{\"field\":\"2894\",\"custom_value\":\"\"},\"fields43\":{\"field\":\"2891\",\"custom_value\":\"\"},\"fields44\":{\"field\":\"2997\",\"custom_value\":\"\"},\"fields45\":{\"field\":\"2868\",\"custom_value\":\"\"},\"fields46\":{\"field\":\"2864\",\"custom_value\":\"\"},\"fields47\":{\"field\":\"2953\",\"custom_value\":\"\"},\"fields48\":{\"field\":\"3003\",\"custom_value\":\"\"},\"fields49\":{\"field\":\"3005\",\"custom_value\":\"\"},\"fields50\":{\"field\":\"3004\",\"custom_value\":\"\"}}}}', '118e8615-4587-4055-818e-e9d4cf055aec', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtOw0KdXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXENvbXBvbmVudFxDb21wb25lbnRIZWxwZXI7', 3, '{}', 'W0NVU1RPTUNPREU9aGVhZGVyc1RhYnNKZml2ZStkeW5hbWljX2dldF0=', '[[[Component]]] Dynamic Get Headers Tabs', '', '', '', '', '', '', '', '3.0.0', '{}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'JCB Dynamic Get Headers Tabs J5', '', 1, '', '', 1, '2024-03-10 15:55:24', '2024-03-11 14:09:11', 4, '', 2), +(46, 1, '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Add Access Token to easy update [[[Component]]]', '{}', '5236660d-5dee-492b-925c-15b96cb6ea44', 'dXNlIEpvb21sYVxDTVNcVXJpXFVyaTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xDb21wb25lbnRcQ29tcG9uZW50SGVscGVyOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW91ci4gSWYgdHJ1ZSwgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4NCgkgKg0KCSAqIEB2YXIgICAgYm9vbGVhbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhdXRvbG9hZExhbmd1YWdlID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkLg0KCSAqDQoJICogRm9yIG1vZGlmaWNhdGlvbiBvZiBVUkwgYW5kIGhlYWRlcnMgYmVmb3JlIHBhY2thZ2UgZG93bmxvYWQNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvbkluc3RhbGxlckJlZm9yZVBhY2thZ2VEb3dubG9hZCgmJHVybCwgJiRoZWFkZXJzKQ0KCXsNCgkJLy8gc2V0IHRoZSBVUkkgb2JqZWN0DQoJCSR1cmkgPSBVcmk6OmdldEluc3RhbmNlKCR1cmwpOw0KCQkkcGFydHMgPSBleHBsb2RlKCcvJywgJHVyaS0+Z2V0UGF0aCgpKTsNCg0KCQkvLyBjaGVjayB0aGF0IHRoaXMgaXMgb3VyIEFQSQ0KCQlpZiAoJHVyaS0+Z2V0SG9zdCgpID09ICdbW1tnaXRlYV91cmxdXV0nICYmIGluX2FycmF5KCdbW1tnaXRlYV9wYWNrYWdlX25hbWVdXV0nLCAkcGFydHMpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHRva2VuIGlmIHNldA0KCQkJJHRva2VuID0gQ29tcG9uZW50SGVscGVyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdnaXRlYV90b2tlbicsIGZhbHNlKTsNCgkJCS8vIG9ubHkgYWRkIGlmIHRva2VuIGlzIHNldA0KCQkJaWYgKCR0b2tlbikNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHRva2VuDQoJCQkJJHVyaS0+c2V0VmFyKCdhY2Nlc3NfdG9rZW4nLCAkdG9rZW4pOw0KCQkJCS8vIHVwZGF0ZSB0aGUgVVJMDQoJCQkJJHVybCA9ICR1cmktPnRvU3RyaW5nKCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSByZXR1cm4gVVJMDQoJCQkJJHJldHVybiA9IHVybGVuY29kZShiYXNlNjRfZW5jb2RlKChzdHJpbmcpIFVyaTo6Z2V0SW5zdGFuY2UoKSkpOw0KCQkJCS8vIHNldCB0aGUgdXJscw0KCQkJCSRnZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciaHR0cHM6Ly9bW1tnaXRlYV91cmxdXV0vdXNlci9zZXR0aW5ncy9hcHBsaWNhdGlvbnMiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iJyAuIFRleHQ6Ol8oJ0dldCBBY2Nlc3MgVG9rZW4nKSAuICciJzsNCgkJCQkkc2V0X2FjY2Vzc190b2tlbl91cmwgPSAnIicgLiBVcmk6OnJvb3QoKSAuICdhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX2NvbmZpZyZ2aWV3PWNvbXBvbmVudCZjb21wb25lbnQ9Y29tX1tbW2NvbXBvbmVudF1dXSZwYXRoPSZyZXR1cm49JyAuICRyZXR1cm4gLiAnIiB0aXRsZT0iJyAuIFRleHQ6Ol8oJ1NldCBBY2Nlc3MgVG9rZW4nKSAuICciJzsNCgkJCQkvLyBsb2FkIHRoZSBtZXNzYWdlDQoJCQkJJHRoaXMtPmFwcC0+ZW5xdWV1ZU1lc3NhZ2UoDQoJCQkJCVRleHQ6OnNwcmludGYoIklmIHRoZXJlIHdhcyBhIGRvd25sb2FkL3VwZGF0ZSBlcnJvciwgaXQncyBwcm9iYWJseSBiZWNhdXNlIHRoZSA8YSBocmVmPSVzID5BUEkgQWNjZXNzIFRva2VuPC9hPiBmb3IgdXBkYXRlcyBvZiBbW1tjb21wb25lbnRdXV0gaGFzIG5vdCBiZWVuIHNldCwgeW91IGNhbiBzZXQgdGhpcyBhY2Nlc3MgdG9rZW4gaW4gdGhlIDxhIGhyZWY9JXMgPmdsb2JhbCBvcHRpb25zIHRhYjwvYT4uIiwNCgkJCQkJCSRnZXRfYWNjZXNzX3Rva2VuX3VybCwNCgkJCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybA0KCQkJCQkpLCAnbm90aWNlJyk7DQoJCQl9DQoJCX0NCgl9', 'componentbuilder', '', '', '', 'Ly8=', '', '', '', '2.0.0', '{\"property_selection0\":{\"property\":\"39\"},\"property_selection1\":{\"property\":\"37\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev) J5', '', 1, '', '', 1, '2024-03-10 17:27:35', '2024-03-10 21:15:59', 5, '', 9); -- -- Dumping data for table `#__componentbuilder_admin_view` @@ -2958,7 +2510,8 @@ INSERT INTO `#__componentbuilder_repository` (`id`, `system_name`, `organisation (7, 'Openai', 'joomla', 'openai', 1, 1, 'https://git.vdm.dev', 'c736a46f-0880-428a-8837-02627fdbd38d', 'master', 1, 7, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:19', ''), (8, 'Minify', 'joomla', 'minify', 1, 1, 'https://git.vdm.dev', '6c741f48-a192-4e17-a932-df552164cffb', 'master', 1, 8, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:30', ''), (9, 'psr', 'joomla', 'psr', 1, 1, 'https://git.vdm.dev', 'bfaa857a-df24-4d8c-97c3-1da4167a2bc8', 'master', 1, 9, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:41', ''), -(10, 'fof', 'joomla', 'fof', 1, 1, 'https://git.vdm.dev', 'dd591247-1215-4faf-8a00-1f294768ba13', 'master', 1, 10, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:47', ''); +(10, 'fof', 'joomla', 'fof', 1, 1, 'https://git.vdm.dev', 'dd591247-1215-4faf-8a00-1f294768ba13', 'master', 1, 10, 1, '2024-06-15 17:43:09', '2024-06-10 11:03:47', ''), +(12, 'Joomla Powers', 'joomla', 'joomla-powers', 2, 1, 'https://git.vdm.dev', 'dfba58ef-f823-43d4-ab73-865fdaf09294', 'master', 1, 12, 1, '2024-07-08 20:29:15', '2024-07-08 14:07:31', ''); -- -- Dumping data for table `#__componentbuilder_help_document` diff --git a/admin/src/Controller/Admin_viewsController.php b/admin/src/Controller/Admin_viewsController.php index 1280db53d..9ed31cfe9 100644 --- a/admin/src/Controller/Admin_viewsController.php +++ b/admin/src/Controller/Admin_viewsController.php @@ -56,27 +56,40 @@ class Admin_viewsController extends AdminController /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=admin_views', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('admin_views.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -90,6 +103,7 @@ class Admin_viewsController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } diff --git a/admin/src/Controller/CompilerController.php b/admin/src/Controller/CompilerController.php index 4c8cc642d..e91f4c659 100644 --- a/admin/src/Controller/CompilerController.php +++ b/admin/src/Controller/CompilerController.php @@ -537,27 +537,40 @@ class CompilerController extends AdminController } /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=compiler', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('compiler.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -571,6 +584,7 @@ class CompilerController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } diff --git a/admin/src/Controller/Custom_codesController.php b/admin/src/Controller/Custom_codesController.php index ef790774b..7751e514b 100644 --- a/admin/src/Controller/Custom_codesController.php +++ b/admin/src/Controller/Custom_codesController.php @@ -56,27 +56,40 @@ class Custom_codesController extends AdminController /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=custom_codes', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('custom_codes.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -90,6 +103,7 @@ class Custom_codesController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } diff --git a/admin/src/Controller/Dynamic_getsController.php b/admin/src/Controller/Dynamic_getsController.php index f4411d195..3eda6a9e1 100644 --- a/admin/src/Controller/Dynamic_getsController.php +++ b/admin/src/Controller/Dynamic_getsController.php @@ -56,27 +56,40 @@ class Dynamic_getsController extends AdminController /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=dynamic_gets', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('dynamic_gets.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -90,6 +103,7 @@ class Dynamic_getsController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } diff --git a/admin/src/Controller/FieldsController.php b/admin/src/Controller/FieldsController.php index 5cd9df8e2..69d9a8fe1 100644 --- a/admin/src/Controller/FieldsController.php +++ b/admin/src/Controller/FieldsController.php @@ -56,27 +56,40 @@ class FieldsController extends AdminController /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fields', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('fields.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -90,6 +103,7 @@ class FieldsController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } diff --git a/admin/src/Controller/Joomla_componentsController.php b/admin/src/Controller/Joomla_componentsController.php index 1f214b2b8..d7e77aa19 100644 --- a/admin/src/Controller/Joomla_componentsController.php +++ b/admin/src/Controller/Joomla_componentsController.php @@ -122,27 +122,40 @@ class Joomla_componentsController extends AdminController /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=joomla_components', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('joomla_components.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -156,6 +169,7 @@ class Joomla_componentsController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } diff --git a/admin/src/Controller/Joomla_pluginsController.php b/admin/src/Controller/Joomla_pluginsController.php index dfe5f8682..e27124f1b 100644 --- a/admin/src/Controller/Joomla_pluginsController.php +++ b/admin/src/Controller/Joomla_pluginsController.php @@ -56,27 +56,40 @@ class Joomla_pluginsController extends AdminController /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=joomla_plugins', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('joomla_plugins.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -90,6 +103,7 @@ class Joomla_pluginsController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } diff --git a/admin/src/Controller/Joomla_powerController.php b/admin/src/Controller/Joomla_powerController.php index 0ab8b714b..a5128a822 100644 --- a/admin/src/Controller/Joomla_powerController.php +++ b/admin/src/Controller/Joomla_powerController.php @@ -63,6 +63,20 @@ class Joomla_powerController extends FormController */ protected $view_list = 'joomla_powers'; + /** + * Resets the specified Joomla power. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the item data posted by the user. + * 3. It checks whether the current user has the necessary permissions to reset the Joomla power. + * 4. It validates the presence of the necessary item identifiers (ID and GUID). + * 5. If the user is authorized and the identifiers are valid, it attempts to reset the specified power. + * 6. Depending on the result of the reset operation, it sets the appropriate success or error message. + * 7. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful reset, false on failure. + */ public function resetPowers() { // Check for request forgeries @@ -93,18 +107,98 @@ class Joomla_powerController extends FormController } elseif($user->authorise('power.reset', 'com_componentbuilder')) { - if (JoomlaPowerFactory::_('Joomlapower')->reset([$guid])) - { - // set success message - $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; - $message .= '

'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_RESET').'

'; - $status = 'success'; - $success = true; - } - else - { + try { + if (JoomlaPowerFactory::_('Joomlapower')->reset([$guid])) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_RESET').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_POWER_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; - $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_POWER_HAS_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; + } + } + + // set redirect + $redirect_url = Route::_( + 'index.php?option=com_componentbuilder&view=joomla_power' + . $this->getRedirectToItemAppend($id), $success + ); + + $this->setRedirect($redirect_url, $message, $status); + + return $success; + } + + /** + * Pushes the specified Joomla power. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the item data posted by the user. + * 3. It checks whether the current user has the necessary permissions to push the Joomla power. + * 4. It validates the presence of the necessary item identifiers (ID and GUID). + * 5. If the user is authorized and the identifiers are valid, it attempts to push the specified power. + * 6. Depending on the result of the push operation, it sets the appropriate success or error message. + * 7. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful push, false on failure. + */ + public function pushPowers() + { + // Check for request forgeries + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + // get Item posted + $item = $this->input->post->get('jform', array(), 'array'); + + // check if user has the right + $user = Factory::getUser(); + + // set default error message + $message = '

' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_JOOMLA_POWER') . '

'; + $status = 'error'; + $success = false; + + // load the ID + $id = $item['id'] ?? null; + $guid = $item['guid'] ?? null; + + // check if there is any selections + if ($id === null || $guid === null) + { + // set error message + $message = '

' . Text::_('COM_COMPONENTBUILDER_NOT_SAVED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_POWER_BEFORE_YOU_CAN_USE_THIS_FEATURE') . '

'; + } + elseif($user->authorise('power.push', 'com_componentbuilder')) + { + try { + if (JoomlaPowerFactory::_('Joomla.Power.Repository')->set([$guid])) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_PUSHED').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_JOOMLA_POWER_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { + $message = '

' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; } } diff --git a/admin/src/Controller/Joomla_powersController.php b/admin/src/Controller/Joomla_powersController.php index 80322c7d0..0439178cb 100644 --- a/admin/src/Controller/Joomla_powersController.php +++ b/admin/src/Controller/Joomla_powersController.php @@ -54,6 +54,18 @@ class Joomla_powersController extends AdminController return parent::getModel($name, $prefix, $config); } + /** + * Initializes all remote Joomla powers and syncs them with the local database. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to initialize the Joomla powers. + * 3. If the user is authorized, it attempts to initialize the remote Joomla powers. + * 4. Depending on the result of the initialization operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful initialization, false on failure. + */ public function initPowers() { // Check for request forgeries @@ -70,19 +82,24 @@ class Joomla_powersController extends AdminController if($user->authorise('power.init', 'com_componentbuilder')) { - if (JoomlaPowerFactory::_('Joomlapower')->init()) - { - // set success message - $message = '

' . Text::_('COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_JOOMLA_POWERS') . '

'; - $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_JOOMLA_POWERS_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES') . '

'; + try { + if (JoomlaPowerFactory::_('Joomlapower')->init()) + { + // set success message + $message = '

' . Text::_('COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_JOOMLA_POWERS') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_JOOMLA_POWERS_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES') . '

'; - $status = 'success'; - $success = true; - } - else - { + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_POWERS_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { $message = '

' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . '

'; - $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_POWERS_HAS_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; } } @@ -93,6 +110,21 @@ class Joomla_powersController extends AdminController return $success; } + /** + * Resets the selected Joomla powers. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the IDs of the selected powers from the user input. + * 3. It sanitizes the input by converting the IDs to integers. + * 4. It checks whether any powers have been selected. + * 5. It checks whether the current user has the necessary permissions to reset the selected Joomla powers. + * 6. If the user is authorized and powers are selected, it attempts to reset the selected Joomla powers. + * 7. Depending on the result of the reset operation, it sets the appropriate success or error message. + * 8. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful reset, false on failure. + */ public function resetPowers() { // Check for request forgeries @@ -125,18 +157,102 @@ class Joomla_powersController extends AdminController { $guids = GetHelper::vars('joomla_power', $pks, 'id', 'guid'); - if (JoomlaPowerFactory::_('Joomlapower')->reset($guids)) - { - // set success message - $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; - $message .= '

'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET').'

'; - $status = 'success'; - $success = true; - } - else - { + try { + if (JoomlaPowerFactory::_('Joomlapower')->reset($guids)) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_POWERS_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; - $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_POWERS_HAS_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; + } + + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=joomla_powers', $success); + $this->setRedirect($redirect_url, $message, $status); + + return $success; + } + + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=joomla_powers', false); + $this->setRedirect($redirect_url); + return $success; + } + + /** + * Pushes the selected Joomla powers. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the IDs of the selected powers from the user input. + * 3. It sanitizes the input by converting the IDs to integers. + * 4. It checks whether any powers have been selected. + * 5. It checks whether the current user has the necessary permissions to push the selected Joomla powers. + * 6. If the user is authorized and powers are selected, it attempts to push the selected Joomla powers. + * 7. Depending on the result of the push operation, it sets the appropriate success or error message. + * 8. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful push, false on failure. + */ + public function pushPowers() + { + // Check for request forgeries + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + // get IDS of the selected powers + $pks = $this->input->post->get('cid', [], 'array'); + + // Sanitize the input + ArrayHelper::toInteger($pks); + + // check if there is any selections + if ($pks === []) + { + // set error message + $message = '

'.Text::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'

'; + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=joomla_powers', false); + $this->setRedirect($redirect_url, $message, 'error'); + return false; + } + + $status = 'error'; + $success = false; + + // check if user has the right + $user = Factory::getUser(); + if($user->authorise('power.push', 'com_componentbuilder')) + { + $guids = GetHelper::vars('joomla_power', $pks, 'id', 'guid'); + + try { + if (JoomlaPowerFactory::_('Joomla.Power.Repository')->set($guids)) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_PUSHED').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_JOOMLA_POWERS_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { + $message = '

' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; } // set redirect diff --git a/admin/src/Controller/PowerController.php b/admin/src/Controller/PowerController.php index 4ca682822..e5f2c00dd 100644 --- a/admin/src/Controller/PowerController.php +++ b/admin/src/Controller/PowerController.php @@ -63,6 +63,20 @@ class PowerController extends FormController */ protected $view_list = 'powers'; + /** + * Resets the specified power. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the item data posted by the user. + * 3. It checks whether the current user has the necessary permissions to reset the power. + * 4. It validates the presence of the necessary item identifiers (ID and GUID). + * 5. If the user is authorized and the identifiers are valid, it attempts to reset the specified power. + * 6. Depending on the result of the reset operation, it sets the appropriate success or error message. + * 7. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful reset, false on failure. + */ public function resetPowers() { // Check for request forgeries diff --git a/admin/src/Controller/PowersController.php b/admin/src/Controller/PowersController.php index 6786e552f..947e7f5de 100644 --- a/admin/src/Controller/PowersController.php +++ b/admin/src/Controller/PowersController.php @@ -58,27 +58,40 @@ class PowersController extends AdminController /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=powers', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('powers.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -92,10 +105,23 @@ class PowersController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } + /** + * Initializes all remote powers and syncs them with the local database. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to initialize the powers. + * 3. If the user is authorized, it attempts to initialize the remote powers. + * 4. Depending on the result of the initialization operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful initialization, false on failure. + */ public function initPowers() { // Check for request forgeries @@ -135,6 +161,21 @@ class PowersController extends AdminController return $success; } + /** + * Resets the selected powers. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the IDs of the selected powers from the user input. + * 3. It sanitizes the input by converting the IDs to integers. + * 4. It checks whether any powers have been selected. + * 5. It checks whether the current user has the necessary permissions to reset the selected powers. + * 6. If the user is authorized and powers are selected, it attempts to reset the selected powers. + * 7. Depending on the result of the reset operation, it sets the appropriate success or error message. + * 8. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful reset, false on failure. + */ public function resetPowers() { // Check for request forgeries diff --git a/admin/src/Controller/Validation_rulesController.php b/admin/src/Controller/Validation_rulesController.php index 2103958ad..e6a5eecec 100644 --- a/admin/src/Controller/Validation_rulesController.php +++ b/admin/src/Controller/Validation_rulesController.php @@ -56,27 +56,40 @@ class Validation_rulesController extends AdminController /** - * Run the Expansion + * Runs the expansion module. * - * @return void + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to run the expansion module. + * 3. If the user is authorized, it attempts to run the expansion via an API call. + * 4. Depending on the result of the expansion operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful expansion, false on failure. */ public function runExpansion() { // Check for request forgeries - Session::checkToken() or \jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + // check if user has the right $user = Factory::getUser(); + // set page redirect $redirect_url = Route::_('index.php?option=com_componentbuilder&view=validation_rules', false); + // set massage $message = Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_EXPANSION_MODULE'); + // check if this user has the right to run expansion if($user->authorise('validation_rules.run_expansion', 'com_componentbuilder')) { // set massage $message = Text::_('COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB'); + // run expansion via API $result = ComponentbuilderHelper::getFileContents(Uri::root() . 'index.php?option=com_componentbuilder&task=api.expand'); + // is there a message returned if (!is_numeric($result) && StringHelper::check($result)) { @@ -90,6 +103,7 @@ class Validation_rulesController extends AdminController return true; } } + $this->setRedirect($redirect_url, $message, 'error'); return false; } diff --git a/admin/src/Model/Admin_fields_relationsModel.php b/admin/src/Model/Admin_fields_relationsModel.php index b75f6304a..ae6ae7937 100644 --- a/admin/src/Model/Admin_fields_relationsModel.php +++ b/admin/src/Model/Admin_fields_relationsModel.php @@ -119,10 +119,18 @@ class Admin_fields_relationsModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Admin_viewModel.php b/admin/src/Model/Admin_viewModel.php index 778e88d72..42258ed88 100644 --- a/admin/src/Model/Admin_viewModel.php +++ b/admin/src/Model/Admin_viewModel.php @@ -268,10 +268,18 @@ class Admin_viewModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Class_extendsModel.php b/admin/src/Model/Class_extendsModel.php index 57c8b8bca..bf66a7dcf 100644 --- a/admin/src/Model/Class_extendsModel.php +++ b/admin/src/Model/Class_extendsModel.php @@ -123,10 +123,18 @@ class Class_extendsModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Class_methodModel.php b/admin/src/Model/Class_methodModel.php index 40a839e4f..e2fd9a17e 100644 --- a/admin/src/Model/Class_methodModel.php +++ b/admin/src/Model/Class_methodModel.php @@ -127,10 +127,18 @@ class Class_methodModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Class_propertyModel.php b/admin/src/Model/Class_propertyModel.php index 1a6bcde83..03aa78f0c 100644 --- a/admin/src/Model/Class_propertyModel.php +++ b/admin/src/Model/Class_propertyModel.php @@ -124,10 +124,18 @@ class Class_propertyModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Component_dashboardModel.php b/admin/src/Model/Component_dashboardModel.php index 1176feaed..e51810ea2 100644 --- a/admin/src/Model/Component_dashboardModel.php +++ b/admin/src/Model/Component_dashboardModel.php @@ -127,10 +127,18 @@ class Component_dashboardModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Component_routerModel.php b/admin/src/Model/Component_routerModel.php index 1f6b78edc..d22a015d7 100644 --- a/admin/src/Model/Component_routerModel.php +++ b/admin/src/Model/Component_routerModel.php @@ -128,10 +128,18 @@ class Component_routerModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Custom_admin_viewModel.php b/admin/src/Model/Custom_admin_viewModel.php index e9eb36e39..356b680d4 100644 --- a/admin/src/Model/Custom_admin_viewModel.php +++ b/admin/src/Model/Custom_admin_viewModel.php @@ -185,10 +185,18 @@ class Custom_admin_viewModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Custom_codeModel.php b/admin/src/Model/Custom_codeModel.php index 750772959..1bc07f18a 100644 --- a/admin/src/Model/Custom_codeModel.php +++ b/admin/src/Model/Custom_codeModel.php @@ -139,10 +139,18 @@ class Custom_codeModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Dynamic_getModel.php b/admin/src/Model/Dynamic_getModel.php index e374197b1..a6553e854 100644 --- a/admin/src/Model/Dynamic_getModel.php +++ b/admin/src/Model/Dynamic_getModel.php @@ -179,10 +179,18 @@ class Dynamic_getModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/FieldModel.php b/admin/src/Model/FieldModel.php index 0cba29e11..70dacfd9e 100644 --- a/admin/src/Model/FieldModel.php +++ b/admin/src/Model/FieldModel.php @@ -172,10 +172,18 @@ class FieldModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/FieldtypeModel.php b/admin/src/Model/FieldtypeModel.php index 756982865..fe2c761e3 100644 --- a/admin/src/Model/FieldtypeModel.php +++ b/admin/src/Model/FieldtypeModel.php @@ -146,10 +146,18 @@ class FieldtypeModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Joomla_componentModel.php b/admin/src/Model/Joomla_componentModel.php index 48736fb4f..82910d9f4 100644 --- a/admin/src/Model/Joomla_componentModel.php +++ b/admin/src/Model/Joomla_componentModel.php @@ -303,10 +303,18 @@ class Joomla_componentModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Joomla_moduleModel.php b/admin/src/Model/Joomla_moduleModel.php index 78a6ed22b..8994451aa 100644 --- a/admin/src/Model/Joomla_moduleModel.php +++ b/admin/src/Model/Joomla_moduleModel.php @@ -209,10 +209,18 @@ class Joomla_moduleModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Joomla_pluginModel.php b/admin/src/Model/Joomla_pluginModel.php index d421704f0..f61a2c306 100644 --- a/admin/src/Model/Joomla_pluginModel.php +++ b/admin/src/Model/Joomla_pluginModel.php @@ -186,10 +186,18 @@ class Joomla_pluginModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Language_translationModel.php b/admin/src/Model/Language_translationModel.php index 2b2b33c40..9c610d9cb 100644 --- a/admin/src/Model/Language_translationModel.php +++ b/admin/src/Model/Language_translationModel.php @@ -119,10 +119,18 @@ class Language_translationModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/LayoutModel.php b/admin/src/Model/LayoutModel.php index 0806e78a9..36e6f6bcd 100644 --- a/admin/src/Model/LayoutModel.php +++ b/admin/src/Model/LayoutModel.php @@ -141,10 +141,18 @@ class LayoutModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/LibraryModel.php b/admin/src/Model/LibraryModel.php index abfa27bb1..d897c9621 100644 --- a/admin/src/Model/LibraryModel.php +++ b/admin/src/Model/LibraryModel.php @@ -157,10 +157,18 @@ class LibraryModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/PlaceholderModel.php b/admin/src/Model/PlaceholderModel.php index 7935aa1da..d0f0eaac8 100644 --- a/admin/src/Model/PlaceholderModel.php +++ b/admin/src/Model/PlaceholderModel.php @@ -121,10 +121,18 @@ class PlaceholderModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/PowerModel.php b/admin/src/Model/PowerModel.php index 63b4e1357..6770eaded 100644 --- a/admin/src/Model/PowerModel.php +++ b/admin/src/Model/PowerModel.php @@ -167,10 +167,18 @@ class PowerModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Site_viewModel.php b/admin/src/Model/Site_viewModel.php index 1d3975efc..dce6b252a 100644 --- a/admin/src/Model/Site_viewModel.php +++ b/admin/src/Model/Site_viewModel.php @@ -188,10 +188,18 @@ class Site_viewModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/TemplateModel.php b/admin/src/Model/TemplateModel.php index 2b508da24..3a77a53c1 100644 --- a/admin/src/Model/TemplateModel.php +++ b/admin/src/Model/TemplateModel.php @@ -141,10 +141,18 @@ class TemplateModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/Model/Validation_ruleModel.php b/admin/src/Model/Validation_ruleModel.php index 068a4f7a8..75ce0428e 100644 --- a/admin/src/Model/Validation_ruleModel.php +++ b/admin/src/Model/Validation_ruleModel.php @@ -124,10 +124,18 @@ class Validation_ruleModel extends AdminModel /** - * get VDM internal session key + * Retrieves or generates a Vast Development Method (VDM) key for the current item. * - * @return string the session key + * This function performs the following operations: + * 1. Checks if the VDM key is already set. If not, it proceeds to generate or retrieve one. + * 2. Determines the item ID based on the presence of a specific argument. + * 3. Attempts to retrieve an existing VDM key from a helper method using the item ID. + * 4. If a VDM key is not found, it generates a new random VDM key. + * 5. Stores the VDM key and associates it with the item ID in a helper method. + * 6. Optionally, stores return and GUID values if available. + * 7. Returns the VDM key. * + * @return string The VDM key for the current item. */ public function getVDM() { diff --git a/admin/src/View/Joomla_power/HtmlView.php b/admin/src/View/Joomla_power/HtmlView.php index e10455238..49a7b5480 100644 --- a/admin/src/View/Joomla_power/HtmlView.php +++ b/admin/src/View/Joomla_power/HtmlView.php @@ -177,6 +177,11 @@ class HtmlView extends BaseHtmlView // add Reset button. ToolbarHelper::custom('joomla_power.resetPowers', 'joomla custom-button-resetpowers', '', 'COM_COMPONENTBUILDER_RESET', false); } + if ($this->canDo->get('joomla_power.push')) + { + // add Push button. + ToolbarHelper::custom('joomla_power.pushPowers', 'share custom-button-pushpowers', '', 'COM_COMPONENTBUILDER_PUSH', false); + } ToolbarHelper::cancel('joomla_power.cancel', 'JTOOLBAR_CLOSE'); } } diff --git a/admin/src/View/Joomla_powers/HtmlView.php b/admin/src/View/Joomla_powers/HtmlView.php index 3e9bebd3a..819e74528 100644 --- a/admin/src/View/Joomla_powers/HtmlView.php +++ b/admin/src/View/Joomla_powers/HtmlView.php @@ -151,6 +151,11 @@ class HtmlView extends BaseHtmlView // add Reset button. ToolbarHelper::custom('joomla_powers.resetPowers', 'joomla custom-button-resetpowers', '', 'COM_COMPONENTBUILDER_RESET', false); } + if ($this->user->authorise('joomla_power.push', 'com_componentbuilder')) + { + // add Push button. + ToolbarHelper::custom('joomla_powers.pushPowers', 'share custom-button-pushpowers', '', 'COM_COMPONENTBUILDER_PUSH', false); + } // set help url for this view if found $this->help_url = ComponentbuilderHelper::getHelpUrl('joomla_powers'); diff --git a/componentbuilder.xml b/componentbuilder.xml index 068bdcb23..acff7f007 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,15 +1,15 @@ COM_COMPONENTBUILDER - 28th June, 2024 + 8th July, 2024 Llewellyn van der Merwe joomla@vdm.io https://dev.vdm.io Copyright (C) 2015 Vast Development Method. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt - 5.0.1-alpha6 + 5.0.1-alpha7 Component Builder (v.5.0.1-alpha6) +

Component Builder (v.5.0.1-alpha7)

The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time. diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml index 1bb4ea8ac..5dd6f4d90 100644 --- a/componentbuilder_update_server.xml +++ b/componentbuilder_update_server.xml @@ -62,7 +62,7 @@ 5.0.1-alpha https://dev.vdm.io - https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.1-alpha5.zip + https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.1-alpha7.zip alpha @@ -77,10 +77,10 @@ pkg_component_builder package site - 5.0.1-alpha6 + 5.0.1-alpha7 https://dev.vdm.io - https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.1-alpha6.zip + https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.1-alpha7.zip alpha diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Contents.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Contents.php index 3f2476b67..3ba26d362 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Contents.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Contents.php @@ -64,10 +64,10 @@ class Contents extends Api * @param string|null $ref Optional. The name of the commit/branch/tag. * Default the repository's default branch (usually master). * - * @return object|null + * @return null|array|object * @since 3.2.0 **/ - public function metadata(string $owner, string $repo, string $filepath, ?string $ref = null): ?object + public function metadata(string $owner, string $repo, string $filepath, ?string $ref = null): null|array|object { // Build the request path. $path = "/repos/{$owner}/{$repo}/contents/{$filepath}"; @@ -100,7 +100,7 @@ class Contents extends Api * @param string|null $authorEmail The author's email. * @param string|null $committerName The committer's name. * @param string|null $committerEmail The committer's email. - * @param bool|null $newBranch Whether to create a new branch. Defaults to false. + * @param string|null $newBranch Whether to create a new branch. Defaults to null. * @param string|null $authorDate The author's date. * @param string|null $committerDate The committer's date. * @param bool|null $signoff Add a Signed-off-by trailer. Defaults to null. @@ -119,7 +119,7 @@ class Contents extends Api ?string $authorEmail = null, ?string $committerName = null, ?string $committerEmail = null, - ?bool $newBranch = false, + ?string $newBranch = null, ?string $authorDate = null, ?string $committerDate = null, ?bool $signoff = null diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Utilities/Http.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Utilities/Http.php index ea65e1c7e..3529cac34 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Utilities/Http.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Utilities/Http.php @@ -29,7 +29,7 @@ final class Http extends JoomlaHttp * @var string * @since 3.2.0 */ - protected string $_token_; // to avoid collusions (but allow swapping) + protected string $_token_; // to avoid collisions (but allow swapping) /** * Constructor. @@ -52,7 +52,7 @@ final class Http extends JoomlaHttp // add the token if given if (is_string($token)) { - $config['headers']['Authorization'] = $token; + $config['headers']['Authorization'] = 'token ' . $token; $this->_token_ = $token; } @@ -78,7 +78,7 @@ final class Http extends JoomlaHttp ); // add the token - $headers['Authorization'] = $token; + $headers['Authorization'] = 'token ' . $token; $this->_token_ = $token; $this->setOption('headers', $headers); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Grep.php b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Grep.php index f4c306f41..9a8bdba9c 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Grep.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Grep.php @@ -55,6 +55,14 @@ abstract class Grep implements GrepInterface **/ protected array $order = ['local', 'remote']; + /** + * The target branch field name ['read_branch', 'write_branch'] + * + * @var string + * @since 3.2.2 + **/ + protected string $branch_field = 'read_branch'; + /** * Gitea Repository Contents * @@ -120,6 +128,19 @@ abstract class Grep implements GrepInterface return empty($powers) ? null : array_unique($powers); } + /** + * Set the branch field + * + * @param string $field The global unique id of the power + * + * @return void + * @since 3.2.2 + */ + public function setBranchField(string $field): void + { + $this->branch_field = $field; + } + /** * Get a power * @@ -196,15 +217,12 @@ abstract class Grep implements GrepInterface $path->path = trim($path->organisation) . '/' . trim($path->repository); // update the branch - if ($path->read_branch === 'default' || empty($path->read_branch)) - { - $path->read_branch = null; - } + $branch_field = $this->getBranchField(); + $branch = $path->{$branch_field} ?? null; - // only update the write branch if set - if (isset($path->write_branch) && ($path->write_branch === 'default' || empty($path->write_branch))) + if ($branch === 'default' || empty($branch)) { - $path->write_branch = null; + $path->{$branch_field} = null; } // set local path @@ -219,6 +237,17 @@ abstract class Grep implements GrepInterface } } } + } + + /** + * Get the branch field + * + * @return string + * @since 3.2.2 + */ + public function getBranchField(): string + { + return $this->branch_field; } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Config.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Config.php index 8aabf5757..a1d52bc50 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Config.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Config.php @@ -16,6 +16,7 @@ use Joomla\Registry\Registry as JoomlaRegistry; use Joomla\CMS\Factory as JoomlaFactory; use VDM\Joomla\Utilities\GetHelper; use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Utilities\RepoHelper; use VDM\Joomla\Componentbuilder\Abstraction\BaseConfig; @@ -113,21 +114,6 @@ class Config extends BaseConfig return $repos; } - /** - * Get Joomla power push repo - * - * @return object|null The push repository on Gitea - * @since 3.2.1 - */ - protected function getJoomlapowerspushrepo(): ?object - { - // some defaults repos we need by JCB - if (!empty($this->gitea_username)) - { - return (object) ['organisation' => $this->gitea_username, 'repository' => 'joomla-powers', 'read_branch' => 'master']; - } - } - /** * Get joomla power approved paths * @@ -136,7 +122,26 @@ class Config extends BaseConfig */ protected function getApprovedjoomlapaths(): array { - return array_values($this->joomla_powers_init_repos); + // some defaults repos we need by JCB + $approved = $this->joomla_powers_init_repos; + + $paths = RepoHelper::get(2); // Joomla Power = 2 + + if ($paths !== null) + { + foreach ($paths as $path) + { + $owner = $path->organisation ?? null; + $repo = $path->repository ?? null; + if ($owner !== null && $repo !== null) + { + // we make sure to get only the objects + $approved = ["{$owner}.{$repo}" => $path] + $approved; + } + } + } + + return array_values($approved); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Grep.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Grep.php index 2803490a5..2092bdf16 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Grep.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Grep.php @@ -54,20 +54,36 @@ final class Grep extends ExtendingGrep implements GrepInterface return; } + $path->index = null; + + // update the branch + $branch_field = $this->getBranchField(); + $branch = $path->{$branch_field} ?? $path->read_branch ?? 'master'; + try { $this->contents->load_($path->base ?? null, $path->token ?? null); - $path->index = $this->contents->get($path->organisation, $path->repository, 'joomla-powers.json', $path->read_branch); + $source = $this->contents->metadata($path->organisation, $path->repository, 'src', $branch); + if ($source && is_array($source)) + { + $path->index = new \stdClass(); + foreach ($source as $index) + { + if (is_object($index) && isset($index->name)) + { + $path->index->{$index->name} = $index; + } + } + } + $this->contents->reset_(); } catch (\Exception $e) { $this->app->enqueueMessage( - Text::sprintf('COM_COMPONENTBUILDER_PSUPER_POWERB_REPOSITORY_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP', $this->contents->api(), $path->path, $e->getMessage()), + Text::sprintf('COM_COMPONENTBUILDER_PJOOMLA_POWERB_REPOSITORY_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP', $this->contents->api(), $path->path, $e->getMessage()), 'Error' ); - - $path->index = null; } } @@ -82,7 +98,7 @@ final class Grep extends ExtendingGrep implements GrepInterface protected function searchRemote(string $guid): ?object { // we can only search if we have paths - if ($this->path && $this->paths) + if (is_array($this->paths)) { foreach ($this->paths as $path) { @@ -100,7 +116,7 @@ final class Grep extends ExtendingGrep implements GrepInterface } /** - * Get a remote power + * Get a remote joomla power * * @param object $path The repository path details * @param string $guid The global unique id of the power @@ -111,20 +127,40 @@ final class Grep extends ExtendingGrep implements GrepInterface protected function getRemote(object $path, string $guid): ?object { $power = null; - if (empty($path->index->{$guid}->settings)) + if (empty($path->index->{$guid}->path)) { return $power; } + // get the branch name + $branch_field = $this->getBranchField(); + $branch = $path->{$branch_field} ?? $path->read_branch ?? 'master'; + // get the settings $this->contents->load_($path->base ?? null, $path->token ?? null); - if (($power = $this->loadRemoteFile($path->organisation, $path->repository, $path->index->{$guid}->settings, $path->read_branch)) !== null && + if (($power = $this->loadRemoteFile($path->organisation, $path->repository, $path->index->{$guid}->path . '/item.json', $branch)) !== null && isset($power->guid)) { // set the git details in params - $power->params = (object) [ - 'source' => ['guid' => $path->guid ?? null] - ]; + $path_guid = $path->guid ?? null; + if ($path_guid !== null) + { + if (($meta = $this->contents->metadata($path->organisation, $path->repository, $path->index->{$guid}->path . '/item.json', $branch)) !== null && + isset($meta->sha)) + { + if (isset($power->params) && is_object($power->params) && + isset($power->params->source) && is_array($power->params->source)) + { + $power->params->source[$path_guid] = $meta->sha; + } + else + { + $power->params = (object)[ + 'source' => [$path_guid => $meta->sha] + ]; + } + } + } } $this->contents->reset_(); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Repository.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Repository.php new file mode 100644 index 000000000..4ad6a751b --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Repository.php @@ -0,0 +1,46 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\JoomlaPower; + + +use VDM\Joomla\Data\Repository as ExtendingRepository; + + +/** + * Set JoomlaPower based on global unique ids to remote repository + * + * @since 3.2.2 + */ +final class Repository extends ExtendingRepository +{ + /** + * Table Name + * + * @var string + * @since 3.2.1 + */ + protected string $table = 'joomla_power'; + + /** + * The item map + * + * @var array + * @since 3.2.2 + */ + protected array $map = [ + 'system_name' => 'system_name', + 'settings' => 'settings', + 'guid' => 'guid', + 'description' => 'description' + ]; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Service/JoomlaPower.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Service/JoomlaPower.php index 9e7a2f8fc..560793199 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Service/JoomlaPower.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Service/JoomlaPower.php @@ -18,6 +18,7 @@ use VDM\Joomla\Componentbuilder\JoomlaPower\Config; use VDM\Joomla\Componentbuilder\Table; use VDM\Joomla\Componentbuilder\JoomlaPower\Grep; use VDM\Joomla\Componentbuilder\JoomlaPower\Super as Superpower; +use VDM\Joomla\Componentbuilder\JoomlaPower\Repository; use VDM\Joomla\Componentbuilder\Compiler\Power\Parser; @@ -34,7 +35,7 @@ class JoomlaPower implements ServiceProviderInterface * @param Container $container The DI container. * * @return void - * @since 3.2.0 + * @since 3.2.1 */ public function register(Container $container) { @@ -50,6 +51,9 @@ class JoomlaPower implements ServiceProviderInterface $container->alias(Superpower::class, 'Joomlapower') ->share('Joomlapower', [$this, 'getSuperpower'], true); + $container->alias(Repository::class, 'Joomla.Power.Repository') + ->share('Joomla.Power.Repository', [$this, 'getRepository'], true); + $container->alias(Parser::class, 'Power.Parser') ->share('Power.Parser', [$this, 'getParser'], true); } @@ -60,7 +64,7 @@ class JoomlaPower implements ServiceProviderInterface * @param Container $container The DI container. * * @return Config - * @since 3.2.0 + * @since 3.2.1 */ public function getConfig(Container $container): Config { @@ -73,7 +77,7 @@ class JoomlaPower implements ServiceProviderInterface * @param Container $container The DI container. * * @return Table - * @since 3.2.0 + * @since 3.2.1 */ public function getTable(Container $container): Table { @@ -86,7 +90,7 @@ class JoomlaPower implements ServiceProviderInterface * @param Container $container The DI container. * * @return Grep - * @since 3.2.0 + * @since 3.2.1 */ public function getGrep(Container $container): Grep { @@ -102,7 +106,7 @@ class JoomlaPower implements ServiceProviderInterface * @param Container $container The DI container. * * @return Superpower - * @since 3.2.0 + * @since 3.2.1 */ public function getSuperpower(Container $container): Superpower { @@ -112,13 +116,31 @@ class JoomlaPower implements ServiceProviderInterface ); } + /** + * Get The Repository Class. + * + * @param Container $container The DI container. + * + * @return Repository + * @since 3.2.2 + */ + public function getRepository(Container $container): Repository + { + return new Repository( + $container->get('Config')->approved_joomla_paths, + $container->get('Joomla.Power.Grep'), + $container->get('Data.Items'), + $container->get('Gitea.Repository.Contents') + ); + } + /** * Get The Parser Class. * * @param Container $container The DI container. * * @return Parser - * @since 3.2.0 + * @since 3.2.1 */ public function getParser(Container $container): Parser { diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Config.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Config.php index b0ad88ef6..d5e624373 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Config.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Config.php @@ -135,26 +135,6 @@ class Config extends BaseConfig return $repos; } - /** - * Get super power push repo - * - * @return object|null The push repository on Gitea - * @since 3.2.1 - */ - protected function getSuperpowerspushrepo(): ?object - { - if ($this->gitea_username !== null) - { - return (object) [ - 'organisation' => $this->gitea_username, - 'repository' => 'super-powers', - 'read_branch' => 'master' - ]; - } - - return null; - } - /** * get temporary path * diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Data/Repository.php b/libraries/vendor_jcb/VDM.Joomla/src/Data/Repository.php new file mode 100644 index 000000000..44e6bf616 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Data/Repository.php @@ -0,0 +1,386 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Data; + + +use VDM\Joomla\Interfaces\GrepInterface as Grep; +use VDM\Joomla\Interfaces\Data\ItemsInterface as Items; +use VDM\Joomla\Gitea\Repository\Contents as Git; + + +/** + * Set data based on global unique ids to remote repository + * + * @since 3.2.2 + */ +class Repository +{ + /** + * The GrepInterface Class. + * + * @var Grep + * @since 3.2.2 + */ + protected Grep $grep; + + /** + * The ItemsInterface Class. + * + * @var Items + * @since 3.2.2 + */ + protected Items $items; + + /** + * The Contents Class. + * + * @var Git + * @since 3.2.2 + */ + protected Git $git; + + /** + * All active repos + * + * @var array + * @since 3.2.0 + **/ + public array $repos; + + /** + * Table Name + * + * @var string + * @since 3.2.1 + */ + protected string $table; + + /** + * The item map + * + * @var array + * @since 3.2.2 + */ + protected array $map; + + /** + * Constructor. + * + * @param array $repos The active repos + * @param Grep $grep The GrepInterface Class. + * @param Items $items The ItemsInterface Class. + * @param Git $git The Contents Class. + * @param string|null $table The table name. + * + * @since 3.2.2 + */ + public function __construct(array $repos, Grep $grep, Items $items, Git $git, ?string $table = null) + { + $this->repos = $repos; + $this->grep = $grep; + $this->items = $items; + $this->git = $git; + if ($table !== null) + { + $this->table = $table; + } + // set the branch to writing + $this->grep->setBranchField('write_branch'); + } + + /** + * Set the current active table + * + * @param string $table The table that should be active + * + * @return self + * @since 3.2.2 + */ + public function table(string $table): self + { + $this->table = $table; + + return $this; + } + + /** + * Set items + * + * @param array $guids The global unique id of the item + * + * @return bool + * @throws \Exception + * @since 3.2.0 + */ + public function set(array $guids): bool + { + if (($items = $this->getLocalItems($guids)) === null) + { + throw new \Exception("At least one valid local [Joomla Power] must exist for the push function to operate correctly."); + } + + if (!$this->canWrite()) + { + throw new \Exception("At least one [Joomla Power] content repository must be configured with a [Write Branch] value in the repositories area for the push function to operate correctly."); + } + + // update the existing found + if (($existing_items = $this->getRepoItems($guids)) !== []) + { + foreach ($existing_items as $e_guid => $item) + { + if (isset($items[$e_guid])) + { + $this->updateItem($items[$e_guid], $item); + unset($items[$e_guid]); + } + } + } + + // create the new items + foreach ($items as $item) + { + $this->createItem($item); + } + + return true; + } + + /** + * Get the current active table + * + * @return string + * @since 3.2.2 + */ + public function getTable(): string + { + return $this->table; + } + + /** + * Get items + * + * @param array $guids The global unique id of the item + * + * @return array|null + * @since 3.2.2 + */ + public function getLocalItems(array $guids): ?array + { + $items = $this->fetchLocalItems($guids); + + if ($items === null) + { + return null; + } + + return $this->mapItems($items); + } + + /** + * Fetch items from the database + * + * @param array $guids The global unique id of the item + * + * @return array|null + * @since 3.2.2 + */ + protected function fetchLocalItems(array $guids): ?array + { + return $this->items->table($this->table)->get($guids); + } + + /** + * Map items to their properties + * + * @param array $items The items fetched from the database + * + * @return array + * @since 3.2.2 + */ + protected function mapItems(array $items): array + { + $bucket = []; + + foreach ($items as $item) + { + if (!isset($item->guid)) + { + continue; + } + + $bucket[$item->guid] = $this->mapItem($item); + } + + return $bucket; + } + + /** + * Map a single item to its properties + * + * @param object $item The item to be mapped + * + * @return object + * @since 3.2.2 + */ + protected function mapItem(object $item): object + { + $power = []; + + foreach ($this->map as $key => $map) + { + $power[$key] = $item->{$map} ?? null; + } + + return (object) $power; + } + + /** + * get existing items + * + * @param array $guids The global unique id of the item + * + * @return array|null + * @since 3.2.2 + */ + protected function getRepoItems(array $guids): ?array + { + $bucket = []; + foreach ($guids as $guid) + { + if (($item = $this->grep->get($guid)) !== null) + { + $bucket[$guid] = (object) $item; + } + } + + return $bucket ?? null; + } + + /** + * check that we have an active repo towards which we can write data + * + * @return bool + * @since 3.2.2 + */ + protected function canWrite(): bool + { + foreach ($this->repos as $repo) + { + if (!empty($repo->write_branch) && $repo->write_branch !== 'default') + { + return true; + } + } + + return false; + } + + /** + * Checks if two objects are equal by comparing their JSON representations. + * + * This method converts both input objects to JSON strings and compares these strings. + * If the JSON strings are identical, the objects are considered equal. + * + * @param object $obj1 The first object to compare. + * @param object $obj2 The second object to compare. + * + * @return bool True if the objects are equal, false otherwise. + * @since 3.2.2 + */ + protected function areObjectsEqual(object $obj1, object $obj2): bool + { + // Convert both objects to JSON strings + $json1 = json_encode($obj1); + $json2 = json_encode($obj2); + + // Compare the JSON strings + return $json1 === $json2; + } + + /** + * update an existing item (if changed) + * + * @param object $item + * @param object $existing + * + * @return void + * @since 3.2.2 + */ + protected function updateItem(object $item, object $existing): void + { + if (isset($existing->params->source) && is_array($existing->params->source)) + { + // get the source values + $source = $existing->params->source; + + // make sure there was a change + $existing = $this->mapItem($existing); + if ($this->areObjectsEqual($item, $existing)) + { + return; + } + + foreach ($this->repos as $repo) + { + if (isset($source[$repo->guid])) + { + $this->git->load_($repo->base ?? null, $repo->token ?? null); + $this->git->update( + $repo->organisation, // The owner name. + $repo->repository, // The repository name. + 'src/' . $item->guid . '/item.json', // The file path. + json_encode($item, JSON_PRETTY_PRINT), // The file content. + 'Update ' . $item->system_name, // The commit message. + $source[$repo->guid], // The blob SHA of the old file. + $repo->write_branch // The branch name. + ); + $this->git->reset_(); + + // only update in the first found repo + return; + } + } + } + } + + /** + * create a new item + * + * @param object $item + * + * @return void + * @since 3.2.2 + */ + protected function createItem(object $item): void + { + foreach ($this->repos as $repo) + { + if (!empty($repo->write_branch) && $repo->write_branch !== 'default') + { + $this->git->load_($repo->base ?? null, $repo->token ?? null); + $this->git->create( + $repo->organisation, // The owner name. + $repo->repository, // The repository name. + 'src/' . $item->guid . '/item.json', // The file path. + json_encode($item, JSON_PRETTY_PRINT), // The file content. + 'Create ' . $item->system_name, // The commit message. + $repo->write_branch // The branch name. + ); + $this->git->reset_(); + // only create in the first found repo + return; + } + } + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/GrepInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/GrepInterface.php index 5b1badb56..574b2db35 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/GrepInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/GrepInterface.php @@ -27,6 +27,16 @@ interface GrepInterface */ public function getRemotePowersGuid(): ?array; + /** + * Set the branch field + * + * @param string $field The global unique id of the power + * + * @return void + * @since 3.2.2 + */ + public function setBranchField(string $field): void; + /** * Get a power *