Contact Form by WPForms – Drag & Drop Form Builder for WordPress - Version 1.5.5

Version Description

  • Added: WPForms details inside Site Health Info reports (Tools > Site Health > Info).
  • Added: Filter wpforms_emails_summaries_is_disabled to easily disable Email Summaries functionality.
  • Added: New smart tag: {field_html_id="42"} - that will postprocess field value and display its HTML representation.
  • Changed: Improve wpforms_get_ip() IP detection and related {user_ip} smart-tag value.
  • Fixed: Giving access to WPForms for Editors (and other roles) should give access to dashboard widget as well.
  • Fixed: Add 'attr' property to 'input_container' for radio/checkbox-based fields.
  • Fixed: Various typos.
  • Fixed: WP Mail SMTP plugin description on About us page.
Download this release

Release Info

Developer jaredatch
Plugin Icon 128x128 Contact Form by WPForms – Drag & Drop Form Builder for WordPress
Version 1.5.5
Comparing to
See all releases

Code changes from version 1.5.4.2 to 1.5.5

Files changed (116) hide show
  1. assets/css/admin-builder-fields.css +4 -0
  2. assets/css/admin.css +254 -5
  3. assets/css/admin.min.css +1 -1
  4. assets/css/wpforms-base.css +8 -0
  5. assets/css/wpforms-full.css +8 -0
  6. assets/js/admin-builder.js +4 -4
  7. assets/js/admin.js +2 -2
  8. assets/js/admin.min.js +1 -1
  9. changelog.txt +10 -0
  10. includes/admin/admin.php +3 -0
  11. includes/admin/builder/panels/class-setup.php +1 -1
  12. includes/admin/class-about.php +2 -2
  13. includes/admin/class-settings.php +0 -28
  14. includes/admin/class-tools.php +4 -0
  15. includes/admin/settings-api.php +9 -7
  16. includes/class-form.php +9 -6
  17. includes/class-license.php +0 -830
  18. includes/class-smart-tags.php +27 -7
  19. includes/class-updater.php +0 -315
  20. includes/fields/class-checkbox.php +2 -1
  21. includes/fields/class-gdpr-checkbox.php +2 -1
  22. includes/fields/class-radio.php +2 -1
  23. includes/functions.php +77 -8
  24. languages/wpforms-lite.pot +334 -314
  25. lite/assets/js/admin/builder-education.js +1 -1
  26. lite/assets/js/admin/builder-education.min.js +1 -1
  27. lite/assets/js/admin/connect.js +172 -0
  28. lite/assets/js/admin/connect.min.js +1 -0
  29. lite/assets/js/admin/settings-education.js +125 -0
  30. lite/assets/js/admin/settings-education.min.js +1 -0
  31. lite/assets/js/admin/upgrade.js +0 -299
  32. lite/assets/js/admin/upgrade.min.js +0 -1
  33. lite/wpforms-lite.php +1 -1
  34. readme.txt +55 -51
  35. src/Admin/Loader.php +4 -0
  36. src/Emails/Summaries.php +9 -5
  37. src/Integrations/Gutenberg/FormSelector.php +1 -1
  38. src/Integrations/Loader.php +1 -0
  39. src/Integrations/SiteHealth/SiteHealth.php +144 -0
  40. src/Lite/Admin/Builder/Education.php +30 -33
  41. src/Lite/Admin/Connect.php +301 -0
  42. includes/class-upgrader-skin.php → src/Lite/Admin/ConnectSkin.php +27 -25
  43. src/Lite/Admin/DashboardWidget.php +12 -1
  44. src/Lite/Admin/Settings/Education.php +134 -0
  45. src/WPForms.php +0 -26
  46. vendor/composer/autoload_files.php +10 -0
  47. vendor/composer/autoload_namespaces.php +1 -0
  48. vendor/composer/autoload_psr4.php +1 -0
  49. vendor/composer/autoload_real.php +18 -0
  50. vendor/composer/autoload_static.php +20 -0
  51. vendor/composer/installed.json +120 -0
  52. vendor/goodby/csv/.gitignore +5 -0
  53. vendor/goodby/csv/.travis.yml +14 -0
  54. vendor/goodby/csv/LICENSE +8 -0
  55. vendor/goodby/csv/README.md +327 -0
  56. vendor/goodby/csv/composer.json +36 -0
  57. vendor/goodby/csv/example/export_from_database_via_pdo.php +24 -0
  58. vendor/goodby/csv/example/import_from_database_via_pdo.php +29 -0
  59. vendor/goodby/csv/example/insert-or-update-user-for-mysql.php +22 -0
  60. vendor/goodby/csv/example/sample.php +34 -0
  61. vendor/goodby/csv/example/temperature.tsv +4 -0
  62. vendor/goodby/csv/example/tsv-sample.php +30 -0
  63. vendor/goodby/csv/example/user.csv +3 -0
  64. vendor/goodby/csv/phpunit-bootstrap.php +28 -0
  65. vendor/goodby/csv/phpunit.xml.dist +50 -0
  66. vendor/goodby/csv/scripts/bundle-devtools.sh +36 -0
  67. vendor/goodby/csv/src/Goodby/CSV/Export/Protocol/Exception/IOException.php +10 -0
  68. vendor/goodby/csv/src/Goodby/CSV/Export/Protocol/ExporterInterface.php +22 -0
  69. vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Collection/CallbackCollection.php +88 -0
  70. vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Collection/PdoCollection.php +82 -0
  71. vendor/goodby/csv/src/Goodby/CSV/Export/Standard/CsvFileObject.php +85 -0
  72. vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Exception/StrictViolationException.php +7 -0
  73. vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Exporter.php +110 -0
  74. vendor/goodby/csv/src/Goodby/CSV/Export/Standard/ExporterConfig.php +218 -0
  75. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Protocol/ExporterInterfaceTest.php +39 -0
  76. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/Collection/PdoCollectionTest.php +68 -0
  77. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/ExporterTest.php +188 -0
  78. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/UsageTest.php +95 -0
  79. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/euc-jp.csv +1 -0
  80. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/multiple-lines.csv +9 -0
  81. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/utf-8.csv +2 -0
  82. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/Collection/CallbackCollectionTest.php +50 -0
  83. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/Collection/SampleAggIterator.php +19 -0
  84. vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/ExporterConfigTest.php +63 -0
  85. vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/Exception/CsvFileNotFoundException.php +10 -0
  86. vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/Exception/InvalidLexicalException.php +10 -0
  87. vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/InterpreterInterface.php +15 -0
  88. vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/LexerInterface.php +20 -0
  89. vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Exception/StrictViolationException.php +7 -0
  90. vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Interpreter.php +120 -0
  91. vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Lexer.php +69 -0
  92. vendor/goodby/csv/src/Goodby/CSV/Import/Standard/LexerConfig.php +185 -0
  93. vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Observer/PdoObserver.php +71 -0
  94. vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Observer/SqlObserver.php +62 -0
  95. vendor/goodby/csv/src/Goodby/CSV/Import/Standard/StreamFilter/ConvertMbstringEncoding.php +110 -0
  96. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Protocol/InterpreterTest.php +42 -0
  97. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Protocol/LexerTest.php +41 -0
  98. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/CSVFiles.php +69 -0
  99. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/LexerTest.php +156 -0
  100. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/Observer/PdoObserverTest.php +86 -0
  101. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/colon-separated.csv +2 -0
  102. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/issue-5.csv +5 -0
  103. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/mac-excel.csv +1 -0
  104. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/sjis.csv +4 -0
  105. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/tab-separated.csv +7 -0
  106. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/utf-8.csv +3 -0
  107. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/SandboxDirectoryManager.php +45 -0
  108. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/InterpreterTest.php +132 -0
  109. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/LexerConfigTest.php +61 -0
  110. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/Observer/SqlObserverTest.php +51 -0
  111. vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/StreamFilter/ConvertMbstringEncodingTest.php +64 -0
  112. vendor/goodby/csv/src/Goodby/CSV/TestHelper/DbManager.php +54 -0
  113. vendor/symfony/polyfill-mbstring/LICENSE +19 -0
  114. vendor/symfony/polyfill-mbstring/Mbstring.php +800 -0
  115. vendor/symfony/polyfill-mbstring/README.md +13 -0
  116. vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +509 -0
assets/css/admin-builder-fields.css CHANGED
@@ -334,6 +334,10 @@
334
  outline: 0;
335
  }
336
 
 
 
 
 
337
  #wpforms-panel-fields .wpforms-field-option-group-toggle span {
338
  color: #888;
339
  font-weight: 300;
334
  outline: 0;
335
  }
336
 
337
+ #wpforms-panel-fields .wpforms-field-option-group-toggle.upgrade-modal {
338
+ opacity: 0.6;
339
+ }
340
+
341
  #wpforms-panel-fields .wpforms-field-option-group-toggle span {
342
  color: #888;
343
  font-weight: 300;
assets/css/admin.css CHANGED
@@ -2412,6 +2412,145 @@ body .choices input[type=text].choices__input {
2412
  color: #666;
2413
  }
2414
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2415
  @media screen and (max-width: 782px) {
2416
  .wpforms-admin-content {
2417
  padding-left: 10px;
@@ -3548,6 +3687,12 @@ body .choices input[type=text].choices__input {
3548
  border-radius: 2px;
3549
  }
3550
 
 
 
 
 
 
 
3551
  .wpforms-admin-settings .wpforms-setting-row h4 {
3552
  font-size: 20px;
3553
  font-weight: 700;
@@ -3585,8 +3730,9 @@ body .choices input[type=text].choices__input {
3585
  }
3586
 
3587
  .wpforms-admin-settings .wpforms-setting-row input[type=text],
 
3588
  .wpforms-admin-settings .wpforms-setting-row input[type=number],
3589
- .wpforms-admin-settings .wpforms-setting-row input[type=password] {
3590
  background-color: #fff;
3591
  border: 1px solid #ddd;
3592
  border-radius: 3px;
@@ -3602,15 +3748,17 @@ body .choices input[type=text].choices__input {
3602
 
3603
  @media (max-width: 959px) {
3604
  .wpforms-admin-settings .wpforms-setting-row input[type=text],
 
3605
  .wpforms-admin-settings .wpforms-setting-row input[type=number],
3606
- .wpforms-admin-settings .wpforms-setting-row input[type=password] {
3607
  width: 300px;
3608
  }
3609
  }
3610
 
3611
  .wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,
 
3612
  .wpforms-admin-settings .wpforms-setting-row input[type=number]:focus,
3613
- .wpforms-admin-settings .wpforms-setting-row input[type=password]:focus {
3614
  border-color: #bbb;
3615
  }
3616
 
@@ -3917,6 +4065,107 @@ body .choices input[type=text].choices__input {
3917
  font-weight: 700;
3918
  }
3919
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3920
  .wpforms-admin-settings #wpforms-importer-process {
3921
  display: none;
3922
  }
@@ -3981,7 +4230,7 @@ body .choices input[type=text].choices__input {
3981
  }
3982
 
3983
  .wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-times, .wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-circle {
3984
- color: red;
3985
  }
3986
 
3987
  .wpforms-admin-settings #wpforms-importer-process .status .item .name {
@@ -4243,4 +4492,4 @@ body .choices input[type=text].choices__input {
4243
  font-size: 14px;
4244
  }
4245
 
4246
- /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzL2Nzcy9hZG1pbi5jc3MiLCJzb3VyY2VzIjpbImFzc2V0cy9zY3NzL2FkbWluLnNjc3MiLCJhc3NldHMvc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCJhc3NldHMvc2Nzcy92ZW5kb3IvcGFydGlhbHMvX2luY2x1ZGUtbWVkaWEuc2NzcyIsImFzc2V0cy9zY3NzL3ZlbmRvci9wYXJ0aWFscy9fY2hvaWNlcy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX2J1dHRvbnMuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19jb25maXJtLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fYWxlcnRzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZmxhZ3Muc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19oZWFkZXIuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL190aXRsZS10YWJzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZ2VuZXJhbC5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtZm9ybXMtb3ZlcnZpZXcuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWVudHJpZXMtc2luZ2xlLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1lbnRyaWVzLWxpc3Quc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXdlbGNvbWUuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWFkZG9ucy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtYWJvdXQuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXNldHRpbmdzLXRvb2xzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1zZXR0aW5ncy1pbnRlZ3JhdGlvbnMuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXUEZvcm1zIGFkbWluIHN0eWxlcy5cbi8vIFRoZXNlIHN0eWxlcyBhcmUgbG9hZGVkIG9uIGFsbCBXUEZvcm1zIHJlbGF0ZWQgYWRtaW4gcGFnZXMuXG5cbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICd2ZW5kb3IvcGFydGlhbHMvaW5jbHVkZS1tZWRpYSc7XG5AaW1wb3J0ICd2ZW5kb3IvcGFydGlhbHMvY2hvaWNlcyc7XG5cbiRicmVha3BvaW50czogKFxuXHQneHMtcGhvbmUnOiAzMjBweCxcblx0J3Bob25lJzogNjAwcHgsXG5cdCdpcGFkJzogNzY4cHgsXG5cdCd0YWJsZXQnOiA3ODJweCxcblx0J2Rlc2t0b3AnOiA5NjBweCxcbik7XG5cbkBpbXBvcnQgJ2FkbWluL2J1dHRvbnMnO1xuQGltcG9ydCAnYWRtaW4vY29uZmlybSc7XG5AaW1wb3J0ICdhZG1pbi9hbGVydHMnO1xuQGltcG9ydCAnYWRtaW4vZmxhZ3MnO1xuQGltcG9ydCAnYWRtaW4vaGVhZGVyJztcbkBpbXBvcnQgJ2FkbWluL3RpdGxlLXRhYnMnO1xuQGltcG9ydCAnYWRtaW4vZ2VuZXJhbCc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLWZvcm1zLW92ZXJ2aWV3JztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtZW50cmllcy1zaW5nbGUnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1lbnRyaWVzLWxpc3QnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS13ZWxjb21lJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWRkb25zJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWJvdXQnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1zZXR0aW5ncy10b29scyc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLXNldHRpbmdzLWludGVncmF0aW9ucyc7XG4iLCIkb3JhbmdlOiAjZTI3NzMwO1xuJGRhcmtvcmFuZ2U6ICNiODVhMWI7XG4kZ3JlZW46ICMyYTliMzk7XG4kYmx1ZTogIzBlNmNhZDtcbiRsaWdodEJsdWU6ICNlYmYzZmI7XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG5cbi8vICAgICBfICAgICAgICAgICAgXyAgICAgICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gX1xuLy8gICAgKF8pICAgICAgICAgIHwgfCAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IChfKVxuLy8gICAgIF8gXyBfXyAgIF9fX3wgfF8gICBfICBfX3wgfCBfX18gICBfIF9fIF9fXyAgIF9fXyAgX198IHxfICBfXyBfXG4vLyAgICB8IHwgJ18gXFwgLyBfX3wgfCB8IHwgfC8gX2AgfC8gXyBcXCB8ICdfIGAgXyBcXCAvIF8gXFwvIF9gIHwgfC8gX2AgfFxuLy8gICAgfCB8IHwgfCB8IChfX3wgfCB8X3wgfCAoX3wgfCAgX18vIHwgfCB8IHwgfCB8ICBfXy8gKF98IHwgfCAoX3wgfFxuLy8gICAgfF98X3wgfF98XFxfX198X3xcXF9fLF98XFxfXyxffFxcX19ffCB8X3wgfF98IHxffFxcX19ffFxcX18sX3xffFxcX18sX3xcbi8vXG4vLyAgICAgIFNpbXBsZSwgZWxlZ2FudCBhbmQgbWFpbnRhaW5hYmxlIG1lZGlhIHF1ZXJpZXMgaW4gU2Fzc1xuLy8gICAgICAgICAgICAgICAgICAgICAgICB2MS40Ljlcbi8vXG4vLyAgICAgICAgICAgICAgICBodHRwOi8vaW5jbHVkZS1tZWRpYS5jb21cbi8vXG4vLyAgICAgICAgIEF1dGhvcnM6IEVkdWFyZG8gQm91Y2FzIChAZWR1YXJkb2JvdWNhcylcbi8vICAgICAgICAgICAgICAgICAgSHVnbyBHaXJhdWRlbCAoQGh1Z29naXJhdWRlbClcbi8vXG4vLyAgICAgIFRoaXMgcHJvamVjdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlXG5cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgbGlicmFyeSBwdWJsaWMgY29uZmlndXJhdGlvblxuLy8vIEBhdXRob3IgRWR1YXJkbyBCb3VjYXNcbi8vLyBAYWNjZXNzIHB1YmxpY1xuLy8vL1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIGdsb2JhbCBicmVha3BvaW50c1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgYnJlYWtwb2ludCB3aXRoIHRoZSBsYWJlbCBgcGhvbmVgXG4vLy8gICRicmVha3BvaW50czogKCdwaG9uZSc6IDMyMHB4KTtcbi8vL1xuJGJyZWFrcG9pbnRzOiAoXG4gICdwaG9uZSc6IDMyMHB4LFxuICAndGFibGV0JzogNzY4cHgsXG4gICdkZXNrdG9wJzogMTAyNHB4XG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIHN0YXRpYyBleHByZXNzaW9ucyBvciBtZWRpYSB0eXBlc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgbWVkaWEgdHlwZSAoc2NyZWVuKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJzogJ3NjcmVlbicpO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzdGF0aWMgZXhwcmVzc2lvbiB3aXRoIGxvZ2ljYWwgZGlzanVuY3Rpb24gKE9SIG9wZXJhdG9yKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6IChcbi8vLyAgICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSdcbi8vLyAgKTtcbi8vL1xuJG1lZGlhLWV4cHJlc3Npb25zOiAoXG4gICdzY3JlZW4nOiAnc2NyZWVuJyxcbiAgJ3ByaW50JzogJ3ByaW50JyxcbiAgJ2hhbmRoZWxkJzogJ2hhbmRoZWxkJyxcbiAgJ2xhbmRzY2FwZSc6ICcob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuICAncG9ydHJhaXQnOiAnKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCknLFxuICAncmV0aW5hM3gnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMyksIChtaW4tcmVzb2x1dGlvbjogMzUwZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAzZHBweCknXG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIERlZmluZXMgYSBudW1iZXIgdG8gYmUgYWRkZWQgb3Igc3VidHJhY3RlZCBmcm9tIGVhY2ggdW5pdCB3aGVuIGRlY2xhcmluZyBicmVha3BvaW50cyB3aXRoIGV4Y2x1c2l2ZSBpbnRlcnZhbHNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcGl4ZWxzIGlzIGRlZmluZWQgYXMgYDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4xMjhweCcpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMTI5cHgpIHt9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gSW50ZXJ2YWwgZm9yIGVtcyBpcyBkZWZpbmVkIGFzIGAwLjAxYCBieSBkZWZhdWx0XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+MjBlbScpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMjAuMDFlbSkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcmVtcyBpcyBkZWZpbmVkIGFzIGAwLjFgIGJ5IGRlZmF1bHQsIHRvIGJlIHVzZWQgd2l0aCBgZm9udC1zaXplOiA2Mi41JTtgXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+Mi4wcmVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyLjFyZW0pIHt9XG4vLy9cbiR1bml0LWludGVydmFsczogKFxuICAncHgnOiAxLFxuICAnZW0nOiAwLjAxLFxuICAncmVtJzogMC4xLFxuICAnJzogMFxuKSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gRGVmaW5lcyB3aGV0aGVyIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgYXZhaWxhYmxlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIHNlcGFyYXRlIHN0eWxlc2hlZXRzXG4vLy8gZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBtZWRpYSBxdWVyaWVzLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIERpc2FibGVzIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4kaW0tbWVkaWEtc3VwcG9ydDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBicmVha3BvaW50IHRvIGVtdWxhdGUgd2hlbiBzdXBwb3J0IGZvciBtZWRpYSBxdWVyaWVzIGlzIGRpc2FibGVkLiBNZWRpYSBxdWVyaWVzIHRoYXQgc3RhcnQgYXQgb3Jcbi8vLyBpbnRlcmNlcHQgdGhlIGJyZWFrcG9pbnQgd2lsbCBiZSBkaXNwbGF5ZWQsIGFueSBvdGhlcnMgd2lsbCBiZSBpZ25vcmVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGRvZXMgbm90IGludGVyY2VwdCB0aGUgZGVza3RvcCBicmVha3BvaW50XG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICd0YWJsZXQnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj1kZXNrdG9wJykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBObyBvdXRwdXQgKi9cbi8vL1xuJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJyAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBtZWRpYSBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiBhbiBleHByZXNzaW9uIGZvciBpdCB0byBiZSB1c2VkIHdoZW4gbWVkaWEgcXVlcmllc1xuLy8vIGFyZSBub3Qgc3VwcG9ydGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnQgYW5kIGNvbnRhaW5zIG9ubHkgYWNjZXB0ZWQgbWVkaWEgZXhwcmVzc2lvbnNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdzY3JlZW4nKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgTk9UIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBidXQgY29udGFpbnMgYSBtZWRpYSBleHByZXNzaW9uIHRoYXQgaXMgbm90IGFjY2VwdGVkXG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJztcbi8vLyAgJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbicpO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnLCAncmV0aW5hMngnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJywgJ3BvcnRyYWl0JywgJ2xhbmRzY2FwZScpICFkZWZhdWx0O1xuXG4vLy8vXG4vLy8gQ3Jvc3MtZW5naW5lIGxvZ2dpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gTG9nIGEgbWVzc2FnZSBlaXRoZXIgd2l0aCBgQGVycm9yYCBpZiBzdXBwb3J0ZWRcbi8vLyBlbHNlIHdpdGggYEB3YXJuYCwgdXNpbmcgYGZlYXR1cmUtZXhpc3RzKCdhdC1lcnJvcicpYFxuLy8vIHRvIGRldGVjdCBzdXBwb3J0LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQGZ1bmN0aW9uIGltLWxvZygkbWVzc2FnZSkge1xuICBAaWYgZmVhdHVyZS1leGlzdHMoJ2F0LWVycm9yJykge1xuXHRAZXJyb3IgJG1lc3NhZ2U7XG4gIH0gQGVsc2Uge1xuXHRAd2FybiAkbWVzc2FnZTtcblx0JF86IG5vb3AoKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1lc3NhZ2U7XG59XG5cblxuLy8vXG4vLy8gV3JhcHBlciBtaXhpbiBmb3IgdGhlIGxvZyBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGEgbW9yZSBmcmllbmRseVxuLy8vIEFQSSB0aGFuIGBAaWYgaW0tbG9nKCcuLicpIHt9YCBvciBgJF86IGltLWxvZygnLi4nKWAuIEJhc2ljYWxseSwgdXNlIHRoZSBmdW5jdGlvblxuLy8vIHdpdGhpbiBmdW5jdGlvbnMgYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluIGEgZnVuY3Rpb25cbi8vLyBhbmQgdXNlIHRoZSBtaXhpbiBldmVyeXdoZXJlIGVsc2UgYmVjYXVzZSBpdCdzIG11Y2ggbW9yZSBlbGVnYW50LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQG1peGluIGxvZygkbWVzc2FnZSkge1xuICBAaWYgaW0tbG9nKCRtZXNzYWdlKSB7fVxufVxuXG5cbi8vL1xuLy8vIEZ1bmN0aW9uIHdpdGggbm8gYEByZXR1cm5gIGNhbGxlZCBuZXh0IHRvIGBAd2FybmAgaW4gU2FzcyAzLjNcbi8vLyB0byB0cmlnZ2VyIGEgY29tcGlsaW5nIGVycm9yIGFuZCBzdG9wIHRoZSBwcm9jZXNzLlxuLy8vXG5AZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8vL1xuLy8vIERldGVybWluZXMgd2hldGhlciBhIGxpc3Qgb2YgY29uZGl0aW9ucyBpcyBpbnRlcmNlcHRlZCBieSB0aGUgc3RhdGljIGJyZWFrcG9pbnQuXG4vLy9cbi8vLyBAcGFyYW0ge0FyZ2xpc3R9ICAgJGNvbmRpdGlvbnMgIC0gTWVkaWEgcXVlcnkgY29uZGl0aW9uc1xuLy8vXG4vLy8gQHJldHVybiB7Qm9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIGludGVyY2VwdGVkIGJ5IHRoZSBzdGF0aWMgYnJlYWtwb2ludFxuLy8vXG5AZnVuY3Rpb24gaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikge1xuICAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRpbS1uby1tZWRpYS1icmVha3BvaW50KTtcblxuICBAaWYgbm90ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlIHtcblx0QGlmIGltLWxvZygnYCN7JGltLW5vLW1lZGlhLWJyZWFrcG9pbnR9YCBpcyBub3QgYSB2YWxpZCBicmVha3BvaW50LicpIHt9XG4gIH1cblxuICBAZWFjaCAkY29uZGl0aW9uIGluICRjb25kaXRpb25zIHtcblx0QGlmIG5vdCBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRjb25kaXRpb24pIHtcblx0ICAkb3BlcmF0b3I6IGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRjb25kaXRpb24pO1xuXHQgICRwcmVmaXg6IGdldC1leHByZXNzaW9uLXByZWZpeCgkb3BlcmF0b3IpO1xuXHQgICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGNvbmRpdGlvbiwgJG9wZXJhdG9yKTtcblxuXHQgIEBpZiAoJHByZWZpeCA9PSAnbWF4JyBhbmQgJHZhbHVlIDw9ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSBvclxuXHRcdCAgKCRwcmVmaXggPT0gJ21pbicgYW5kICR2YWx1ZSA+ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSB7XG5cdFx0QHJldHVybiBmYWxzZTtcblx0ICB9XG5cdH0gQGVsc2UgaWYgbm90IGluZGV4KCRpbS1uby1tZWRpYS1leHByZXNzaW9ucywgJGNvbmRpdGlvbikge1xuXHQgIEByZXR1cm4gZmFsc2U7XG5cdH1cbiAgfVxuXG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuLy8vL1xuLy8vIFBhcnNpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gR2V0IG9wZXJhdG9yIG9mIGFuIGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCBvcGVyYXRvciBmcm9tXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gQW55IG9mIGA+PWAsIGA+YCwgYDw9YCwgYDxgLCBg4omlYCwgYOKJpGBcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKSB7XG4gIEBlYWNoICRvcGVyYXRvciBpbiAoJz49JywgJz4nLCAnPD0nLCAnPCcsICfiiaUnLCAn4omkJykge1xuXHRAaWYgc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcblx0ICBAcmV0dXJuICRvcGVyYXRvcjtcblx0fVxuICB9XG5cbiAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuICAvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgLy8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcbiAgLy8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuICAkXzogaW0tbG9nKCdObyBvcGVyYXRvciBmb3VuZCBpbiBgI3skZXhwcmVzc2lvbn1gLicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IGRpbWVuc2lvbiBmcm9tXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yIGZyb20gYCRleHByZXNzaW9uYFxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGB3aWR0aGAgb3IgYGhlaWdodGAgKG9yIHBvdGVudGlhbGx5IGFueXRoaW5nIGVsc2UpXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1kaW1lbnNpb24oJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAkb3BlcmF0b3ItaW5kZXg6IHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHBhcnNlZC1kaW1lbnNpb246IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgMCwgJG9wZXJhdG9yLWluZGV4IC0gMSk7XG4gICRkaW1lbnNpb246ICd3aWR0aCc7XG5cbiAgQGlmIHN0ci1sZW5ndGgoJHBhcnNlZC1kaW1lbnNpb24pID4gMCB7XG5cdCRkaW1lbnNpb246ICRwYXJzZWQtZGltZW5zaW9uO1xuICB9XG5cbiAgQHJldHVybiAkZGltZW5zaW9uO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gcHJlZml4IGJhc2VkIG9uIGFuIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3Jcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBgbWluYCBvciBgbWF4YFxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcikge1xuICBAcmV0dXJuIGlmKGluZGV4KCgnPCcsICc8PScsICfiiaQnKSwgJG9wZXJhdG9yKSwgJ21heCcsICdtaW4nKTtcbn1cblxuXG4vLy9cbi8vLyBHZXQgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IHZhbHVlIGZyb21cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3IgZnJvbSBgJGV4cHJlc3Npb25gXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gQSBudW1lcmljIHZhbHVlXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKSB7XG4gICRvcGVyYXRvci1pbmRleDogc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkdmFsdWU6IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yLWluZGV4ICsgc3RyLWxlbmd0aCgkb3BlcmF0b3IpKTtcblxuICBAaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCAkdmFsdWUpIHtcblx0JHZhbHVlOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJHZhbHVlKTtcbiAgfSBAZWxzZSB7XG5cdCR2YWx1ZTogdG8tbnVtYmVyKCR2YWx1ZSk7XG4gIH1cblxuICAkaW50ZXJ2YWw6IG1hcC1nZXQoJHVuaXQtaW50ZXJ2YWxzLCB1bml0KCR2YWx1ZSkpO1xuXG4gIEBpZiBub3QgJGludGVydmFsIHtcblx0Ly8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuXHQvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuXHQvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cblx0Ly8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcblx0Ly8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuXHQkXzogaW0tbG9nKCdVbmtub3duIHVuaXQgYCN7dW5pdCgkdmFsdWUpfWAuJyk7XG4gIH1cblxuICBAaWYgJG9wZXJhdG9yID09ICc+JyB7XG5cdCR2YWx1ZTogJHZhbHVlICsgJGludGVydmFsO1xuICB9IEBlbHNlIGlmICRvcGVyYXRvciA9PSAnPCcge1xuXHQkdmFsdWU6ICR2YWx1ZSAtICRpbnRlcnZhbDtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlO1xufVxuXG5cbi8vL1xuLy8vIFBhcnNlIGFuIGV4cHJlc3Npb24gdG8gcmV0dXJuIGEgdmFsaWQgbWVkaWEtcXVlcnkgZXhwcmVzc2lvblxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBwYXJzZVxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIFZhbGlkIG1lZGlhIHF1ZXJ5XG4vLy9cbkBmdW5jdGlvbiBwYXJzZS1leHByZXNzaW9uKCRleHByZXNzaW9uKSB7XG4gIC8vIElmIGl0IGlzIHBhcnQgb2YgJG1lZGlhLWV4cHJlc3Npb25zLCBpdCBoYXMgbm8gb3BlcmF0b3JcbiAgLy8gdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGdvIGFueSBmdXJ0aGVyLCBqdXN0IHJldHVybiB0aGUgdmFsdWVcbiAgQGlmIG1hcC1oYXMta2V5KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pIHtcblx0QHJldHVybiBtYXAtZ2V0KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pO1xuICB9XG5cbiAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkZXhwcmVzc2lvbik7XG4gICRkaW1lbnNpb246IGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG4gICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG5cbiAgQHJldHVybiAnKCN7JHByZWZpeH0tI3skZGltZW5zaW9ufTogI3skdmFsdWV9KSc7XG59XG5cbi8vL1xuLy8vIFNsaWNlIGAkbGlzdGAgYmV0d2VlbiBgJHN0YXJ0YCBhbmQgYCRlbmRgIGluZGV4ZXNcbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtMaXN0fSAkbGlzdCAtIExpc3QgdG8gc2xpY2Vcbi8vLyBAcGFyYW0ge051bWJlcn0gJHN0YXJ0IFsxXSAtIFN0YXJ0IGluZGV4XG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRlbmQgW2xlbmd0aCgkbGlzdCldIC0gRW5kIGluZGV4XG4vLy9cbi8vLyBAcmV0dXJuIHtMaXN0fSBTbGljZWQgbGlzdFxuLy8vXG5AZnVuY3Rpb24gc2xpY2UoJGxpc3QsICRzdGFydDogMSwgJGVuZDogbGVuZ3RoKCRsaXN0KSkge1xuICBAaWYgbGVuZ3RoKCRsaXN0KSA8IDEgb3IgJHN0YXJ0ID4gJGVuZCB7XG5cdEByZXR1cm4gKCk7XG4gIH1cblxuICAkcmVzdWx0OiAoKTtcblxuICBAZm9yICRpIGZyb20gJHN0YXJ0IHRocm91Z2ggJGVuZCB7XG5cdCRyZXN1bHQ6IGFwcGVuZCgkcmVzdWx0LCBudGgoJGxpc3QsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vLy9cbi8vLyBTdHJpbmcgdG8gbnVtYmVyIGNvbnZlcnRlclxuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vL1xuXG5cbi8vL1xuLy8vIENhc3RzIGEgc3RyaW5nIGludG8gYSBudW1iZXJcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBiZSBwYXJzZWRcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn1cbi8vL1xuQGZ1bmN0aW9uIHRvLW51bWJlcigkdmFsdWUpIHtcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG5cdEByZXR1cm4gJHZhbHVlO1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSAhPSAnc3RyaW5nJyB7XG5cdCRfOiBpbS1sb2coJ1ZhbHVlIGZvciBgdG8tbnVtYmVyYCBzaG91bGQgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gIH1cblxuICAkZmlyc3QtY2hhcmFjdGVyOiBzdHItc2xpY2UoJHZhbHVlLCAxLCAxKTtcbiAgJHJlc3VsdDogMDtcbiAgJGRpZ2l0czogMDtcbiAgJG1pbnVzOiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpO1xuICAkbnVtYmVyczogKCcwJzogMCwgJzEnOiAxLCAnMic6IDIsICczJzogMywgJzQnOiA0LCAnNSc6IDUsICc2JzogNiwgJzcnOiA3LCAnOCc6IDgsICc5JzogOSk7XG5cbiAgLy8gUmVtb3ZlICsvLSBzaWduIGlmIHByZXNlbnQgYXQgZmlyc3QgY2hhcmFjdGVyXG4gIEBpZiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnKycgb3IgJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpIHtcblx0JHZhbHVlOiBzdHItc2xpY2UoJHZhbHVlLCAyKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggc3RyLWxlbmd0aCgkdmFsdWUpIHtcblx0JGNoYXJhY3Rlcjogc3RyLXNsaWNlKCR2YWx1ZSwgJGksICRpKTtcblxuXHRAaWYgbm90IChpbmRleChtYXAta2V5cygkbnVtYmVycyksICRjaGFyYWN0ZXIpIG9yICRjaGFyYWN0ZXIgPT0gJy4nKSB7XG5cdCAgQHJldHVybiB0by1sZW5ndGgoaWYoJG1pbnVzLCAtJHJlc3VsdCwgJHJlc3VsdCksIHN0ci1zbGljZSgkdmFsdWUsICRpKSlcblx0fVxuXG5cdEBpZiAkY2hhcmFjdGVyID09ICcuJyB7XG5cdCAgJGRpZ2l0czogMTtcblx0fSBAZWxzZSBpZiAkZGlnaXRzID09IDAge1xuXHQgICRyZXN1bHQ6ICRyZXN1bHQgKiAxMCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpO1xuXHR9IEBlbHNlIHtcblx0ICAkZGlnaXRzOiAkZGlnaXRzICogMTA7XG5cdCAgJHJlc3VsdDogJHJlc3VsdCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpIC8gJGRpZ2l0cztcblx0fVxuICB9XG5cbiAgQHJldHVybiBpZigkbWludXMsIC0kcmVzdWx0LCAkcmVzdWx0KTtcbn1cblxuXG4vLy9cbi8vLyBBZGQgYCR1bml0YCB0byBgJHZhbHVlYFxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGFkZCB1bml0IHRvXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICR1bml0IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gYCR2YWx1ZWAgZXhwcmVzc2VkIGluIGAkdW5pdGBcbi8vL1xuQGZ1bmN0aW9uIHRvLWxlbmd0aCgkdmFsdWUsICR1bml0KSB7XG4gICR1bml0czogKCdweCc6IDFweCwgJ2NtJzogMWNtLCAnbW0nOiAxbW0sICclJzogMSUsICdjaCc6IDFjaCwgJ3BjJzogMXBjLCAnaW4nOiAxaW4sICdlbSc6IDFlbSwgJ3JlbSc6IDFyZW0sICdwdCc6IDFwdCwgJ2V4JzogMWV4LCAndncnOiAxdncsICd2aCc6IDF2aCwgJ3ZtaW4nOiAxdm1pbiwgJ3ZtYXgnOiAxdm1heCk7XG5cbiAgQGlmIG5vdCBpbmRleChtYXAta2V5cygkdW5pdHMpLCAkdW5pdCkge1xuXHQkXzogaW0tbG9nKCdJbnZhbGlkIHVuaXQgYCN7JHVuaXR9YC4nKTtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlICogbWFwLWdldCgkdW5pdHMsICR1bml0KTtcbn1cblxuLy8vXG4vLy8gVGhpcyBtaXhpbiBhaW1zIGF0IHJlZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24ganVzdCBmb3IgdGhlIHNjb3BlIG9mXG4vLy8gdGhlIGNhbGwuIEl0IGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgYSBjb21wb25lbnQgbmVlZGluZyBhbiBleHRlbmRlZFxuLy8vIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBjdXN0b20gYnJlYWtwb2ludHMgKHJlZmVycmVkIHRvIGFzIHR3ZWFrcG9pbnRzKVxuLy8vIGZvciBpbnN0YW5jZS5cbi8vL1xuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vha3BvaW50cyBbKCldIC0gTWFwIG9mIHR3ZWFrcG9pbnRzIHRvIGJlIG1lcmdlZCB3aXRoIGAkYnJlYWtwb2ludHNgXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucyBbKCldIC0gTWFwIG9mIHR3ZWFrZWQgbWVkaWEgZXhwcmVzc2lvbnMgdG8gYmUgbWVyZ2VkIHdpdGggYCRtZWRpYS1leHByZXNzaW9uYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCB0aGUgZ2xvYmFsIGJyZWFrcG9pbnRzIHdpdGggYSB0d2Vha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhLWNvbnRleHQoKCdjdXN0b20nOiA2NzhweCkpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgbWVkaWEgZXhwcmVzc2lvbnMgd2l0aCBhIGN1c3RvbSBvbmVcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgnYWxsJzogJ2FsbCcpKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBAaW5jbHVkZSBtZWRpYSgnYWxsJywgJz5waG9uZScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgYm90aCBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSwgKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJywgJzw9Y3VzdG9tJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG5AbWl4aW4gbWVkaWEtY29udGV4dCgkdHdlYWtwb2ludHM6ICgpLCAkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgpKSB7XG4gIC8vIFNhdmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGdsb2JhbC1icmVha3BvaW50czogJGJyZWFrcG9pbnRzO1xuICAkZ2xvYmFsLW1lZGlhLWV4cHJlc3Npb25zOiAkbWVkaWEtZXhwcmVzc2lvbnM7XG5cbiAgLy8gVXBkYXRlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogbWFwLW1lcmdlKCRicmVha3BvaW50cywgJHR3ZWFrcG9pbnRzKSAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6IG1hcC1tZXJnZSgkbWVkaWEtZXhwcmVzc2lvbnMsICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucykgIWdsb2JhbDtcblxuICBAY29udGVudDtcblxuICAvLyBSZXN0b3JlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogJGdsb2JhbC1icmVha3BvaW50cyAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6ICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnMgIWdsb2JhbDtcbn1cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgcHVibGljIGV4cG9zZWQgQVBJXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgYmFzZWQgb24gYSBsaXN0IG9mIGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHNpbmdsZSBzZXQgYnJlYWtwb2ludFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPnBob25lJykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCB0d28gc2V0IGJyZWFrcG9pbnRzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD10YWJsZXQnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49MzU4cHgnLCAnPDg1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBzZXQgYnJlYWtwb2ludHMgd2l0aCBjdXN0b20gdmFsdWVzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+ZGVza3RvcCcsICc8PTEzNTBweCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggYSBzdGF0aWMgZXhwcmVzc2lvblxuLy8vICBAaW5jbHVkZSBtZWRpYSgncmV0aW5hMngnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBNaXhpbmcgZXZlcnl0aGluZ1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNTBweCcsICc8dGFibGV0JywgJ3JldGluYTN4JykgeyB9XG4vLy9cbkBtaXhpbiBtZWRpYSgkY29uZGl0aW9ucy4uLikge1xuICBAaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID09IDApIG9yXG5cdCAgKG5vdCAkaW0tbWVkaWEtc3VwcG9ydCBhbmQgaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikpIHtcblx0QGNvbnRlbnQ7XG4gIH0gQGVsc2UgaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID4gMCkge1xuXHRAbWVkaWEgI3t1bnF1b3RlKHBhcnNlLWV4cHJlc3Npb24obnRoKCRjb25kaXRpb25zLCAxKSkpfSB7XG5cdCAgLy8gUmVjdXJzaXZlIGNhbGxcblx0ICBAaW5jbHVkZSBtZWRpYShzbGljZSgkY29uZGl0aW9ucywgMikuLi4pIHtcblx0XHRAY29udGVudDtcblx0ICB9XG5cdH1cbiAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG49ICAgICAgICAgICAgQ2hvaWNlcyAgICAgICAgICAgID1cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY2hvaWNlcy1zZWxlY3RvcjogJ2Nob2ljZXMnICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLWxnOiAxNnB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLW1kOiAxNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLXNtOiAxMnB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZ3V0dGVyaW5nOiAyNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1czogM3B4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtOiAzcHggIWRlZmF1bHQ7XG4kY2hvaWNlcy1iZy1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRjaG9pY2VzLWJnLWNvbG9yLWRpc2FibGVkOiAjRUFFQUVBICFkZWZhdWx0O1xuJGNob2ljZXMtYmctY29sb3ItZHJvcGRvd246ICNGRkZGRkYgIWRlZmF1bHQ7XG4kY2hvaWNlcy10ZXh0LWNvbG9yOiAjMzMzMzMzICFkZWZhdWx0O1xuJGNob2ljZXMta2V5bGluZS1jb2xvcjogI0RERERERCAhZGVmYXVsdDtcbiRjaG9pY2VzLXByaW1hcnktY29sb3I6ICRibHVlICFkZWZhdWx0O1xuJGNob2ljZXMtZGlzYWJsZWQtY29sb3I6ICNlYWVhZWEgIWRlZmF1bHQ7XG4kY2hvaWNlcy1oaWdobGlnaHQtY29sb3I6ICRjaG9pY2VzLXByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG4kY2hvaWNlcy1idXR0b24taWNvbi1wYXRoOiAnLi4vaW1hZ2VzJyAhZGVmYXVsdDtcbiRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb246IDhweCAhZGVmYXVsdDtcbiRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQ6IDhweCAhZGVmYXVsdDtcblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAkY2hvaWNlcy1ndXR0ZXJpbmc7XG4gIGZvbnQtc2l6ZTogJGNob2ljZXMtZm9udC1zaXplLWxnO1xuICAmOmZvY3VzIHsgb3V0bGluZTogbm9uZTsgfVxuICAmOmxhc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICYuaXMtZGlzYWJsZWQge1xuXHQuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lubmVyLCAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lucHV0IHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1iZy1jb2xvci1kaXNhYmxlZDtcblx0ICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXHQgIHVzZXItc2VsZWN0OiBub25lO1xuXHR9XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cbiAgfVxufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInNlbGVjdC1vbmVcIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8vIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIgeyBwYWRkaW5nLWJvdHRvbTogNy41cHg7IH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7IHBhZGRpbmctYm90dG9tOiAzLjBweDsgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lucHV0IHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IDEwcHggIWltcG9ydGFudDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3IgIWltcG9ydGFudDtcblx0YmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcblx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJGNob2ljZXMtYnV0dG9uLWljb24tcGF0aCArICcvY3Jvc3MtaW52ZXJzZS5zdmcnKTtcblx0cGFkZGluZzogMDtcblx0YmFja2dyb3VuZC1zaXplOiA4cHg7XG5cdGhlaWdodDogMTAwJTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcblx0cmlnaHQ6IDA7XG5cdG1hcmdpbi10b3A6IC0xMHB4O1xuXHRtYXJnaW4tcmlnaHQ6IDI1cHg7XG5cdGhlaWdodDogMjBweDtcblx0d2lkdGg6IDIwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEwZW07XG5cdG9wYWNpdHk6IC41O1xuXHQmOmhvdmVyLCAmOmZvY3VzIHsgb3BhY2l0eTogMTsgfVxuXHQmOmZvY3VzIHsgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMnB4ICRjaG9pY2VzLWhpZ2hsaWdodC1jb2xvcjsgfVxuICB9XG4gICY6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRoZWlnaHQ6IDA7XG5cdHdpZHRoOiAwO1xuXHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRib3JkZXItY29sb3I6ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci13aWR0aDogNXB4O1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHJpZ2h0OiAxMS41cHg7XG5cdHRvcDogNTAlO1xuXHRtYXJnaW4tdG9wOiAtMi41cHg7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gICYuaXMtb3BlbjphZnRlciB7XG5cdGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudDtcblx0bWFyZ2luLXRvcDogLTcuNXB4O1xuICB9XG4gICZbZGlyPVwicnRsXCJdIHtcblx0JjphZnRlciB7XG5cdCAgbGVmdDogMTEuNXB4O1xuXHQgIHJpZ2h0OiBhdXRvO1xuXHR9XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fYnV0dG9uIHtcblx0ICByaWdodDogYXV0bztcblx0ICBsZWZ0OiAwO1xuXHQgIG1hcmdpbi1sZWZ0OiAyNXB4O1xuXHQgIG1hcmdpbi1yaWdodDogMDtcblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW11bHRpcGxlXCJde1xuXHQmOmFmdGVyIHtcblx0ICBjb250ZW50OiBcIlwiO1xuXHQgIGhlaWdodDogMDtcblx0ICB3aWR0aDogMDtcblx0ICBib3JkZXItc3R5bGU6IHNvbGlkO1xuXHQgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcblx0ICBib3JkZXItd2lkdGg6IDVweDtcblx0ICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cdCAgcmlnaHQ6IDExLjVweDtcblx0Ly8gICB0b3A6IDUwJTtcblx0IHRvcDogMThweDtcblx0ICBtYXJnaW4tdG9wOiAtMi41cHg7XG5cdCAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cdH1cblx0Ji5pcy1vcGVuOmFmdGVyIHtcblx0ICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQ7XG5cdCAgbWFyZ2luLXRvcDogLTcuNXB4O1xuXHR9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW11bHRpcGxlXCJdLCAuI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInRleHRcIl0gIHtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7IGN1cnNvcjogdGV4dDsgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2J1dHRvbiB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRtYXJnaW4tcmlnaHQ6IC0kY2hvaWNlcy1idXR0b24tb2Zmc2V0LzI7XG5cdG1hcmdpbi1ib3R0b206IDA7XG5cdG1hcmdpbi1sZWZ0OiAkY2hvaWNlcy1idXR0b24tb2Zmc2V0O1xuXHRwYWRkaW5nLWxlZnQ6ICRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQqMjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgMTAlKTtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKCRjaG9pY2VzLWJ1dHRvbi1pY29uLXBhdGggKyAnL2Nyb3NzLnN2ZycpO1xuXHRiYWNrZ3JvdW5kLXNpemU6ICRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb247XG5cdHdpZHRoOiAkY2hvaWNlcy1idXR0b24tZGltZW5zaW9uO1xuXHRsaW5lLWhlaWdodDogMTtcblx0b3BhY2l0eTogLjc1O1xuXHQmOmhvdmVyLCAmOmZvY3VzIHsgb3BhY2l0eTogMTsgfVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1iZy1jb2xvcjtcbiAgLy9wYWRkaW5nOiA3LjVweCA3LjVweCAzLjc1cHg7XG4gIHBhZGRpbmc6IDRweCA3LjVweCAxcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGZvbnQtc2l6ZTogJGNob2ljZXMtZm9udC1zaXplLW1kO1xuICBtaW4taGVpZ2h0OiAzNXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAuaXMtZm9jdXNlZCAmLCAuaXMtb3BlbiAmIHsgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMta2V5bGluZS1jb2xvciwgMTUlKTsgfVxuICAuaXMtb3BlbiAmIHsgYm9yZGVyLXJhZGl1czogJGNob2ljZXMtYm9yZGVyLXJhZGl1cyAkY2hvaWNlcy1ib3JkZXItcmFkaXVzIDAgMDsgfVxuICAuaXMtZmxpcHBlZC5pcy1vcGVuICYgeyBib3JkZXItcmFkaXVzOiAwIDAgJGNob2ljZXMtYm9yZGVyLXJhZGl1cyAkY2hvaWNlcy1ib3JkZXItcmFkaXVzOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3QtLXNpbmdsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogNHB4IDE2cHggNHB4IDRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIFtkaXI9XCJydGxcIl0gJiB7XG5cdHBhZGRpbmctcmlnaHQ6IDRweDtcblx0cGFkZGluZy1sZWZ0OiAxNnB4O1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IHdpZHRoOiAxMDAlOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tbXVsdGlwbGUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0Ym9yZGVyLXJhZGl1czogJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtO1xuXHRwYWRkaW5nOiAzcHggMTBweDtcblx0Zm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtc207XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdG1hcmdpbi1yaWdodDogNHB4O1xuXHRtYXJnaW4tdG9wOiAwcHg7XG5cdG1hcmdpbi1ib3R0b206IDNweDtcblx0YmFja2dyb3VuZC1jb2xvcjogJGNob2ljZXMtcHJpbWFyeS1jb2xvcjtcblx0Ym9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLXByaW1hcnktY29sb3IsIDUlKTtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcblx0JltkYXRhLWRlbGV0YWJsZV0geyBwYWRkaW5nLXJpZ2h0OiA1cHg7IH1cblx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0ICBtYXJnaW4tcmlnaHQ6IDA7XG5cdCAgbWFyZ2luLWxlZnQ6IDMuNzVweDtcblx0fVxuXHQmLmlzLWhpZ2hsaWdodGVkIHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgNSUpO1xuXHQgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkY2hvaWNlcy1wcmltYXJ5LWNvbG9yLCAxMCUpO1xuXHR9XG5cdC5pcy1kaXNhYmxlZCAmIHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtZGlzYWJsZWQtY29sb3IsIDI1JSk7XG5cdCAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLWRpc2FibGVkLWNvbG9yLCAzNSUpO1xuXHR9XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1kcm9wZG93biB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjaG9pY2VzLWJnLWNvbG9yLWRyb3Bkb3duO1xuICBib3JkZXI6IDFweCBzb2xpZCAkY2hvaWNlcy1rZXlsaW5lLWNvbG9yO1xuICB0b3A6IDEwMCU7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY2hvaWNlcy1ib3JkZXItcmFkaXVzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICYuaXMtYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgLmlzLW9wZW4gJiB7IGJvcmRlci1jb2xvcjogZGFya2VuKCRjaG9pY2VzLWtleWxpbmUtY29sb3IsIDE1JSk7IH1cbiAgLmlzLWZsaXBwZWQgJiB7XG5cdHRvcDogYXV0bztcblx0Ym90dG9tOiAxMDAlO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRtYXJnaW4tYm90dG9tOiAtMXB4O1xuXHRib3JkZXItcmFkaXVzOiAuMjVyZW0gLjI1cmVtIDAgMDtcbiAgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3Qge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1heC1oZWlnaHQ6IDMwMHB4O1xuXHRvdmVyZmxvdzogYXV0bztcblx0LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXHR3aWxsLWNoYW5nZTogc2Nyb2xsLXBvc2l0aW9uO1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZzogMTBweDtcblx0Zm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtbWQ7XG5cdFtkaXI9XCJydGxcIl0gJiB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHtcblx0QG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG5cdCAgcGFkZGluZy1yaWdodDogMTAwcHg7XG5cdCAgJjphZnRlciB7XG5cdFx0Y29udGVudDogYXR0cihkYXRhLXNlbGVjdC10ZXh0KTtcblx0XHRmb250LXNpemU6ICRjaG9pY2VzLWZvbnQtc2l6ZS1zbTtcblx0XHRvcGFjaXR5OiAwO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRyaWdodDogMTBweDtcblx0XHR0b3A6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cdCAgfVxuXHQgIFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0dGV4dC1hbGlnbjogcmlnaHQ7XG5cdFx0cGFkZGluZy1sZWZ0OiAxMDBweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuXHRcdCY6YWZ0ZXIge1xuXHRcdCAgcmlnaHQ6IGF1dG87XG5cdFx0ICBsZWZ0OiAxMHB4O1xuXHRcdH1cblx0ICB9XG5cdH1cblx0Ji5pcy1oaWdobGlnaHRlZCB7XG5cdCAgYmFja2dyb3VuZC1jb2xvcjogbWl4KCMwMDAwMDAsICNGRkZGRkYsIDUlKTtcblx0ICAmOmFmdGVyIHsgb3BhY2l0eTogLjU7IH1cblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogZGVmYXVsdDsgfVxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHsgY3Vyc29yOiBwb2ludGVyOyB9XG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2l0ZW0tLWRpc2FibGVkIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIG9wYWNpdHk6IC41O1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2hlYWRpbmcge1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6ICRjaG9pY2VzLWZvbnQtc2l6ZS1zbTtcbiAgcGFkZGluZzogMTBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGxpZ2h0ZW4oJGNob2ljZXMta2V5bGluZS1jb2xvciwgMTAlKTtcbiAgY29sb3I6IGxpZ2h0ZW4oIzMzMywgMzAlKTtcbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuICB0ZXh0LWluZGVudDogLTk5OTlweDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgJjpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IG1peCgjMDAwMDAwLCAjRkZGRkZGLCAyLjUlKTtcbiAgZm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtbWQ7XG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICBib3JkZXI6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgcGFkZGluZzogNHB4IDAgNHB4IDJweCAhaW1wb3J0YW50O1xuICAmOmZvY3VzIHsgb3V0bGluZTogMDsgfVxuICBbZGlyPVwicnRsXCJdICYge1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMDtcbiAgfVxufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX3BsYWNlaG9sZGVyIHsgb3BhY2l0eTogLjU7IH1cblxuLyo9PT09PSAgRW5kIG9mIENob2ljZXMgID09PT09PSovXG4iLCIvLyBCdXR0b24gc3R5bGVzLlxuLndwZm9ybXMtYWRtaW4tcGFnZSB7XG5cblx0LndwZm9ybXMtYnRuIHtcblx0XHRib3JkZXI6IDA7XG5cdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tYmxvY2sge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLW1kIHtcblx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiA4cHggMTJweDtcblx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLWxnIHtcblx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiAxNnB4IDI4cHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tb3JhbmdlIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkb3JhbmdlO1xuXHRcdGJvcmRlci1jb2xvcjogJG9yYW5nZTtcblx0XHRjb2xvcjogI2ZmZjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRib3JkZXItY29sb3I6ICRkYXJrb3JhbmdlO1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi1ncmV5IHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuXHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRjb2xvcjogIzY2NjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Q3ZDdkNztcblx0XHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRcdGNvbG9yOiAjNDQ0O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi1saWdodC1ncmV5IHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG5cdFx0Y29sb3I6ICM2NjY7XG5cblx0XHQmOmhvdmVyIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG5cdFx0XHRjb2xvcjogIzQ0NDtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tdHJhbnMtZ3JlZW4ge1xuXHRcdGJhY2tncm91bmQtY29sb3I6IG5vbmU7XG5cdFx0Y29sb3I6ICRncmVlbjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGdyZWVuO1xuXHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0fVxuXG5cdFx0LnVuZGVybGluZSB7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdCY6YWZ0ZXIge1xuXHRcdFx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAkZ3JlZW47XG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0Ym90dG9tOiAtNXB4O1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZGFzaGljb25zIHtcblx0XHRcdGhlaWdodDogMThweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEFsZXJ0IHN0eWxlcy5cbi8vIFN0eWxpbmcgdHdlYWtzIGZvciBqUXVlcnktY29uZmlybSBKUyBhbGVydCBsaWJyYXJ5LlxuYm9keSB7XG5cblx0ZGl2Lmpjb25maXJtIHtcblxuXHRcdCosXG5cdFx0Kjo6YmVmb3JlLFxuXHRcdCo6OmFmdGVyIHtcblx0XHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0fVxuXG5cdFx0ZGl2Lmpjb25maXJtLWJveC1jb250YWluZXIge1xuXG5cdFx0XHRkaXYuamNvbmZpcm0tYm94IHtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuXHRcdFx0XHRkaXYuamNvbmZpcm0tY2xvc2VJY29uIHtcblx0XHRcdFx0XHRjb2xvcjogcmdiYSgwLDAsMCwwLjQpO1xuXHRcdFx0XHRcdHRvcDogOHB4O1xuXHRcdFx0XHRcdHJpZ2h0OiA4cHg7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiByZ2JhKDAsMCwwLDAuODApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGRpdi5qY29uZmlybS1ib3gge1xuXG5cdFx0XHRkaXYuamNvbmZpcm0tdGl0bGUtYyB7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDI2cHggMCAhaW1wb3J0YW50O1xuXHRcdFx0XHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG5cblx0XHRcdFx0c3Bhbi5qY29uZmlybS1pY29uLWMge1xuXHRcdFx0XHRcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xuXHRcdFx0XHRcdGNvbG9yOiAjYzRjNGM0ICFpbXBvcnRhbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuLmpjb25maXJtLXRpdGxlIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNwYW4uamNvbmZpcm0taWNvbi1jICsgc3Bhbi5qY29uZmlybS10aXRsZSB7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogMjBweCAhaW1wb3J0YW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1jb250ZW50LXBhbmUge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAyNnB4O1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblxuXHRcdFx0XHQuamNvbmZpcm0tY29udGVudCB7XG5cdFx0XHRcdFx0b3ZlcmZsb3c6IGluaGVyaXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGl2Lmpjb25maXJtLWNvbnRlbnQge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0XHRsaW5lLWhlaWdodDogMS40O1xuXG5cdFx0XHRcdCYubGl0ZS11cGdyYWRlIHtcblx0XHRcdFx0XHRwIHtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwIHtcblx0XHRcdFx0XHRtYXJnaW46IDAgMCAxNnB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0XHRsaW5lLWhlaWdodDogMS41O1xuXG5cdFx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYubGFyZ2Uge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuc21hbGwge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5hbHJlYWR5LXB1cmNoYXNlZCB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuXHRcdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1idXR0b25zIHtcblxuXHRcdFx0XHQuYWxyZWFkeS1wdXJjaGFzZWQge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdFx0XHRjb2xvcjogI2FhYTtcblx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5kaXNjb3VudC1ub3RlIHtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRtYXJnaW46IDMwcHggMCAwO1xuXG5cdFx0XHRcdHAge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmYWZmYWM7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIC0zMHB4O1xuXHRcdFx0XHRcdHBhZGRpbmc6IDI0cHggNjBweCAyMHB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdFx0XHRjb2xvcjogIzRkNGQ0ZDtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6ICdcXGYwNTgnO1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdFx0Zm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMjZweDtcblx0XHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDVweCA2cHg7XG5cdFx0XHRcdFx0XHR0ZXh0LXJlbmRlcmluZzogYXV0bztcblx0XHRcdFx0XHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdFx0XHRcdFx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRcdHRvcDogLTIwcHg7O1xuXHRcdFx0XHRcdFx0cmlnaHQ6IDUwJTtcblx0XHRcdFx0XHRcdG1hcmdpbi1yaWdodDogLTE4cHg7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzNhYmMwMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuIHtcblx0XHRcdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0XHRcdGNvbG9yOiAjM2FiYzAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YSB7XG5cdFx0XHRcdFx0Y29sb3I6ICNhYWE7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogMTJweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpbnB1dFt0eXBlPXRleHRdIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdHdpZHRoOiA5OSU7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkNmQ2ZDY7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdG1hcmdpbjogMjBweCBhdXRvIDAgYXV0bztcblx0XHRcdH1cblxuXHRcdFx0I3dwZm9ybXMtZW1iZWQtc2hvcnRjb2RlIHtcblx0XHRcdFx0bWFyZ2luOiAyMHB4IDA7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggNXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQjd3Bmb3Jtcy1lbWJlZC1zaG9ydGNvZGU6ZGlzYWJsZWQge1xuXHRcdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdH1cblxuXHRcdFx0YnV0dG9uLmJ0bi1jb25maXJtIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJG9yYW5nZTtcblx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdG91dGxpbmU6IG5vbmU7XG5cblx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAkZGFya29yYW5nZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRidXR0b24uYnRuLWRlZmF1bHQge1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblxuXHRcdFx0LmVycm9yIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZXJyb3Ige1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZWJjY2QxICFpbXBvcnRhbnQ7XG5cdFx0XHR9XG5cblx0XHRcdC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMge1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcblx0XHRcdFx0dHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHQtbXMtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdFx0XHRcdHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHRmb250LXNpemU6IDQ1cHggIWltcG9ydGFudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuY2hvaWNlcyB7XG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcblxuXHRcdGlucHV0W3R5cGU9dGV4dF0uY2hvaWNlc19faW5wdXQge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBBbGVydCBzdHlsZXMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQud3Bmb3Jtcy1hbGVydCB7XG5cdFx0cGFkZGluZzogMTZweDtcblx0XHRtYXJnaW4tYm90dG9tOiAxOHB4O1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXG5cdFx0aDQge1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdGNvbG9yOiBpbmhlcml0O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTVweCAwO1xuXG5cdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtbm9tYXJnaW4ge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1zbWFsbCB7XG5cdFx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LXN1Y2Nlc3Mge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcblx0XHRcdGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcblx0XHRcdGNvbG9yOiAjM2M3NjNkO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1pbmZvIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG5cdFx0XHRib3JkZXItY29sb3I6ICNiY2U4ZjE7XG5cdFx0XHRjb2xvcjogIzMxNzA4Zjtcblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtd2FybmluZyB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZmFlYmNjO1xuXHRcdFx0Y29sb3I6ICM4YTZkM2I7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LWRhbmdlciB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZWJjY2QxO1xuXHRcdFx0Y29sb3I6ICNhOTQ0NDI7XG5cdFx0fVxuXHR9XG59IiwiLy8gRmxhZyBpY29ucy5cbi53cGZvcm1zLWZsYWcge1xuXHR3aWR0aDogMTZweDtcblx0aGVpZ2h0OiAxNnB4O1xuXHRiYWNrZ3JvdW5kOnVybCguLi9pbWFnZXMvZmxhZ3MucG5nKSBuby1yZXBlYXQ7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWQge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWcge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1haSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXIge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXMge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXQge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXUge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXcge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXoge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iYiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iaCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYmkge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ibSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYm4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnMge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJ0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYncge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnkge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnoge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Ege2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Qge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Yge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2cge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNoIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2sge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY24ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jciB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN2IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRrIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1kbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZG8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWR6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWVnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1laCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZXIge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lcyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ldCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1maSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1maiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Ege2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdiIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1naCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2kge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ20ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ24ge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Age2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Ege2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Ige2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Qge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWd3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1neSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaGsge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWhuIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ociB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaHQge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWh1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1pZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWllIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWltIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWluIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlxIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1pdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctamUge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWptIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1qbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctanAge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2gge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2kge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWttIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3Age2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3kge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1reiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGIge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGsge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sdSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbHYge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWMge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1kIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1oIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWsge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1tIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbW4ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tcSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXIge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1zIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXUge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW12IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW14IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXkge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1teiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5hIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmMge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1uZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5nIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmkge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmwge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5vIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ucCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbnIge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW56IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1vbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGEge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGcge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1waCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBrIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGwge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXB0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcHkge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXFhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1yZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcm8ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXJzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcnUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ydyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Ige2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNkIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2sge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc24ge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc3Yge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zeSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGMge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10ZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGgge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10bSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdG4ge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10ciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHQge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10diB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXR3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11YSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXVnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdXMge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11eSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXV6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12YyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdmUge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12aSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdm4ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZ1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctd3Mge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy15ZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXphIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctem0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy16dyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0yMjRweH1cbiIsIi8vIEhlYWRlciBzdHlsZXMuXG5cbiN3cGZvcm1zLWhlYWRlci10ZW1wIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRtYXJnaW46IDA7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAtMXB4O1xuXHRsZWZ0OiAyMHB4O1xuXHRyaWdodDogMjBweDtcblx0ei1pbmRleDogOTk7XG59XG5cbiN3cGZvcm1zLWhlYWRlciB7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCAkb3JhbmdlO1xuXHRwYWRkaW5nOiAyMnB4IDIwcHg7XG5cblx0aW1nIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRtYXJnaW46IDA7XG5cdFx0bWF4LXdpZHRoOiAyMzVweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuXHRcdFx0bWF4LXdpZHRoOiAyMDBweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIFBhZ2UgdGl0bGUgYW5kIHRhYnMgc3R5bGVzLlxuLndwZm9ybXMtYWRtaW4td3JhcCB7XG5cblx0Ly8gVGl0bGUgYXJlYS5cblx0LnBhZ2UtdGl0bGUge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdHBhZGRpbmc6IDE1cHggMjBweDtcblxuXHRcdC5hZGQtbmV3LWgyIHtcblx0XHRcdG1hcmdpbi1sZWZ0OiAyOHB4O1xuXHRcdH1cblx0fVxufVxuXG4vLyBUYWIgbmF2aWdhdGlvbi5cbi53cGZvcm1zLWFkbWluLXRhYnMge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdHBhZGRpbmc6IDAgMjBweDtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0b3ZlcmZsb3c6IGF1dG87XG5cdGZvbnQtc2l6ZTogMTRweDtcblxuXHRsaSB7XG5cdFx0bWFyZ2luOiAwIDMwcHggMCAwO1xuXHRcdHBhZGRpbmc6IDA7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cblx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXG5cdFx0YSB7XG5cdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0cGFkZGluZzogMjBweCAwIDE4cHggMDtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZmZmO1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblxuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogIzk5OTtcblx0XHRcdH1cblxuXHRcdFx0Ji5hY3RpdmUge1xuXHRcdFx0XHRib3JkZXItY29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBHZW5lcmFsIGFkbWluIHN0eWxpbmcuXG5cbi8vIENvcmUgYWRtaW4gc3R5bGUgb3ZlcnJpZGVzLlxuI3dwY29udGVudCB7XG5cdHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogNDZweDtcblx0fVxufVxuXG4jd3Bib2R5IHtcblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogMDtcblx0fVxufVxuXG4vLyBUaGlzIGNsYXNzIGlzIGF1dG8gYXBwbGllZCB0byBfYWxsXyBXUEZvcm1zIGFkbWluIHBhZ2VzL3NjcmVlbnMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQvLyBUaGlzIGlzIGhpZGRlbiBvbiBsb2FkLCB0aGVuIG1hZGUgdmlzaWJsZSB3aXRoIEpTLCB0b1xuXHQvLyBwcmV2ZW50IGl0IGZyb20gXCJqdW1waW5nXCIuXG5cdCNzY3JlZW4tbWV0YS1saW5rcyxcblx0I3NjcmVlbi1tZXRhIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0Ly8gUmVzcG9uc2l2ZSB2aWRlbyBjb250YWluZXIsIHJlcGxhY2VzIEpTIG1ldGhvZC5cblx0LnZpZGVvLWNvbnRhaW5lciB7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmctYm90dG9tOiA1Ni4xJTtcblx0XHQvLyBwYWRkaW5nLXRvcDogMzBweDtcblx0XHRoZWlnaHQ6IDA7XG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0fVxuXG5cdC52aWRlby1jb250YWluZXIgaWZyYW1lLFxuXHQudmlkZW8tY29udGFpbmVyIG9iamVjdCxcblx0LnZpZGVvLWNvbnRhaW5lciBlbWJlZCB7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogMDtcblx0XHRsZWZ0OiAwO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogMTAwJTtcblx0fVxuXG5cdC8vIEZhbmN5IGZpbGUgdXBsb2FkLlxuXHQud3Bmb3Jtcy1maWxlLXVwbG9hZCB7XG5cblx0XHRpbnB1dFt0eXBlPWZpbGVdIHtcblx0XHRcdHdpZHRoOiAwLjFweDtcblx0XHRcdGhlaWdodDogMC4xcHg7XG5cdFx0XHRvcGFjaXR5OiAwO1xuXHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHotaW5kZXg6IC0xO1xuXHRcdH1cblxuXHRcdGxhYmVsIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdH1cblxuXHRcdGlucHV0W3R5cGU9ZmlsZV06Zm9jdXMgKyBsYWJlbCxcblx0XHRpbnB1dFt0eXBlPWZpbGVdLmhhcy1mb2N1cyArIGxhYmVsIHtcblx0XHRcdG91dGxpbmU6IDFweCBkb3R0ZWQgIzAwMDtcblx0XHRcdG91dGxpbmU6IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBhdXRvIDVweDtcblx0XHR9XG5cblx0XHQuZmxkIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cblx0XHRcdC5wbGFjZWhvbGRlciB7XG5cdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0cm9uZyAuZmEge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiA4cHg7XG5cdFx0fVxuXHR9XG5cblx0Ly8gR2VucmljIGNsYXNzIGZvciBoaWRpbmcgZGlzcGxheTtcblx0LndwZm9ybXMtaGlkZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC8vIFBsYWNlaG9sZGVyIGgxIGZvciBhZG1pbiBub3RpY2VzLlxuXHQud3Bmb3Jtcy1oMS1wbGFjZWhvbGRlciB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC8vIEhpZGUgbm90aWNlcyBvbiBsb2FkIHRvIHByZXZlbnQganVtcGluZy4gSlMgd2lsbCByZXZlYWwgdGhlbS5cblx0Lm5vdGljZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxufVxuXG4vLyBBZG1pbiB3cmFwIC0gY29udGFpbnMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGhlYWRlci5cbi53cGZvcm1zLWFkbWluLXdyYXAge1xuXG5cdG1hcmdpbjogMDtcblxuXHQubm90aWNlIHtcblx0XHRtYXJnaW4tbGVmdDogMjBweCAhaW1wb3J0YW50O1xuXHRcdG1hcmdpbi1yaWdodDogMjBweCAhaW1wb3J0YW50O1xuXHR9XG59XG5cbi8vIEFkbWluIGNvbnRlbnQuXG4ud3Bmb3Jtcy1hZG1pbi1jb250ZW50IHtcblx0cGFkZGluZy1sZWZ0OiAyMHB4O1xuXHRwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuXG5cdCY6YmVmb3JlIHtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxuXG5cdCY6YWZ0ZXIge1xuXHRcdGNsZWFyOiBib3RoO1xuXHRcdGNvbnRlbnQ6IFwiIFwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHR9XG5cblx0aHIge1xuXHRcdGJvcmRlcjogbm9uZTtcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2U0ZTRlNDtcblx0XHRtYXJnaW46IDIwcHggMDtcblx0XHRiYWNrZ3JvdW5kOiBub25lO1xuXHR9XG59XG5cbi53cGZvcm1zLWNsZWFyIHtcblxuXHQmOmJlZm9yZSB7XG5cdFx0Y29udGVudDogXCIgXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdH1cblxuXHQmOmFmdGVyIHtcblx0XHRjbGVhcjogYm90aDtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxufVxuXG4ud3Bmb3Jtcy1hZG1pbi1jb2x1bW5zIHtcblxuXHQmID4gZGl2W2NsYXNzKj1cIi1jb2x1bW4tXCJdIHtcblx0XHRmbG9hdDogbGVmdDtcblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi0yMCB7d2lkdGg6IDIwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTMzIHt3aWR0aDogMzMuMzMzMzMlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNDAge3dpZHRoOiA0MCV9XG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi01MCB7d2lkdGg6IDUwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTYwIHt3aWR0aDogNjAlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tODAge3dpZHRoOiA4MCV9XG5cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLWxhc3Qge2Zsb2F0OiByaWdodCAhaW1wb3J0YW50fVxuXG5cdCY6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6IFwiXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdFx0Y2xlYXI6IGJvdGg7XG5cdH1cbn1cblxuXG5cbiIsIi8vIEZvcm0gT3ZlcnZpZXcgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLW92ZXJ2aWV3XG4jd3Bmb3Jtcy1vdmVydmlldyB7XG5cblx0Ly8gUmVtb3ZlIHRoZSB0b3AgbWFyZ2luIHNvIGl0IGRpc3BsYXlzIDIwcHggYmV0d2VlbiB0aGUgaGVhZGVyIGFyZWFcblx0Ly8gYW5kIHRoZSBjb250ZW50LCBjb25zaXN0ZW50IHdpdGggb3VyIG90aGVyIGFkbWluIHBhZ2VzLlxuXHQudGFibGVuYXYudG9wIHtcblx0XHRtYXJnaW4tdG9wOiAwO1xuXHR9XG5cblx0Ly8gU2V0IGNlcnRhaW4gY29sdW1uIHdpZHRocy5cblx0LndwLWxpc3QtdGFibGUge1xuXG5cdFx0LmNvbHVtbi1pZCB7XG5cdFx0XHR3aWR0aDogMzBweDtcblx0XHR9XG5cblx0XHQuY29sdW1uLWVudHJpZXMge1xuXHRcdFx0d2lkdGg6IDcwcHg7XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1zaG9ydGNvZGUge1xuXHRcdFx0d2lkdGg6IDE1MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tY3JlYXRlZCB7XG5cdFx0XHR3aWR0aDogMTQ1cHg7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBFbnRyaWVzIFNpbmdsZSAoRGV0YWlscykgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWVudHJpZXMmdmlldz1kZXRhaWxzXG4jd3Bmb3Jtcy1lbnRyaWVzLXNpbmdsZSB7XG5cblx0I3Bvc3RzdHVmZiB7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC8vIE1ldGFib3hlcyBhcmUgbm90IG1vdmFibGUgc28gZG9uJ3QgbGV0IHRoZSB1c2VyIHRoaW5rIHNvLlxuXHQucG9zdGJveCAuaG5kbGUge1xuXHRcdGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xuXHR9XG5cblx0Ly8gRW50cnkgbmF2aWdhdGlvbiAtIG5leHQvcHJldi5cblx0LndwZm9ybXMtZW50cnktbmF2aWdhdGlvbiB7XG5cdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdGxpbmUtaGVpZ2h0OiAyOXB4O1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDJweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxcHg7XG5cdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPD1waG9uZVwiKSB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblxuXHRcdC5hZGQtbmV3LWgyIHtcblx0XHRcdHRvcDogYXV0bztcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDRweCAwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHR9XG5cblx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGhlaWdodDogYXV0bztcblx0XHRcdFx0d2lkdGg6IDI4cHg7XG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiAyOXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQmLmluYWN0aXZlIHtcblx0XHRcdFx0b3BhY2l0eTogMC41O1xuXHRcdFx0XHRwb2ludGVyLWV2ZW50czogbm9uZTtcblx0XHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LW5hdmlnYXRpb24tdGV4dCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZW50cnktY3VycmVudCB7XG5cdFx0XHR0b3A6IGF1dG87XG5cdFx0XHRtYXJnaW46IDAgLTVweCAwIC0zcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRwYWRkaW5nOiA0cHggMTBweDtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG5cdFx0XHQtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRsaW5lLWhlaWdodDogMjlweDtcblx0XHRcdHRleHQtdHJhbnNmb3JtOiBjZW50ZXI7XG5cdFx0fVxuXG5cdH1cblxuXHQvLyBFbnRyeSBmaWVsZHMgbWV0YWJveC5cblx0I3dwZm9ybXMtZW50cnktZmllbGRzIHtcblxuXHRcdGgyLmhuZGxlIHtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblxuXHRcdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHR3aWR0aDogMTZweDtcblx0XHRcdFx0bWFyZ2luOiA0cHggNHB4IDAgMDtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Lm5vLWZpZWxkcyB7XG5cdFx0XHRwYWRkaW5nOiAxMnB4O1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdC5pbnNpZGUge1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0cCB7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZW50cnktZmllbGQtbmFtZSB7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNlYmYzZmI7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCAxMnB4O1xuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1lbnRyeS1maWVsZC12YWx1ZSB7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCAxMnB4O1xuXHRcdFx0fVxuXG5cdFx0XHQuZW1wdHkgLndwZm9ybXMtZW50cnktZmllbGQtdmFsdWUge1xuXHRcdFx0XHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVtcHR5LWZpZWxkLXRvZ2dsZSB7XG5cdFx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRwYWRkaW5nOiA1cHggMCAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEVudHJ5IE5vdGVzIG1ldGFib3guXG5cdCN3cGZvcm1zLWVudHJ5LW5vdGVzIHtcblxuXHRcdC5pbnNpZGUge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1uZXcge1xuXHRcdFx0cGFkZGluZzogMTBweDtcblx0XHR9XG5cblx0XHRmb3JtIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LmJ0bnMge1xuXHRcdFx0b3ZlcmZsb3c6IGF1dG87XG5cdFx0XHRwYWRkaW5nOiA4cHggMDtcblx0XHR9XG5cblx0XHQubm8tbm90ZXMge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogNHB4IDEwcHggOHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LW5vdGVzLXNpbmdsZSB7XG5cdFx0XHRwYWRkaW5nOiAxMHB4O1xuXHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNlM2UxZTM7XG5cblx0XHRcdHA6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdH1cblxuXHRcdFx0Ji5ldmVuIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1ieWxpbmUge1xuXHRcdFx0Y29sb3I6ICM4ODg7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXG5cdFx0XHQuc2VwIHtcblx0XHRcdFx0Y29sb3I6ICNkZGQ7XG5cdFx0XHR9XG5cblx0XHRcdC5ub3Rlcy11c2VyIHtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0fVxuXG5cdFx0XHQubm90ZS1kZWxldGUge1xuXHRcdFx0XHRjb2xvcjogI2EwMDtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG5cdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gRW50cnkgRGV0YWlscywgQWN0aW9ucywgYW5kIFBheW1lbnRzLlxuXHQjd3Bmb3Jtcy1lbnRyeS1kZXRhaWxzIC5pbnNpZGUsXG5cdCN3cGZvcm1zLWVudHJ5LXBheW1lbnQgLmluc2lkZSxcblx0I3dwZm9ybXMtZW50cnktYWN0aW9ucyAuaW5zaWRlIHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhICB7XG5cdFx0cGFkZGluZzogNnB4IDAgMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBwLFxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIHAge1xuXHRcdHBhZGRpbmc6IDZweCAxMHB4IDhweDtcblx0XHRtYXJnaW46IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEge1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG5cdFx0cGFkZGluZzogMTBweDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LXBheW1lbnQtbWV0YSBwOmxhc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBzdHJvbmcsXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBzdHJvbmcge1xuXHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1kZXRhaWxzLW1ldGEgLmRhc2hpY29ucyxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIC5kYXNoaWNvbnMge1xuXHRcdHBhZGRpbmc6IDAgMnB4IDAgMDtcblx0XHRjb2xvcjogIzgyODc4QTtcblx0XHR0b3A6IC0xcHg7XG5cdFx0bGVmdDogLTFweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR9XG5cblx0I3dwZm9ybXMtZW50cnktZGV0YWlscyAuc3VibWl0ZGVsZXRlIHtcblx0XHRjb2xvcjogI2EwMDtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0cGFkZGluZzogMXB4IDJweDtcblx0fVxuXG5cdCN3cGZvcm1zLWVudHJ5LWRldGFpbHMgLnN1Ym1pdGRlbGV0ZTpob3ZlciB7XG5cdFx0Y29sb3I6IHJlZDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBhIHtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1hY3Rpb25zLW1ldGEgYTpob3ZlciB7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdH1cblxuXHQvLyBFbnRyeSBMb2NhdGlvbi5cblx0I3dwZm9ybXMtZW50cnktZ2VvbG9jYXRpb24ge1xuXG5cdFx0Lmluc2lkZSB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdHVsIHtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRvdmVyZmxvdzogYXV0bztcblxuXHRcdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLW1ldGEge1xuXHRcdFx0d2lkdGg6IDg1cHg7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZWU7XG5cdFx0XHRwYWRkaW5nOiAxMHB4IDIwcHggMTBweCAxMnB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLXZhbHVlIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBhZGRpbmc6IDEwcHggMTJweCAxMHB4IDIwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZmxhZyB7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDRweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEVudHJpZXMgTGlzdCAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtZW50cmllcyZ2aWV3PWxpc3RcbiN3cGZvcm1zLWVudHJpZXMtbGlzdCB7XG5cblx0LmZvcm0tZGV0YWlscyB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0cGFkZGluZy1ib3R0b206IDE1cHg7XG5cdFx0bWFyZ2luOiAwIDAgMTBweDtcblxuXHRcdC5mb3JtLWRldGFpbHMtc3ViIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRmb250LXNpemU6IDEwcHg7XG5cdFx0XHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRcdFx0bWFyZ2luOiAwIDAgOHB4IDA7XG5cdFx0fVxuXG5cdFx0LmZvcm0tZGV0YWlscy10aXRsZSB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPDEyMDBweFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5mb3JtLXNlbGVjdG9yIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0LnRvZ2dsZSB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0Y29sb3I6ICM0NDQ7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblxuXHRcdFx0XHQmOmhvdmVyLFxuXHRcdFx0XHQmLmFjdGl2ZSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2UzZTNlMztcblx0XHRcdFx0XHRvdXRsaW5lOiBub25lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LmZvcm0tbGlzdCB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAycHggOHB4IDAgcmdiYSgwLDAsMCwwLjEpO1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdHRvcDogMjdweDtcblx0XHRcdFx0bGVmdDogLTEwOHB4O1xuXHRcdFx0XHR3aWR0aDogMjMwcHg7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHggMDtcblx0XHRcdFx0ei1pbmRleDogOTk5MTtcblxuXHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogXCIgXCI7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHRvcDogLTEwcHg7XG5cdFx0XHRcdFx0bGVmdDogMTEwcHg7XG5cdFx0XHRcdFx0d2lkdGg6IDA7XG5cdFx0XHRcdFx0aGVpZ2h0OiAwO1xuXHRcdFx0XHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0XHRcdFx0Ym9yZGVyLXdpZHRoOiAwIDhweCAxMHB4IDhweDtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dWwge1xuXHRcdFx0XHRtYXgtaGVpZ2h0OiAxOTZweDtcblx0XHRcdFx0b3ZlcmZsb3cteDogaGlkZGVuO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblxuXHRcdFx0XHRcdGEge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiA1cHggMTVweDtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNDQ0O1xuXG5cdFx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZm9ybS1kZXRhaWxzLWFjdGlvbnMge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjwxMjAwcHhcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdH1cblxuXHRcdFx0YSB7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRtYXJnaW46IDAgMTJweCAwIDA7XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdG1hcmdpbjogMFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRcdFx0d2lkdGg6IDE2cHg7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNlYXJjaC5cblx0LnNlYXJjaC1ib3gge1xuXHRcdC53cGZvcm1zLWZvcm0tc2VhcmNoLWJveC1maWVsZCB7XG5cdFx0XHRtYXgtd2lkdGg6IDE4MHB4O1xuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHRcdG1hcmdpbjogMCAycHggMCAwO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWZvcm0tc2VhcmNoLWJveC1jb21wYXJpc29uIHtcblx0XHRcdG1heC13aWR0aDogOTBweDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1mb3JtLXNlYXJjaC1ib3gtdGVybSB7XG5cdFx0XHRoZWlnaHQ6IDI4cHg7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cdH1cblxuXHQvLyBGaWx0ZXJpbmcuXG5cdC53cGZvcm1zLWZpbHRlci1kYXRlIHtcblxuXHRcdC53cGZvcm1zLWZpbHRlci1kYXRlLXNlbGVjdG9yIHtcblx0XHRcdGhlaWdodDogMjhweDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0bWF4LXdpZHRoOiAyMTBweDtcblx0XHR9XG5cblx0XHRidXR0b24ge1xuXHRcdFx0bWFyZ2luOiAxcHggOHB4IDAgMDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV1AgVGFibGUgc3R5bGluZy5cblx0LndwLWxpc3QtdGFibGUge1xuXG5cdFx0Lm5ldy1lbnRyaWVzLW5vdGlmaWNhdGlvbiB0ZCB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0YSB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1pbmRpY2F0b3JzIHtcblx0XHRcdHdpZHRoOiAzNXB4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRhOmZvY3VzIHtcblx0XHRcdFx0LXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuXHRcdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5jb2x1bW4taW5kaWNhdG9ycyAuZGFzaGljb25zIHtcblx0XHRcdHdpZHRoOiAxNHB4O1xuXHRcdFx0aGVpZ2h0OiAxNHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bWFyZ2luLXRvcDogM3B4O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3Itc3RhciAuZGFzaGljb25zIHtcblx0XHRcdG1hcmdpbi1yaWdodDogNnB4O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3Itc3RhciB7XG5cdFx0XHRjb2xvcjogI2U0ZTRlNDtcblxuXHRcdFx0Jjpob3Zlcixcblx0XHRcdCYudW5zdGFyIHtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmluZGljYXRvci1yZWFkIHtcblx0XHRcdGNvbG9yOiAjOWVkZTg0O1xuXG5cdFx0XHQmOmhvdmVyLFxuXHRcdFx0Ji51bnJlYWQge1xuXHRcdFx0XHRjb2xvcjogI2U0ZTRlNDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLWRhdGUge1xuXHRcdFx0d2lkdGg6IDE1MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tc3RhdHVzIHtcblx0XHRcdHdpZHRoOiAxMjBweDtcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRoZWlnaHQ6IDEycHg7XG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xuXHRcdFx0XHRtYXJnaW46IDAgMCAwIDNweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLXBheW1lbnRfdG90YWwge1xuXHRcdFx0d2lkdGg6IDEwMHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tYWN0aW9ucyB7XG5cdFx0XHR3aWR0aDogMTAwcHg7XG5cdFx0fVxuXG5cdFx0LnNlcCB7XG5cdFx0XHRjb2xvcjogI2RkZDtcblx0XHR9XG5cblx0XHQuZGVsZXRlOmhvdmVyIHtcblx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtZW50cmllcy10YWJsZS1lZGl0LWNvbHVtbnMge1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRjb2xvcjogI2NjYztcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0fVxuXHR9XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4MnB4KSB7XG5cblx0LndwZm9ybXMtYWRtaW4tY29udGVudCB7XG5cdFx0cGFkZGluZy1sZWZ0OiAxMHB4O1xuXHRcdHBhZGRpbmctcmlnaHQ6IDEwcHg7XG5cdH1cblxuXHQud3AtbGlzdC10YWJsZSB7XG5cdFx0bWFyZ2luOiAwIC0xMHB4IDAgLTEwcHg7XG5cdFx0d2lkdGg6IDEwMHZ3O1xuXHRcdHRhYmxlLWxheW91dDogYXV0bztcblx0fVxuXG5cdC53cC1saXN0LXRhYmxlLmVudHJpZXMge1xuXG5cdFx0LmNvbHVtbi1pbmRpY2F0b3JzIHtcblx0XHRcdHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0LmluZGljYXRvcnMge1xuXHRcdFx0LmluZGljYXRvci1zdGFyIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdH1cblx0XHRcdC5pbmRpY2F0b3ItcmVhZCB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHI6bm90KC5pbmxpbmUtZWRpdC1yb3cpOm5vdCgubm8taXRlbXMpIHRkLmNvbHVtbi1wcmltYXJ5IHtcblx0XHRcdGhlaWdodDogOHB4O1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdHotaW5kZXg6ICsxO1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiAwO1xuXHRcdFx0b3ZlcmZsb3c6IHZpc2libGU7XG5cdFx0fVxuXG5cdFx0LnRvZ2dsZS1yb3cge1xuXHRcdFx0cmlnaHQ6IDVweDtcblx0XHRcdHRvcDogMTVweDtcblx0XHR9XG5cblx0XHR0cjpub3QoLmlubGluZS1lZGl0LXJvdyk6bm90KC5uby1pdGVtcykgdGQuY29sdW1uLXByaW1hcnkrdGQge1xuXHRcdFx0ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHR0cjpub3QoLmlubGluZS1lZGl0LXJvdyk6bm90KC5uby1pdGVtcykgdGQuY29sdW1uLXByaW1hcnl+dGQge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiA1cHg7XG5cdFx0XHRtaW4td2lkdGg6IDUwdnc7XG5cdFx0fVxuXG5cblx0fVxuXG5cdHAuc2VhcmNoLWJveCB7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHdpZHRoOiBhdXRvO1xuXHR9XG5cblx0aW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dIHtcblx0XHRoZWlnaHQ6IDE2cHg7XG5cdFx0d2lkdGg6IDE2cHg7XG5cdH1cblxufSIsIi8vIFdlbGNvbWUgQWN0aXZhdGlvbiAtIGluZGV4LnBocD9wYWdlPXdwZm9ybXMtZ2V0dGluZy1zdGFydGVkXG4jd3Bmb3Jtcy13ZWxjb21lIHtcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkICRvcmFuZ2U7XG5cdGNvbG9yOiAjNTU1O1xuXHRwYWRkaW5nLXRvcDogMTEwcHg7XG5cblx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0cGFkZGluZy10b3A6IDY0cHg7XG5cdH1cblxuXHQqLFxuXHQqOjpiZWZvcmUsXG5cdCo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQuY29udGFpbmVyIHtcblx0XHRtYXJnaW46IDAgYXV0bztcblx0XHRtYXgtd2lkdGg6IDcyMHB4O1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cblxuXHQuYmxvY2sge1xuXHRcdHBhZGRpbmc6IDQwcHg7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cdFx0fVxuXHR9XG5cblx0aW1nIHtcblx0XHRtYXgtd2lkdGg6IDEwMCU7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHR9XG5cblx0aDEge1xuXHRcdGNvbG9yOiAjMjIyO1xuXHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0bWFyZ2luOiAwIDAgMTZweCAwO1xuXHR9XG5cblx0aDUge1xuXHRcdGNvbG9yOiAjMjIyO1xuXHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRtYXJnaW46IDAgMCA4cHggMDtcblx0fVxuXG5cdGg2IHtcblx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0XHRsaW5lLWhlaWdodDogMS42O1xuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRtYXJnaW46IDA7XG5cdH1cblxuXHRwIHtcblx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHR9XG5cblx0LmJ1dHRvbi13cmFwIHtcblx0XHRtYXgtd2lkdGg6IDU5MHB4O1xuXHRcdG1hcmdpbjogMCBhdXRvIDAgYXV0bztcblxuXHRcdC5sZWZ0IHtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHRcdHBhZGRpbmctcmlnaHQ6IDIwcHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnJpZ2h0IHtcblx0XHRcdGZsb2F0OiByaWdodDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDIwcHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LmludHJvIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLXJhZGl1czogMnB4O1xuXHRcdG1hcmdpbi1ib3R0b206IDMwcHg7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmctdG9wOiA0MHB4O1xuXG5cdFx0LnN1bGxpZSB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdGhlaWdodDogMTEwcHg7XG5cdFx0XHR3aWR0aDogMTEwcHg7XG5cdFx0XHRwYWRkaW5nOiAxOHB4IDE0cHggMCAxNHB4O1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAtNThweDtcblx0XHRcdGxlZnQ6IDUwJTtcblx0XHRcdG1hcmdpbi1sZWZ0OiAtNTVweDtcblx0XHR9XG5cblx0XHQudmlkZW8tdGh1bWJuYWlsIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0bWFyZ2luOiAwIGF1dG87XG5cdFx0fVxuXG5cdFx0LmJ1dHRvbi13cmFwIHtcblx0XHRcdG1hcmdpbi10b3A6IDI1cHg7XG5cdFx0fVxuXHR9XG5cblx0LmZlYXR1cmVzIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cdFx0cGFkZGluZy1ib3R0b206IDIwcHg7XG5cblx0XHQuZmVhdHVyZS1saXN0IHtcblx0XHRcdG1hcmdpbi10b3A6IDYwcHg7XG5cdFx0fVxuXG5cdFx0LmZlYXR1cmUtYmxvY2sge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0cGFkZGluZy1ib3R0b206IDM1cHg7XG5cdFx0XHRvdmVyZmxvdzogYXV0bztcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdH1cblxuXHRcdFx0Ji5maXJzdCB7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDIwcHg7XG5cdFx0XHRcdGNsZWFyOiBib3RoO1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ji5sYXN0IHtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiAyMHB4O1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdHBhZGRpbmctbGVmdDogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdFx0bWF4LXdpZHRoOiA0NnB4O1xuXHRcdFx0fVxuXG5cdFx0XHRoNSB7XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OiA2OHB4XG5cdFx0XHR9XG5cblx0XHRcdHAge1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OiA2OHB4XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmJ1dHRvbi13cmFwIHtcblx0XHRcdG1hcmdpbi10b3A6IDI1cHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXHR9XG5cblx0LnVwZ3JhZGUtY3RhIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdGNvbG9yOiAjZmZmO1xuXG5cdFx0aDIge1xuXHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRmb250LXNpemU6IDIwcHg7XG5cdFx0XHRtYXJnaW46IDAgMCAzMHB4IDA7XG5cdFx0fVxuXG5cdFx0dWwge1xuXHRcdFx0ZGlzcGxheTogLW1zLWZsZXg7XG5cdFx0XHRkaXNwbGF5OiAtd2Via2l0LWZsZXg7XG5cdFx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdFx0LXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7XG5cdFx0XHRmbGV4LXdyYXA6IHdyYXA7XG5cdFx0XHRmb250LXNpemU6IDE1cHg7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0XHRsaSB7XG5cdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0XHRtYXJnaW46IDAgMCA4cHggMDtcblx0XHRcdFx0cGFkZGluZzogMDtcblxuXHRcdFx0XHQuZGFzaGljb25zIHtcblx0XHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0XHRcdG1hcmdpbi1yaWdodDogNXB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmxlZnQge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogNjYuNjY2NjY2JTtcblx0XHRcdHBhZGRpbmctcmlnaHQ6IDIwcHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDA7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnJpZ2h0IHtcblx0XHRcdGZsb2F0OiByaWdodDtcblx0XHRcdHdpZHRoOiAzMy4zMzMzMzMlO1xuXHRcdFx0cGFkZGluZzogMjBweCAwIDAgMjBweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRoMiB7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXG5cdFx0XHRcdHNwYW4ge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzU1NTtcblx0XHRcdFx0XHRwYWRkaW5nOiAwIDE1cHggMTJweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQucHJpY2Uge1xuXHRcdFx0XHRwYWRkaW5nOiAyNnB4IDA7XG5cblx0XHRcdFx0LmFtb3VudCB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiA0OHB4O1xuXHRcdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuXHRcdFx0XHRcdCY6YmVmb3JlIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6ICckJztcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRcdHRvcDogLThweDtcblx0XHRcdFx0XHRcdGxlZnQ6IC0xNnB4O1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC50ZXJtIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cblx0fVxuXG5cdC50ZXN0aW1vbmlhbHMge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItdG9wOiAwO1xuXHRcdHBhZGRpbmc6IDIwcHggMDtcblxuXHRcdC50ZXN0aW1vbmlhbC1ibG9jayB7XG5cdFx0XHRtYXJnaW46IDUwcHggMCAwIDA7O1xuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMHB4O1xuXHRcdFx0XHRib3gtc2hhZG93OiAwIDAgMThweCByZ2JhKDAsMCwwLC4yKTtcblxuXHRcdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0XHR3aWR0aDogNjVweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRwIHtcblx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRtYXJnaW46IDAgMCAxMnB4IDE0MHB4O1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiAxMDBweDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LmZvb3RlciB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTtcblx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdFx0Ym9yZGVyLXJhZGl1czogMCAwIDJweCAycHg7XG5cdH1cblxuXHQvLyBDaGFuZ2VzIGZvciBwYWlkIHZlcnNpb24uXG5cdCYucHJvIHtcblxuXHRcdC5mZWF0dXJlcyB7XG5cdFx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMzBweDtcblx0XHR9XG5cblx0XHQudXBncmFkZSxcblx0XHQuZm9vdGVyIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LnRlc3RpbW9uaWFscyB7XG5cdFx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdH1cblx0fVxufVxuXG4uZGFzaGJvYXJkX3BhZ2Vfd3Bmb3Jtcy1nZXR0aW5nLXN0YXJ0ZWQge1xuXG5cdC52aWRlby1jb250YWluZXIge1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdH1cblxuXHQvLyBIaWRlIGFkbWluIGZvb3Rlci5cblx0I3dwZm9vdGVyLFxuXHRkaXYubm90aWNlIHtcblx0XHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cdH1cbn1cbiIsIi8vIEFkZG9ucyBMaXN0IC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy1hZGRvbnNcbiN3cGZvcm1zLWFkbWluLWFkZG9ucyB7XG5cblx0Kixcblx0Kjo6YmVmb3JlLFxuXHQqOjphZnRlciB7XG5cdFx0LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cblx0LmFkZG9ucy1jb250YWluZXIge1xuXHRcdG1hcmdpbi1sZWZ0OiAtMjBweDtcblx0XHRtYXJnaW4tcmlnaHQ6IC0yMHB4O1xuXHR9XG5cblx0LnVubG9jay1tc2cge1xuXHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRtYXJnaW4tdG9wOiAtMjBweDtcblx0XHRjbGVhcjogYm90aDtcblx0fVxuXG5cdCN3cGZvcm1zLWFkbWluLWFkZG9ucy1zZWFyY2gge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRjb2xvcjogIzMzMztcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdHBhZGRpbmc6IDdweCAxMnB4O1xuXHRcdG1hcmdpbjogLTNweCAxMHB4IDAgMDtcblx0XHR3aWR0aDogMjAwcHg7XG5cdFx0bWluLWhlaWdodDogMzVweDtcblx0XHRmbG9hdDogcmlnaHQ7XG5cblx0XHQmOmZvY3VzIHtcblx0XHRcdGJvcmRlci1jb2xvcjogI2JiYjtcblx0XHR9XG5cdH1cblxuXHQuYWRkb24tY29udGFpbmVyIHtcblx0XHRwYWRkaW5nOiAwIDIwcHg7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0d2lkdGg6IDMzLjMzMzMzMyU7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjwxMjUwcHhcIikge1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHR9XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0XHR9XG5cdH1cblxuXHRoNCB7XG5cdFx0Zm9udC1zaXplOiAxN3B4O1xuXHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdH1cblxuXHQuYWRkb24taXRlbSB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRtYXJnaW46IDAgMCA0MHB4IDA7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdG1hcmdpbjogMCAwXG5cdFx0fVxuXG5cdFx0aW1nIHtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdG1heC13aWR0aDogNzVweDtcblx0XHR9XG5cblx0XHRoNSB7XG5cdFx0XHRtYXJnaW46IDAgMCAxMHB4IDEwMHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAwIDAgMCAxMDBweDtcblx0XHR9XG5cblx0XHQuZGV0YWlscyB7XG5cdFx0XHRwYWRkaW5nOiAzMHB4IDIwcHg7XG5cblx0XHR9XG5cblx0XHQuYWN0aW9ucyB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuXHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRwYWRkaW5nOiAyMHB4O1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0XHQubXNnIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdHRvcDogMDtcblx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0ei1pbmRleDogOTk7XG5cdFx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cdFx0XHRcdGRpc3BsYXk6IC13ZWJraXQtYm94O1xuXHRcdFx0XHRkaXNwbGF5OiAtbW96LWJveDtcblx0XHRcdFx0ZGlzcGxheTogLW1zLWZsZXhib3g7XG5cdFx0XHRcdGRpc3BsYXk6IC13ZWJraXQtZmxleDtcblx0XHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdFx0LXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdFx0XHQtbXMtYWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cblx0XHRcdFx0Ji5zdWNjZXNzIHtcblx0XHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5lcnJvciB7XG5cdFx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5zdGF0dXMge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRwYWRkaW5nLXRvcDogOHB4O1xuXG5cdFx0XHQuc3RhdHVzLWluYWN0aXZlIHtcblx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdH1cblxuXHRcdFx0LnN0YXR1cy1kb3dubG9hZCB7XG5cdFx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0fVxuXG5cdFx0XHQuc3RhdHVzLWFjdGl2ZSB7XG5cdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnVwZ3JhZGUtYnV0dG9uIHtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblxuXHRcdFx0YSB7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdHdpZHRoOiAxNDBweDtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggNXB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5hY3Rpb24tYnV0dG9uIHtcblx0XHRcdGZsb2F0OiByaWdodDtcblxuXHRcdFx0YnV0dG9uIHtcblx0XHRcdFx0YmFja2dyb3VuZDogbm9uZTtcblx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdHdpZHRoOiAxNDBweDtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggNXB4O1xuXG5cdFx0XHRcdCY6aG92ZXIsXG5cdFx0XHRcdCYubG9hZGluZyB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2U5ZTllOTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiA4cHg7XG5cblx0XHRcdFx0XHQmLmZhLXNwaW5uZXIge1xuXHRcdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuc3RhdHVzLWFjdGl2ZSB7XG5cblx0XHRcdFx0XHQuZmEge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICRncmVlbjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLnN0YXR1cy1pbmFjdGl2ZSB7XG5cblx0XHRcdFx0XHQuZmEge1xuXHRcdFx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLnN0YXR1cy1kb3dubG9hZCB7XG5cblx0XHRcdFx0XHQuZmEge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICM5OTk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5kaXNhYmxlZCB7XG5cdFx0XHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5sb2FkaW5nIHtcblxuXHRcdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsIi8vIEFib3V0IFdQRm9ybXMgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWFib3V0XG5cbiRwYWRkaW5nLWRlZmF1bHQ6IDMwcHg7XG4kYm9yZGVyOiAxcHggc29saWQgI0RERERERDtcblxuLy8gQGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG4vLyBcdHdpZHRoOiA1MCU7XG4vLyB9XG5cbi8qXG4neHMtcGhvbmUnOiAzMjBweCxcblx0J3Bob25lJzogNjAwcHgsXG5cdCdpcGFkJzogNzY4cHgsXG5cdCd0YWJsZXQnOiA3ODJweCxcblx0J2Rlc2t0b3AnOiA5NjBweCxcbiovXG5cbiN3cGZvcm1zLWFkbWluLWFib3V0IHtcblxuXHQqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uIHtcblx0XHRtYXJnaW46IDAgMjBweCAyMHB4O1xuXHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0YmFja2dyb3VuZDogI2ZmZjtcblx0XHRib3JkZXI6ICRib3JkZXI7XG5cdFx0bGluZS1oZWlnaHQ6IDI7XG5cblx0XHRoMSwgaDIsIGgzLCBoNCwgaDUge1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdHBhZGRpbmctdG9wOiAwO1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNjtcblx0XHR9XG5cblx0XHRoMiB7XG5cdFx0XHRmb250LXNpemU6IDI0cHg7XG5cdFx0fVxuXG5cdFx0aDMge1xuXHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMzBweDtcblx0XHRcdGNvbG9yOiAjMjMyODJDO1xuXHRcdH1cblxuXHRcdHVsLCBwIHtcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHR9XG5cblx0XHRwIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cblx0XHRcdCYuYmlnZ2Vye1xuXHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHR9XG5cdFx0XHQmLnNtYWxsZXIge1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHR9XG5cblx0XHRcdCY6bGFzdC1jaGlsZCB7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aHIge1xuXHRcdFx0bWFyZ2luOiAkcGFkZGluZy1kZWZhdWx0IDA7XG5cdFx0fVxuXG5cdFx0ZmlndXJlIHtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHR9XG5cblx0XHRcdGZpZ2NhcHRpb24ge1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdGNvbG9yOiAjODg4ODg4O1xuXHRcdFx0XHRtYXJnaW4tdG9wOiA1cHg7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IGluaXRpYWw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTQwIHtcblx0XHRcdHBhZGRpbmctbGVmdDogJHBhZGRpbmctZGVmYXVsdC8yO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMDtcblx0XHRcdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi02MCB7XG5cdFx0XHRwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy1kZWZhdWx0LzI7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR1bC5saXN0LXBsYWluIHtcblx0XHRcdG1hcmdpbi10b3A6IDA7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXG5cdFx0XHRsaSB7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dWwubGlzdC1mZWF0dXJlcyB7XG5cdFx0XHRsaSAuZmEge1xuXHRcdFx0XHRjb2xvcjogIzJhOWIzOTtcblx0XHRcdFx0bWFyZ2luOiAwIDhweCAwIDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmZhLXN0YXIge2NvbG9yOiBnb2xkfVxuXG5cdFx0Lm5vLW1hcmdpbiB7bWFyZ2luOiAwICFpbXBvcnRhbnR9XG5cdFx0Lm5vLXBhZGRpbmcge3BhZGRpbmc6IDAgIWltcG9ydGFudH1cblx0XHQuY2VudGVyZWQge3RleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50fVxuXHR9XG5cblx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1maXJzdC1mb3JtIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tZmlyc3QtZm9ybS10ZXh0IHtcblx0XHRcdGZsZXg6IDE7XG5cdFx0XHRwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy1kZWZhdWx0O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0ZmxleDogbm9uZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWZpcnN0LWZvcm0tdmlkZW8ge1xuXHRcdFx0aWZyYW1lIHtcblx0XHRcdFx0Ym9yZGVyOiAkYm9yZGVyO1xuXHRcdFx0fVxuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvIHtcblx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLW1haW4sXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLWV4dHJhIHtcblx0XHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLWV4dHJhIHtcblxuXHRcdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTUwIHtcblxuXHRcdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24taGVyby1tYWluIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNGQUZBRkE7XG5cdFx0XHRib3JkZXItYm90dG9tOiAkYm9yZGVyO1xuXG5cdFx0XHQmLm5vLWJvcmRlciB7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDA7XG5cdFx0XHR9XG5cblx0XHRcdHAge1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoMy5jYWxsLXRvLWFjdGlvbiB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAtMTBweDtcblx0XHR9XG5cblx0XHRzcGFuLnByaWNlLTIwLW9mZiB7XG5cdFx0XHRjb2xvcjogIzZBQjI1NTtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLXNxdWFzaGVkIHtcblx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXG5cdFx0Jjpub3QoOmxhc3Qtb2YtdHlwZSkge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLXBvc3Qge1xuXG5cdFx0aDIge1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogLTEwcHg7XG5cdFx0fVxuXG5cdFx0aDMge1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMTVweDtcblx0XHR9XG5cblx0XHRwOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAzMHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi0yMCB7XG5cdFx0XHRwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuXHRcdFx0d2lkdGg6IGF1dG87XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdHdpZHRoOiAyNzBweDtcblx0XHRcdH1cblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdHdpZHRoOiAyMCU7XG5cdFx0XHRcdGltZyB7XG5cdFx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTgwIHtcblx0XHRcdHBhZGRpbmctbGVmdDogMjBweDtcblx0XHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4IC0gMjcwcHgpO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0d2lkdGg6IDgwJTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLXBvc3QtbGluayB7XG5cdFx0XHRwYWRkaW5nOiAxMHB4ICRwYWRkaW5nLWRlZmF1bHQvMjtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNERjc3Mzk7XG5cdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdG1hcmdpbi10b3A6IDE1cHg7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cblx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjQjg1QTFCO1xuXHRcdFx0fVxuXG5cdFx0XHQuZmEge1xuXHRcdFx0XHRjb2xvcjogI0VEQkE5RTtcblx0XHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDhweDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLXRhYmxlIHtcblxuXHRcdHRhYmxlIHtcblx0XHRcdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG5cblx0XHRcdHRyIHtcblx0XHRcdFx0dGQge1xuXHRcdFx0XHRcdGJvcmRlci1ib3R0b206ICRib3JkZXI7XG5cdFx0XHRcdFx0Ym9yZGVyLXJpZ2h0OiAkYm9yZGVyO1xuXHRcdFx0XHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblxuXHRcdFx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0XHRcdGJvcmRlci1yaWdodDogMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmOmxhc3QtY2hpbGQgdGQge1xuXHRcdFx0XHRcdGJvcmRlci1ib3R0b206IG5vbmU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cCB7XG5cdFx0XHRcdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cdFx0XHRcdGJhY2tncm91bmQtc2l6ZTogMTVweCBhdXRvO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDZweDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXG5cdFx0XHRcdCYuZmVhdHVyZXMtZnVsbCB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdFx0XHRcdGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvYWJvdXQvaWNvbi1mdWxsLnN2Zyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ji5mZWF0dXJlcy1ub25lIHtcblx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9hYm91dC9pY29uLW5vbmUuc3ZnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQmLmZlYXR1cmVzLXBhcnRpYWwge1xuXHRcdFx0XHRcdHBhZGRpbmctbGVmdDogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtM3B4IDA7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1zaXplOiAyM3B4IGF1dG87XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9hYm91dC9pY29uLXBhcnRpYWwuc3ZnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24taGVyby1tYWluIHtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRoMyB7XG5cdFx0XHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQgJHBhZGRpbmctZGVmYXVsdCAkcGFkZGluZy1kZWZhdWx0ICRwYWRkaW5nLWRlZmF1bHQqMjtcblx0XHRcdH1cblx0XHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi0zMzpmaXJzdC1jaGlsZCBoMyB7XG5cdFx0XHRcdHBhZGRpbmc6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtYWRtaW4tYWRkb25zIHtcblx0XHRwYWRkaW5nOiAwICRwYWRkaW5nLWRlZmF1bHQ7XG5cblx0XHQuYWRkb24tY29udGFpbmVyIHtcblx0XHRcdHBhZGRpbmc6IDAgMTBweDtcblx0XHR9XG5cblx0XHQuYWRkb24taXRlbSB7XG5cblx0XHRcdC5kZXRhaWxzIHtcblx0XHRcdFx0cGFkZGluZzogMjBweDtcblx0XHRcdH1cblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0cGFkZGluZzogMTBweDtcblxuXHRcdFx0XHQmW3NyYyo9XCItbWlcIl0ge1xuXHRcdFx0XHRcdHBhZGRpbmc6IDEzcHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LmFjdGlvbi1idXR0b24gLmJ1dHRvbiB7XG5cdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiAyNnB4O1xuXHRcdFx0XHRoZWlnaHQ6IDI4cHg7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0cGFkZGluZzogMCAxMHB4IDFweDtcblx0XHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdFx0XHQtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2NjY2NjYztcblx0XHRcdFx0YmFja2dyb3VuZDogI2Y3ZjdmNztcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAxcHggMCAjY2NjY2NjO1xuXHRcdFx0XHRmb250LXdlaWdodDogbm9ybWFsO1xuXG5cdFx0XHRcdCY6aG92ZXIsICY6Zm9jdXMgIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuXHRcdFx0XHRcdGJvcmRlci1jb2xvcjogIzk5OTtcblx0XHRcdFx0XHRjb2xvcjogIzIzMjgyZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuYnV0dG9uLXByaW1hcnkge1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICMwMDg1YmE7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjMDA3M2FhICMwMDY3OTkgIzAwNjc5OTtcblx0XHRcdFx0XHRib3gtc2hhZG93OiAwIDFweCAwICMwMDY3OTk7XG5cdFx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdFx0dGV4dC1zaGFkb3c6IDAgLTFweCAxcHggIzAwNjc5OSwgMXB4IDAgMXB4ICMwMDY3OTksIDAgMXB4IDFweCAjMDA2Nzk5LCAtMXB4IDAgMXB4ICMwMDY3OTk7XG5cblx0XHRcdFx0XHQmOmhvdmVyLCAmOmZvY3VzIHtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQ6ICMwMDhlYzI7XG5cdFx0XHRcdFx0XHRib3JkZXItY29sb3I6ICMwMDY3OTk7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQuZmEtc3Bpbm5lciB7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmJ1dHRvbi1zZWNvbmRhcnkge1xuXHRcdFx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0XHRcdGJvcmRlci1jb2xvcjogI2NjY2NjYztcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZjdmN2Y3O1xuXHRcdFx0XHRcdGJveC1zaGFkb3c6IDAgMXB4IDAgI2NjY2NjYztcblxuXHRcdFx0XHRcdCY6aG92ZXIsICY6Zm9jdXMgIHtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQ6ICNmYWZhZmE7XG5cdFx0XHRcdFx0XHRib3JkZXItY29sb3I6ICM5OTk7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzIzMjgyZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmRpc2FibGVkIHtcblx0XHRcdFx0XHRjdXJzb3I6IGRlZmF1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsIi8vIFNldHRpbmdzIC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy1zZXR0aW5nc1xuLy8gVG9vbHMgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLXRvb2xzXG4ud3Bmb3Jtcy1hZG1pbi1zZXR0aW5ncyB7XG5cblx0Kixcblx0Kjo6YmVmb3JlLFxuXHQqOjphZnRlciB7XG5cdFx0LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cblx0Ly8gU2V0dGluZyByb3dzLCBlZyBmaWVsZCByb3cuXG5cdC53cGZvcm1zLXNldHRpbmctcm93IHtcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U0ZTRlNDtcblx0XHRwYWRkaW5nOiAzMHB4IDA7XG5cdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjM7XG5cblx0XHQmOmZpcnN0LW9mLXR5cGUge1xuXHRcdFx0cGFkZGluZy10b3A6IDEwcHggIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjx0YWJsZXRcIikge1xuXHRcdFx0cGFkZGluZzogMjBweCAwO1xuXHRcdH1cblxuXHRcdC8vIFNlY3Rpb24gaGVhZGluZy5cblx0XHQmLnNlY3Rpb24taGVhZGluZyB7XG5cdFx0XHRwYWRkaW5nOiAyMHB4IDA7XG5cblx0XHRcdCYubm8tZGVzYyB7XG5cdFx0XHRcdGg0IHtcblx0XHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1maWVsZCB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0bWF4LXdpZHRoOiAxMDAwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVG9vbHMgZnVsbCB3aWR0aCBmaWVsZHMuXG5cdFx0Ji50b29scyB7XG5cblx0XHRcdHAsXG5cdFx0XHRwOmZpcnN0LW9mLXR5cGV7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDE2cHggMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDaGVja2JveCBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctY2hlY2tib3gge1xuXG5cdFx0XHRpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG5cdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRtYXJnaW46IDFweCAwIDAgMDtcblx0XHRcdH1cblxuXHRcdFx0LmRlc2Mge1xuXHRcdFx0XHRtYXJnaW46IDAgMCAwIDMwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTGljZW5zZSBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctbGljZW5zZSB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctbGFiZWwge1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogOHB4O1xuXHRcdFx0fVxuXG5cdFx0XHRwLnR5cGUge1xuXHRcdFx0XHRtYXJnaW4tdG9wOiAxMnB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFRleHQvbnVtYmVyIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy10ZXh0LFxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1udW1iZXIge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWxhYmVsIHtcblx0XHRcdFx0cGFkZGluZy10b3A6IDhweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZWxlY3Qgc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LXNlbGVjdCB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctbGFiZWwge1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogOHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJhZGlvIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1yYWRpbyB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXG5cdFx0XHRcdGlucHV0W3R5cGU9cmFkaW9dIHtcblx0XHRcdFx0XHRtYXJnaW46IC0zcHggMTBweCAwIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsYWJlbCB7XG5cdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAzMHB4O1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0Ly8gRW1haWwgVGVtcGxhdGUgc2V0dGluZyBmaWVsZC5cblx0XHQmI3dwZm9ybXMtc2V0dGluZy1yb3ctZW1haWwtdGVtcGxhdGUge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblxuXHRcdFx0XHRsYWJlbDpiZWZvcmUge1xuXHRcdFx0XHRcdGNvbnRlbnQ6IFwiIFwiO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdHdpZHRoOiAxNTVweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDE4MHB4O1xuXHRcdFx0XHRcdG1hcmdpbjogMCAwIDEwcHggMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5vcHRpb24tZGVmYXVsdDpiZWZvcmUge1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvc2V0dGluZ3MtZW1haWwtaHRtbC5wbmcpIGNlbnRlciBjZW50ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQub3B0aW9uLW5vbmU6YmVmb3JlIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiB1cmwoLi4vaW1hZ2VzL3NldHRpbmdzLWVtYWlsLXBsYWludGV4dC5wbmcpIGNlbnRlciBjZW50ZXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSYWRpbyBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctaW1hZ2Uge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblxuXHRcdFx0XHRpbWcge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdG1hcmdpbjogMCAwIDIwcHggMDtcblx0XHRcdFx0XHRtYXgtd2lkdGg6IDQwMHB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29sb3IgcGlja2VyIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1jb2xvciB7XG5cblx0XHRcdC53cGZvcm1zLWNvbG9yLXBpY2tlciB7XG5cdFx0XHRcdHBhZGRpbmctbGVmdDogNDBweDtcblx0XHRcdH1cblxuXHRcdFx0Lm1pbmljb2xvcnMtaW5wdXQtc3dhdGNoIHtcblx0XHRcdFx0dG9wOiA3cHg7XG5cdFx0XHRcdGxlZnQ6IDdweDtcblx0XHRcdFx0aGVpZ2h0OiAyMXB4O1xuXHRcdFx0XHR3aWR0aDogMjFweDtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogMnB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEdlbmVyYWwgZWxlbWVudHMuXG5cdFx0aDQge1xuXHRcdFx0Zm9udC1zaXplOiAyMHB4O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHRcdG1hcmdpbjogMCAwIDZweCAwO1xuXHRcdH1cblxuXHRcdGgzIHtcblx0XHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRtYXJnaW46IDEycHggMCAwO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEuMztcblxuXHRcdFx0JjpmaXJzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luOiA4cHggMCAwO1xuXHRcdFx0fVxuXG5cdFx0XHQmLmRlc2Mge1xuXHRcdFx0XHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdFx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0fVxuXG5cdFx0XHQmLmRpc2NvdW50LW5vdGUge1xuXHRcdFx0XHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdFx0XHRcdGNvbG9yOiAjNjY2O1xuXG5cdFx0XHRcdHN0cm9uZyB7XG5cdFx0XHRcdFx0Y29sb3I6IGdyZWVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRm9ybSBlbGVtZW50cy5cblx0XHRpbnB1dFt0eXBlPXRleHRdLFxuXHRcdGlucHV0W3R5cGU9bnVtYmVyXSxcblx0XHRpbnB1dFt0eXBlPXBhc3N3b3JkXSB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGRlc2t0b3BcIikge1xuXHRcdFx0XHR3aWR0aDogMzAwcHg7XG5cdFx0XHR9XG5cblx0XHRcdCY6Zm9jdXMge1xuXHRcdFx0XHRib3JkZXItY29sb3I6ICNiYmI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aW5wdXRbdHlwZT1udW1iZXJdIHtcblx0XHRcdHdpZHRoOiAxMDBweDtcblx0XHR9XG5cblx0XHR0ZXh0YXJlYSB7XG5cblx0XHR9XG5cblx0XHRidXR0b24ge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiAxMHB4O1xuXHRcdH1cblxuXHRcdC5jaG9pY2VzanMtc2VsZWN0LXdyYXAge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRtYXgtd2lkdGg6IDQwMHB4O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxkZXNrdG9wXCIpIHtcblx0XHRcdFx0d2lkdGg6IDMwMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5wcm9ncmVzcy1iYXIge1xuXHRcdFx0YmFja2dyb3VuZDogI2ZmZjtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICRvcmFuZ2U7XG5cdFx0XHRoZWlnaHQ6IDMwcHg7XG5cdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHggMDtcblxuXHRcdFx0Ji5jb21wbGV0ZSB7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICRncmVlbjtcblxuXHRcdFx0XHQuYmFyIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkZ3JlZW47XG5cblx0XHRcdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IG5vbmU7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQuYmFyIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICRvcmFuZ2U7XG5cdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZS1pbi1vdXQ7XG5cdFx0XHRcdC1tb3otdHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlLWluLW91dDtcblx0XHRcdFx0LW8tdHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlLWluLW91dDtcblx0XHRcdFx0dHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlLWluLW91dDtcblxuXHRcdFx0XHRALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3Mge1xuXHRcdFx0XHRcdHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNjBweCAwOyB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRALW1vei1rZXlmcmFtZXMgcHJvZ3Jlc3Mge1xuXHRcdFx0XHQgIHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNjBweCAwOyB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRAa2V5ZnJhbWVzIHByb2dyZXNzIHtcblx0XHRcdFx0ICB0byB7IGJhY2tncm91bmQtcG9zaXRpb246IDYwcHggMDsgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjphZnRlciB7XG5cdFx0XHRcdFx0Y29udGVudDogJyc7XG5cdFx0XHRcdFx0ZGlzcGxheTpibG9jaztcblx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0dG9wOiAwO1xuXHRcdFx0XHRcdGxlZnQ6IDA7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uOiBwcm9ncmVzcyAxcyBsaW5lYXIgaW5maW5pdGU7XG5cdFx0XHRcdFx0LW1vei1hbmltYXRpb246IHByb2dyZXNzIDFzIGxpbmVhciBpbmZpbml0ZTtcblx0XHRcdFx0XHRhbmltYXRpb246IHByb2dyZXNzIDFzIGxpbmVhciBpbmZpbml0ZTtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1zaXplOiA2MHB4IDYwcHg7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuXHRcdFx0XHRcdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSb3cgbGFiZWwgKGxlZnQpLlxuXHQud3Bmb3Jtcy1zZXR0aW5nLWxhYmVsIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRmbG9hdDogbGVmdDtcblx0XHR3aWR0aDogMjAwcHg7XG5cdFx0cGFkZGluZzogMDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPHRhYmxldFwiKSB7XG5cdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0cGFkZGluZy1ib3R0b206IDE1cHg7XG5cdFx0fVxuXG5cdFx0bGFiZWwge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJvdyBmaWVsZCAocmlnaHQpLlxuXHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRtYXJnaW46IDAgMCAwIDIwMHB4O1xuXHRcdG1heC13aWR0aDogODAwcHg7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjx0YWJsZXRcIikge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblx0fVxuXG5cdHAuc3VibWl0IHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMjVweCAwO1xuXHR9XG5cblx0Ly8gR2VuZXJpYyBpbmZvL2NvZGUgaW5mb3JtYXRpb24uXG5cdC5pbmZvLWFyZWEsXG5cdC5wcmUtZXJyb3Ige1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdG1heC13aWR0aDogMTAwMHB4O1xuXHRcdGhlaWdodDogNDUwcHg7XG5cdFx0Zm9udC1mYW1pbHk6IE1lbmxvLE1vbmFjbyxtb25vc3BhY2U7XG5cdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdHdoaXRlLXNwYWNlOiBwcmU7XG5cdFx0b3ZlcmZsb3c6IGF1dG87XG5cdFx0cGFkZGluZzogMjBweDtcblx0fVxuXG5cdC5wcmUtZXJyb3Ige1xuXHRcdGhlaWdodDogYXV0bztcblx0XHRtYXgtaGVpZ2h0OiAyNTBweDtcblx0XHRtYXJnaW4tYm90dG9tOiAyMHB4O1xuXHR9XG5cblx0Ly8gQ2hlY2tib3ggbXVsdGktc2VsZWN0IGNvbHVtbnMuXG5cdC5jaGVja2JveC1tdWx0aXNlbGVjdC1jb2x1bW5zIHtcblx0XHRtYXgtd2lkdGg6IDYwMHB4O1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdCY6YWZ0ZXIge1xuXHRcdFx0Y29udGVudDogXCIuXCI7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdGhlaWdodDogMDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAwO1xuXHRcdFx0Zm9udC1zaXplOiAwO1xuXHRcdFx0Y2xlYXI6IGJvdGg7XG5cdFx0XHRtaW4taGVpZ2h0OiAwO1xuXHRcdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHRcdH1cblxuXHRcdCY6YmVmb3JlIHtcblx0XHRcdGNvbnRlbnQ6IFwiXFxmMGVjXCI7XG5cdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDIwcHgvMSBGb250QXdlc29tZTtcblx0XHRcdHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuXHRcdFx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cdFx0XHQtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAxMzBweDtcblx0XHRcdGxlZnQ6IDUwJTtcblx0XHRcdG1hcmdpbjogMCAwIDAgLTEwcHg7XG5cdFx0fVxuXG5cdFx0LmhlYWRlciB7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMCAwIDVweCAwO1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdH1cblxuXHRcdC5maXJzdC1jb2x1bW4sXG5cdFx0LnNlY29uZC1jb2x1bW4ge1xuXHRcdFx0d2lkdGg6IDQ1JTtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdH1cblxuXHRcdC5maXJzdC1jb2x1bW4ge1xuXG5cdFx0fVxuXG5cdFx0LnNlY29uZC1jb2x1bW4ge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHR1bCB7XG5cdFx0XHRcdGxpIHtcblx0XHRcdFx0XHRwYWRkaW5nOiAxMHB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dWwge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRoZWlnaHQ6IDI1MHB4O1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdG92ZXJmbG93LXk6IGF1dG87XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4ICNlZWUgc29saWQ7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXG5cdFx0XHRcdGxhYmVsIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRwYWRkaW5nOiAxMHB4IDEwcHggMTBweCAzMnB4O1xuXHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRvcmFuZ2U7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0XHRjb250ZW50OiBcIlxcZjBjOFwiO1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNkZGQ7XG5cdFx0XHRcdFx0XHRmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNnB4LzEgRm9udEF3ZXNvbWU7XG5cdFx0XHRcdFx0XHR0ZXh0LXJlbmRlcmluZzogYXV0bztcblx0XHRcdFx0XHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdFx0XHRcdFx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRcdHRvcDogMTJweDtcblx0XHRcdFx0XHRcdGxlZnQ6IDEwcHg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ji5jaGVja2VkIHtcblx0XHRcdFx0XHRcdG9wYWNpdHk6IDAuNjtcblxuXHRcdFx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBcIlxcZjE0YVwiO1xuXHRcdFx0XHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlucHV0IHtcblx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmFsbCB7XG5cdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdG1hcmdpbjogMTBweCAwIDA7XG5cdFx0fVxuXHR9XG5cblx0Ly8gT3RoZXIgSW1wb3J0ZXJzLiAoVG9vbHMpXG5cdCN3cGZvcm1zLWltcG9ydGVyLWFuYWx5emUge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cblx0XHQucHJvY2Vzcy1jb3VudCxcblx0XHRwIHtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHR9XG5cblx0XHQudXBncmFkZSB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXG5cdFx0XHRoNSB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0bWFyZ2luOiAzMHB4IDAgMjBweCAwO1xuXHRcdFx0fVxuXG5cdFx0XHRociB7XG5cdFx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNGU0ZTQ7XG5cdFx0XHRcdG1hcmdpbjogNDBweCAwO1xuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1idG4ge1xuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0XHR9XG5cblx0XHRcdHVsIHtcblx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcblx0XHRcdFx0XHRtYXJnaW4tbGVmdDogMTRweDtcblxuXHRcdFx0XHRcdCYuZm9ybSB7XG5cdFx0XHRcdFx0XHRsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cdFx0XHRcdFx0XHRtYXJnaW4tbGVmdDogMDtcblx0XHRcdFx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtaW1wb3J0ZXItcHJvY2VzcyB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblxuXHRcdC5wcm9jZXNzLWNvdW50LFxuXHRcdC5wcm9jZXNzLWNvbXBsZXRlZCB7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0fVxuXG5cdFx0LnByb2Nlc3MtY29tcGxldGVkIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LnN0YXR1cyB7XG5cdFx0XHRtYXJnaW46IDIwcHggMCAzMHB4O1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRtYXgtaGVpZ2h0OiA4MDBweDtcblx0XHRcdG92ZXJmbG93LXk6IHNjcm9sbDtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cblx0XHRcdC5pdGVtLXdyYXAge1xuXG5cdFx0XHR9XG5cblx0XHRcdC5pdGVtIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHAge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0XHRtYXJnaW46IDEycHggMCAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dWwge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0XHRtYXJnaW46IDEycHggMCAwIDE2cHg7XG5cblx0XHRcdFx0XHRsaSB7XG5cdFx0XHRcdFx0XHRsaXN0LXN0eWxlOiBkaXNjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5zdGF0dXMtaWNvbiB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblxuXHRcdFx0XHRcdCYuZmEtaW5mby1jaXJjbGUge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICMwMGEwZDJcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLmZhLWNoZWNrIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNDZiNDUwXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ji5mYS1leGNsYW1hdGlvbi10cmlhbmdsZSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmYjkwMFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuZmEtdGltZXMsXG5cdFx0XHRcdFx0Ji5mYS1leGNsYW1hdGlvbi1jaXJjbGUge1xuXHRcdFx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQubmFtZSB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LmFjdGlvbnMge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdFx0XHRmbG9hdDogcmlnaHQ7XG5cblx0XHRcdFx0XHQuc2VwIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZGRkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIExpdGUgdXBncmFkZS5cblx0LnNldHRpbmdzLWxpdGUtY3Rhe1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2RhZGFkYTtcblx0XHRwYWRkaW5nOiAyNXB4IDIwcHg7XG5cdFx0bWFyZ2luOiAxMHB4IDAgMCAwO1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdC5kaXNtaXNzIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogMTBweDtcblx0XHRcdHJpZ2h0OiAxMHB4O1xuXHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0fVxuXG5cdFx0aDUge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweDtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0fVxuXG5cdFx0aDYge1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHg7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRjb2xvcjogIzU1NTtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHg7XG5cblx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRhIHtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cblx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0Y29sb3I6ICRkYXJrb3JhbmdlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dWwge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRmbG9hdDogbGVmdDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0fVxuXG5cdFx0XHRsaSB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0cGFkZGluZzogMCAwIDJweCAxNnB4O1xuXHRcdFx0XHRjb2xvcjogIzU1NTtcblx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdGNvbnRlbnQ6ICcrJztcblx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0dG9wOiAtMXB4O1xuXHRcdFx0XHRcdGxlZnQ6IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQubGlzdCB7XG5cdFx0XHRtYXJnaW46IDAgMCAxNnB4IDA7XG5cdFx0XHRvdmVyZmxvdzogYXV0bztcblx0XHRcdG1heC13aWR0aDogOTAwcHg7XG5cdFx0fVxuXG5cdFx0LmdyZWVuIHtcblx0XHRcdGNvbG9yOiAjMjE4OTAwO1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHR9XG5cblx0XHQuZmEtc3RhciB7XG5cdFx0XHRjb2xvcjogI2ZmOTgyZDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEludGVncmF0aW9ucyB0YWIgY29udGVudC5cbi8vIExlZ2FjeSBDU1MgYW5kIHNob3VsZCBiZSBjbGVhbmVkIHVwIHdoZW4gdGltZSBwZXJtaXRzLlxuI3dwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXJzIHtcblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlciB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0cGFkZGluZzogMzBweCAwO1xuXG5cdFx0Ji5mb2N1cy1vdXQge1xuXHRcdFx0b3BhY2l0eTogMC40O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWhlYWRlciB7XG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdG1heC13aWR0aDogMTAwMHB4O1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItbG9nbyB7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0LmZhIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogNTAlO1xuXHRcdFx0bWFyZ2luOiAtOXB4IDAgMCAwO1xuXHRcdFx0bGVmdDogMTBweDtcblx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdH1cblxuXHRcdGltZyB7XG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdG1heC13aWR0aDogOTBweDtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0bWFyZ2luOiAwIDAgMCA0MHB4O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWluZm8ge1xuXHRcdG1hcmdpbjogMCAwIDAgMTYwcHg7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmc6IDIwcHggMCAwO1xuXG5cdFx0aDMge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTBweCAwO1xuXHRcdFx0Zm9udC1zaXplOiAyMHB4O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHR9XG5cblx0XHRwIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHR9XG5cblx0XHQuY29ubmVjdGVkLWluZGljYXRvciB7XG5cdFx0XHRjb2xvcjogIzgzYzExZjtcblx0XHRcdHdpZHRoOiAxMzVweDtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICM4M2MxMWY7XG5cdFx0XHRib3JkZXItcmFkaXVzOiA0cHg7XG5cdFx0XHRwYWRkaW5nOiA4cHggMTRweDtcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogMjhweDtcblx0XHRcdHJpZ2h0OiAwO1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHR9XG5cdH1cblxuXHQuY29ubmVjdGVkIC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWluZm8gLmNvbm5lY3RlZC1pbmRpY2F0b3Ige1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMge1xuXHRcdG1hcmdpbjogMCAwIDAgMTYwcHg7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0XHRtYXgtd2lkdGg6IDg0MHB4O1xuXHR9XG5cblx0LmZvY3VzLWluIC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzLWxpc3QgdWwge1xuXHRcdHBhZGRpbmc6IDA7XG5cdFx0bWFyZ2luOiAwO1xuXG5cdFx0bGkge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiAxMHB4IDA7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cblx0XHRcdCY6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0fVxuXG5cdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDE2cHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c3Bhbi5sYWJlbCB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0fVxuXG5cdFx0c3Bhbi5kYXRlIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogMzUlO1xuXHRcdH1cblxuXHRcdHNwYW4ucmVtb3ZlIHtcblx0XHRcdGZsb2F0OiByaWdodDtcblx0XHRcdHdpZHRoOiAxNSU7XG5cdFx0XHR0ZXh0LWFsaWduOiByaWdodFxuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzLWNvbm5lY3Qge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0cGFkZGluZzogMjBweDtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkbGlnaHRCbHVlO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICRibHVlO1xuXG5cdFx0aW5wdXRbdHlwZT10ZXh0XSB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0cGFkZGluZzogN3B4IDEycHg7XG5cdFx0XHRtYXJnaW46IDVweCAwO1xuXHRcdFx0d2lkdGg6IDQwMHB4O1xuXHRcdFx0bWluLWhlaWdodDogMzVweDtcblxuXHRcdFx0Jjpmb2N1cyB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogI2JiYjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuZm9jdXMtaW4gLndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtY29ubmVjdCAge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtY29ubmVjdCAuZmEge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cy1jb25uZWN0IHAsXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzIHAge1xuXHRcdG1hcmdpbjogMCAwIDE1cHggMDtcblx0XHRmb250LXNpemU6IDE0cHg7XG5cdH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUdBQTs7aUNBRWlDO0FBcUJqQyxBQUFBLFFBQVEsQ0FBYztFQUNwQixRQUFRLEVBQUUsUUFBUTtFQUNsQixhQUFhLEVBakJLLElBQUk7RUFrQnRCLFNBQVMsRUFyQlksSUFBSTtDQWdDMUI7O0FBZEQsQUFJRSxRQUpNLEFBSUwsTUFBTSxDQUFDO0VBQUUsT0FBTyxFQUFFLElBQUk7Q0FBSTs7QUFKN0IsQUFLRSxRQUxNLEFBS0wsV0FBVyxDQUFDO0VBQUUsYUFBYSxFQUFFLENBQUM7Q0FBSTs7QUFMckMsQUFPQyxRQVBPLEFBTUwsWUFBWSxDQUNkLGVBQWUsRUFQaEIsUUFBUSxBQU1MLFlBQVksQ0FDRyxlQUFlLENBQTJCO0VBQ3pELGdCQUFnQixFQW5CUyxPQUFPO0VBb0JoQyxNQUFNLEVBQUUsV0FBVztFQUNuQixXQUFXLEVBQUUsSUFBSTtDQUNsQjs7QUFYRixBQVlDLFFBWk8sQUFNTCxZQUFZLENBTWQsY0FBYyxDQUFjO0VBQUUsTUFBTSxFQUFFLFdBQVc7Q0FBSTs7QUFJdEQsQUFBQSxRQUFRLENBQUEsQUFBQSxTQUFDLEVBQVcsWUFBWSxBQUF2QixFQUFzQztFQUM3QyxNQUFNLEVBQUUsT0FBTztDQXlEaEI7O0FBMURELEFBR0UsUUFITSxDQUFBLEFBQUEsU0FBQyxFQUFXLFlBQVksQUFBdkIsRUFHUCxlQUFlLENBQWM7RUFBRSxjQUFjLEVBQUUsS0FBSztDQUFJOztBQUgxRCxBQUlFLFFBSk0sQ0FBQSxBQUFBLFNBQUMsRUFBVyxZQUFZLEFBQXZCLEVBSVAsZUFBZSxDQUFjO0VBQzlCLE9BQU8sRUFBRSxLQUFLO0VBQ2QsS0FBSyxFQUFFLGVBQWU7RUFDdEIsT0FBTyxFQUFF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QyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFB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 */
2412
  color: #666;
2413
  }
2414
 
2415
+ #wpforms-entries-list .wpforms-dash-widget-chart-block {
2416
+ padding: 12px 12px 0 8px;
2417
+ background-color: #ffffff;
2418
+ border: 1px solid #e5e5e5;
2419
+ margin-top: 20px;
2420
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
2421
+ }
2422
+
2423
+ #wpforms-entries-list .wpforms-dash-widget-chart-block .wpforms-error-no-data-chart {
2424
+ border: none;
2425
+ }
2426
+
2427
+ #wpforms-entries-list #wpforms-dash-widget-chart-title {
2428
+ margin-left: -12px;
2429
+ font-size: 18px;
2430
+ }
2431
+
2432
+ #wpforms-entries-list .wpforms-dash-widget-block:first-child {
2433
+ margin-top: 0;
2434
+ }
2435
+
2436
+ #wpforms-entries-list .wpforms-dash-widget-reset-chart {
2437
+ color: #d83638;
2438
+ opacity: 1;
2439
+ vertical-align: text-bottom;
2440
+ margin: 0 0 -1px 0;
2441
+ }
2442
+
2443
+ #wpforms-entries-list .wpforms-dash-widget-reset-chart:hover {
2444
+ color: #ad2b2c;
2445
+ }
2446
+
2447
+ #wpforms-entries-list .wpforms-dash-widget-reset-chart .dashicons {
2448
+ font-size: 20px;
2449
+ height: 20px;
2450
+ width: 20px;
2451
+ }
2452
+
2453
+ #wpforms-entries-list #wpforms-dash-widget-timespan {
2454
+ margin: 5px -12px 0 0;
2455
+ }
2456
+
2457
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-block {
2458
+ overflow: visible;
2459
+ }
2460
+
2461
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table {
2462
+ border: 1px solid #e5e5e5;
2463
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
2464
+ }
2465
+
2466
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-forms-list-columns td {
2467
+ padding: 12px 20px;
2468
+ border-bottom: 1px solid #e1e1e1;
2469
+ }
2470
+
2471
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tbody {
2472
+ border-top: 0;
2473
+ }
2474
+
2475
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tr {
2476
+ border-bottom: 0;
2477
+ }
2478
+
2479
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:first-child {
2480
+ border-top: 0;
2481
+ }
2482
+
2483
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:first-child td {
2484
+ border-top: 0;
2485
+ }
2486
+
2487
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:nth-child(even) td {
2488
+ background-color: #f9f9f9;
2489
+ }
2490
+
2491
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table td {
2492
+ text-align: left;
2493
+ padding: 20px 20px;
2494
+ font-size: 14px;
2495
+ border: none;
2496
+ color: #555;
2497
+ background-color: #fff;
2498
+ }
2499
+
2500
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tr > td:nth-child(2) {
2501
+ width: 180px;
2502
+ }
2503
+
2504
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tr > td:nth-child(3) {
2505
+ width: 60px;
2506
+ text-align: center;
2507
+ }
2508
+
2509
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tr > td:nth-child(4) {
2510
+ width: 90px;
2511
+ text-align: center;
2512
+ }
2513
+
2514
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table tr > td:nth-child(5) {
2515
+ width: 60px;
2516
+ text-align: center;
2517
+ padding-top: 0;
2518
+ padding-bottom: 0;
2519
+ }
2520
+
2521
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active td:first-child {
2522
+ border-left: 3px solid #0073aa;
2523
+ padding-left: 17px;
2524
+ }
2525
+
2526
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active .wpforms-dash-widget-single-chart-btn {
2527
+ display: none !important;
2528
+ }
2529
+
2530
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active .wpforms-dash-widget-reset-chart {
2531
+ display: inline-block !important;
2532
+ border: none;
2533
+ background: none;
2534
+ margin: 0;
2535
+ }
2536
+
2537
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-forms-list-columns {
2538
+ background-color: #ffffff;
2539
+ border-bottom: 1px solid #ddd;
2540
+ }
2541
+
2542
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table a {
2543
+ text-decoration: none;
2544
+ }
2545
+
2546
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table a:hover {
2547
+ text-decoration: none;
2548
+ }
2549
+
2550
+ #wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-title a {
2551
+ font-weight: 600;
2552
+ }
2553
+
2554
  @media screen and (max-width: 782px) {
2555
  .wpforms-admin-content {
2556
  padding-left: 10px;
3687
  border-radius: 2px;
3688
  }
3689
 
3690
+ .wpforms-admin-settings .wpforms-setting-row h5 {
3691
+ font-size: 16px;
3692
+ font-weight: 600;
3693
+ margin: 0 0 20px 0;
3694
+ }
3695
+
3696
  .wpforms-admin-settings .wpforms-setting-row h4 {
3697
  font-size: 20px;
3698
  font-weight: 700;
3730
  }
3731
 
3732
  .wpforms-admin-settings .wpforms-setting-row input[type=text],
3733
+ .wpforms-admin-settings .wpforms-setting-row input[type=password],
3734
  .wpforms-admin-settings .wpforms-setting-row input[type=number],
3735
+ .wpforms-admin-settings .wpforms-setting-row select {
3736
  background-color: #fff;
3737
  border: 1px solid #ddd;
3738
  border-radius: 3px;
3748
 
3749
  @media (max-width: 959px) {
3750
  .wpforms-admin-settings .wpforms-setting-row input[type=text],
3751
+ .wpforms-admin-settings .wpforms-setting-row input[type=password],
3752
  .wpforms-admin-settings .wpforms-setting-row input[type=number],
3753
+ .wpforms-admin-settings .wpforms-setting-row select {
3754
  width: 300px;
3755
  }
3756
  }
3757
 
3758
  .wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,
3759
+ .wpforms-admin-settings .wpforms-setting-row input[type=password]:focus,
3760
  .wpforms-admin-settings .wpforms-setting-row input[type=number]:focus,
3761
+ .wpforms-admin-settings .wpforms-setting-row select:focus {
3762
  border-color: #bbb;
3763
  }
3764
 
4065
  font-weight: 700;
4066
  }
4067
 
4068
+ .wpforms-admin-settings #wpforms-tools-entries-export h5 {
4069
+ clear: both;
4070
+ margin: 20px 0 10px 0;
4071
+ }
4072
+
4073
+ .wpforms-admin-settings #wpforms-tools-entries-export label {
4074
+ clear: both;
4075
+ float: left;
4076
+ margin: 3px 0 3px 0;
4077
+ }
4078
+
4079
+ .wpforms-admin-settings #wpforms-tools-entries-export .choicesjs-select-wrap {
4080
+ position: relative;
4081
+ }
4082
+
4083
+ .wpforms-admin-settings #wpforms-tools-entries-export .choicesjs-select-wrap .choices {
4084
+ margin-bottom: 0;
4085
+ }
4086
+
4087
+ .wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-spinner {
4088
+ position: absolute;
4089
+ top: 6px;
4090
+ right: -30px;
4091
+ }
4092
+
4093
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-date-selector {
4094
+ width: 200px;
4095
+ cursor: pointer;
4096
+ }
4097
+
4098
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-field {
4099
+ width: 200px;
4100
+ }
4101
+
4102
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-comparison {
4103
+ width: 140px;
4104
+ }
4105
+
4106
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-term {
4107
+ width: 300px;
4108
+ }
4109
+
4110
+ .wpforms-admin-settings #wpforms-tools-entries-export section {
4111
+ margin-top: 20px;
4112
+ }
4113
+
4114
+ .wpforms-admin-settings #wpforms-tools-entries-export iframe {
4115
+ width: 0;
4116
+ height: 0;
4117
+ visibility: hidden;
4118
+ }
4119
+
4120
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-text {
4121
+ opacity: 1;
4122
+ transition: all .5s;
4123
+ }
4124
+
4125
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner {
4126
+ position: absolute;
4127
+ left: 50%;
4128
+ top: 50%;
4129
+ transform: translate(-50%, -50%);
4130
+ opacity: 0;
4131
+ transition: all .5s;
4132
+ }
4133
+
4134
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on {
4135
+ cursor: default;
4136
+ opacity: 0.75;
4137
+ position: relative;
4138
+ }
4139
+
4140
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on .wpforms-btn-text {
4141
+ opacity: 0 !important;
4142
+ transition: all .5s;
4143
+ }
4144
+
4145
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on .wpforms-btn-spinner {
4146
+ opacity: 1 !important;
4147
+ transition: all .5s;
4148
+ }
4149
+
4150
+ .wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on:hover {
4151
+ background-color: #e27730;
4152
+ border-color: #e27730;
4153
+ }
4154
+
4155
+ .wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-process-msg,
4156
+ .wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-msg {
4157
+ background: #fff;
4158
+ border-left: 4px solid #22A0D0;
4159
+ line-height: 1.5em;
4160
+ margin: 20px 0 0 0;
4161
+ padding: 10px;
4162
+ }
4163
+
4164
+ .wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-process-msg.wpforms-error,
4165
+ .wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-msg.wpforms-error {
4166
+ border-color: #dc3232;
4167
+ }
4168
+
4169
  .wpforms-admin-settings #wpforms-importer-process {
4170
  display: none;
4171
  }
4230
  }
4231
 
4232
  .wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-times, .wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-circle {
4233
+ color: #dc3232;
4234
  }
4235
 
4236
  .wpforms-admin-settings #wpforms-importer-process .status .item .name {
4492
  font-size: 14px;
4493
  }
4494
 
4495
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzL2Nzcy9hZG1pbi5jc3MiLCJzb3VyY2VzIjpbImFzc2V0cy9zY3NzL2FkbWluLnNjc3MiLCJhc3NldHMvc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCJhc3NldHMvc2Nzcy92ZW5kb3IvcGFydGlhbHMvX2luY2x1ZGUtbWVkaWEuc2NzcyIsImFzc2V0cy9zY3NzL3ZlbmRvci9wYXJ0aWFscy9fY2hvaWNlcy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX2J1dHRvbnMuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19jb25maXJtLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fYWxlcnRzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZmxhZ3Muc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19oZWFkZXIuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL190aXRsZS10YWJzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZ2VuZXJhbC5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtZm9ybXMtb3ZlcnZpZXcuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWVudHJpZXMtc2luZ2xlLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1lbnRyaWVzLWxpc3Quc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXdlbGNvbWUuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWFkZG9ucy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtYWJvdXQuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXNldHRpbmdzLXRvb2xzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1zZXR0aW5ncy1pbnRlZ3JhdGlvbnMuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXUEZvcm1zIGFkbWluIHN0eWxlcy5cbi8vIFRoZXNlIHN0eWxlcyBhcmUgbG9hZGVkIG9uIGFsbCBXUEZvcm1zIHJlbGF0ZWQgYWRtaW4gcGFnZXMuXG5cbkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICd2ZW5kb3IvcGFydGlhbHMvaW5jbHVkZS1tZWRpYSc7XG5AaW1wb3J0ICd2ZW5kb3IvcGFydGlhbHMvY2hvaWNlcyc7XG5cbiRicmVha3BvaW50czogKFxuXHQneHMtcGhvbmUnOiAzMjBweCxcblx0J3Bob25lJzogNjAwcHgsXG5cdCdpcGFkJzogNzY4cHgsXG5cdCd0YWJsZXQnOiA3ODJweCxcblx0J2Rlc2t0b3AnOiA5NjBweCxcbik7XG5cbkBpbXBvcnQgJ2FkbWluL2J1dHRvbnMnO1xuQGltcG9ydCAnYWRtaW4vY29uZmlybSc7XG5AaW1wb3J0ICdhZG1pbi9hbGVydHMnO1xuQGltcG9ydCAnYWRtaW4vZmxhZ3MnO1xuQGltcG9ydCAnYWRtaW4vaGVhZGVyJztcbkBpbXBvcnQgJ2FkbWluL3RpdGxlLXRhYnMnO1xuQGltcG9ydCAnYWRtaW4vZ2VuZXJhbCc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLWZvcm1zLW92ZXJ2aWV3JztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtZW50cmllcy1zaW5nbGUnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1lbnRyaWVzLWxpc3QnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS13ZWxjb21lJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWRkb25zJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWJvdXQnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1zZXR0aW5ncy10b29scyc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLXNldHRpbmdzLWludGVncmF0aW9ucyc7XG4iLCIkb3JhbmdlOiAjZTI3NzMwO1xuJGRhcmtvcmFuZ2U6ICNiODVhMWI7XG4kZ3JlZW46ICMyYTliMzk7XG4kYmx1ZTogIzBlNmNhZDtcbiRsaWdodEJsdWU6ICNlYmYzZmI7XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG5cbi8vICAgICBfICAgICAgICAgICAgXyAgICAgICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gX1xuLy8gICAgKF8pICAgICAgICAgIHwgfCAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IChfKVxuLy8gICAgIF8gXyBfXyAgIF9fX3wgfF8gICBfICBfX3wgfCBfX18gICBfIF9fIF9fXyAgIF9fXyAgX198IHxfICBfXyBfXG4vLyAgICB8IHwgJ18gXFwgLyBfX3wgfCB8IHwgfC8gX2AgfC8gXyBcXCB8ICdfIGAgXyBcXCAvIF8gXFwvIF9gIHwgfC8gX2AgfFxuLy8gICAgfCB8IHwgfCB8IChfX3wgfCB8X3wgfCAoX3wgfCAgX18vIHwgfCB8IHwgfCB8ICBfXy8gKF98IHwgfCAoX3wgfFxuLy8gICAgfF98X3wgfF98XFxfX198X3xcXF9fLF98XFxfXyxffFxcX19ffCB8X3wgfF98IHxffFxcX19ffFxcX18sX3xffFxcX18sX3xcbi8vXG4vLyAgICAgIFNpbXBsZSwgZWxlZ2FudCBhbmQgbWFpbnRhaW5hYmxlIG1lZGlhIHF1ZXJpZXMgaW4gU2Fzc1xuLy8gICAgICAgICAgICAgICAgICAgICAgICB2MS40Ljlcbi8vXG4vLyAgICAgICAgICAgICAgICBodHRwOi8vaW5jbHVkZS1tZWRpYS5jb21cbi8vXG4vLyAgICAgICAgIEF1dGhvcnM6IEVkdWFyZG8gQm91Y2FzIChAZWR1YXJkb2JvdWNhcylcbi8vICAgICAgICAgICAgICAgICAgSHVnbyBHaXJhdWRlbCAoQGh1Z29naXJhdWRlbClcbi8vXG4vLyAgICAgIFRoaXMgcHJvamVjdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlXG5cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgbGlicmFyeSBwdWJsaWMgY29uZmlndXJhdGlvblxuLy8vIEBhdXRob3IgRWR1YXJkbyBCb3VjYXNcbi8vLyBAYWNjZXNzIHB1YmxpY1xuLy8vL1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIGdsb2JhbCBicmVha3BvaW50c1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgYnJlYWtwb2ludCB3aXRoIHRoZSBsYWJlbCBgcGhvbmVgXG4vLy8gICRicmVha3BvaW50czogKCdwaG9uZSc6IDMyMHB4KTtcbi8vL1xuJGJyZWFrcG9pbnRzOiAoXG4gICdwaG9uZSc6IDMyMHB4LFxuICAndGFibGV0JzogNzY4cHgsXG4gICdkZXNrdG9wJzogMTAyNHB4XG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIHN0YXRpYyBleHByZXNzaW9ucyBvciBtZWRpYSB0eXBlc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgbWVkaWEgdHlwZSAoc2NyZWVuKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJzogJ3NjcmVlbicpO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzdGF0aWMgZXhwcmVzc2lvbiB3aXRoIGxvZ2ljYWwgZGlzanVuY3Rpb24gKE9SIG9wZXJhdG9yKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6IChcbi8vLyAgICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSdcbi8vLyAgKTtcbi8vL1xuJG1lZGlhLWV4cHJlc3Npb25zOiAoXG4gICdzY3JlZW4nOiAnc2NyZWVuJyxcbiAgJ3ByaW50JzogJ3ByaW50JyxcbiAgJ2hhbmRoZWxkJzogJ2hhbmRoZWxkJyxcbiAgJ2xhbmRzY2FwZSc6ICcob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuICAncG9ydHJhaXQnOiAnKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCknLFxuICAncmV0aW5hM3gnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMyksIChtaW4tcmVzb2x1dGlvbjogMzUwZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAzZHBweCknXG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIERlZmluZXMgYSBudW1iZXIgdG8gYmUgYWRkZWQgb3Igc3VidHJhY3RlZCBmcm9tIGVhY2ggdW5pdCB3aGVuIGRlY2xhcmluZyBicmVha3BvaW50cyB3aXRoIGV4Y2x1c2l2ZSBpbnRlcnZhbHNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcGl4ZWxzIGlzIGRlZmluZWQgYXMgYDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4xMjhweCcpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMTI5cHgpIHt9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gSW50ZXJ2YWwgZm9yIGVtcyBpcyBkZWZpbmVkIGFzIGAwLjAxYCBieSBkZWZhdWx0XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+MjBlbScpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMjAuMDFlbSkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcmVtcyBpcyBkZWZpbmVkIGFzIGAwLjFgIGJ5IGRlZmF1bHQsIHRvIGJlIHVzZWQgd2l0aCBgZm9udC1zaXplOiA2Mi41JTtgXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+Mi4wcmVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyLjFyZW0pIHt9XG4vLy9cbiR1bml0LWludGVydmFsczogKFxuICAncHgnOiAxLFxuICAnZW0nOiAwLjAxLFxuICAncmVtJzogMC4xLFxuICAnJzogMFxuKSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gRGVmaW5lcyB3aGV0aGVyIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgYXZhaWxhYmxlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIHNlcGFyYXRlIHN0eWxlc2hlZXRzXG4vLy8gZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBtZWRpYSBxdWVyaWVzLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIERpc2FibGVzIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4kaW0tbWVkaWEtc3VwcG9ydDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBicmVha3BvaW50IHRvIGVtdWxhdGUgd2hlbiBzdXBwb3J0IGZvciBtZWRpYSBxdWVyaWVzIGlzIGRpc2FibGVkLiBNZWRpYSBxdWVyaWVzIHRoYXQgc3RhcnQgYXQgb3Jcbi8vLyBpbnRlcmNlcHQgdGhlIGJyZWFrcG9pbnQgd2lsbCBiZSBkaXNwbGF5ZWQsIGFueSBvdGhlcnMgd2lsbCBiZSBpZ25vcmVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGRvZXMgbm90IGludGVyY2VwdCB0aGUgZGVza3RvcCBicmVha3BvaW50XG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICd0YWJsZXQnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj1kZXNrdG9wJykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBObyBvdXRwdXQgKi9cbi8vL1xuJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJyAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBtZWRpYSBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiBhbiBleHByZXNzaW9uIGZvciBpdCB0byBiZSB1c2VkIHdoZW4gbWVkaWEgcXVlcmllc1xuLy8vIGFyZSBub3Qgc3VwcG9ydGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnQgYW5kIGNvbnRhaW5zIG9ubHkgYWNjZXB0ZWQgbWVkaWEgZXhwcmVzc2lvbnNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdzY3JlZW4nKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgTk9UIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBidXQgY29udGFpbnMgYSBtZWRpYSBleHByZXNzaW9uIHRoYXQgaXMgbm90IGFjY2VwdGVkXG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJztcbi8vLyAgJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbicpO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnLCAncmV0aW5hMngnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJywgJ3BvcnRyYWl0JywgJ2xhbmRzY2FwZScpICFkZWZhdWx0O1xuXG4vLy8vXG4vLy8gQ3Jvc3MtZW5naW5lIGxvZ2dpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gTG9nIGEgbWVzc2FnZSBlaXRoZXIgd2l0aCBgQGVycm9yYCBpZiBzdXBwb3J0ZWRcbi8vLyBlbHNlIHdpdGggYEB3YXJuYCwgdXNpbmcgYGZlYXR1cmUtZXhpc3RzKCdhdC1lcnJvcicpYFxuLy8vIHRvIGRldGVjdCBzdXBwb3J0LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQGZ1bmN0aW9uIGltLWxvZygkbWVzc2FnZSkge1xuICBAaWYgZmVhdHVyZS1leGlzdHMoJ2F0LWVycm9yJykge1xuXHRAZXJyb3IgJG1lc3NhZ2U7XG4gIH0gQGVsc2Uge1xuXHRAd2FybiAkbWVzc2FnZTtcblx0JF86IG5vb3AoKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1lc3NhZ2U7XG59XG5cblxuLy8vXG4vLy8gV3JhcHBlciBtaXhpbiBmb3IgdGhlIGxvZyBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGEgbW9yZSBmcmllbmRseVxuLy8vIEFQSSB0aGFuIGBAaWYgaW0tbG9nKCcuLicpIHt9YCBvciBgJF86IGltLWxvZygnLi4nKWAuIEJhc2ljYWxseSwgdXNlIHRoZSBmdW5jdGlvblxuLy8vIHdpdGhpbiBmdW5jdGlvbnMgYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluIGEgZnVuY3Rpb25cbi8vLyBhbmQgdXNlIHRoZSBtaXhpbiBldmVyeXdoZXJlIGVsc2UgYmVjYXVzZSBpdCdzIG11Y2ggbW9yZSBlbGVnYW50LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQG1peGluIGxvZygkbWVzc2FnZSkge1xuICBAaWYgaW0tbG9nKCRtZXNzYWdlKSB7fVxufVxuXG5cbi8vL1xuLy8vIEZ1bmN0aW9uIHdpdGggbm8gYEByZXR1cm5gIGNhbGxlZCBuZXh0IHRvIGBAd2FybmAgaW4gU2FzcyAzLjNcbi8vLyB0byB0cmlnZ2VyIGEgY29tcGlsaW5nIGVycm9yIGFuZCBzdG9wIHRoZSBwcm9jZXNzLlxuLy8vXG5AZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8vL1xuLy8vIERldGVybWluZXMgd2hldGhlciBhIGxpc3Qgb2YgY29uZGl0aW9ucyBpcyBpbnRlcmNlcHRlZCBieSB0aGUgc3RhdGljIGJyZWFrcG9pbnQuXG4vLy9cbi8vLyBAcGFyYW0ge0FyZ2xpc3R9ICAgJGNvbmRpdGlvbnMgIC0gTWVkaWEgcXVlcnkgY29uZGl0aW9uc1xuLy8vXG4vLy8gQHJldHVybiB7Qm9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIGludGVyY2VwdGVkIGJ5IHRoZSBzdGF0aWMgYnJlYWtwb2ludFxuLy8vXG5AZnVuY3Rpb24gaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikge1xuICAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRpbS1uby1tZWRpYS1icmVha3BvaW50KTtcblxuICBAaWYgbm90ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlIHtcblx0QGlmIGltLWxvZygnYCN7JGltLW5vLW1lZGlhLWJyZWFrcG9pbnR9YCBpcyBub3QgYSB2YWxpZCBicmVha3BvaW50LicpIHt9XG4gIH1cblxuICBAZWFjaCAkY29uZGl0aW9uIGluICRjb25kaXRpb25zIHtcblx0QGlmIG5vdCBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRjb25kaXRpb24pIHtcblx0ICAkb3BlcmF0b3I6IGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRjb25kaXRpb24pO1xuXHQgICRwcmVmaXg6IGdldC1leHByZXNzaW9uLXByZWZpeCgkb3BlcmF0b3IpO1xuXHQgICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGNvbmRpdGlvbiwgJG9wZXJhdG9yKTtcblxuXHQgIEBpZiAoJHByZWZpeCA9PSAnbWF4JyBhbmQgJHZhbHVlIDw9ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSBvclxuXHRcdCAgKCRwcmVmaXggPT0gJ21pbicgYW5kICR2YWx1ZSA+ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSB7XG5cdFx0QHJldHVybiBmYWxzZTtcblx0ICB9XG5cdH0gQGVsc2UgaWYgbm90IGluZGV4KCRpbS1uby1tZWRpYS1leHByZXNzaW9ucywgJGNvbmRpdGlvbikge1xuXHQgIEByZXR1cm4gZmFsc2U7XG5cdH1cbiAgfVxuXG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuLy8vL1xuLy8vIFBhcnNpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gR2V0IG9wZXJhdG9yIG9mIGFuIGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCBvcGVyYXRvciBmcm9tXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gQW55IG9mIGA+PWAsIGA+YCwgYDw9YCwgYDxgLCBg4omlYCwgYOKJpGBcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKSB7XG4gIEBlYWNoICRvcGVyYXRvciBpbiAoJz49JywgJz4nLCAnPD0nLCAnPCcsICfiiaUnLCAn4omkJykge1xuXHRAaWYgc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcblx0ICBAcmV0dXJuICRvcGVyYXRvcjtcblx0fVxuICB9XG5cbiAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuICAvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgLy8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcbiAgLy8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuICAkXzogaW0tbG9nKCdObyBvcGVyYXRvciBmb3VuZCBpbiBgI3skZXhwcmVzc2lvbn1gLicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IGRpbWVuc2lvbiBmcm9tXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yIGZyb20gYCRleHByZXNzaW9uYFxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGB3aWR0aGAgb3IgYGhlaWdodGAgKG9yIHBvdGVudGlhbGx5IGFueXRoaW5nIGVsc2UpXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1kaW1lbnNpb24oJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAkb3BlcmF0b3ItaW5kZXg6IHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHBhcnNlZC1kaW1lbnNpb246IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgMCwgJG9wZXJhdG9yLWluZGV4IC0gMSk7XG4gICRkaW1lbnNpb246ICd3aWR0aCc7XG5cbiAgQGlmIHN0ci1sZW5ndGgoJHBhcnNlZC1kaW1lbnNpb24pID4gMCB7XG5cdCRkaW1lbnNpb246ICRwYXJzZWQtZGltZW5zaW9uO1xuICB9XG5cbiAgQHJldHVybiAkZGltZW5zaW9uO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gcHJlZml4IGJhc2VkIG9uIGFuIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3Jcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBgbWluYCBvciBgbWF4YFxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcikge1xuICBAcmV0dXJuIGlmKGluZGV4KCgnPCcsICc8PScsICfiiaQnKSwgJG9wZXJhdG9yKSwgJ21heCcsICdtaW4nKTtcbn1cblxuXG4vLy9cbi8vLyBHZXQgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IHZhbHVlIGZyb21cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3IgZnJvbSBgJGV4cHJlc3Npb25gXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gQSBudW1lcmljIHZhbHVlXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKSB7XG4gICRvcGVyYXRvci1pbmRleDogc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkdmFsdWU6IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yLWluZGV4ICsgc3RyLWxlbmd0aCgkb3BlcmF0b3IpKTtcblxuICBAaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCAkdmFsdWUpIHtcblx0JHZhbHVlOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJHZhbHVlKTtcbiAgfSBAZWxzZSB7XG5cdCR2YWx1ZTogdG8tbnVtYmVyKCR2YWx1ZSk7XG4gIH1cblxuICAkaW50ZXJ2YWw6IG1hcC1nZXQoJHVuaXQtaW50ZXJ2YWxzLCB1bml0KCR2YWx1ZSkpO1xuXG4gIEBpZiBub3QgJGludGVydmFsIHtcblx0Ly8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuXHQvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuXHQvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cblx0Ly8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcblx0Ly8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuXHQkXzogaW0tbG9nKCdVbmtub3duIHVuaXQgYCN7dW5pdCgkdmFsdWUpfWAuJyk7XG4gIH1cblxuICBAaWYgJG9wZXJhdG9yID09ICc+JyB7XG5cdCR2YWx1ZTogJHZhbHVlICsgJGludGVydmFsO1xuICB9IEBlbHNlIGlmICRvcGVyYXRvciA9PSAnPCcge1xuXHQkdmFsdWU6ICR2YWx1ZSAtICRpbnRlcnZhbDtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlO1xufVxuXG5cbi8vL1xuLy8vIFBhcnNlIGFuIGV4cHJlc3Npb24gdG8gcmV0dXJuIGEgdmFsaWQgbWVkaWEtcXVlcnkgZXhwcmVzc2lvblxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBwYXJzZVxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIFZhbGlkIG1lZGlhIHF1ZXJ5XG4vLy9cbkBmdW5jdGlvbiBwYXJzZS1leHByZXNzaW9uKCRleHByZXNzaW9uKSB7XG4gIC8vIElmIGl0IGlzIHBhcnQgb2YgJG1lZGlhLWV4cHJlc3Npb25zLCBpdCBoYXMgbm8gb3BlcmF0b3JcbiAgLy8gdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGdvIGFueSBmdXJ0aGVyLCBqdXN0IHJldHVybiB0aGUgdmFsdWVcbiAgQGlmIG1hcC1oYXMta2V5KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pIHtcblx0QHJldHVybiBtYXAtZ2V0KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pO1xuICB9XG5cbiAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkZXhwcmVzc2lvbik7XG4gICRkaW1lbnNpb246IGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG4gICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG5cbiAgQHJldHVybiAnKCN7JHByZWZpeH0tI3skZGltZW5zaW9ufTogI3skdmFsdWV9KSc7XG59XG5cbi8vL1xuLy8vIFNsaWNlIGAkbGlzdGAgYmV0d2VlbiBgJHN0YXJ0YCBhbmQgYCRlbmRgIGluZGV4ZXNcbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtMaXN0fSAkbGlzdCAtIExpc3QgdG8gc2xpY2Vcbi8vLyBAcGFyYW0ge051bWJlcn0gJHN0YXJ0IFsxXSAtIFN0YXJ0IGluZGV4XG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRlbmQgW2xlbmd0aCgkbGlzdCldIC0gRW5kIGluZGV4XG4vLy9cbi8vLyBAcmV0dXJuIHtMaXN0fSBTbGljZWQgbGlzdFxuLy8vXG5AZnVuY3Rpb24gc2xpY2UoJGxpc3QsICRzdGFydDogMSwgJGVuZDogbGVuZ3RoKCRsaXN0KSkge1xuICBAaWYgbGVuZ3RoKCRsaXN0KSA8IDEgb3IgJHN0YXJ0ID4gJGVuZCB7XG5cdEByZXR1cm4gKCk7XG4gIH1cblxuICAkcmVzdWx0OiAoKTtcblxuICBAZm9yICRpIGZyb20gJHN0YXJ0IHRocm91Z2ggJGVuZCB7XG5cdCRyZXN1bHQ6IGFwcGVuZCgkcmVzdWx0LCBudGgoJGxpc3QsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vLy9cbi8vLyBTdHJpbmcgdG8gbnVtYmVyIGNvbnZlcnRlclxuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vL1xuXG5cbi8vL1xuLy8vIENhc3RzIGEgc3RyaW5nIGludG8gYSBudW1iZXJcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBiZSBwYXJzZWRcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn1cbi8vL1xuQGZ1bmN0aW9uIHRvLW51bWJlcigkdmFsdWUpIHtcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG5cdEByZXR1cm4gJHZhbHVlO1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSAhPSAnc3RyaW5nJyB7XG5cdCRfOiBpbS1sb2coJ1ZhbHVlIGZvciBgdG8tbnVtYmVyYCBzaG91bGQgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gIH1cblxuICAkZmlyc3QtY2hhcmFjdGVyOiBzdHItc2xpY2UoJHZhbHVlLCAxLCAxKTtcbiAgJHJlc3VsdDogMDtcbiAgJGRpZ2l0czogMDtcbiAgJG1pbnVzOiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpO1xuICAkbnVtYmVyczogKCcwJzogMCwgJzEnOiAxLCAnMic6IDIsICczJzogMywgJzQnOiA0LCAnNSc6IDUsICc2JzogNiwgJzcnOiA3LCAnOCc6IDgsICc5JzogOSk7XG5cbiAgLy8gUmVtb3ZlICsvLSBzaWduIGlmIHByZXNlbnQgYXQgZmlyc3QgY2hhcmFjdGVyXG4gIEBpZiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnKycgb3IgJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpIHtcblx0JHZhbHVlOiBzdHItc2xpY2UoJHZhbHVlLCAyKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggc3RyLWxlbmd0aCgkdmFsdWUpIHtcblx0JGNoYXJhY3Rlcjogc3RyLXNsaWNlKCR2YWx1ZSwgJGksICRpKTtcblxuXHRAaWYgbm90IChpbmRleChtYXAta2V5cygkbnVtYmVycyksICRjaGFyYWN0ZXIpIG9yICRjaGFyYWN0ZXIgPT0gJy4nKSB7XG5cdCAgQHJldHVybiB0by1sZW5ndGgoaWYoJG1pbnVzLCAtJHJlc3VsdCwgJHJlc3VsdCksIHN0ci1zbGljZSgkdmFsdWUsICRpKSlcblx0fVxuXG5cdEBpZiAkY2hhcmFjdGVyID09ICcuJyB7XG5cdCAgJGRpZ2l0czogMTtcblx0fSBAZWxzZSBpZiAkZGlnaXRzID09IDAge1xuXHQgICRyZXN1bHQ6ICRyZXN1bHQgKiAxMCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpO1xuXHR9IEBlbHNlIHtcblx0ICAkZGlnaXRzOiAkZGlnaXRzICogMTA7XG5cdCAgJHJlc3VsdDogJHJlc3VsdCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpIC8gJGRpZ2l0cztcblx0fVxuICB9XG5cbiAgQHJldHVybiBpZigkbWludXMsIC0kcmVzdWx0LCAkcmVzdWx0KTtcbn1cblxuXG4vLy9cbi8vLyBBZGQgYCR1bml0YCB0byBgJHZhbHVlYFxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGFkZCB1bml0IHRvXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICR1bml0IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gYCR2YWx1ZWAgZXhwcmVzc2VkIGluIGAkdW5pdGBcbi8vL1xuQGZ1bmN0aW9uIHRvLWxlbmd0aCgkdmFsdWUsICR1bml0KSB7XG4gICR1bml0czogKCdweCc6IDFweCwgJ2NtJzogMWNtLCAnbW0nOiAxbW0sICclJzogMSUsICdjaCc6IDFjaCwgJ3BjJzogMXBjLCAnaW4nOiAxaW4sICdlbSc6IDFlbSwgJ3JlbSc6IDFyZW0sICdwdCc6IDFwdCwgJ2V4JzogMWV4LCAndncnOiAxdncsICd2aCc6IDF2aCwgJ3ZtaW4nOiAxdm1pbiwgJ3ZtYXgnOiAxdm1heCk7XG5cbiAgQGlmIG5vdCBpbmRleChtYXAta2V5cygkdW5pdHMpLCAkdW5pdCkge1xuXHQkXzogaW0tbG9nKCdJbnZhbGlkIHVuaXQgYCN7JHVuaXR9YC4nKTtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlICogbWFwLWdldCgkdW5pdHMsICR1bml0KTtcbn1cblxuLy8vXG4vLy8gVGhpcyBtaXhpbiBhaW1zIGF0IHJlZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24ganVzdCBmb3IgdGhlIHNjb3BlIG9mXG4vLy8gdGhlIGNhbGwuIEl0IGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgYSBjb21wb25lbnQgbmVlZGluZyBhbiBleHRlbmRlZFxuLy8vIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBjdXN0b20gYnJlYWtwb2ludHMgKHJlZmVycmVkIHRvIGFzIHR3ZWFrcG9pbnRzKVxuLy8vIGZvciBpbnN0YW5jZS5cbi8vL1xuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vha3BvaW50cyBbKCldIC0gTWFwIG9mIHR3ZWFrcG9pbnRzIHRvIGJlIG1lcmdlZCB3aXRoIGAkYnJlYWtwb2ludHNgXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucyBbKCldIC0gTWFwIG9mIHR3ZWFrZWQgbWVkaWEgZXhwcmVzc2lvbnMgdG8gYmUgbWVyZ2VkIHdpdGggYCRtZWRpYS1leHByZXNzaW9uYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCB0aGUgZ2xvYmFsIGJyZWFrcG9pbnRzIHdpdGggYSB0d2Vha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhLWNvbnRleHQoKCdjdXN0b20nOiA2NzhweCkpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgbWVkaWEgZXhwcmVzc2lvbnMgd2l0aCBhIGN1c3RvbSBvbmVcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgnYWxsJzogJ2FsbCcpKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBAaW5jbHVkZSBtZWRpYSgnYWxsJywgJz5waG9uZScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgYm90aCBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSwgKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJywgJzw9Y3VzdG9tJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG5AbWl4aW4gbWVkaWEtY29udGV4dCgkdHdlYWtwb2ludHM6ICgpLCAkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgpKSB7XG4gIC8vIFNhdmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGdsb2JhbC1icmVha3BvaW50czogJGJyZWFrcG9pbnRzO1xuICAkZ2xvYmFsLW1lZGlhLWV4cHJlc3Npb25zOiAkbWVkaWEtZXhwcmVzc2lvbnM7XG5cbiAgLy8gVXBkYXRlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogbWFwLW1lcmdlKCRicmVha3BvaW50cywgJHR3ZWFrcG9pbnRzKSAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6IG1hcC1tZXJnZSgkbWVkaWEtZXhwcmVzc2lvbnMsICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucykgIWdsb2JhbDtcblxuICBAY29udGVudDtcblxuICAvLyBSZXN0b3JlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogJGdsb2JhbC1icmVha3BvaW50cyAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6ICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnMgIWdsb2JhbDtcbn1cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgcHVibGljIGV4cG9zZWQgQVBJXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgYmFzZWQgb24gYSBsaXN0IG9mIGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHNpbmdsZSBzZXQgYnJlYWtwb2ludFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPnBob25lJykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCB0d28gc2V0IGJyZWFrcG9pbnRzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD10YWJsZXQnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49MzU4cHgnLCAnPDg1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBzZXQgYnJlYWtwb2ludHMgd2l0aCBjdXN0b20gdmFsdWVzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+ZGVza3RvcCcsICc8PTEzNTBweCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggYSBzdGF0aWMgZXhwcmVzc2lvblxuLy8vICBAaW5jbHVkZSBtZWRpYSgncmV0aW5hMngnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBNaXhpbmcgZXZlcnl0aGluZ1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNTBweCcsICc8dGFibGV0JywgJ3JldGluYTN4JykgeyB9XG4vLy9cbkBtaXhpbiBtZWRpYSgkY29uZGl0aW9ucy4uLikge1xuICBAaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID09IDApIG9yXG5cdCAgKG5vdCAkaW0tbWVkaWEtc3VwcG9ydCBhbmQgaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikpIHtcblx0QGNvbnRlbnQ7XG4gIH0gQGVsc2UgaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID4gMCkge1xuXHRAbWVkaWEgI3t1bnF1b3RlKHBhcnNlLWV4cHJlc3Npb24obnRoKCRjb25kaXRpb25zLCAxKSkpfSB7XG5cdCAgLy8gUmVjdXJzaXZlIGNhbGxcblx0ICBAaW5jbHVkZSBtZWRpYShzbGljZSgkY29uZGl0aW9ucywgMikuLi4pIHtcblx0XHRAY29udGVudDtcblx0ICB9XG5cdH1cbiAgfVxufVxuIiwiLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG49ICAgICAgICAgICAgQ2hvaWNlcyAgICAgICAgICAgID1cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4kY2hvaWNlcy1zZWxlY3RvcjogJ2Nob2ljZXMnICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLWxnOiAxNnB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLW1kOiAxNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZm9udC1zaXplLXNtOiAxMnB4ICFkZWZhdWx0O1xuJGNob2ljZXMtZ3V0dGVyaW5nOiAyNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1czogM3B4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtOiAzcHggIWRlZmF1bHQ7XG4kY2hvaWNlcy1iZy1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRjaG9pY2VzLWJnLWNvbG9yLWRpc2FibGVkOiAjRUFFQUVBICFkZWZhdWx0O1xuJGNob2ljZXMtYmctY29sb3ItZHJvcGRvd246ICNGRkZGRkYgIWRlZmF1bHQ7XG4kY2hvaWNlcy10ZXh0LWNvbG9yOiAjMzMzMzMzICFkZWZhdWx0O1xuJGNob2ljZXMta2V5bGluZS1jb2xvcjogI0RERERERCAhZGVmYXVsdDtcbiRjaG9pY2VzLXByaW1hcnktY29sb3I6ICRibHVlICFkZWZhdWx0O1xuJGNob2ljZXMtZGlzYWJsZWQtY29sb3I6ICNlYWVhZWEgIWRlZmF1bHQ7XG4kY2hvaWNlcy1oaWdobGlnaHQtY29sb3I6ICRjaG9pY2VzLXByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG4kY2hvaWNlcy1idXR0b24taWNvbi1wYXRoOiAnLi4vaW1hZ2VzJyAhZGVmYXVsdDtcbiRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb246IDhweCAhZGVmYXVsdDtcbiRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQ6IDhweCAhZGVmYXVsdDtcblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAkY2hvaWNlcy1ndXR0ZXJpbmc7XG4gIGZvbnQtc2l6ZTogJGNob2ljZXMtZm9udC1zaXplLWxnO1xuICAmOmZvY3VzIHsgb3V0bGluZTogbm9uZTsgfVxuICAmOmxhc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICYuaXMtZGlzYWJsZWQge1xuXHQuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lubmVyLCAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lucHV0IHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1iZy1jb2xvci1kaXNhYmxlZDtcblx0ICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXHQgIHVzZXItc2VsZWN0OiBub25lO1xuXHR9XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cbiAgfVxufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInNlbGVjdC1vbmVcIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8vIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIgeyBwYWRkaW5nLWJvdHRvbTogNy41cHg7IH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7IHBhZGRpbmctYm90dG9tOiAzLjBweDsgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lucHV0IHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG5cdHBhZGRpbmc6IDEwcHggIWltcG9ydGFudDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3IgIWltcG9ydGFudDtcblx0YmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcblx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJGNob2ljZXMtYnV0dG9uLWljb24tcGF0aCArICcvY3Jvc3MtaW52ZXJzZS5zdmcnKTtcblx0cGFkZGluZzogMDtcblx0YmFja2dyb3VuZC1zaXplOiA4cHg7XG5cdGhlaWdodDogMTAwJTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcblx0cmlnaHQ6IDA7XG5cdG1hcmdpbi10b3A6IC0xMHB4O1xuXHRtYXJnaW4tcmlnaHQ6IDI1cHg7XG5cdGhlaWdodDogMjBweDtcblx0d2lkdGg6IDIwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEwZW07XG5cdG9wYWNpdHk6IC41O1xuXHQmOmhvdmVyLCAmOmZvY3VzIHsgb3BhY2l0eTogMTsgfVxuXHQmOmZvY3VzIHsgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMnB4ICRjaG9pY2VzLWhpZ2hsaWdodC1jb2xvcjsgfVxuICB9XG4gICY6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRoZWlnaHQ6IDA7XG5cdHdpZHRoOiAwO1xuXHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRib3JkZXItY29sb3I6ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci13aWR0aDogNXB4O1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHJpZ2h0OiAxMS41cHg7XG5cdHRvcDogNTAlO1xuXHRtYXJnaW4tdG9wOiAtMi41cHg7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gICYuaXMtb3BlbjphZnRlciB7XG5cdGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudDtcblx0bWFyZ2luLXRvcDogLTcuNXB4O1xuICB9XG4gICZbZGlyPVwicnRsXCJdIHtcblx0JjphZnRlciB7XG5cdCAgbGVmdDogMTEuNXB4O1xuXHQgIHJpZ2h0OiBhdXRvO1xuXHR9XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fYnV0dG9uIHtcblx0ICByaWdodDogYXV0bztcblx0ICBsZWZ0OiAwO1xuXHQgIG1hcmdpbi1sZWZ0OiAyNXB4O1xuXHQgIG1hcmdpbi1yaWdodDogMDtcblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW11bHRpcGxlXCJde1xuXHQmOmFmdGVyIHtcblx0ICBjb250ZW50OiBcIlwiO1xuXHQgIGhlaWdodDogMDtcblx0ICB3aWR0aDogMDtcblx0ICBib3JkZXItc3R5bGU6IHNvbGlkO1xuXHQgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcblx0ICBib3JkZXItd2lkdGg6IDVweDtcblx0ICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cdCAgcmlnaHQ6IDExLjVweDtcblx0Ly8gICB0b3A6IDUwJTtcblx0IHRvcDogMThweDtcblx0ICBtYXJnaW4tdG9wOiAtMi41cHg7XG5cdCAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cdH1cblx0Ji5pcy1vcGVuOmFmdGVyIHtcblx0ICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQ7XG5cdCAgbWFyZ2luLXRvcDogLTcuNXB4O1xuXHR9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW11bHRpcGxlXCJdLCAuI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInRleHRcIl0gIHtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7IGN1cnNvcjogdGV4dDsgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2J1dHRvbiB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRtYXJnaW4tcmlnaHQ6IC0kY2hvaWNlcy1idXR0b24tb2Zmc2V0LzI7XG5cdG1hcmdpbi1ib3R0b206IDA7XG5cdG1hcmdpbi1sZWZ0OiAkY2hvaWNlcy1idXR0b24tb2Zmc2V0O1xuXHRwYWRkaW5nLWxlZnQ6ICRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQqMjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgMTAlKTtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKCRjaG9pY2VzLWJ1dHRvbi1pY29uLXBhdGggKyAnL2Nyb3NzLnN2ZycpO1xuXHRiYWNrZ3JvdW5kLXNpemU6ICRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb247XG5cdHdpZHRoOiAkY2hvaWNlcy1idXR0b24tZGltZW5zaW9uO1xuXHRsaW5lLWhlaWdodDogMTtcblx0b3BhY2l0eTogLjc1O1xuXHQmOmhvdmVyLCAmOmZvY3VzIHsgb3BhY2l0eTogMTsgfVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1iZy1jb2xvcjtcbiAgLy9wYWRkaW5nOiA3LjVweCA3LjVweCAzLjc1cHg7XG4gIHBhZGRpbmc6IDRweCA3LjVweCAxcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGZvbnQtc2l6ZTogJGNob2ljZXMtZm9udC1zaXplLW1kO1xuICBtaW4taGVpZ2h0OiAzNXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAuaXMtZm9jdXNlZCAmLCAuaXMtb3BlbiAmIHsgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMta2V5bGluZS1jb2xvciwgMTUlKTsgfVxuICAuaXMtb3BlbiAmIHsgYm9yZGVyLXJhZGl1czogJGNob2ljZXMtYm9yZGVyLXJhZGl1cyAkY2hvaWNlcy1ib3JkZXItcmFkaXVzIDAgMDsgfVxuICAuaXMtZmxpcHBlZC5pcy1vcGVuICYgeyBib3JkZXItcmFkaXVzOiAwIDAgJGNob2ljZXMtYm9yZGVyLXJhZGl1cyAkY2hvaWNlcy1ib3JkZXItcmFkaXVzOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3QtLXNpbmdsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogNHB4IDE2cHggNHB4IDRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIFtkaXI9XCJydGxcIl0gJiB7XG5cdHBhZGRpbmctcmlnaHQ6IDRweDtcblx0cGFkZGluZy1sZWZ0OiAxNnB4O1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IHdpZHRoOiAxMDAlOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tbXVsdGlwbGUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0Ym9yZGVyLXJhZGl1czogJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtO1xuXHRwYWRkaW5nOiAzcHggMTBweDtcblx0Zm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtc207XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdG1hcmdpbi1yaWdodDogNHB4O1xuXHRtYXJnaW4tdG9wOiAwcHg7XG5cdG1hcmdpbi1ib3R0b206IDNweDtcblx0YmFja2dyb3VuZC1jb2xvcjogJGNob2ljZXMtcHJpbWFyeS1jb2xvcjtcblx0Ym9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLXByaW1hcnktY29sb3IsIDUlKTtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcblx0JltkYXRhLWRlbGV0YWJsZV0geyBwYWRkaW5nLXJpZ2h0OiA1cHg7IH1cblx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0ICBtYXJnaW4tcmlnaHQ6IDA7XG5cdCAgbWFyZ2luLWxlZnQ6IDMuNzVweDtcblx0fVxuXHQmLmlzLWhpZ2hsaWdodGVkIHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgNSUpO1xuXHQgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkY2hvaWNlcy1wcmltYXJ5LWNvbG9yLCAxMCUpO1xuXHR9XG5cdC5pcy1kaXNhYmxlZCAmIHtcblx0ICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtZGlzYWJsZWQtY29sb3IsIDI1JSk7XG5cdCAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLWRpc2FibGVkLWNvbG9yLCAzNSUpO1xuXHR9XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1kcm9wZG93biB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjaG9pY2VzLWJnLWNvbG9yLWRyb3Bkb3duO1xuICBib3JkZXI6IDFweCBzb2xpZCAkY2hvaWNlcy1rZXlsaW5lLWNvbG9yO1xuICB0b3A6IDEwMCU7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY2hvaWNlcy1ib3JkZXItcmFkaXVzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICYuaXMtYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgLmlzLW9wZW4gJiB7IGJvcmRlci1jb2xvcjogZGFya2VuKCRjaG9pY2VzLWtleWxpbmUtY29sb3IsIDE1JSk7IH1cbiAgLmlzLWZsaXBwZWQgJiB7XG5cdHRvcDogYXV0bztcblx0Ym90dG9tOiAxMDAlO1xuXHRtYXJnaW4tdG9wOiAwO1xuXHRtYXJnaW4tYm90dG9tOiAtMXB4O1xuXHRib3JkZXItcmFkaXVzOiAuMjVyZW0gLjI1cmVtIDAgMDtcbiAgfVxuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3Qge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1heC1oZWlnaHQ6IDMwMHB4O1xuXHRvdmVyZmxvdzogYXV0bztcblx0LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXHR3aWxsLWNoYW5nZTogc2Nyb2xsLXBvc2l0aW9uO1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZzogMTBweDtcblx0Zm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtbWQ7XG5cdFtkaXI9XCJydGxcIl0gJiB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHtcblx0QG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG5cdCAgcGFkZGluZy1yaWdodDogMTAwcHg7XG5cdCAgJjphZnRlciB7XG5cdFx0Y29udGVudDogYXR0cihkYXRhLXNlbGVjdC10ZXh0KTtcblx0XHRmb250LXNpemU6ICRjaG9pY2VzLWZvbnQtc2l6ZS1zbTtcblx0XHRvcGFjaXR5OiAwO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRyaWdodDogMTBweDtcblx0XHR0b3A6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cdCAgfVxuXHQgIFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0dGV4dC1hbGlnbjogcmlnaHQ7XG5cdFx0cGFkZGluZy1sZWZ0OiAxMDBweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuXHRcdCY6YWZ0ZXIge1xuXHRcdCAgcmlnaHQ6IGF1dG87XG5cdFx0ICBsZWZ0OiAxMHB4O1xuXHRcdH1cblx0ICB9XG5cdH1cblx0Ji5pcy1oaWdobGlnaHRlZCB7XG5cdCAgYmFja2dyb3VuZC1jb2xvcjogbWl4KCMwMDAwMDAsICNGRkZGRkYsIDUlKTtcblx0ICAmOmFmdGVyIHsgb3BhY2l0eTogLjU7IH1cblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogZGVmYXVsdDsgfVxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHsgY3Vyc29yOiBwb2ludGVyOyB9XG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2l0ZW0tLWRpc2FibGVkIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIG9wYWNpdHk6IC41O1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2hlYWRpbmcge1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6ICRjaG9pY2VzLWZvbnQtc2l6ZS1zbTtcbiAgcGFkZGluZzogMTBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGxpZ2h0ZW4oJGNob2ljZXMta2V5bGluZS1jb2xvciwgMTAlKTtcbiAgY29sb3I6IGxpZ2h0ZW4oIzMzMywgMzAlKTtcbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuICB0ZXh0LWluZGVudDogLTk5OTlweDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgJjpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IG1peCgjMDAwMDAwLCAjRkZGRkZGLCAyLjUlKTtcbiAgZm9udC1zaXplOiAkY2hvaWNlcy1mb250LXNpemUtbWQ7XG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICBib3JkZXI6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgcGFkZGluZzogNHB4IDAgNHB4IDJweCAhaW1wb3J0YW50O1xuICAmOmZvY3VzIHsgb3V0bGluZTogMDsgfVxuICBbZGlyPVwicnRsXCJdICYge1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMDtcbiAgfVxufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX3BsYWNlaG9sZGVyIHsgb3BhY2l0eTogLjU7IH1cblxuLyo9PT09PSAgRW5kIG9mIENob2ljZXMgID09PT09PSovXG4iLCIvLyBCdXR0b24gc3R5bGVzLlxuLndwZm9ybXMtYWRtaW4tcGFnZSB7XG5cblx0LndwZm9ybXMtYnRuIHtcblx0XHRib3JkZXI6IDA7XG5cdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tYmxvY2sge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLW1kIHtcblx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiA4cHggMTJweDtcblx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLWxnIHtcblx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiAxNnB4IDI4cHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tb3JhbmdlIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkb3JhbmdlO1xuXHRcdGJvcmRlci1jb2xvcjogJG9yYW5nZTtcblx0XHRjb2xvcjogI2ZmZjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRib3JkZXItY29sb3I6ICRkYXJrb3JhbmdlO1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi1ncmV5IHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuXHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRjb2xvcjogIzY2NjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Q3ZDdkNztcblx0XHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRcdGNvbG9yOiAjNDQ0O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi1saWdodC1ncmV5IHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG5cdFx0Y29sb3I6ICM2NjY7XG5cblx0XHQmOmhvdmVyIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG5cdFx0XHRjb2xvcjogIzQ0NDtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tdHJhbnMtZ3JlZW4ge1xuXHRcdGJhY2tncm91bmQtY29sb3I6IG5vbmU7XG5cdFx0Y29sb3I6ICRncmVlbjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGdyZWVuO1xuXHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0fVxuXG5cdFx0LnVuZGVybGluZSB7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdCY6YWZ0ZXIge1xuXHRcdFx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAkZ3JlZW47XG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0Ym90dG9tOiAtNXB4O1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZGFzaGljb25zIHtcblx0XHRcdGhlaWdodDogMThweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEFsZXJ0IHN0eWxlcy5cbi8vIFN0eWxpbmcgdHdlYWtzIGZvciBqUXVlcnktY29uZmlybSBKUyBhbGVydCBsaWJyYXJ5LlxuYm9keSB7XG5cblx0ZGl2Lmpjb25maXJtIHtcblxuXHRcdCosXG5cdFx0Kjo6YmVmb3JlLFxuXHRcdCo6OmFmdGVyIHtcblx0XHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0fVxuXG5cdFx0ZGl2Lmpjb25maXJtLWJveC1jb250YWluZXIge1xuXG5cdFx0XHRkaXYuamNvbmZpcm0tYm94IHtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuXHRcdFx0XHRkaXYuamNvbmZpcm0tY2xvc2VJY29uIHtcblx0XHRcdFx0XHRjb2xvcjogcmdiYSgwLDAsMCwwLjQpO1xuXHRcdFx0XHRcdHRvcDogOHB4O1xuXHRcdFx0XHRcdHJpZ2h0OiA4cHg7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiByZ2JhKDAsMCwwLDAuODApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGRpdi5qY29uZmlybS1ib3gge1xuXG5cdFx0XHRkaXYuamNvbmZpcm0tdGl0bGUtYyB7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDI2cHggMCAhaW1wb3J0YW50O1xuXHRcdFx0XHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG5cblx0XHRcdFx0c3Bhbi5qY29uZmlybS1pY29uLWMge1xuXHRcdFx0XHRcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xuXHRcdFx0XHRcdGNvbG9yOiAjYzRjNGM0ICFpbXBvcnRhbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuLmpjb25maXJtLXRpdGxlIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNwYW4uamNvbmZpcm0taWNvbi1jICsgc3Bhbi5qY29uZmlybS10aXRsZSB7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogMjBweCAhaW1wb3J0YW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1jb250ZW50LXBhbmUge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAyNnB4O1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblxuXHRcdFx0XHQuamNvbmZpcm0tY29udGVudCB7XG5cdFx0XHRcdFx0b3ZlcmZsb3c6IGluaGVyaXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGl2Lmpjb25maXJtLWNvbnRlbnQge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0XHRsaW5lLWhlaWdodDogMS40O1xuXG5cdFx0XHRcdCYubGl0ZS11cGdyYWRlIHtcblx0XHRcdFx0XHRwIHtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwIHtcblx0XHRcdFx0XHRtYXJnaW46IDAgMCAxNnB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0XHRsaW5lLWhlaWdodDogMS41O1xuXG5cdFx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYubGFyZ2Uge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuc21hbGwge1xuXHRcdFx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5hbHJlYWR5LXB1cmNoYXNlZCB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuXHRcdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1idXR0b25zIHtcblxuXHRcdFx0XHQuYWxyZWFkeS1wdXJjaGFzZWQge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdFx0XHRjb2xvcjogI2FhYTtcblx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdFx0cGFkZGluZy10b3A6IDIwcHg7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5kaXNjb3VudC1ub3RlIHtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRtYXJnaW46IDMwcHggMCAwO1xuXG5cdFx0XHRcdHAge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmYWZmYWM7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIC0zMHB4O1xuXHRcdFx0XHRcdHBhZGRpbmc6IDI0cHggNjBweCAyMHB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdFx0XHRjb2xvcjogIzRkNGQ0ZDtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6ICdcXGYwNTgnO1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdFx0Zm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMjZweDtcblx0XHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDVweCA2cHg7XG5cdFx0XHRcdFx0XHR0ZXh0LXJlbmRlcmluZzogYXV0bztcblx0XHRcdFx0XHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdFx0XHRcdFx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRcdHRvcDogLTIwcHg7O1xuXHRcdFx0XHRcdFx0cmlnaHQ6IDUwJTtcblx0XHRcdFx0XHRcdG1hcmdpbi1yaWdodDogLTE4cHg7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzNhYmMwMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuIHtcblx0XHRcdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0XHRcdGNvbG9yOiAjM2FiYzAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YSB7XG5cdFx0XHRcdFx0Y29sb3I6ICNhYWE7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogMTJweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpbnB1dFt0eXBlPXRleHRdIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdHdpZHRoOiA5OSU7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkNmQ2ZDY7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdG1hcmdpbjogMjBweCBhdXRvIDAgYXV0bztcblx0XHRcdH1cblxuXHRcdFx0I3dwZm9ybXMtZW1iZWQtc2hvcnRjb2RlIHtcblx0XHRcdFx0bWFyZ2luOiAyMHB4IDA7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggNXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQjd3Bmb3Jtcy1lbWJlZC1zaG9ydGNvZGU6ZGlzYWJsZWQge1xuXHRcdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdH1cblxuXHRcdFx0YnV0dG9uLmJ0bi1jb25maXJtIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJG9yYW5nZTtcblx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdG91dGxpbmU6IG5vbmU7XG5cblx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAkZGFya29yYW5nZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRidXR0b24uYnRuLWRlZmF1bHQge1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblxuXHRcdFx0LmVycm9yIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0Y29sb3I6IHJlZDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZXJyb3Ige1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZWJjY2QxICFpbXBvcnRhbnQ7XG5cdFx0XHR9XG5cblx0XHRcdC5qY29uZmlybS10aXRsZS1jIC5qY29uZmlybS1pY29uLWMge1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcblx0XHRcdFx0dHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHQtbXMtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdFx0XHRcdHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHRmb250LXNpemU6IDQ1cHggIWltcG9ydGFudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuY2hvaWNlcyB7XG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcblxuXHRcdGlucHV0W3R5cGU9dGV4dF0uY2hvaWNlc19faW5wdXQge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBBbGVydCBzdHlsZXMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQud3Bmb3Jtcy1hbGVydCB7XG5cdFx0cGFkZGluZzogMTZweDtcblx0XHRtYXJnaW4tYm90dG9tOiAxOHB4O1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXG5cdFx0aDQge1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdGNvbG9yOiBpbmhlcml0O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTVweCAwO1xuXG5cdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtbm9tYXJnaW4ge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1zbWFsbCB7XG5cdFx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LXN1Y2Nlc3Mge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcblx0XHRcdGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcblx0XHRcdGNvbG9yOiAjM2M3NjNkO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1pbmZvIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG5cdFx0XHRib3JkZXItY29sb3I6ICNiY2U4ZjE7XG5cdFx0XHRjb2xvcjogIzMxNzA4Zjtcblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtd2FybmluZyB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZmFlYmNjO1xuXHRcdFx0Y29sb3I6ICM4YTZkM2I7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LWRhbmdlciB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZWJjY2QxO1xuXHRcdFx0Y29sb3I6ICNhOTQ0NDI7XG5cdFx0fVxuXHR9XG59IiwiLy8gRmxhZyBpY29ucy5cbi53cGZvcm1zLWZsYWcge1xuXHR3aWR0aDogMTZweDtcblx0aGVpZ2h0OiAxNnB4O1xuXHRiYWNrZ3JvdW5kOnVybCguLi9pbWFnZXMvZmxhZ3MucG5nKSBuby1yZXBlYXQ7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWQge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWcge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1haSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYW8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXIge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXMge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXQge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXUge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXcge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYXoge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iYiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iaCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYmkge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ibSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYm4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnMge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJ0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYncge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnkge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnoge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Ege2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Qge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2Yge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2cge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNoIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2sge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY24ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jciB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN2IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWN6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRrIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1kbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZG8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWR6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWVnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1laCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZXIge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lcyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ldCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1maSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1maiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1mciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Ege2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdiIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1naCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2kge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ20ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ24ge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Age2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Ege2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Ige2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Qge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWd3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1neSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaGsge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWhuIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ociB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaHQge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWh1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1pZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWllIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWltIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWluIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlxIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1pdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctamUge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWptIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1qbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctanAge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2gge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2kge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWttIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3Age2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3kge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1reiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGIge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGsge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sdSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbHYge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWMge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1kIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1oIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWsge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1tIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbW4ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tcSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXIge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1zIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXUge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW12IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW14IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXkge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1teiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5hIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmMge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1uZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5nIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmkge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmwge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5vIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ucCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbnIge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW56IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1vbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGEge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGcge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1waCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBrIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGwge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXB0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcHkge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXFhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1yZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcm8ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXJzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcnUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ydyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Ige2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNkIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2sge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc24ge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc3Yge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zeSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGMge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10ZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGgge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRsIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10bSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdG4ge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10ciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHQge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10diB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXR3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11YSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXVnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdXMge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11eSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXV6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12YyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdmUge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12aSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdm4ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZ1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctd3Mge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy15ZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXphIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctem0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy16dyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0yMjRweH1cbiIsIi8vIEhlYWRlciBzdHlsZXMuXG5cbiN3cGZvcm1zLWhlYWRlci10ZW1wIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRtYXJnaW46IDA7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAtMXB4O1xuXHRsZWZ0OiAyMHB4O1xuXHRyaWdodDogMjBweDtcblx0ei1pbmRleDogOTk7XG59XG5cbiN3cGZvcm1zLWhlYWRlciB7XG5cdGJvcmRlci10b3A6IDNweCBzb2xpZCAkb3JhbmdlO1xuXHRwYWRkaW5nOiAyMnB4IDIwcHg7XG5cblx0aW1nIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRtYXJnaW46IDA7XG5cdFx0bWF4LXdpZHRoOiAyMzVweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuXHRcdFx0bWF4LXdpZHRoOiAyMDBweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIFBhZ2UgdGl0bGUgYW5kIHRhYnMgc3R5bGVzLlxuLndwZm9ybXMtYWRtaW4td3JhcCB7XG5cblx0Ly8gVGl0bGUgYXJlYS5cblx0LnBhZ2UtdGl0bGUge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdHBhZGRpbmc6IDE1cHggMjBweDtcblxuXHRcdC5hZGQtbmV3LWgyIHtcblx0XHRcdG1hcmdpbi1sZWZ0OiAyOHB4O1xuXHRcdH1cblx0fVxufVxuXG4vLyBUYWIgbmF2aWdhdGlvbi5cbi53cGZvcm1zLWFkbWluLXRhYnMge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdHBhZGRpbmc6IDAgMjBweDtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0b3ZlcmZsb3c6IGF1dG87XG5cdGZvbnQtc2l6ZTogMTRweDtcblxuXHRsaSB7XG5cdFx0bWFyZ2luOiAwIDMwcHggMCAwO1xuXHRcdHBhZGRpbmc6IDA7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cblx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXG5cdFx0YSB7XG5cdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0cGFkZGluZzogMjBweCAwIDE4cHggMDtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZmZmO1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblxuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogIzk5OTtcblx0XHRcdH1cblxuXHRcdFx0Ji5hY3RpdmUge1xuXHRcdFx0XHRib3JkZXItY29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBHZW5lcmFsIGFkbWluIHN0eWxpbmcuXG5cbi8vIENvcmUgYWRtaW4gc3R5bGUgb3ZlcnJpZGVzLlxuI3dwY29udGVudCB7XG5cdHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogNDZweDtcblx0fVxufVxuXG4jd3Bib2R5IHtcblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogMDtcblx0fVxufVxuXG4vLyBUaGlzIGNsYXNzIGlzIGF1dG8gYXBwbGllZCB0byBfYWxsXyBXUEZvcm1zIGFkbWluIHBhZ2VzL3NjcmVlbnMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQvLyBUaGlzIGlzIGhpZGRlbiBvbiBsb2FkLCB0aGVuIG1hZGUgdmlzaWJsZSB3aXRoIEpTLCB0b1xuXHQvLyBwcmV2ZW50IGl0IGZyb20gXCJqdW1waW5nXCIuXG5cdCNzY3JlZW4tbWV0YS1saW5rcyxcblx0I3NjcmVlbi1tZXRhIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0Ly8gUmVzcG9uc2l2ZSB2aWRlbyBjb250YWluZXIsIHJlcGxhY2VzIEpTIG1ldGhvZC5cblx0LnZpZGVvLWNvbnRhaW5lciB7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmctYm90dG9tOiA1Ni4xJTtcblx0XHQvLyBwYWRkaW5nLXRvcDogMzBweDtcblx0XHRoZWlnaHQ6IDA7XG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0fVxuXG5cdC52aWRlby1jb250YWluZXIgaWZyYW1lLFxuXHQudmlkZW8tY29udGFpbmVyIG9iamVjdCxcblx0LnZpZGVvLWNvbnRhaW5lciBlbWJlZCB7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogMDtcblx0XHRsZWZ0OiAwO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogMTAwJTtcblx0fVxuXG5cdC8vIEZhbmN5IGZpbGUgdXBsb2FkLlxuXHQud3Bmb3Jtcy1maWxlLXVwbG9hZCB7XG5cblx0XHRpbnB1dFt0eXBlPWZpbGVdIHtcblx0XHRcdHdpZHRoOiAwLjFweDtcblx0XHRcdGhlaWdodDogMC4xcHg7XG5cdFx0XHRvcGFjaXR5OiAwO1xuXHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHotaW5kZXg6IC0xO1xuXHRcdH1cblxuXHRcdGxhYmVsIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdH1cblxuXHRcdGlucHV0W3R5cGU9ZmlsZV06Zm9jdXMgKyBsYWJlbCxcblx0XHRpbnB1dFt0eXBlPWZpbGVdLmhhcy1mb2N1cyArIGxhYmVsIHtcblx0XHRcdG91dGxpbmU6IDFweCBkb3R0ZWQgIzAwMDtcblx0XHRcdG91dGxpbmU6IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBhdXRvIDVweDtcblx0XHR9XG5cblx0XHQuZmxkIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cblx0XHRcdC5wbGFjZWhvbGRlciB7XG5cdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0cm9uZyAuZmEge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiA4cHg7XG5cdFx0fVxuXHR9XG5cblx0Ly8gR2VucmljIGNsYXNzIGZvciBoaWRpbmcgZGlzcGxheTtcblx0LndwZm9ybXMtaGlkZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC8vIFBsYWNlaG9sZGVyIGgxIGZvciBhZG1pbiBub3RpY2VzLlxuXHQud3Bmb3Jtcy1oMS1wbGFjZWhvbGRlciB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC8vIEhpZGUgbm90aWNlcyBvbiBsb2FkIHRvIHByZXZlbnQganVtcGluZy4gSlMgd2lsbCByZXZlYWwgdGhlbS5cblx0Lm5vdGljZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxufVxuXG4vLyBBZG1pbiB3cmFwIC0gY29udGFpbnMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGhlYWRlci5cbi53cGZvcm1zLWFkbWluLXdyYXAge1xuXG5cdG1hcmdpbjogMDtcblxuXHQubm90aWNlIHtcblx0XHRtYXJnaW4tbGVmdDogMjBweCAhaW1wb3J0YW50O1xuXHRcdG1hcmdpbi1yaWdodDogMjBweCAhaW1wb3J0YW50O1xuXHR9XG59XG5cbi8vIEFkbWluIGNvbnRlbnQuXG4ud3Bmb3Jtcy1hZG1pbi1jb250ZW50IHtcblx0cGFkZGluZy1sZWZ0OiAyMHB4O1xuXHRwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuXG5cdCY6YmVmb3JlIHtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxuXG5cdCY6YWZ0ZXIge1xuXHRcdGNsZWFyOiBib3RoO1xuXHRcdGNvbnRlbnQ6IFwiIFwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHR9XG5cblx0aHIge1xuXHRcdGJvcmRlcjogbm9uZTtcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2U0ZTRlNDtcblx0XHRtYXJnaW46IDIwcHggMDtcblx0XHRiYWNrZ3JvdW5kOiBub25lO1xuXHR9XG59XG5cbi53cGZvcm1zLWNsZWFyIHtcblxuXHQmOmJlZm9yZSB7XG5cdFx0Y29udGVudDogXCIgXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdH1cblxuXHQmOmFmdGVyIHtcblx0XHRjbGVhcjogYm90aDtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxufVxuXG4ud3Bmb3Jtcy1hZG1pbi1jb2x1bW5zIHtcblxuXHQmID4gZGl2W2NsYXNzKj1cIi1jb2x1bW4tXCJdIHtcblx0XHRmbG9hdDogbGVmdDtcblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi0yMCB7d2lkdGg6IDIwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTMzIHt3aWR0aDogMzMuMzMzMzMlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNDAge3dpZHRoOiA0MCV9XG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi01MCB7d2lkdGg6IDUwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTYwIHt3aWR0aDogNjAlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tODAge3dpZHRoOiA4MCV9XG5cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLWxhc3Qge2Zsb2F0OiByaWdodCAhaW1wb3J0YW50fVxuXG5cdCY6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6IFwiXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdFx0Y2xlYXI6IGJvdGg7XG5cdH1cbn1cblxuXG5cbiIsIi8vIEZvcm0gT3ZlcnZpZXcgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLW92ZXJ2aWV3XG4jd3Bmb3Jtcy1vdmVydmlldyB7XG5cblx0Ly8gUmVtb3ZlIHRoZSB0b3AgbWFyZ2luIHNvIGl0IGRpc3BsYXlzIDIwcHggYmV0d2VlbiB0aGUgaGVhZGVyIGFyZWFcblx0Ly8gYW5kIHRoZSBjb250ZW50LCBjb25zaXN0ZW50IHdpdGggb3VyIG90aGVyIGFkbWluIHBhZ2VzLlxuXHQudGFibGVuYXYudG9wIHtcblx0XHRtYXJnaW4tdG9wOiAwO1xuXHR9XG5cblx0Ly8gU2V0IGNlcnRhaW4gY29sdW1uIHdpZHRocy5cblx0LndwLWxpc3QtdGFibGUge1xuXG5cdFx0LmNvbHVtbi1pZCB7XG5cdFx0XHR3aWR0aDogMzBweDtcblx0XHR9XG5cblx0XHQuY29sdW1uLWVudHJpZXMge1xuXHRcdFx0d2lkdGg6IDcwcHg7XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1zaG9ydGNvZGUge1xuXHRcdFx0d2lkdGg6IDE1MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tY3JlYXRlZCB7XG5cdFx0XHR3aWR0aDogMTQ1cHg7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBFbnRyaWVzIFNpbmdsZSAoRGV0YWlscykgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWVudHJpZXMmdmlldz1kZXRhaWxzXG4jd3Bmb3Jtcy1lbnRyaWVzLXNpbmdsZSB7XG5cblx0I3Bvc3RzdHVmZiB7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC8vIE1ldGFib3hlcyBhcmUgbm90IG1vdmFibGUgc28gZG9uJ3QgbGV0IHRoZSB1c2VyIHRoaW5rIHNvLlxuXHQucG9zdGJveCAuaG5kbGUge1xuXHRcdGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xuXHR9XG5cblx0Ly8gRW50cnkgbmF2aWdhdGlvbiAtIG5leHQvcHJldi5cblx0LndwZm9ybXMtZW50cnktbmF2aWdhdGlvbiB7XG5cdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdGxpbmUtaGVpZ2h0OiAyOXB4O1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDJweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxcHg7XG5cdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPD1waG9uZVwiKSB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblxuXHRcdC5hZGQtbmV3LWgyIHtcblx0XHRcdHRvcDogYXV0bztcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDRweCAwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHR9XG5cblx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGhlaWdodDogYXV0bztcblx0XHRcdFx0d2lkdGg6IDI4cHg7XG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiAyOXB4O1xuXHRcdFx0fVxuXG5cdFx0XHQmLmluYWN0aXZlIHtcblx0XHRcdFx0b3BhY2l0eTogMC41O1xuXHRcdFx0XHRwb2ludGVyLWV2ZW50czogbm9uZTtcblx0XHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LW5hdmlnYXRpb24tdGV4dCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZW50cnktY3VycmVudCB7XG5cdFx0XHR0b3A6IGF1dG87XG5cdFx0XHRtYXJnaW46IDAgLTVweCAwIC0zcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRwYWRkaW5nOiA0cHggMTBweDtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG5cdFx0XHQtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRsaW5lLWhlaWdodDogMjlweDtcblx0XHRcdHRleHQtdHJhbnNmb3JtOiBjZW50ZXI7XG5cdFx0fVxuXG5cdH1cblxuXHQvLyBFbnRyeSBmaWVsZHMgbWV0YWJveC5cblx0I3dwZm9ybXMtZW50cnktZmllbGRzIHtcblxuXHRcdGgyLmhuZGxlIHtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblxuXHRcdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHR3aWR0aDogMTZweDtcblx0XHRcdFx0bWFyZ2luOiA0cHggNHB4IDAgMDtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Lm5vLWZpZWxkcyB7XG5cdFx0XHRwYWRkaW5nOiAxMnB4O1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdC5pbnNpZGUge1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0cCB7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZW50cnktZmllbGQtbmFtZSB7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNlYmYzZmI7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCAxMnB4O1xuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1lbnRyeS1maWVsZC12YWx1ZSB7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCAxMnB4O1xuXHRcdFx0fVxuXG5cdFx0XHQuZW1wdHkgLndwZm9ybXMtZW50cnktZmllbGQtdmFsdWUge1xuXHRcdFx0XHRmb250LXN0eWxlOiBpdGFsaWM7XG5cdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVtcHR5LWZpZWxkLXRvZ2dsZSB7XG5cdFx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRwYWRkaW5nOiA1cHggMCAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEVudHJ5IE5vdGVzIG1ldGFib3guXG5cdCN3cGZvcm1zLWVudHJ5LW5vdGVzIHtcblxuXHRcdC5pbnNpZGUge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1uZXcge1xuXHRcdFx0cGFkZGluZzogMTBweDtcblx0XHR9XG5cblx0XHRmb3JtIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LmJ0bnMge1xuXHRcdFx0b3ZlcmZsb3c6IGF1dG87XG5cdFx0XHRwYWRkaW5nOiA4cHggMDtcblx0XHR9XG5cblx0XHQubm8tbm90ZXMge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogNHB4IDEwcHggOHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LW5vdGVzLXNpbmdsZSB7XG5cdFx0XHRwYWRkaW5nOiAxMHB4O1xuXHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNlM2UxZTM7XG5cblx0XHRcdHA6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdH1cblxuXHRcdFx0Ji5ldmVuIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1ieWxpbmUge1xuXHRcdFx0Y29sb3I6ICM4ODg7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXG5cdFx0XHQuc2VwIHtcblx0XHRcdFx0Y29sb3I6ICNkZGQ7XG5cdFx0XHR9XG5cblx0XHRcdC5ub3Rlcy11c2VyIHtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0fVxuXG5cdFx0XHQubm90ZS1kZWxldGUge1xuXHRcdFx0XHRjb2xvcjogI2EwMDtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG5cdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gRW50cnkgRGV0YWlscywgQWN0aW9ucywgYW5kIFBheW1lbnRzLlxuXHQjd3Bmb3Jtcy1lbnRyeS1kZXRhaWxzIC5pbnNpZGUsXG5cdCN3cGZvcm1zLWVudHJ5LXBheW1lbnQgLmluc2lkZSxcblx0I3dwZm9ybXMtZW50cnktYWN0aW9ucyAuaW5zaWRlIHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhICB7XG5cdFx0cGFkZGluZzogNnB4IDAgMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBwLFxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIHAge1xuXHRcdHBhZGRpbmc6IDZweCAxMHB4IDhweDtcblx0XHRtYXJnaW46IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEge1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG5cdFx0cGFkZGluZzogMTBweDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LXBheW1lbnQtbWV0YSBwOmxhc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBzdHJvbmcsXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBzdHJvbmcge1xuXHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1kZXRhaWxzLW1ldGEgLmRhc2hpY29ucyxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIC5kYXNoaWNvbnMge1xuXHRcdHBhZGRpbmc6IDAgMnB4IDAgMDtcblx0XHRjb2xvcjogIzgyODc4QTtcblx0XHR0b3A6IC0xcHg7XG5cdFx0bGVmdDogLTFweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR9XG5cblx0I3dwZm9ybXMtZW50cnktZGV0YWlscyAuc3VibWl0ZGVsZXRlIHtcblx0XHRjb2xvcjogI2EwMDtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0cGFkZGluZzogMXB4IDJweDtcblx0fVxuXG5cdCN3cGZvcm1zLWVudHJ5LWRldGFpbHMgLnN1Ym1pdGRlbGV0ZTpob3ZlciB7XG5cdFx0Y29sb3I6IHJlZDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBhIHtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1hY3Rpb25zLW1ldGEgYTpob3ZlciB7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdH1cblxuXHQvLyBFbnRyeSBMb2NhdGlvbi5cblx0I3dwZm9ybXMtZW50cnktZ2VvbG9jYXRpb24ge1xuXG5cdFx0Lmluc2lkZSB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdHVsIHtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRvdmVyZmxvdzogYXV0bztcblxuXHRcdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLW1ldGEge1xuXHRcdFx0d2lkdGg6IDg1cHg7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZWU7XG5cdFx0XHRwYWRkaW5nOiAxMHB4IDIwcHggMTBweCAxMnB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLXZhbHVlIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBhZGRpbmc6IDEwcHggMTJweCAxMHB4IDIwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZmxhZyB7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDRweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEVudHJpZXMgTGlzdCAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtZW50cmllcyZ2aWV3PWxpc3RcbiN3cGZvcm1zLWVudHJpZXMtbGlzdCB7XG5cblx0LmZvcm0tZGV0YWlscyB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0cGFkZGluZy1ib3R0b206IDE1cHg7XG5cdFx0bWFyZ2luOiAwIDAgMTBweDtcblxuXHRcdC5mb3JtLWRldGFpbHMtc3ViIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRmb250LXNpemU6IDEwcHg7XG5cdFx0XHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRcdFx0bWFyZ2luOiAwIDAgOHB4IDA7XG5cdFx0fVxuXG5cdFx0LmZvcm0tZGV0YWlscy10aXRsZSB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPDEyMDBweFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5mb3JtLXNlbGVjdG9yIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0LnRvZ2dsZSB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0Y29sb3I6ICM0NDQ7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblxuXHRcdFx0XHQmOmhvdmVyLFxuXHRcdFx0XHQmLmFjdGl2ZSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2UzZTNlMztcblx0XHRcdFx0XHRvdXRsaW5lOiBub25lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LmZvcm0tbGlzdCB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogMCAycHggOHB4IDAgcmdiYSgwLDAsMCwwLjEpO1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdHRvcDogMjdweDtcblx0XHRcdFx0bGVmdDogLTEwOHB4O1xuXHRcdFx0XHR3aWR0aDogMjMwcHg7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHggMDtcblx0XHRcdFx0ei1pbmRleDogOTk5MTtcblxuXHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogXCIgXCI7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHRvcDogLTEwcHg7XG5cdFx0XHRcdFx0bGVmdDogMTEwcHg7XG5cdFx0XHRcdFx0d2lkdGg6IDA7XG5cdFx0XHRcdFx0aGVpZ2h0OiAwO1xuXHRcdFx0XHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0XHRcdFx0Ym9yZGVyLXdpZHRoOiAwIDhweCAxMHB4IDhweDtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dWwge1xuXHRcdFx0XHRtYXgtaGVpZ2h0OiAxOTZweDtcblx0XHRcdFx0b3ZlcmZsb3cteDogaGlkZGVuO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblxuXHRcdFx0XHRcdGEge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiA1cHggMTVweDtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNDQ0O1xuXG5cdFx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZm9ybS1kZXRhaWxzLWFjdGlvbnMge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjwxMjAwcHhcIikge1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdH1cblxuXHRcdFx0YSB7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRtYXJnaW46IDAgMTJweCAwIDA7XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdG1hcmdpbjogMFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRcdFx0d2lkdGg6IDE2cHg7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNlYXJjaC5cblx0LnNlYXJjaC1ib3gge1xuXHRcdC53cGZvcm1zLWZvcm0tc2VhcmNoLWJveC1maWVsZCB7XG5cdFx0XHRtYXgtd2lkdGg6IDE4MHB4O1xuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHRcdG1hcmdpbjogMCAycHggMCAwO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWZvcm0tc2VhcmNoLWJveC1jb21wYXJpc29uIHtcblx0XHRcdG1heC13aWR0aDogOTBweDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1mb3JtLXNlYXJjaC1ib3gtdGVybSB7XG5cdFx0XHRoZWlnaHQ6IDI4cHg7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cdH1cblxuXHQvLyBGaWx0ZXJpbmcuXG5cdC53cGZvcm1zLWZpbHRlci1kYXRlIHtcblxuXHRcdC53cGZvcm1zLWZpbHRlci1kYXRlLXNlbGVjdG9yIHtcblx0XHRcdGhlaWdodDogMjhweDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0bWF4LXdpZHRoOiAyMTBweDtcblx0XHR9XG5cblx0XHRidXR0b24ge1xuXHRcdFx0bWFyZ2luOiAxcHggOHB4IDAgMDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV1AgVGFibGUgc3R5bGluZy5cblx0LndwLWxpc3QtdGFibGUge1xuXG5cdFx0Lm5ldy1lbnRyaWVzLW5vdGlmaWNhdGlvbiB0ZCB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0YSB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1pbmRpY2F0b3JzIHtcblx0XHRcdHdpZHRoOiAzNXB4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRhOmZvY3VzIHtcblx0XHRcdFx0LXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuXHRcdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5jb2x1bW4taW5kaWNhdG9ycyAuZGFzaGljb25zIHtcblx0XHRcdHdpZHRoOiAxNHB4O1xuXHRcdFx0aGVpZ2h0OiAxNHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bWFyZ2luLXRvcDogM3B4O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3Itc3RhciAuZGFzaGljb25zIHtcblx0XHRcdG1hcmdpbi1yaWdodDogNnB4O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3Itc3RhciB7XG5cdFx0XHRjb2xvcjogI2U0ZTRlNDtcblxuXHRcdFx0Jjpob3Zlcixcblx0XHRcdCYudW5zdGFyIHtcblx0XHRcdFx0Y29sb3I6ICRvcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmluZGljYXRvci1yZWFkIHtcblx0XHRcdGNvbG9yOiAjOWVkZTg0O1xuXG5cdFx0XHQmOmhvdmVyLFxuXHRcdFx0Ji51bnJlYWQge1xuXHRcdFx0XHRjb2xvcjogI2U0ZTRlNDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLWRhdGUge1xuXHRcdFx0d2lkdGg6IDE1MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tc3RhdHVzIHtcblx0XHRcdHdpZHRoOiAxMjBweDtcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRoZWlnaHQ6IDEycHg7XG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xuXHRcdFx0XHRtYXJnaW46IDAgMCAwIDNweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLXBheW1lbnRfdG90YWwge1xuXHRcdFx0d2lkdGg6IDEwMHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tYWN0aW9ucyB7XG5cdFx0XHR3aWR0aDogMTAwcHg7XG5cdFx0fVxuXG5cdFx0LnNlcCB7XG5cdFx0XHRjb2xvcjogI2RkZDtcblx0XHR9XG5cblx0XHQuZGVsZXRlOmhvdmVyIHtcblx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtZW50cmllcy10YWJsZS1lZGl0LWNvbHVtbnMge1xuXHRcdGZsb2F0OiByaWdodDtcblx0XHRjb2xvcjogI2NjYztcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtZGFzaC13aWRnZXQtY2hhcnQtYmxvY2sge1xuXHRcdHBhZGRpbmc6IDEycHggMTJweCAwIDhweDtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7XG5cdFx0bWFyZ2luLXRvcDogMjBweDtcblx0XHRib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDQpO1xuXG5cdFx0LndwZm9ybXMtZXJyb3Itbm8tZGF0YS1jaGFydCB7XG5cdFx0XHRib3JkZXI6IG5vbmU7XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtZGFzaC13aWRnZXQtY2hhcnQtdGl0bGUge1xuXHRcdG1hcmdpbi1sZWZ0OiAtMTJweDtcblx0XHRmb250LXNpemU6IDE4cHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1ibG9jazpmaXJzdC1jaGlsZCB7XG5cdFx0bWFyZ2luLXRvcDogMDtcblx0fVxuXG5cdC53cGZvcm1zLWRhc2gtd2lkZ2V0LXJlc2V0LWNoYXJ0IHtcblxuXHRcdGNvbG9yOiAjZDgzNjM4O1xuXHRcdG9wYWNpdHk6IDE7XG5cdFx0dmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xuXHRcdG1hcmdpbjogMCAwIC0xcHggMDtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0Y29sb3I6ICNhZDJiMmM7XG5cdFx0fVxuXG5cdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRmb250LXNpemU6IDIwcHg7XG5cdFx0XHRoZWlnaHQ6IDIwcHg7XG5cdFx0XHR3aWR0aDogMjBweDtcblx0XHR9XG5cdH1cblxuXHQjd3Bmb3Jtcy1kYXNoLXdpZGdldC10aW1lc3BhbiB7XG5cdFx0bWFyZ2luOiA1cHggLTEycHggMCAwO1xuXHR9XG5cblx0I3dwZm9ybXMtZGFzaC13aWRnZXQtZm9ybXMtbGlzdC1ibG9jayB7XG5cdFx0b3ZlcmZsb3c6IHZpc2libGU7XG5cdH1cblxuXHQjd3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3Jtcy1saXN0LXRhYmxlIHtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZTVlNWU1O1xuXHRcdGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNCk7XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3Jtcy1saXN0LWNvbHVtbnMge1xuXHRcdFx0dGQge1xuXHRcdFx0XHRwYWRkaW5nOiAxMnB4IDIwcHg7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTFlMWUxO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRib2R5IHtcblx0XHRcdGJvcmRlci10b3A6IDA7XG5cdFx0fVxuXG5cdFx0dHIge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHR9XG5cblx0XHR0cjpmaXJzdC1jaGlsZCB7XG5cdFx0XHRib3JkZXItdG9wOiAwO1xuXG5cdFx0XHR0ZCB7XG5cdFx0XHRcdGJvcmRlci10b3A6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHI6bnRoLWNoaWxkKGV2ZW4pIHRkIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG5cdFx0fVxuXG5cdFx0dGQge1xuXHRcdFx0dGV4dC1hbGlnbjogbGVmdDtcblx0XHRcdHBhZGRpbmc6IDIwcHggMjBweDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHR9XG5cblx0XHR0ciA+IHRkOm50aC1jaGlsZCgyKSB7XG5cdFx0XHR3aWR0aDogMTgwcHg7XG5cdFx0fVxuXG5cdFx0dHIgPiB0ZDpudGgtY2hpbGQoMykge1xuXHRcdFx0d2lkdGg6IDYwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXG5cdFx0dHIgPiB0ZDpudGgtY2hpbGQoNCkge1xuXHRcdFx0d2lkdGg6IDkwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXG5cdFx0dHIgPiB0ZDpudGgtY2hpbGQoNSkge1xuXHRcdFx0d2lkdGg6IDYwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRwYWRkaW5nLXRvcDogMDtcblx0XHRcdHBhZGRpbmctYm90dG9tOiAwO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWRhc2gtd2lkZ2V0LWZvcm0tYWN0aXZlIHRkOmZpcnN0LWNoaWxkIHtcblx0XHRcdGJvcmRlci1sZWZ0OiAzcHggc29saWQgIzAwNzNhYTtcblx0XHRcdHBhZGRpbmctbGVmdDogMTdweDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3JtLWFjdGl2ZSAud3Bmb3Jtcy1kYXNoLXdpZGdldC1zaW5nbGUtY2hhcnQtYnRuIHtcblx0XHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3JtLWFjdGl2ZSAud3Bmb3Jtcy1kYXNoLXdpZGdldC1yZXNldC1jaGFydCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcblx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdGJhY2tncm91bmQ6IG5vbmU7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZGFzaC13aWRnZXQtZm9ybXMtbGlzdC1jb2x1bW5zIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG5cdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcblx0XHR9XG5cblx0XHRhIHtcblx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3JtLXRpdGxlIGEge1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHR9XG5cdH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzgycHgpIHtcblxuXHQud3Bmb3Jtcy1hZG1pbi1jb250ZW50IHtcblx0XHRwYWRkaW5nLWxlZnQ6IDEwcHg7XG5cdFx0cGFkZGluZy1yaWdodDogMTBweDtcblx0fVxuXG5cdC53cC1saXN0LXRhYmxlIHtcblx0XHRtYXJnaW46IDAgLTEwcHggMCAtMTBweDtcblx0XHR3aWR0aDogMTAwdnc7XG5cdFx0dGFibGUtbGF5b3V0OiBhdXRvO1xuXHR9XG5cblx0LndwLWxpc3QtdGFibGUuZW50cmllcyB7XG5cblx0XHQuY29sdW1uLWluZGljYXRvcnMge1xuXHRcdFx0d2lkdGg6IGF1dG8gIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQuaW5kaWNhdG9ycyB7XG5cdFx0XHQuaW5kaWNhdG9yLXN0YXIge1xuXHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0fVxuXHRcdFx0LmluZGljYXRvci1yZWFkIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cjpub3QoLmlubGluZS1lZGl0LXJvdyk6bm90KC5uby1pdGVtcykgdGQuY29sdW1uLXByaW1hcnkge1xuXHRcdFx0aGVpZ2h0OiA4cHg7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0ei1pbmRleDogKzE7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDA7XG5cdFx0XHRvdmVyZmxvdzogdmlzaWJsZTtcblx0XHR9XG5cblx0XHQudG9nZ2xlLXJvdyB7XG5cdFx0XHRyaWdodDogNXB4O1xuXHRcdFx0dG9wOiAxNXB4O1xuXHRcdH1cblxuXHRcdHRyOm5vdCguaW5saW5lLWVkaXQtcm93KTpub3QoLm5vLWl0ZW1zKSB0ZC5jb2x1bW4tcHJpbWFyeSt0ZCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuXHRcdH1cblxuXHRcdHRyOm5vdCguaW5saW5lLWVkaXQtcm93KTpub3QoLm5vLWl0ZW1zKSB0ZC5jb2x1bW4tcHJpbWFyeX50ZCB7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDVweDtcblx0XHRcdG1pbi13aWR0aDogNTB2dztcblx0XHR9XG5cblxuXHR9XG5cblx0cC5zZWFyY2gtYm94IHtcblx0XHRtYXJnaW46IDA7XG5cdFx0d2lkdGg6IGF1dG87XG5cdH1cblxuXHRpbnB1dFt0eXBlPWNoZWNrYm94XSwgaW5wdXRbdHlwZT1yYWRpb10ge1xuXHRcdGhlaWdodDogMTZweDtcblx0XHR3aWR0aDogMTZweDtcblx0fVxuXG59IiwiLy8gV2VsY29tZSBBY3RpdmF0aW9uIC0gaW5kZXgucGhwP3BhZ2U9d3Bmb3Jtcy1nZXR0aW5nLXN0YXJ0ZWRcbiN3cGZvcm1zLXdlbGNvbWUge1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgJG9yYW5nZTtcblx0Y29sb3I6ICM1NTU7XG5cdHBhZGRpbmctdG9wOiAxMTBweDtcblxuXHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogNjRweDtcblx0fVxuXG5cdCosXG5cdCo6OmJlZm9yZSxcblx0Kjo6YWZ0ZXIge1xuXHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0fVxuXG5cdC5jb250YWluZXIge1xuXHRcdG1hcmdpbjogMCBhdXRvO1xuXHRcdG1heC13aWR0aDogNzIwcHg7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC5ibG9jayB7XG5cdFx0cGFkZGluZzogNDBweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0cGFkZGluZzogMjBweDtcblx0XHR9XG5cdH1cblxuXHRpbWcge1xuXHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRoZWlnaHQ6IGF1dG87XG5cdH1cblxuXHRoMSB7XG5cdFx0Y29sb3I6ICMyMjI7XG5cdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRtYXJnaW46IDAgMCAxNnB4IDA7XG5cdH1cblxuXHRoNSB7XG5cdFx0Y29sb3I6ICMyMjI7XG5cdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdG1hcmdpbjogMCAwIDhweCAwO1xuXHR9XG5cblx0aDYge1xuXHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRmb250LXdlaWdodDogNDAwO1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdG1hcmdpbjogMDtcblx0fVxuXG5cdHAge1xuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdH1cblxuXHQuYnV0dG9uLXdyYXAge1xuXHRcdG1heC13aWR0aDogNTkwcHg7XG5cdFx0bWFyZ2luOiAwIGF1dG8gMCBhdXRvO1xuXG5cdFx0LmxlZnQge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQucmlnaHQge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHRcdHBhZGRpbmctbGVmdDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuaW50cm8ge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItcmFkaXVzOiAycHg7XG5cdFx0bWFyZ2luLWJvdHRvbTogMzBweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDQwcHg7XG5cblx0XHQuc3VsbGllIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRcdFx0aGVpZ2h0OiAxMTBweDtcblx0XHRcdHdpZHRoOiAxMTBweDtcblx0XHRcdHBhZGRpbmc6IDE4cHggMTRweCAwIDE0cHg7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IC01OHB4O1xuXHRcdFx0bGVmdDogNTAlO1xuXHRcdFx0bWFyZ2luLWxlZnQ6IC01NXB4O1xuXHRcdH1cblxuXHRcdC52aWRlby10aHVtYm5haWwge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRtYXJnaW46IDAgYXV0bztcblx0XHR9XG5cblx0XHQuYnV0dG9uLXdyYXAge1xuXHRcdFx0bWFyZ2luLXRvcDogMjVweDtcblx0XHR9XG5cdH1cblxuXHQuZmVhdHVyZXMge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwO1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRwYWRkaW5nLXRvcDogMjBweDtcblx0XHRwYWRkaW5nLWJvdHRvbTogMjBweDtcblxuXHRcdC5mZWF0dXJlLWxpc3Qge1xuXHRcdFx0bWFyZ2luLXRvcDogNjBweDtcblx0XHR9XG5cblx0XHQuZmVhdHVyZS1ibG9jayB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRwYWRkaW5nLWJvdHRvbTogMzVweDtcblx0XHRcdG92ZXJmbG93OiBhdXRvO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0fVxuXG5cdFx0XHQmLmZpcnN0IHtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblx0XHRcdFx0Y2xlYXI6IGJvdGg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0cGFkZGluZy1yaWdodDogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQmLmxhc3Qge1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDIwcHg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRtYXgtd2lkdGg6IDQ2cHg7XG5cdFx0XHR9XG5cblx0XHRcdGg1IHtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDY4cHhcblx0XHRcdH1cblxuXHRcdFx0cCB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDY4cHhcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuYnV0dG9uLXdyYXAge1xuXHRcdFx0bWFyZ2luLXRvcDogMjVweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHR9XG5cdH1cblxuXHQudXBncmFkZS1jdGEge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItdG9wOiAwO1xuXHRcdGJvcmRlci1ib3R0b206IDA7XG5cdFx0Y29sb3I6ICNmZmY7XG5cblx0XHRoMiB7XG5cdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdGZvbnQtc2l6ZTogMjBweDtcblx0XHRcdG1hcmdpbjogMCAwIDMwcHggMDtcblx0XHR9XG5cblx0XHR1bCB7XG5cdFx0XHRkaXNwbGF5OiAtbXMtZmxleDtcblx0XHRcdGRpc3BsYXk6IC13ZWJraXQtZmxleDtcblx0XHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0XHQtd2Via2l0LWZsZXgtd3JhcDogd3JhcDtcblx0XHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDhweCAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiA1cHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQubGVmdCB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiA2Ni42NjY2NjYlO1xuXHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMDtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQucmlnaHQge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0d2lkdGg6IDMzLjMzMzMzMyU7XG5cdFx0XHRwYWRkaW5nOiAyMHB4IDAgMCAyMHB4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDA7XG5cdFx0XHR9XG5cblx0XHRcdGgyIHtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0c3BhbiB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNTU1O1xuXHRcdFx0XHRcdHBhZGRpbmc6IDAgMTVweCAxMnB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5wcmljZSB7XG5cdFx0XHRcdHBhZGRpbmc6IDI2cHggMDtcblxuXHRcdFx0XHQuYW1vdW50IHtcblx0XHRcdFx0XHRmb250LXNpemU6IDQ4cHg7XG5cdFx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG5cdFx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdFx0Y29udGVudDogJyQnO1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdFx0dG9wOiAtOHB4O1xuXHRcdFx0XHRcdFx0bGVmdDogLTE2cHg7XG5cdFx0XHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0LnRlcm0ge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblxuXHR9XG5cblx0LnRlc3RpbW9uaWFscyB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdFx0cGFkZGluZzogMjBweCAwO1xuXG5cdFx0LnRlc3RpbW9uaWFsLWJsb2NrIHtcblx0XHRcdG1hcmdpbjogNTBweCAwIDAgMDs7XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRcdG1heC13aWR0aDogMTAwcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IDAgMCAxOHB4IHJnYmEoMCwwLDAsLjIpO1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdHdpZHRoOiA2NXB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHAge1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDEycHggMTQwcHg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0bWFyZ2luLWxlZnQ6IDEwMHB4O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuZm9vdGVyIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmMWYxO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0XHRib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcblx0fVxuXG5cdC8vIENoYW5nZXMgZm9yIHBhaWQgdmVyc2lvbi5cblx0Ji5wcm8ge1xuXG5cdFx0LmZlYXR1cmVzIHtcblx0XHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAzMHB4O1xuXHRcdH1cblxuXHRcdC51cGdyYWRlLFxuXHRcdC5mb290ZXIge1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHR9XG5cblx0XHQudGVzdGltb25pYWxzIHtcblx0XHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0fVxuXHR9XG59XG5cbi5kYXNoYm9hcmRfcGFnZV93cGZvcm1zLWdldHRpbmctc3RhcnRlZCB7XG5cblx0LnZpZGVvLWNvbnRhaW5lciB7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0fVxuXG5cdC8vIEhpZGUgYWRtaW4gZm9vdGVyLlxuXHQjd3Bmb290ZXIsXG5cdGRpdi5ub3RpY2Uge1xuXHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblx0fVxufVxuIiwiLy8gQWRkb25zIExpc3QgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWFkZG9uc1xuI3dwZm9ybXMtYWRtaW4tYWRkb25zIHtcblxuXHQqLFxuXHQqOjpiZWZvcmUsXG5cdCo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQuYWRkb25zLWNvbnRhaW5lciB7XG5cdFx0bWFyZ2luLWxlZnQ6IC0yMHB4O1xuXHRcdG1hcmdpbi1yaWdodDogLTIwcHg7XG5cdH1cblxuXHQudW5sb2NrLW1zZyB7XG5cdFx0cGFkZGluZzogMCAyMHB4O1xuXHRcdG1hcmdpbi10b3A6IC0yMHB4O1xuXHRcdGNsZWFyOiBib3RoO1xuXHR9XG5cblx0I3dwZm9ybXMtYWRtaW4tYWRkb25zLXNlYXJjaCB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdGNvbG9yOiAjMzMzO1xuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0cGFkZGluZzogN3B4IDEycHg7XG5cdFx0bWFyZ2luOiAtM3B4IDEwcHggMCAwO1xuXHRcdHdpZHRoOiAyMDBweDtcblx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXHRcdGZsb2F0OiByaWdodDtcblxuXHRcdCY6Zm9jdXMge1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjYmJiO1xuXHRcdH1cblx0fVxuXG5cdC5hZGRvbi1jb250YWluZXIge1xuXHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRmbG9hdDogbGVmdDtcblx0XHR3aWR0aDogMzMuMzMzMzMzJTtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPDEyNTBweFwiKSB7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdH1cblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAyMHB4O1xuXHRcdH1cblx0fVxuXG5cdGg0IHtcblx0XHRmb250LXNpemU6IDE3cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0fVxuXG5cdC5hZGRvbi1pdGVtIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdG1hcmdpbjogMCAwIDQwcHggMDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0bWFyZ2luOiAwIDBcblx0XHR9XG5cblx0XHRpbWcge1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2VlZTtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0bWF4LXdpZHRoOiA3NXB4O1xuXHRcdH1cblxuXHRcdGg1IHtcblx0XHRcdG1hcmdpbjogMCAwIDEwcHggMTAwcHg7XG5cdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRtYXJnaW46IDAgMCAwIDEwMHB4O1xuXHRcdH1cblxuXHRcdC5kZXRhaWxzIHtcblx0XHRcdHBhZGRpbmc6IDMwcHggMjBweDtcblxuXHRcdH1cblxuXHRcdC5hY3Rpb25zIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG5cdFx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcblx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHRcdC5tc2cge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0dG9wOiAwO1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHR6LWluZGV4OiA5OTtcblx0XHRcdFx0cGFkZGluZzogMjBweDtcblx0XHRcdFx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XG5cdFx0XHRcdGRpc3BsYXk6IC1tb3otYm94O1xuXHRcdFx0XHRkaXNwbGF5OiAtbXMtZmxleGJveDtcblx0XHRcdFx0ZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuXHRcdFx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdFx0XHQtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0XHRcdC1tcy1hbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdFx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdFx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuXHRcdFx0XHQmLnN1Y2Nlc3Mge1xuXHRcdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmVycm9yIHtcblx0XHRcdFx0XHRjb2xvcjogcmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnN0YXR1cyB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHBhZGRpbmctdG9wOiA4cHg7XG5cblx0XHRcdC5zdGF0dXMtaW5hY3RpdmUge1xuXHRcdFx0XHRjb2xvcjogcmVkO1xuXHRcdFx0fVxuXG5cdFx0XHQuc3RhdHVzLWRvd25sb2FkIHtcblx0XHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHR9XG5cblx0XHRcdC5zdGF0dXMtYWN0aXZlIHtcblx0XHRcdFx0Y29sb3I6ICRncmVlbjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQudXBncmFkZS1idXR0b24ge1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRhIHtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0d2lkdGg6IDE0MHB4O1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCA1cHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmFjdGlvbi1idXR0b24ge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHRidXR0b24ge1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiBub25lO1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0d2lkdGg6IDE0MHB4O1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdHBhZGRpbmc6IDhweCA1cHg7XG5cblx0XHRcdFx0Jjpob3Zlcixcblx0XHRcdFx0Ji5sb2FkaW5nIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZTllOWU5O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LmZhIHtcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDhweDtcblxuXHRcdFx0XHRcdCYuZmEtc3Bpbm5lciB7XG5cdFx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5zdGF0dXMtYWN0aXZlIHtcblxuXHRcdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuc3RhdHVzLWluYWN0aXZlIHtcblxuXHRcdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogcmVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuc3RhdHVzLWRvd25sb2FkIHtcblxuXHRcdFx0XHRcdC5mYSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmRpc2FibGVkIHtcblx0XHRcdFx0XHRjdXJzb3I6IGRlZmF1bHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmxvYWRpbmcge1xuXG5cdFx0XHRcdFx0LmZhIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiLy8gQWJvdXQgV1BGb3JtcyAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtYWJvdXRcblxuJHBhZGRpbmctZGVmYXVsdDogMzBweDtcbiRib3JkZXI6IDFweCBzb2xpZCAjREREREREO1xuXG4vLyBAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcbi8vIFx0d2lkdGg6IDUwJTtcbi8vIH1cblxuLypcbid4cy1waG9uZSc6IDMyMHB4LFxuXHQncGhvbmUnOiA2MDBweCxcblx0J2lwYWQnOiA3NjhweCxcblx0J3RhYmxldCc6IDc4MnB4LFxuXHQnZGVza3RvcCc6IDk2MHB4LFxuKi9cblxuI3dwZm9ybXMtYWRtaW4tYWJvdXQge1xuXG5cdCosICo6OmJlZm9yZSwgKjo6YWZ0ZXIge1xuXHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24ge1xuXHRcdG1hcmdpbjogMCAyMHB4IDIwcHg7XG5cdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdGJvcmRlcjogJGJvcmRlcjtcblx0XHRsaW5lLWhlaWdodDogMjtcblxuXHRcdGgxLCBoMiwgaDMsIGg0LCBoNSB7XG5cdFx0XHRtYXJnaW4tdG9wOiAwO1xuXHRcdFx0cGFkZGluZy10b3A6IDA7XG5cdFx0XHRsaW5lLWhlaWdodDogMS42O1xuXHRcdH1cblxuXHRcdGgyIHtcblx0XHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHR9XG5cblx0XHRoMyB7XG5cdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAzMHB4O1xuXHRcdFx0Y29sb3I6ICMyMzI4MkM7XG5cdFx0fVxuXG5cdFx0dWwsIHAge1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblxuXHRcdFx0Ji5iaWdnZXJ7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdH1cblx0XHRcdCYuc21hbGxlciB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdH1cblxuXHRcdFx0JjpsYXN0LWNoaWxkIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRociB7XG5cdFx0XHRtYXJnaW46ICRwYWRkaW5nLWRlZmF1bHQgMDtcblx0XHR9XG5cblx0XHRmaWd1cmUge1xuXHRcdFx0bWFyZ2luOiAwO1xuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdH1cblxuXHRcdFx0ZmlnY2FwdGlvbiB7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdFx0Y29sb3I6ICM4ODg4ODg7XG5cdFx0XHRcdG1hcmdpbi10b3A6IDVweDtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRsaW5lLWhlaWdodDogaW5pdGlhbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNDAge1xuXHRcdFx0cGFkZGluZy1sZWZ0OiAkcGFkZGluZy1kZWZhdWx0LzI7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiAwO1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTYwIHtcblx0XHRcdHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nLWRlZmF1bHQvMjtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRwYWRkaW5nLXJpZ2h0OiAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHVsLmxpc3QtcGxhaW4ge1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR1bC5saXN0LWZlYXR1cmVzIHtcblx0XHRcdGxpIC5mYSB7XG5cdFx0XHRcdGNvbG9yOiAjMmE5YjM5O1xuXHRcdFx0XHRtYXJnaW46IDAgOHB4IDAgMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuZmEtc3RhciB7Y29sb3I6IGdvbGR9XG5cblx0XHQubm8tbWFyZ2luIHttYXJnaW46IDAgIWltcG9ydGFudH1cblx0XHQubm8tcGFkZGluZyB7cGFkZGluZzogMCAhaW1wb3J0YW50fVxuXHRcdC5jZW50ZXJlZCB7dGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWZpcnN0LWZvcm0ge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1maXJzdC1mb3JtLXRleHQge1xuXHRcdFx0ZmxleDogMTtcblx0XHRcdHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRmbGV4OiBub25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tZmlyc3QtZm9ybS12aWRlbyB7XG5cdFx0XHRpZnJhbWUge1xuXHRcdFx0XHRib3JkZXI6ICRib3JkZXI7XG5cdFx0XHR9XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8ge1xuXHRcdHBhZGRpbmc6IDA7XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8tbWFpbixcblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8tZXh0cmEge1xuXHRcdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8tZXh0cmEge1xuXG5cdFx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNTAge1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLW1haW4ge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI0ZBRkFGQTtcblx0XHRcdGJvcmRlci1ib3R0b206ICRib3JkZXI7XG5cblx0XHRcdCYubm8tYm9yZGVyIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRcdH1cblxuXHRcdFx0cCB7XG5cdFx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGgzLmNhbGwtdG8tYWN0aW9uIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IC0xMHB4O1xuXHRcdH1cblxuXHRcdHNwYW4ucHJpY2UtMjAtb2ZmIHtcblx0XHRcdGNvbG9yOiAjNkFCMjU1O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tc3F1YXNoZWQge1xuXHRcdG1hcmdpbi1ib3R0b206IDA7XG5cblx0XHQmOm5vdCg6bGFzdC1vZi10eXBlKSB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tcG9zdCB7XG5cblx0XHRoMiB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAtMTBweDtcblx0XHR9XG5cblx0XHRoMyB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAxNXB4O1xuXHRcdH1cblxuXHRcdHA6bGFzdC1vZi10eXBlIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IDMwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTIwIHtcblx0XHRcdHBhZGRpbmctcmlnaHQ6IDIwcHg7XG5cdFx0XHR3aWR0aDogYXV0bztcblxuXHRcdFx0aW1nIHtcblx0XHRcdFx0d2lkdGg6IDI3MHB4O1xuXHRcdFx0fVxuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0d2lkdGg6IDIwJTtcblx0XHRcdFx0aW1nIHtcblx0XHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdFx0XHRtYXgtd2lkdGg6IDEwMCU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tODAge1xuXHRcdFx0cGFkZGluZy1sZWZ0OiAyMHB4O1xuXHRcdFx0d2lkdGg6IGNhbGMoMTAwJSAtIDIwcHggLSAyNzBweCk7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHR3aWR0aDogODAlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tcG9zdC1saW5rIHtcblx0XHRcdHBhZGRpbmc6IDEwcHggJHBhZGRpbmctZGVmYXVsdC8yO1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI0RGNzczOTtcblx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0bWFyZ2luLXRvcDogMTVweDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblxuXHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNCODVBMUI7XG5cdFx0XHR9XG5cblx0XHRcdC5mYSB7XG5cdFx0XHRcdGNvbG9yOiAjRURCQTlFO1xuXHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0XHRtYXJnaW4tbGVmdDogOHB4O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tdGFibGUge1xuXG5cdFx0dGFibGUge1xuXHRcdFx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcblxuXHRcdFx0dHIge1xuXHRcdFx0XHR0ZCB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogJGJvcmRlcjtcblx0XHRcdFx0XHRib3JkZXItcmlnaHQ6ICRib3JkZXI7XG5cdFx0XHRcdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXG5cdFx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdFx0Ym9yZGVyLXJpZ2h0OiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCY6bGFzdC1jaGlsZCB0ZCB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRwIHtcblx0XHRcdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcblx0XHRcdFx0YmFja2dyb3VuZC1zaXplOiAxNXB4IGF1dG87XG5cdFx0XHRcdGJhY2tncm91bmQtcG9zaXRpb246IDAgNnB4O1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0Ji5mZWF0dXJlcy1mdWxsIHtcblx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9hYm91dC9pY29uLWZ1bGwuc3ZnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQmLmZlYXR1cmVzLW5vbmUge1xuXHRcdFx0XHRcdHBhZGRpbmctbGVmdDogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2Fib3V0L2ljb24tbm9uZS5zdmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCYuZmVhdHVyZXMtcGFydGlhbCB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdFx0XHRcdGJhY2tncm91bmQtcG9zaXRpb246IC0zcHggMDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDIzcHggYXV0bztcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2Fib3V0L2ljb24tcGFydGlhbC5zdmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1oZXJvLW1haW4ge1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHRcdGgzIHtcblx0XHRcdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdCAkcGFkZGluZy1kZWZhdWx0ICRwYWRkaW5nLWRlZmF1bHQgJHBhZGRpbmctZGVmYXVsdCoyO1xuXHRcdFx0fVxuXHRcdFx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTMzOmZpcnN0LWNoaWxkIGgzIHtcblx0XHRcdFx0cGFkZGluZzogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQjd3Bmb3Jtcy1hZG1pbi1hZGRvbnMge1xuXHRcdHBhZGRpbmc6IDAgJHBhZGRpbmctZGVmYXVsdDtcblxuXHRcdC5hZGRvbi1jb250YWluZXIge1xuXHRcdFx0cGFkZGluZzogMCAxMHB4O1xuXHRcdH1cblxuXHRcdC5hZGRvbi1pdGVtIHtcblxuXHRcdFx0LmRldGFpbHMge1xuXHRcdFx0XHRwYWRkaW5nOiAyMHB4O1xuXHRcdFx0fVxuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHRwYWRkaW5nOiAxMHB4O1xuXG5cdFx0XHRcdCZbc3JjKj1cIi1taVwiXSB7XG5cdFx0XHRcdFx0cGFkZGluZzogMTNweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQuYWN0aW9uLWJ1dHRvbiAuYnV0dG9uIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDI2cHg7XG5cdFx0XHRcdGhlaWdodDogMjhweDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwIDEwcHggMXB4O1xuXHRcdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0XHRcdC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcblx0XHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjY2NjY2NjO1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiAjZjdmN2Y3O1xuXHRcdFx0XHRib3gtc2hhZG93OiAwIDFweCAwICNjY2NjY2M7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiBub3JtYWw7XG5cblx0XHRcdFx0Jjpob3ZlciwgJjpmb2N1cyAge1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICNmYWZhZmE7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdGNvbG9yOiAjMjMyODJkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5idXR0b24tcHJpbWFyeSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogIzAwODViYTtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6ICMwMDczYWEgIzAwNjc5OSAjMDA2Nzk5O1xuXHRcdFx0XHRcdGJveC1zaGFkb3c6IDAgMXB4IDAgIzAwNjc5OTtcblx0XHRcdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdFx0XHR0ZXh0LXNoYWRvdzogMCAtMXB4IDFweCAjMDA2Nzk5LCAxcHggMCAxcHggIzAwNjc5OSwgMCAxcHggMXB4ICMwMDY3OTksIC0xcHggMCAxcHggIzAwNjc5OTtcblxuXHRcdFx0XHRcdCY6aG92ZXIsICY6Zm9jdXMge1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZDogIzAwOGVjMjtcblx0XHRcdFx0XHRcdGJvcmRlci1jb2xvcjogIzAwNjc5OTtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5mYS1zcGlubmVyIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuYnV0dG9uLXNlY29uZGFyeSB7XG5cdFx0XHRcdFx0Y29sb3I6ICM1NTU7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjY2NjY2NjO1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG5cdFx0XHRcdFx0Ym94LXNoYWRvdzogMCAxcHggMCAjY2NjY2NjO1xuXG5cdFx0XHRcdFx0Jjpob3ZlciwgJjpmb2N1cyAge1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZDogI2ZhZmFmYTtcblx0XHRcdFx0XHRcdGJvcmRlci1jb2xvcjogIzk5OTtcblx0XHRcdFx0XHRcdGNvbG9yOiAjMjMyODJkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuZGlzYWJsZWQge1xuXHRcdFx0XHRcdGN1cnNvcjogZGVmYXVsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiLy8gU2V0dGluZ3MgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLXNldHRpbmdzXG4vLyBUb29scyAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtdG9vbHNcbi53cGZvcm1zLWFkbWluLXNldHRpbmdzIHtcblxuXHQqLFxuXHQqOjpiZWZvcmUsXG5cdCo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQvLyBTZXR0aW5nIHJvd3MsIGVnIGZpZWxkIHJvdy5cblx0LndwZm9ybXMtc2V0dGluZy1yb3cge1xuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTRlNGU0O1xuXHRcdHBhZGRpbmc6IDMwcHggMDtcblx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0bGluZS1oZWlnaHQ6IDEuMztcblxuXHRcdCY6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0XHRwYWRkaW5nLXRvcDogMTBweCAhaW1wb3J0YW50O1xuXHRcdH1cblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPHRhYmxldFwiKSB7XG5cdFx0XHRwYWRkaW5nOiAyMHB4IDA7XG5cdFx0fVxuXG5cdFx0Ly8gU2VjdGlvbiBoZWFkaW5nLlxuXHRcdCYuc2VjdGlvbi1oZWFkaW5nIHtcblx0XHRcdHBhZGRpbmc6IDIwcHggMDtcblxuXHRcdFx0Ji5uby1kZXNjIHtcblx0XHRcdFx0aDQge1xuXHRcdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMDBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBUb29scyBmdWxsIHdpZHRoIGZpZWxkcy5cblx0XHQmLnRvb2xzIHtcblxuXHRcdFx0cCxcblx0XHRcdHA6Zmlyc3Qtb2YtdHlwZXtcblx0XHRcdFx0bWFyZ2luOiAwIDAgMTZweCAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENoZWNrYm94IHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1jaGVja2JveCB7XG5cblx0XHRcdGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcblx0XHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRcdG1hcmdpbjogMXB4IDAgMCAwO1xuXHRcdFx0fVxuXG5cdFx0XHQuZGVzYyB7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDAgMzBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBMaWNlbnNlIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1saWNlbnNlIHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1sYWJlbCB7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiA4cHg7XG5cdFx0XHR9XG5cblx0XHRcdHAudHlwZSB7XG5cdFx0XHRcdG1hcmdpbi10b3A6IDEycHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVGV4dC9udW1iZXIgc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LXRleHQsXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LW51bWJlciB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctbGFiZWwge1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogOHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNlbGVjdCBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctc2VsZWN0IHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1sYWJlbCB7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiA4cHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmFkaW8gc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LXJhZGlvIHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1maWVsZCB7XG5cblx0XHRcdFx0aW5wdXRbdHlwZT1yYWRpb10ge1xuXHRcdFx0XHRcdG1hcmdpbjogLTNweCAxMHB4IDAgMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxhYmVsIHtcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDMwcHg7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBFbWFpbCBUZW1wbGF0ZSBzZXR0aW5nIGZpZWxkLlxuXHRcdCYjd3Bmb3Jtcy1zZXR0aW5nLXJvdy1lbWFpbC10ZW1wbGF0ZSB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXG5cdFx0XHRcdGxhYmVsOmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogXCIgXCI7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0d2lkdGg6IDE1NXB4O1xuXHRcdFx0XHRcdGhlaWdodDogMTgwcHg7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIDAgMTBweCAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Lm9wdGlvbi1kZWZhdWx0OmJlZm9yZSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9zZXR0aW5ncy1lbWFpbC1odG1sLnBuZykgY2VudGVyIGNlbnRlcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5vcHRpb24tbm9uZTpiZWZvcmUge1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvc2V0dGluZ3MtZW1haWwtcGxhaW50ZXh0LnBuZykgY2VudGVyIGNlbnRlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJhZGlvIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1pbWFnZSB7XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXG5cdFx0XHRcdGltZyB7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdFx0XHRcdG1heC13aWR0aDogNDAwcHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb2xvciBwaWNrZXIgc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LWNvbG9yIHtcblxuXHRcdFx0LndwZm9ybXMtY29sb3ItcGlja2VyIHtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiA0MHB4O1xuXHRcdFx0fVxuXG5cdFx0XHQubWluaWNvbG9ycy1pbnB1dC1zd2F0Y2gge1xuXHRcdFx0XHR0b3A6IDdweDtcblx0XHRcdFx0bGVmdDogN3B4O1xuXHRcdFx0XHRoZWlnaHQ6IDIxcHg7XG5cdFx0XHRcdHdpZHRoOiAyMXB4O1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiAycHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gR2VuZXJhbCBlbGVtZW50cy5cblx0XHRoNSB7XG5cdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdH1cblxuXHRcdGg0IHtcblx0XHRcdGZvbnQtc2l6ZTogMjBweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0XHRtYXJnaW46IDAgMCA2cHggMDtcblx0XHR9XG5cblx0XHRoMyB7XG5cdFx0XHRmb250LXNpemU6IDI0cHg7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0bWFyZ2luOiAwIDAgMjBweCAwO1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAxMnB4IDAgMDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjM7XG5cblx0XHRcdCY6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbjogOHB4IDAgMDtcblx0XHRcdH1cblxuXHRcdFx0Ji5kZXNjIHtcblx0XHRcdFx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblxuXHRcdFx0Ji5kaXNjb3VudC1ub3RlIHtcblx0XHRcdFx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRcdFx0XHRjb2xvcjogIzY2NjtcblxuXHRcdFx0XHRzdHJvbmcge1xuXHRcdFx0XHRcdGNvbG9yOiBncmVlbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZvcm0gZWxlbWVudHMuXG5cdFx0aW5wdXRbdHlwZT10ZXh0XSxcblx0XHRpbnB1dFt0eXBlPXBhc3N3b3JkXSxcblx0XHRpbnB1dFt0eXBlPW51bWJlcl0sXG5cdFx0c2VsZWN0IHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRcdGNvbG9yOiAjMzMzO1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHRcdHBhZGRpbmc6IDdweCAxMnB4O1xuXHRcdFx0bWFyZ2luOiAwIDEwcHggMCAwO1xuXHRcdFx0d2lkdGg6IDQwMHB4O1xuXHRcdFx0bWluLWhlaWdodDogMzVweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8ZGVza3RvcFwiKSB7XG5cdFx0XHRcdHdpZHRoOiAzMDBweDtcblx0XHRcdH1cblxuXHRcdFx0Jjpmb2N1cyB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogI2JiYjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpbnB1dFt0eXBlPW51bWJlcl0ge1xuXHRcdFx0d2lkdGg6IDEwMHB4O1xuXHRcdH1cblxuXHRcdHRleHRhcmVhIHtcblxuXHRcdH1cblxuXHRcdGJ1dHRvbiB7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cdFx0fVxuXG5cdFx0LmNob2ljZXNqcy1zZWxlY3Qtd3JhcCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdG1heC13aWR0aDogNDAwcHg7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGRlc2t0b3BcIikge1xuXHRcdFx0XHR3aWR0aDogMzAwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnByb2dyZXNzLWJhciB7XG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgJG9yYW5nZTtcblx0XHRcdGhlaWdodDogMzBweDtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweCAwO1xuXG5cdFx0XHQmLmNvbXBsZXRlIHtcblx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgJGdyZWVuO1xuXG5cdFx0XHRcdC5iYXIge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRncmVlbjtcblxuXHRcdFx0XHRcdCY6YWZ0ZXIge1xuXHRcdFx0XHRcdFx0Y29udGVudDogbm9uZTtcblx0XHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5iYXIge1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0YmFja2dyb3VuZDogJG9yYW5nZTtcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdC13ZWJraXQtdHJhbnNpdGlvbjogd2lkdGggMC41cyBlYXNlLWluLW91dDtcblx0XHRcdFx0LW1vei10cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGVhc2UtaW4tb3V0O1xuXHRcdFx0XHQtby10cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGVhc2UtaW4tb3V0O1xuXHRcdFx0XHR0cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGVhc2UtaW4tb3V0O1xuXG5cdFx0XHRcdEAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcyB7XG5cdFx0XHRcdFx0dG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA2MHB4IDA7IH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdEAtbW96LWtleWZyYW1lcyBwcm9ncmVzcyB7XG5cdFx0XHRcdCAgdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA2MHB4IDA7IH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdEBrZXlmcmFtZXMgcHJvZ3Jlc3Mge1xuXHRcdFx0XHQgIHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNjBweCAwOyB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0XHRjb250ZW50OiAnJztcblx0XHRcdFx0XHRkaXNwbGF5OmJsb2NrO1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHR0b3A6IDA7XG5cdFx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0LXdlYmtpdC1hbmltYXRpb246IHByb2dyZXNzIDFzIGxpbmVhciBpbmZpbml0ZTtcblx0XHRcdFx0XHQtbW96LWFuaW1hdGlvbjogcHJvZ3Jlc3MgMXMgbGluZWFyIGluZmluaXRlO1xuXHRcdFx0XHRcdGFuaW1hdGlvbjogcHJvZ3Jlc3MgMXMgbGluZWFyIGluZmluaXRlO1xuXHRcdFx0XHRcdGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDYwcHggNjBweDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KC00NWRlZywgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJvdyBsYWJlbCAobGVmdCkuXG5cdC53cGZvcm1zLXNldHRpbmctbGFiZWwge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdGZsb2F0OiBsZWZ0O1xuXHRcdHdpZHRoOiAyMDBweDtcblx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8dGFibGV0XCIpIHtcblx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRwYWRkaW5nLWJvdHRvbTogMTVweDtcblx0XHR9XG5cblx0XHRsYWJlbCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUm93IGZpZWxkIChyaWdodCkuXG5cdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdG1hcmdpbjogMCAwIDAgMjAwcHg7XG5cdFx0bWF4LXdpZHRoOiA4MDBweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPHRhYmxldFwiKSB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXHR9XG5cblx0cC5zdWJtaXQge1xuXHRcdG1hcmdpbjogMDtcblx0XHRwYWRkaW5nOiAyNXB4IDA7XG5cdH1cblxuXHQvLyBHZW5lcmljIGluZm8vY29kZSBpbmZvcm1hdGlvbi5cblx0LmluZm8tYXJlYSxcblx0LnByZS1lcnJvciB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0bWF4LXdpZHRoOiAxMDAwcHg7XG5cdFx0aGVpZ2h0OiA0NTBweDtcblx0XHRmb250LWZhbWlseTogTWVubG8sTW9uYWNvLG1vbm9zcGFjZTtcblx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0YmFja2dyb3VuZDogI2ZmZjtcblx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0d2hpdGUtc3BhY2U6IHByZTtcblx0XHRvdmVyZmxvdzogYXV0bztcblx0XHRwYWRkaW5nOiAyMHB4O1xuXHR9XG5cblx0LnByZS1lcnJvciB7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdG1heC1oZWlnaHQ6IDI1MHB4O1xuXHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cdH1cblxuXHQvLyBDaGVja2JveCBtdWx0aS1zZWxlY3QgY29sdW1ucy5cblx0LmNoZWNrYm94LW11bHRpc2VsZWN0LWNvbHVtbnMge1xuXHRcdG1heC13aWR0aDogNjAwcHg7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0JjphZnRlciB7XG5cdFx0XHRjb250ZW50OiBcIi5cIjtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0aGVpZ2h0OiAwO1xuXHRcdFx0bGluZS1oZWlnaHQ6IDA7XG5cdFx0XHRmb250LXNpemU6IDA7XG5cdFx0XHRjbGVhcjogYm90aDtcblx0XHRcdG1pbi1oZWlnaHQ6IDA7XG5cdFx0XHR2aXNpYmlsaXR5OiBoaWRkZW47XG5cdFx0fVxuXG5cdFx0JjpiZWZvcmUge1xuXHRcdFx0Y29udGVudDogXCJcXGYwZWNcIjtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0Zm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMjBweC8xIEZvbnRBd2Vzb21lO1xuXHRcdFx0dGV4dC1yZW5kZXJpbmc6IGF1dG87XG5cdFx0XHQtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblx0XHRcdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDEzMHB4O1xuXHRcdFx0bGVmdDogNTAlO1xuXHRcdFx0bWFyZ2luOiAwIDAgMCAtMTBweDtcblx0XHR9XG5cblx0XHQuaGVhZGVyIHtcblx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiAwIDAgNXB4IDA7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXG5cdFx0LmZpcnN0LWNvbHVtbixcblx0XHQuc2Vjb25kLWNvbHVtbiB7XG5cdFx0XHR3aWR0aDogNDUlO1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0fVxuXG5cdFx0LmZpcnN0LWNvbHVtbiB7XG5cblx0XHR9XG5cblx0XHQuc2Vjb25kLWNvbHVtbiB7XG5cdFx0XHRmbG9hdDogcmlnaHQ7XG5cblx0XHRcdHVsIHtcblx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR1bCB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdGhlaWdodDogMjUwcHg7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0b3ZlcmZsb3cteTogYXV0bztcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggI2VlZSBzb2xpZDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cblx0XHRcdFx0bGFiZWwge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdHBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDMycHg7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcblxuXHRcdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJG9yYW5nZTtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCY6YmVmb3JlIHtcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwiXFxmMGM4XCI7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2RkZDtcblx0XHRcdFx0XHRcdGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE2cHgvMSBGb250QXdlc29tZTtcblx0XHRcdFx0XHRcdHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuXHRcdFx0XHRcdFx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cdFx0XHRcdFx0XHQtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdFx0dG9wOiAxMnB4O1xuXHRcdFx0XHRcdFx0bGVmdDogMTBweDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLmNoZWNrZWQge1xuXHRcdFx0XHRcdFx0b3BhY2l0eTogMC42O1xuXG5cdFx0XHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwiXFxmMTRhXCI7XG5cdFx0XHRcdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5wdXQge1xuXHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQuYWxsIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdFx0bWFyZ2luOiAxMHB4IDAgMDtcblx0XHR9XG5cdH1cblxuXHQvLyBPdGhlciBJbXBvcnRlcnMuIChUb29scylcblx0I3dwZm9ybXMtaW1wb3J0ZXItYW5hbHl6ZSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblxuXHRcdC5wcm9jZXNzLWNvdW50LFxuXHRcdHAge1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdH1cblxuXHRcdC51cGdyYWRlIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cblx0XHRcdGg1IHtcblx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRtYXJnaW46IDMwcHggMCAyMHB4IDA7XG5cdFx0XHR9XG5cblx0XHRcdGhyIHtcblx0XHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U0ZTRlNDtcblx0XHRcdFx0bWFyZ2luOiA0MHB4IDA7XG5cdFx0XHR9XG5cblx0XHRcdC53cGZvcm1zLWJ0biB7XG5cdFx0XHRcdG1hcmdpbi1yaWdodDogMTBweDtcblx0XHRcdH1cblxuXHRcdFx0dWwge1xuXHRcdFx0XHRsaSB7XG5cdFx0XHRcdFx0bGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuXHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiAxNHB4O1xuXG5cdFx0XHRcdFx0Ji5mb3JtIHtcblx0XHRcdFx0XHRcdGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblx0XHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiAwO1xuXHRcdFx0XHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBFeHBvcnQgZW50cmllcy4gKFRvb2xzKVxuXHQjd3Bmb3Jtcy10b29scy1lbnRyaWVzLWV4cG9ydCB7XG5cblx0XHRoNSB7XG5cdFx0XHRjbGVhcjogYm90aDtcblx0XHRcdG1hcmdpbjogMjBweCAwIDEwcHggMDtcblx0XHR9XG5cblx0XHRsYWJlbCB7XG5cdFx0XHRjbGVhcjogYm90aDtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0bWFyZ2luOiAzcHggMCAzcHggMDtcblx0XHR9XG5cblx0XHQuY2hvaWNlc2pzLXNlbGVjdC13cmFwIHtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0LmNob2ljZXMge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCN3cGZvcm1zLXRvb2xzLWVudHJpZXMtZXhwb3J0LXNlbGVjdGZvcm0tc3Bpbm5lciB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDZweDtcblx0XHRcdHJpZ2h0OiAtMzBweDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXRlLXNlbGVjdG9yIHtcblx0XHRcdHdpZHRoOiAyMDBweDtcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1zZWFyY2gtYm94LWZpZWxkIHtcblx0XHRcdHdpZHRoOiAyMDBweDtcblx0XHR9XG5cdFx0LndwZm9ybXMtc2VhcmNoLWJveC1jb21wYXJpc29uIHtcblx0XHRcdHdpZHRoOiAxNDBweDtcblx0XHR9XG5cdFx0LndwZm9ybXMtc2VhcmNoLWJveC10ZXJtIHtcblx0XHRcdHdpZHRoOiAzMDBweDtcblx0XHR9XG5cblx0XHRzZWN0aW9uIHtcblx0XHRcdG1hcmdpbi10b3A6IDIwcHg7XG5cdFx0fVxuXG5cdFx0aWZyYW1lIHtcblx0XHRcdHdpZHRoOiAwO1xuXHRcdFx0aGVpZ2h0OiAwO1xuXHRcdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWJ0bi10ZXh0IHtcblx0XHRcdG9wYWNpdHk6IDE7XG5cdFx0XHR0cmFuc2l0aW9uOiBhbGwgLjVzO1xuXHRcdH1cblx0XHQud3Bmb3Jtcy1idG4tc3Bpbm5lciB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRsZWZ0OiA1MCU7XG5cdFx0XHR0b3A6IDUwJTtcblx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXHRcdFx0b3BhY2l0eTogMDtcblx0XHRcdHRyYW5zaXRpb246IGFsbCAuNXM7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYnRuLXNwaW5uZXItb24ge1xuXHRcdFx0LndwZm9ybXMtYnRuLXRleHQge1xuXHRcdFx0XHRvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG5cdFx0XHRcdHRyYW5zaXRpb246IGFsbCAuNXM7XG5cdFx0XHR9XG5cdFx0XHQud3Bmb3Jtcy1idG4tc3Bpbm5lciB7XG5cdFx0XHRcdG9wYWNpdHk6IDEgIWltcG9ydGFudDtcblx0XHRcdFx0dHJhbnNpdGlvbjogYWxsIC41cztcblx0XHRcdH1cblx0XHRcdGN1cnNvcjogZGVmYXVsdDtcblx0XHRcdG9wYWNpdHk6IDAuNzU7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYnRuLXNwaW5uZXItb246aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2UyNzczMDtcblx0XHRcdGJvcmRlci1jb2xvcjogI2UyNzczMDtcblx0XHR9XG5cblx0XHQjd3Bmb3Jtcy10b29scy1lbnRyaWVzLWV4cG9ydC1wcm9jZXNzLW1zZyxcblx0XHQjd3Bmb3Jtcy10b29scy1lbnRyaWVzLWV4cG9ydC1zZWxlY3Rmb3JtLW1zZyB7XG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0Ym9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMjJBMEQwO1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNWVtO1xuXHRcdFx0bWFyZ2luOiAyMHB4IDAgMCAwO1xuXHRcdFx0cGFkZGluZzogMTBweDtcblxuXHRcdFx0Ji53cGZvcm1zLWVycm9yIHtcblx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjZGMzMjMyO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdCN3cGZvcm1zLWltcG9ydGVyLXByb2Nlc3Mge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cblx0XHQucHJvY2Vzcy1jb3VudCxcblx0XHQucHJvY2Vzcy1jb21wbGV0ZWQge1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdH1cblxuXHRcdC5wcm9jZXNzLWNvbXBsZXRlZCB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblxuXHRcdC5zdGF0dXMge1xuXHRcdFx0bWFyZ2luOiAyMHB4IDAgMzBweDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0bWF4LWhlaWdodDogODAwcHg7XG5cdFx0XHRvdmVyZmxvdy15OiBzY3JvbGw7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXG5cdFx0XHQuaXRlbS13cmFwIHtcblxuXHRcdFx0fVxuXG5cdFx0XHQuaXRlbSB7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0XHRwYWRkaW5nOiAyMHB4O1xuXG5cdFx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0XHRib3JkZXI6IG5vbmU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRcdFx0bWFyZ2luOiAxMnB4IDAgMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHVsIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRcdFx0bWFyZ2luOiAxMnB4IDAgMCAxNnB4O1xuXG5cdFx0XHRcdFx0bGkge1xuXHRcdFx0XHRcdFx0bGlzdC1zdHlsZTogZGlzYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQuc3RhdHVzLWljb24ge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRtYXJnaW46IDAgMTBweCAwIDA7XG5cblx0XHRcdFx0XHQmLmZhLWluZm8tY2lyY2xlIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjMDBhMGQyXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ji5mYS1jaGVjayB7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzQ2YjQ1MFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNmZmI5MDBcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLmZhLXRpbWVzLFxuXHRcdFx0XHRcdCYuZmEtZXhjbGFtYXRpb24tY2lyY2xlIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZGMzMjMyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5uYW1lIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQuYWN0aW9ucyB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRcdGZsb2F0OiByaWdodDtcblxuXHRcdFx0XHRcdC5zZXAge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNkZGQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTGl0ZSB1cGdyYWRlLlxuXHQuc2V0dGluZ3MtbGl0ZS1jdGF7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGFkYWRhO1xuXHRcdHBhZGRpbmc6IDI1cHggMjBweDtcblx0XHRtYXJnaW46IDEwcHggMCAwIDA7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0LmRpc21pc3Mge1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAxMHB4O1xuXHRcdFx0cmlnaHQ6IDEwcHg7XG5cdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHR9XG5cblx0XHRoNSB7XG5cdFx0XHRtYXJnaW46IDAgMCAxNnB4O1xuXHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHR9XG5cblx0XHRoNiB7XG5cdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweDtcblx0XHR9XG5cblx0XHRwIHtcblx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweDtcblxuXHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHR9XG5cblx0XHRcdGEge1xuXHRcdFx0XHRjb2xvcjogJG9yYW5nZTtcblxuXHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRjb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR1bCB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjw9cGhvbmVcIikge1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHR9XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwIDAgMnB4IDE2cHg7XG5cdFx0XHRcdGNvbG9yOiAjNTU1O1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0XHQmOmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogJysnO1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHR0b3A6IC0xcHg7XG5cdFx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5saXN0IHtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHggMDtcblx0XHRcdG92ZXJmbG93OiBhdXRvO1xuXHRcdFx0bWF4LXdpZHRoOiA5MDBweDtcblx0XHR9XG5cblx0XHQuZ3JlZW4ge1xuXHRcdFx0Y29sb3I6ICMyMTg5MDA7XG5cdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdH1cblxuXHRcdC5mYS1zdGFyIHtcblx0XHRcdGNvbG9yOiAjZmY5ODJkO1xuXHRcdH1cblx0fVxufVxuIiwiLy8gSW50ZWdyYXRpb25zIHRhYiBjb250ZW50LlxuLy8gTGVnYWN5IENTUyBhbmQgc2hvdWxkIGJlIGNsZWFuZWQgdXAgd2hlbiB0aW1lIHBlcm1pdHMuXG4jd3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlcnMge1xuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyIHtcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcblx0XHRwYWRkaW5nOiAzMHB4IDA7XG5cblx0XHQmLmZvY3VzLW91dCB7XG5cdFx0XHRvcGFjaXR5OiAwLjQ7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItaGVhZGVyIHtcblx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0bWF4LXdpZHRoOiAxMDAwcHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1sb2dvIHtcblx0XHRmbG9hdDogbGVmdDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHQuZmEge1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiA1MCU7XG5cdFx0XHRtYXJnaW46IC05cHggMCAwIDA7XG5cdFx0XHRsZWZ0OiAxMHB4O1xuXHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0fVxuXG5cdFx0aW1nIHtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0bWF4LXdpZHRoOiA5MHB4O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRtYXJnaW46IDAgMCAwIDQwcHg7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItaW5mbyB7XG5cdFx0bWFyZ2luOiAwIDAgMCAxNjBweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZzogMjBweCAwIDA7XG5cblx0XHRoMyB7XG5cdFx0XHRtYXJnaW46IDAgMCAxMHB4IDA7XG5cdFx0XHRmb250LXNpemU6IDIwcHg7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdH1cblxuXHRcdC5jb25uZWN0ZWQtaW5kaWNhdG9yIHtcblx0XHRcdGNvbG9yOiAjODNjMTFmO1xuXHRcdFx0d2lkdGg6IDEzNXB4O1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgIzgzYzExZjtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcblx0XHRcdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAyOHB4O1xuXHRcdFx0cmlnaHQ6IDA7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblx0fVxuXG5cdC5jb25uZWN0ZWQgLndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItaW5mbyAuY29ubmVjdGVkLWluZGljYXRvciB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cyB7XG5cdFx0bWFyZ2luOiAwIDAgMCAxNjBweDtcblx0XHRkaXNwbGF5OiBub25lO1xuXHRcdG1heC13aWR0aDogODQwcHg7XG5cdH1cblxuXHQuZm9jdXMtaW4gLndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtbGlzdCB1bCB7XG5cdFx0cGFkZGluZzogMDtcblx0XHRtYXJnaW46IDA7XG5cblx0XHRsaSB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDEwcHggMDtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblxuXHRcdFx0JjpmaXJzdC1vZi10eXBlIHtcblx0XHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHR9XG5cblx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMTZweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzcGFuLmxhYmVsIHtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHR9XG5cblx0XHRzcGFuLmRhdGUge1xuXHRcdFx0Y29sb3I6ICM5OTk7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiAzNSU7XG5cdFx0fVxuXG5cdFx0c3Bhbi5yZW1vdmUge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0d2lkdGg6IDE1JTtcblx0XHRcdHRleHQtYWxpZ246IHJpZ2h0XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtY29ubmVjdCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0XHRwYWRkaW5nOiAyMHB4O1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRsaWdodEJsdWU7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgJGJsdWU7XG5cblx0XHRpbnB1dFt0eXBlPXRleHRdIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRcdGNvbG9yOiAjMzMzO1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogNXB4IDA7XG5cdFx0XHR3aWR0aDogNDAwcHg7XG5cdFx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXG5cdFx0XHQmOmZvY3VzIHtcblx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjYmJiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC5mb2N1cy1pbiAud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cy1jb25uZWN0ICB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cy1jb25uZWN0IC5mYSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzLWNvbm5lY3QgcCxcblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMgcCB7XG5cdFx0bWFyZ2luOiAwIDAgMTVweCAwO1xuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0fVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBR0FBOztpQ0FFaUM7QUFxQmpDLEFBQUEsUUFBUSxDQUFjO0VBQ3BCLFFBQVEsRUFBRSxRQUFRO0VBQ2xCLGFBQWEsRUFqQkssSUFBSTtFQWtCdEIsU0FBUyxFQXJCWSxJQUFJO0NBZ0MxQjs7QUFkRCxBQUlFLFFBSk0sQUFJTCxNQUFNLENBQUM7RUFBRSxPQUFPLEVBQUUsSUFBSTtDQUFJOztBQUo3QixBQUtFLFFBTE0sQUFLTCxXQUFXLENBQUM7RUFBRSxhQUFhLEVBQUUsQ0FBQztDQUFJOztBQUxyQyxBQU9DLFFBUE8sQUFNTCxZQUFZLENBQ2QsZUFBZSxFQVBoQixRQUFRLEFBTUwsWUFBWSxDQUNHLGVBQWUsQ0FBMkI7RUFDekQsZ0JBQWdCLEVBbkJTLE9BQU87RUFvQmhDLE1BQU0sRUFBRSxXQUFXO0VBQ25CLFdBQVcsRUFBRSxJQUFJO0NBQ2xCOztBQVhGLEFBWUMsUUFaTyxBQU1MLFlBQVksQ0FNZCxjQUFjLENBQWM7RUFBRSxNQUFNLEVBQUUsV0FBVztDQUFJOztBQUl0RCxBQUFBLFFBQVEsQ0FBQSxBQUFBLFNBQUMsRUFBVyxZQUFZLEFBQXZCLEVBQXNDO0VBQzdDLE1BQU0sRUFBRSxPQUFPO0NBeURoQjs7QUExREQsQUFHRSxRQUhNLENBQUEsQUFBQSxT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QUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxRQUFRO0NBQUU7O0FBQzlELEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFB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 */
assets/css/admin.min.css CHANGED
@@ -1 +1 @@
1
- .choices{position:relative;margin-bottom:24px;font-size:16px}.choices:focus{outline:none}.choices:last-child{margin-bottom:0}.choices.is-disabled .choices__inner,.choices.is-disabled .choices__input{background-color:#EAEAEA;cursor:not-allowed;user-select:none}.choices.is-disabled .choices__item{cursor:not-allowed}.choices[data-type*="select-one"]{cursor:pointer}.choices[data-type*="select-one"] .choices__inner{padding-bottom:3.0px}.choices[data-type*="select-one"] .choices__input{display:block;width:100% !important;padding:10px !important;border-bottom:1px solid #DDDDDD !important;background-color:#FFFFFF;margin:0 !important}.choices[data-type*="select-one"] .choices__button{background-image:url("../images/cross-inverse.svg");padding:0;background-size:8px;height:100%;position:absolute;top:50%;right:0;margin-top:-10px;margin-right:25px;height:20px;width:20px;border-radius:10em;opacity:.5}.choices[data-type*="select-one"] .choices__button:hover,.choices[data-type*="select-one"] .choices__button:focus{opacity:1}.choices[data-type*="select-one"] .choices__button:focus{box-shadow:0px 0px 0px 2px #0e6cad}.choices[data-type*="select-one"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:50%;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-one"].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*="select-one"][dir="rtl"]:after{left:11.5px;right:auto}.choices[data-type*="select-one"][dir="rtl"] .choices__button{right:auto;left:0;margin-left:25px;margin-right:0}.choices[data-type*="select-multiple"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:18px;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-multiple"].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*="select-multiple"] .choices__inner,.choices[data-type*="text"] .choices__inner{cursor:text}.choices[data-type*="select-multiple"] .choices__button,.choices[data-type*="text"] .choices__button{position:relative;display:inline-block;margin-top:0;margin-right:-4px;margin-bottom:0;margin-left:8px;padding-left:16px;border-left:1px solid #0a4f7e;background-image:url("../images/cross.svg");background-size:8px;width:8px;line-height:1;opacity:.75}.choices[data-type*="select-multiple"] .choices__button:hover,.choices[data-type*="select-multiple"] .choices__button:focus,.choices[data-type*="text"] .choices__button:hover,.choices[data-type*="text"] .choices__button:focus{opacity:1}.choices__inner{display:inline-block;vertical-align:top;width:100%;background-color:#fff;padding:4px 7.5px 1px;border:1px solid #DDDDDD;border-radius:3px;font-size:14px;min-height:35px;overflow:hidden}.is-focused .choices__inner,.is-open .choices__inner{border-color:#b7b7b7}.is-open .choices__inner{border-radius:3px 3px 0 0}.is-flipped.is-open .choices__inner{border-radius:0 0 3px 3px}.choices__list{margin:0;padding-left:0;list-style:none}.choices__list--single{display:inline-block;padding:4px 16px 4px 4px;width:100%}[dir="rtl"] .choices__list--single{padding-right:4px;padding-left:16px}.choices__list--single .choices__item{width:100%}.choices__list--multiple{display:inline}.choices__list--multiple .choices__item{display:inline-block;vertical-align:middle;border-radius:3px;padding:3px 10px;font-size:12px;font-weight:500;margin-right:4px;margin-top:0px;margin-bottom:3px;background-color:#0e6cad;border:1px solid #0c5d95;color:#FFFFFF;word-break:break-all}.choices__list--multiple .choices__item[data-deletable]{padding-right:5px}[dir="rtl"] .choices__list--multiple .choices__item{margin-right:0;margin-left:3.75px}.choices__list--multiple .choices__item.is-highlighted{background-color:#0c5d95;border:1px solid #0a4f7e}.is-disabled .choices__list--multiple .choices__item{background-color:#aaaaaa;border:1px solid #919191}.choices__list--dropdown{display:none;z-index:1;position:absolute;width:100%;background-color:#FFFFFF;border:1px solid #DDDDDD;top:100%;margin-top:-1px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow:hidden;word-break:break-all}.choices__list--dropdown.is-active{display:block}.is-open .choices__list--dropdown{border-color:#b7b7b7}.is-flipped .choices__list--dropdown{top:auto;bottom:100%;margin-top:0;margin-bottom:-1px;border-radius:.25rem .25rem 0 0}.choices__list--dropdown .choices__list{position:relative;max-height:300px;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position}.choices__list--dropdown .choices__item{position:relative;padding:10px;font-size:14px}[dir="rtl"] .choices__list--dropdown .choices__item{text-align:right}@media (min-width: 640px){.choices__list--dropdown .choices__item--selectable{padding-right:100px}.choices__list--dropdown .choices__item--selectable:after{content:attr(data-select-text);font-size:12px;opacity:0;position:absolute;right:10px;top:50%;transform:translateY(-50%)}[dir="rtl"] .choices__list--dropdown .choices__item--selectable{text-align:right;padding-left:100px;padding-right:10px}[dir="rtl"] .choices__list--dropdown .choices__item--selectable:after{right:auto;left:10px}}.choices__list--dropdown .choices__item--selectable.is-highlighted{background-color:#f2f2f2}.choices__list--dropdown .choices__item--selectable.is-highlighted:after{opacity:.5}.choices__item{cursor:default}.choices__item--selectable{cursor:pointer}.choices__item--disabled{cursor:not-allowed;user-select:none;opacity:.5}.choices__heading{font-weight:600;font-size:12px;padding:10px;border-bottom:1px solid #f7f7f7;color:gray}.choices__button{text-indent:-9999px;-webkit-appearance:none;appearance:none;border:0;background-color:transparent;background-repeat:no-repeat;background-position:center;cursor:pointer}.choices__button:focus{outline:none}.choices__input{display:inline-block;vertical-align:baseline !important;background-color:#f9f9f9;font-size:14px;margin:0 !important;border:0 !important;border-radius:0 !important;max-width:100%;min-height:0 !important;width:auto !important;padding:4px 0 4px 2px !important}.choices__input:focus{outline:0}[dir="rtl"] .choices__input{padding-right:2px;padding-left:0}.choices__placeholder{opacity:.5}.wpforms-admin-page .wpforms-btn{border:0;border-radius:3px;cursor:pointer;display:inline-block;margin:0;text-decoration:none;text-align:center;vertical-align:middle;white-space:nowrap;box-shadow:none}.wpforms-admin-page .wpforms-btn-block{display:block;width:100%}.wpforms-admin-page .wpforms-btn-md{font-size:13px;font-weight:600;padding:8px 12px;min-height:35px}.wpforms-admin-page .wpforms-btn-lg{font-size:16px;font-weight:600;padding:16px 28px}.wpforms-admin-page .wpforms-btn-orange{background-color:#e27730;border-color:#e27730;color:#fff}.wpforms-admin-page .wpforms-btn-orange:hover{background-color:#b85a1b;border-color:#b85a1b}.wpforms-admin-page .wpforms-btn-grey{background-color:#eee;border-color:#ccc;color:#666}.wpforms-admin-page .wpforms-btn-grey:hover{background-color:#d7d7d7;border-color:#ccc;color:#444}.wpforms-admin-page .wpforms-btn-light-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wpforms-admin-page .wpforms-btn-light-grey:hover{background-color:#eee;color:#444}.wpforms-admin-page .wpforms-btn-trans-green{background-color:none;color:#2a9b39}.wpforms-admin-page .wpforms-btn-trans-green:hover{background-color:#2a9b39;color:#fff}.wpforms-admin-page .wpforms-btn-trans-green .underline{position:relative}.wpforms-admin-page .wpforms-btn-trans-green .underline:after{content:" ";border-bottom:1px dashed #2a9b39;position:absolute;bottom:-5px;left:0;width:100%}.wpforms-admin-page .wpforms-btn-trans-green .dashicons{height:18px}body div.jconfirm *,body div.jconfirm *::before,body div.jconfirm *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body div.jconfirm div.jconfirm-box-container div.jconfirm-box{border-radius:0;box-shadow:0 2px 6px rgba(0,0,0,0.2)}body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,0.4);top:8px;right:8px}body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon:hover{color:rgba(0,0,0,0.8)}body div.jconfirm div.jconfirm-box div.jconfirm-title-c{margin:0 0 26px 0 !important;padding:0 !important}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c{margin:0 !important;color:#c4c4c4 !important}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-title{display:block;color:#333}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c+span.jconfirm-title{margin-top:20px !important}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane{margin-bottom:26px;display:block}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane .jconfirm-content{overflow:inherit}body div.jconfirm div.jconfirm-box div.jconfirm-content{font-size:16px;color:#555;line-height:1.4}body div.jconfirm div.jconfirm-box div.jconfirm-content.lite-upgrade p{font-size:18px;padding:0 20px}body div.jconfirm div.jconfirm-box div.jconfirm-content p{margin:0 0 16px;font-size:16px;line-height:1.5}body div.jconfirm div.jconfirm-box div.jconfirm-content p:last-of-type{margin:0}body div.jconfirm div.jconfirm-box div.jconfirm-content p.large{font-size:18px}body div.jconfirm div.jconfirm-box div.jconfirm-content p.small{font-size:14px}body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased{font-size:12px;color:#ccc;text-decoration:none}body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased:hover{text-decoration:underline}body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased{display:block;font-size:12px;color:#aaa;text-decoration:none;padding-top:20px}body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased:hover{color:#999;text-decoration:underline}body div.jconfirm div.jconfirm-box .discount-note{text-align:center;margin:30px 0 0}body div.jconfirm div.jconfirm-box .discount-note p{background-color:#faffac;margin:0 -30px;padding:24px 60px 20px;font-size:15px;color:#4d4d4d;position:relative}body div.jconfirm div.jconfirm-box .discount-note p:after{content:'\f058';display:inline-block;font:normal normal normal 14px/1 FontAwesome;background-color:#fff;font-size:26px;border-radius:50%;padding:5px 6px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:-20px;right:50%;margin-right:-18px;color:#3abc01}body div.jconfirm div.jconfirm-box .discount-note span{font-weight:700;color:#3abc01}body div.jconfirm div.jconfirm-box .discount-note a{color:#aaa;display:block;margin-top:12px}body div.jconfirm div.jconfirm-box input[type=text]{display:block;width:99%;border:1px solid #d6d6d6;padding:10px;box-shadow:none;margin:20px auto 0 auto}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode{margin:20px 0;text-align:center;font-size:24px;padding:8px 5px}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode:disabled{color:#333}body div.jconfirm div.jconfirm-box button.btn-confirm{background-color:#e27730;color:#fff;outline:none}body div.jconfirm div.jconfirm-box button.btn-confirm:hover{background-color:#b85a1b;border-color:#b85a1b}body div.jconfirm div.jconfirm-box button.btn-default{color:#666}body div.jconfirm div.jconfirm-box .error{display:none;color:red}body div.jconfirm div.jconfirm-box .wpforms-error{border:1px solid #ebccd1 !important}body div.jconfirm div.jconfirm-box .jconfirm-title-c .jconfirm-icon-c{-webkit-transition:none !important;transition:none !important;-webkit-transform:none !important;-ms-transform:none !important;transform:none !important;font-size:45px !important}body .choices{text-align:left}body .choices input[type=text].choices__input{display:inline-block !important}.wpforms-admin-page .wpforms-alert{padding:16px;margin-bottom:18px;border:1px solid transparent}.wpforms-admin-page .wpforms-alert h4{margin-top:0;color:inherit}.wpforms-admin-page .wpforms-alert p{margin:0 0 15px 0}.wpforms-admin-page .wpforms-alert p:last-of-type{margin:0}.wpforms-admin-page .wpforms-alert.wpforms-alert-nomargin{margin:0}.wpforms-admin-page .wpforms-alert.wpforms-alert-small{font-size:12px}.wpforms-admin-page .wpforms-alert.wpforms-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wpforms-admin-page .wpforms-alert.wpforms-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wpforms-admin-page .wpforms-alert.wpforms-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wpforms-admin-page .wpforms-alert.wpforms-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wpforms-flag{width:16px;height:16px;background:url(../images/flags.png) no-repeat;display:inline-block}.wpforms-flag.wpforms-flag-ad{background-position:-16px 0}.wpforms-flag.wpforms-flag-ae{background-position:-32px 0}.wpforms-flag.wpforms-flag-af{background-position:-48px 0}.wpforms-flag.wpforms-flag-ag{background-position:-64px 0}.wpforms-flag.wpforms-flag-ai{background-position:-80px 0}.wpforms-flag.wpforms-flag-al{background-position:-96px 0}.wpforms-flag.wpforms-flag-am{background-position:-112px 0}.wpforms-flag.wpforms-flag-an{background-position:-128px 0}.wpforms-flag.wpforms-flag-ao{background-position:-144px 0}.wpforms-flag.wpforms-flag-ar{background-position:-160px 0}.wpforms-flag.wpforms-flag-as{background-position:-176px 0}.wpforms-flag.wpforms-flag-at{background-position:-192px 0}.wpforms-flag.wpforms-flag-au{background-position:-208px 0}.wpforms-flag.wpforms-flag-aw{background-position:-224px 0}.wpforms-flag.wpforms-flag-az{background-position:0 -16px}.wpforms-flag.wpforms-flag-ba{background-position:-16px -16px}.wpforms-flag.wpforms-flag-bb{background-position:-32px -16px}.wpforms-flag.wpforms-flag-bd{background-position:-48px -16px}.wpforms-flag.wpforms-flag-be{background-position:-64px -16px}.wpforms-flag.wpforms-flag-bf{background-position:-80px -16px}.wpforms-flag.wpforms-flag-bg{background-position:-96px -16px}.wpforms-flag.wpforms-flag-bh{background-position:-112px -16px}.wpforms-flag.wpforms-flag-bi{background-position:-128px -16px}.wpforms-flag.wpforms-flag-bj{background-position:-144px -16px}.wpforms-flag.wpforms-flag-bm{background-position:-160px -16px}.wpforms-flag.wpforms-flag-bn{background-position:-176px -16px}.wpforms-flag.wpforms-flag-bo{background-position:-192px -16px}.wpforms-flag.wpforms-flag-br{background-position:-208px -16px}.wpforms-flag.wpforms-flag-bs{background-position:-224px -16px}.wpforms-flag.wpforms-flag-bt{background-position:0 -32px}.wpforms-flag.wpforms-flag-bw{background-position:-16px -32px}.wpforms-flag.wpforms-flag-by{background-position:-32px -32px}.wpforms-flag.wpforms-flag-bz{background-position:-48px -32px}.wpforms-flag.wpforms-flag-ca{background-position:-64px -32px}.wpforms-flag.wpforms-flag-cd{background-position:-80px -32px}.wpforms-flag.wpforms-flag-cf{background-position:-96px -32px}.wpforms-flag.wpforms-flag-cg{background-position:-112px -32px}.wpforms-flag.wpforms-flag-ch{background-position:-128px -32px}.wpforms-flag.wpforms-flag-ci{background-position:-144px -32px}.wpforms-flag.wpforms-flag-ck{background-position:-160px -32px}.wpforms-flag.wpforms-flag-cl{background-position:-176px -32px}.wpforms-flag.wpforms-flag-cm{background-position:-192px -32px}.wpforms-flag.wpforms-flag-cn{background-position:-208px -32px}.wpforms-flag.wpforms-flag-co{background-position:-224px -32px}.wpforms-flag.wpforms-flag-cr{background-position:0 -48px}.wpforms-flag.wpforms-flag-cu{background-position:-16px -48px}.wpforms-flag.wpforms-flag-cv{background-position:-32px -48px}.wpforms-flag.wpforms-flag-cy{background-position:-48px -48px}.wpforms-flag.wpforms-flag-cz{background-position:-64px -48px}.wpforms-flag.wpforms-flag-de{background-position:-80px -48px}.wpforms-flag.wpforms-flag-dj{background-position:-96px -48px}.wpforms-flag.wpforms-flag-dk{background-position:-112px -48px}.wpforms-flag.wpforms-flag-dm{background-position:-128px -48px}.wpforms-flag.wpforms-flag-do{background-position:-144px -48px}.wpforms-flag.wpforms-flag-dz{background-position:-160px -48px}.wpforms-flag.wpforms-flag-ec{background-position:-176px -48px}.wpforms-flag.wpforms-flag-ee{background-position:-192px -48px}.wpforms-flag.wpforms-flag-eg{background-position:-208px -48px}.wpforms-flag.wpforms-flag-eh{background-position:-224px -48px}.wpforms-flag.wpforms-flag-er{background-position:0 -64px}.wpforms-flag.wpforms-flag-es{background-position:-16px -64px}.wpforms-flag.wpforms-flag-et{background-position:-32px -64px}.wpforms-flag.wpforms-flag-fi{background-position:-48px -64px}.wpforms-flag.wpforms-flag-fj{background-position:-64px -64px}.wpforms-flag.wpforms-flag-fm{background-position:-80px -64px}.wpforms-flag.wpforms-flag-fo{background-position:-96px -64px}.wpforms-flag.wpforms-flag-fr{background-position:-112px -64px}.wpforms-flag.wpforms-flag-ga{background-position:-128px -64px}.wpforms-flag.wpforms-flag-gb{background-position:-144px -64px}.wpforms-flag.wpforms-flag-gd{background-position:-160px -64px}.wpforms-flag.wpforms-flag-ge{background-position:-176px -64px}.wpforms-flag.wpforms-flag-gg{background-position:-192px -64px}.wpforms-flag.wpforms-flag-gh{background-position:-208px -64px}.wpforms-flag.wpforms-flag-gi{background-position:-224px -64px}.wpforms-flag.wpforms-flag-gl{background-position:0 -80px}.wpforms-flag.wpforms-flag-gm{background-position:-16px -80px}.wpforms-flag.wpforms-flag-gn{background-position:-32px -80px}.wpforms-flag.wpforms-flag-gp{background-position:-48px -80px}.wpforms-flag.wpforms-flag-gq{background-position:-64px -80px}.wpforms-flag.wpforms-flag-gr{background-position:-80px -80px}.wpforms-flag.wpforms-flag-gt{background-position:-96px -80px}.wpforms-flag.wpforms-flag-gu{background-position:-112px -80px}.wpforms-flag.wpforms-flag-gw{background-position:-128px -80px}.wpforms-flag.wpforms-flag-gy{background-position:-144px -80px}.wpforms-flag.wpforms-flag-hk{background-position:-160px -80px}.wpforms-flag.wpforms-flag-hn{background-position:-176px -80px}.wpforms-flag.wpforms-flag-hr{background-position:-192px -80px}.wpforms-flag.wpforms-flag-ht{background-position:-208px -80px}.wpforms-flag.wpforms-flag-hu{background-position:-224px -80px}.wpforms-flag.wpforms-flag-id{background-position:0 -96px}.wpforms-flag.wpforms-flag-ie{background-position:-16px -96px}.wpforms-flag.wpforms-flag-il{background-position:-32px -96px}.wpforms-flag.wpforms-flag-im{background-position:-48px -96px}.wpforms-flag.wpforms-flag-in{background-position:-64px -96px}.wpforms-flag.wpforms-flag-iq{background-position:-80px -96px}.wpforms-flag.wpforms-flag-ir{background-position:-96px -96px}.wpforms-flag.wpforms-flag-is{background-position:-112px -96px}.wpforms-flag.wpforms-flag-it{background-position:-128px -96px}.wpforms-flag.wpforms-flag-je{background-position:-144px -96px}.wpforms-flag.wpforms-flag-jm{background-position:-160px -96px}.wpforms-flag.wpforms-flag-jo{background-position:-176px -96px}.wpforms-flag.wpforms-flag-jp{background-position:-192px -96px}.wpforms-flag.wpforms-flag-ke{background-position:-208px -96px}.wpforms-flag.wpforms-flag-kg{background-position:-224px -96px}.wpforms-flag.wpforms-flag-kh{background-position:0 -112px}.wpforms-flag.wpforms-flag-ki{background-position:-16px -112px}.wpforms-flag.wpforms-flag-km{background-position:-32px -112px}.wpforms-flag.wpforms-flag-kn{background-position:-48px -112px}.wpforms-flag.wpforms-flag-kp{background-position:-64px -112px}.wpforms-flag.wpforms-flag-kr{background-position:-80px -112px}.wpforms-flag.wpforms-flag-kw{background-position:-96px -112px}.wpforms-flag.wpforms-flag-ky{background-position:-112px -112px}.wpforms-flag.wpforms-flag-kz{background-position:-128px -112px}.wpforms-flag.wpforms-flag-la{background-position:-144px -112px}.wpforms-flag.wpforms-flag-lb{background-position:-160px -112px}.wpforms-flag.wpforms-flag-lc{background-position:-176px -112px}.wpforms-flag.wpforms-flag-li{background-position:-192px -112px}.wpforms-flag.wpforms-flag-lk{background-position:-208px -112px}.wpforms-flag.wpforms-flag-lr{background-position:-224px -112px}.wpforms-flag.wpforms-flag-ls{background-position:0 -128px}.wpforms-flag.wpforms-flag-lt{background-position:-16px -128px}.wpforms-flag.wpforms-flag-lu{background-position:-32px -128px}.wpforms-flag.wpforms-flag-lv{background-position:-48px -128px}.wpforms-flag.wpforms-flag-ly{background-position:-64px -128px}.wpforms-flag.wpforms-flag-ma{background-position:-80px -128px}.wpforms-flag.wpforms-flag-mc{background-position:-96px -128px}.wpforms-flag.wpforms-flag-md{background-position:-112px -128px}.wpforms-flag.wpforms-flag-me{background-position:-128px -128px}.wpforms-flag.wpforms-flag-mg{background-position:-144px -128px}.wpforms-flag.wpforms-flag-mh{background-position:-160px -128px}.wpforms-flag.wpforms-flag-mk{background-position:-176px -128px}.wpforms-flag.wpforms-flag-ml{background-position:-192px -128px}.wpforms-flag.wpforms-flag-mm{background-position:-208px -128px}.wpforms-flag.wpforms-flag-mn{background-position:-224px -128px}.wpforms-flag.wpforms-flag-mo{background-position:0 -144px}.wpforms-flag.wpforms-flag-mq{background-position:-16px -144px}.wpforms-flag.wpforms-flag-mr{background-position:-32px -144px}.wpforms-flag.wpforms-flag-ms{background-position:-48px -144px}.wpforms-flag.wpforms-flag-mt{background-position:-64px -144px}.wpforms-flag.wpforms-flag-mu{background-position:-80px -144px}.wpforms-flag.wpforms-flag-mv{background-position:-96px -144px}.wpforms-flag.wpforms-flag-mw{background-position:-112px -144px}.wpforms-flag.wpforms-flag-mx{background-position:-128px -144px}.wpforms-flag.wpforms-flag-my{background-position:-144px -144px}.wpforms-flag.wpforms-flag-mz{background-position:-160px -144px}.wpforms-flag.wpforms-flag-na{background-position:-176px -144px}.wpforms-flag.wpforms-flag-nc{background-position:-192px -144px}.wpforms-flag.wpforms-flag-ne{background-position:-208px -144px}.wpforms-flag.wpforms-flag-ng{background-position:-224px -144px}.wpforms-flag.wpforms-flag-ni{background-position:0 -160px}.wpforms-flag.wpforms-flag-nl{background-position:-16px -160px}.wpforms-flag.wpforms-flag-no{background-position:-32px -160px}.wpforms-flag.wpforms-flag-np{background-position:-48px -160px}.wpforms-flag.wpforms-flag-nr{background-position:-64px -160px}.wpforms-flag.wpforms-flag-nz{background-position:-80px -160px}.wpforms-flag.wpforms-flag-om{background-position:-96px -160px}.wpforms-flag.wpforms-flag-pa{background-position:-112px -160px}.wpforms-flag.wpforms-flag-pe{background-position:-128px -160px}.wpforms-flag.wpforms-flag-pf{background-position:-144px -160px}.wpforms-flag.wpforms-flag-pg{background-position:-160px -160px}.wpforms-flag.wpforms-flag-ph{background-position:-176px -160px}.wpforms-flag.wpforms-flag-pk{background-position:-192px -160px}.wpforms-flag.wpforms-flag-pl{background-position:-208px -160px}.wpforms-flag.wpforms-flag-pr{background-position:-224px -160px}.wpforms-flag.wpforms-flag-ps{background-position:0 -176px}.wpforms-flag.wpforms-flag-pt{background-position:-16px -176px}.wpforms-flag.wpforms-flag-pw{background-position:-32px -176px}.wpforms-flag.wpforms-flag-py{background-position:-48px -176px}.wpforms-flag.wpforms-flag-qa{background-position:-64px -176px}.wpforms-flag.wpforms-flag-re{background-position:-80px -176px}.wpforms-flag.wpforms-flag-ro{background-position:-96px -176px}.wpforms-flag.wpforms-flag-rs{background-position:-112px -176px}.wpforms-flag.wpforms-flag-ru{background-position:-128px -176px}.wpforms-flag.wpforms-flag-rw{background-position:-144px -176px}.wpforms-flag.wpforms-flag-sa{background-position:-160px -176px}.wpforms-flag.wpforms-flag-sb{background-position:-176px -176px}.wpforms-flag.wpforms-flag-sc{background-position:-192px -176px}.wpforms-flag.wpforms-flag-sd{background-position:-208px -176px}.wpforms-flag.wpforms-flag-se{background-position:-224px -176px}.wpforms-flag.wpforms-flag-sg{background-position:0 -192px}.wpforms-flag.wpforms-flag-si{background-position:-16px -192px}.wpforms-flag.wpforms-flag-sk{background-position:-32px -192px}.wpforms-flag.wpforms-flag-sl{background-position:-48px -192px}.wpforms-flag.wpforms-flag-sm{background-position:-64px -192px}.wpforms-flag.wpforms-flag-sn{background-position:-80px -192px}.wpforms-flag.wpforms-flag-so{background-position:-96px -192px}.wpforms-flag.wpforms-flag-sr{background-position:-112px -192px}.wpforms-flag.wpforms-flag-st{background-position:-128px -192px}.wpforms-flag.wpforms-flag-sv{background-position:-144px -192px}.wpforms-flag.wpforms-flag-sy{background-position:-160px -192px}.wpforms-flag.wpforms-flag-sz{background-position:-176px -192px}.wpforms-flag.wpforms-flag-tc{background-position:-192px -192px}.wpforms-flag.wpforms-flag-td{background-position:-208px -192px}.wpforms-flag.wpforms-flag-tg{background-position:-224px -192px}.wpforms-flag.wpforms-flag-th{background-position:0 -208px}.wpforms-flag.wpforms-flag-tj{background-position:-16px -208px}.wpforms-flag.wpforms-flag-tl{background-position:-32px -208px}.wpforms-flag.wpforms-flag-tm{background-position:-48px -208px}.wpforms-flag.wpforms-flag-tn{background-position:-64px -208px}.wpforms-flag.wpforms-flag-to{background-position:-80px -208px}.wpforms-flag.wpforms-flag-tr{background-position:-96px -208px}.wpforms-flag.wpforms-flag-tt{background-position:-112px -208px}.wpforms-flag.wpforms-flag-tv{background-position:-128px -208px}.wpforms-flag.wpforms-flag-tw{background-position:-144px -208px}.wpforms-flag.wpforms-flag-tz{background-position:-160px -208px}.wpforms-flag.wpforms-flag-ua{background-position:-176px -208px}.wpforms-flag.wpforms-flag-ug{background-position:-192px -208px}.wpforms-flag.wpforms-flag-us{background-position:-208px -208px}.wpforms-flag.wpforms-flag-uy{background-position:-224px -208px}.wpforms-flag.wpforms-flag-uz{background-position:0 -224px}.wpforms-flag.wpforms-flag-va{background-position:-16px -224px}.wpforms-flag.wpforms-flag-vc{background-position:-32px -224px}.wpforms-flag.wpforms-flag-ve{background-position:-48px -224px}.wpforms-flag.wpforms-flag-vg{background-position:-64px -224px}.wpforms-flag.wpforms-flag-vi{background-position:-80px -224px}.wpforms-flag.wpforms-flag-vn{background-position:-96px -224px}.wpforms-flag.wpforms-flag-vu{background-position:-112px -224px}.wpforms-flag.wpforms-flag-ws{background-position:-128px -224px}.wpforms-flag.wpforms-flag-ye{background-position:-144px -224px}.wpforms-flag.wpforms-flag-za{background-position:-160px -224px}.wpforms-flag.wpforms-flag-zm{background-position:-176px -224px}.wpforms-flag.wpforms-flag-zw{background-position:-192px -224px}#wpforms-header-temp{position:relative;margin:0;position:absolute;top:-1px;left:20px;right:20px;z-index:99}#wpforms-header{border-top:3px solid #e27730;padding:22px 20px}#wpforms-header img{display:block;margin:0;max-width:235px}@media (max-width: 782px){#wpforms-header img{max-width:200px}}.wpforms-admin-wrap .page-title{background-color:#fff;margin:0 0 20px 0;padding:15px 20px}.wpforms-admin-wrap .page-title .add-new-h2{margin-left:28px}.wpforms-admin-tabs{background-color:#fff;margin:0 0 20px 0;padding:0 20px;list-style:none;overflow:auto;font-size:14px}.wpforms-admin-tabs li{margin:0 30px 0 0;padding:0;float:left}.wpforms-admin-tabs li:last-of-type{margin:0}.wpforms-admin-tabs li a{color:#666;display:block;padding:20px 0 18px 0;text-decoration:none;border-bottom:2px solid #fff;box-shadow:none}.wpforms-admin-tabs li a:hover{border-color:#999}.wpforms-admin-tabs li a.active{border-color:#e27730}#wpcontent{padding-left:0 !important;position:relative}@media (max-width: 600px){#wpcontent{padding-top:46px}}@media (max-width: 600px){#wpbody{padding-top:0}}.wpforms-admin-page #screen-meta-links,.wpforms-admin-page #screen-meta{display:none}.wpforms-admin-page .video-container{position:relative;padding-bottom:56.1%;height:0;overflow:hidden}.wpforms-admin-page .video-container iframe,.wpforms-admin-page .video-container object,.wpforms-admin-page .video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.wpforms-admin-page .wpforms-file-upload input[type=file]{width:0.1px;height:0.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.wpforms-admin-page .wpforms-file-upload label{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;display:inline-block;overflow:hidden;padding:0}.wpforms-admin-page .wpforms-file-upload input[type=file]:focus+label,.wpforms-admin-page .wpforms-file-upload input[type=file].has-focus+label{outline:1px dotted #000;outline:-webkit-focus-ring-color auto 5px}.wpforms-admin-page .wpforms-file-upload .fld{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}.wpforms-admin-page .wpforms-file-upload .fld .placeholder{color:#ccc}.wpforms-admin-page .wpforms-file-upload strong .fa{margin-right:8px}.wpforms-admin-page .wpforms-hide{display:none}.wpforms-admin-page .wpforms-h1-placeholder{display:none}.wpforms-admin-page .notice{display:none}.wpforms-admin-wrap{margin:0}.wpforms-admin-wrap .notice{margin-left:20px !important;margin-right:20px !important}.wpforms-admin-content{padding-left:20px;padding-right:20px}.wpforms-admin-content:before{content:" ";display:table}.wpforms-admin-content:after{clear:both;content:" ";display:table}.wpforms-admin-content hr{border:none;border-top:1px solid #e4e4e4;margin:20px 0;background:none}.wpforms-clear:before{content:" ";display:table}.wpforms-clear:after{clear:both;content:" ";display:table}.wpforms-admin-columns>div[class*="-column-"]{float:left}.wpforms-admin-columns .wpforms-admin-column-20{width:20%}.wpforms-admin-columns .wpforms-admin-column-33{width:33.33333%}.wpforms-admin-columns .wpforms-admin-column-40{width:40%}.wpforms-admin-columns .wpforms-admin-column-50{width:50%}.wpforms-admin-columns .wpforms-admin-column-60{width:60%}.wpforms-admin-columns .wpforms-admin-column-80{width:80%}.wpforms-admin-columns .wpforms-admin-column-last{float:right !important}.wpforms-admin-columns:after{content:"";display:table;clear:both}#wpforms-overview .tablenav.top{margin-top:0}#wpforms-overview .wp-list-table .column-id{width:30px}#wpforms-overview .wp-list-table .column-entries{width:70px}#wpforms-overview .wp-list-table .column-shortcode{width:150px}#wpforms-overview .wp-list-table .column-created{width:145px}#wpforms-entries-single #poststuff{padding:0}#wpforms-entries-single .postbox .hndle{cursor:default !important}#wpforms-entries-single .wpforms-entry-navigation{font-size:13px;line-height:29px;float:right;position:relative;padding-top:2px;padding-right:1px;white-space:nowrap}@media (max-width: 600px){#wpforms-entries-single .wpforms-entry-navigation{display:none}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{top:auto;margin:0;padding:4px 0px;text-align:center}@media (max-width: 782px){#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{font-size:13px}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2 .dashicons{font-size:16px;height:auto;width:28px;line-height:29px}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2.inactive{opacity:0.5;pointer-events:none;cursor:default}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-navigation-text{display:inline-block;margin-right:10px}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-current{top:auto;margin:0 -5px 0 -3px;text-align:center;padding:4px 10px;position:relative;text-decoration:none;border:1px solid #ccc;-webkit-border-radius:2px;border-radius:2px;background:#fff;font-size:13px;line-height:29px;text-transform:center}#wpforms-entries-single #wpforms-entry-fields h2.hndle{font-size:18px}#wpforms-entries-single #wpforms-entry-fields h2.hndle .dashicons{font-size:16px;height:16px;width:16px;margin:4px 4px 0 0;color:#e27730}#wpforms-entries-single #wpforms-entry-fields .no-fields{padding:12px;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside p{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-name{font-weight:600;background:#ebf3fb;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-value{background:#fff;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .empty .wpforms-entry-field-value{font-style:italic;color:#999}#wpforms-entries-single #wpforms-entry-fields .wpforms-empty-field-toggle{float:right;text-decoration:none;padding:5px 0 0}#wpforms-entries-single #wpforms-entry-notes .inside{margin:0;padding:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-new{padding:10px}#wpforms-entries-single #wpforms-entry-notes form{display:none}#wpforms-entries-single #wpforms-entry-notes .btns{overflow:auto;padding:8px 0}#wpforms-entries-single #wpforms-entry-notes .no-notes{margin:0;padding:4px 10px 8px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single{padding:10px;border-top:1px solid #e3e1e3}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single p:last-of-type{margin-bottom:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single.even{background-color:#f9f9f9}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline{color:#888;margin-bottom:10px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .sep{color:#ddd}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .notes-user{text-decoration:none;font-weight:600}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete{color:#a00;text-decoration:none}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete:hover{color:red;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .inside,#wpforms-entries-single #wpforms-entry-payment .inside,#wpforms-entries-single #wpforms-entry-actions .inside{margin:0;padding:0}#wpforms-entries-single .wpforms-entry-details-meta,#wpforms-entries-single .wpforms-entry-actions-meta{padding:6px 0 0}#wpforms-entries-single .wpforms-entry-details-meta p,#wpforms-entries-single .wpforms-entry-payment-meta p,#wpforms-entries-single .wpforms-entry-actions-meta p{padding:6px 10px 8px;margin:0}#wpforms-entries-single .wpforms-entry-payment-meta{padding:0}#wpforms-entries-single .wpforms-entry-payment-meta p{border-bottom:1px solid #eee;padding:10px}#wpforms-entries-single .wpforms-entry-payment-meta p:last-of-type{border-bottom:0}#wpforms-entries-single .wpforms-entry-details-meta strong,#wpforms-entries-single .wpforms-entry-actions-meta strong{font-weight:600}#wpforms-entries-single .wpforms-entry-details-meta .dashicons,#wpforms-entries-single .wpforms-entry-actions-meta .dashicons{padding:0 2px 0 0;color:#82878A;top:-1px;left:-1px;position:relative;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .submitdelete{color:#a00;text-decoration:none;padding:1px 2px}#wpforms-entries-single #wpforms-entry-details .submitdelete:hover{color:red}#wpforms-entries-single .wpforms-entry-actions-meta a{text-decoration:none}#wpforms-entries-single .wpforms-entry-actions-meta a:hover{text-decoration:underline}#wpforms-entries-single #wpforms-entry-geolocation .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul{margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul li{border-bottom:1px solid #eee;margin:0;overflow:auto}#wpforms-entries-single #wpforms-entry-geolocation ul li:last-of-type{border-bottom:0}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-meta{width:85px;float:left;border-right:1px solid #eee;padding:10px 20px 10px 12px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-value{display:inline-block;padding:10px 12px 10px 20px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-flag{vertical-align:text-top;margin-right:4px}#wpforms-entries-list .form-details{border-bottom:1px solid #ddd;padding-bottom:15px;margin:0 0 10px}#wpforms-entries-list .form-details .form-details-sub{color:#999;display:block;font-size:10px;text-transform:uppercase;margin:0 0 8px 0}#wpforms-entries-list .form-details .form-details-title{float:left;font-size:18px;font-weight:400;margin:0}@media (max-width: 1199px){#wpforms-entries-list .form-details .form-details-title{float:none;margin-bottom:10px}}#wpforms-entries-list .form-details .form-selector{display:inline-block;position:relative}#wpforms-entries-list .form-details .form-selector .toggle{border-radius:50%;color:#444;font-size:16px;box-shadow:none}#wpforms-entries-list .form-details .form-selector .toggle:hover,#wpforms-entries-list .form-details .form-selector .toggle.active{background-color:#e3e3e3;outline:none}#wpforms-entries-list .form-details .form-selector .toggle:before{vertical-align:middle}#wpforms-entries-list .form-details .form-selector .form-list{display:none;background:#fff;border-radius:3px;box-shadow:0 2px 8px 0 rgba(0,0,0,0.1);position:absolute;top:27px;left:-108px;width:230px;padding:10px 0;z-index:9991}#wpforms-entries-list .form-details .form-selector .form-list:before{content:" ";position:absolute;top:-10px;left:110px;width:0;height:0;border-style:solid;border-width:0 8px 10px 8px;border-color:transparent transparent #fff transparent}#wpforms-entries-list .form-details .form-selector ul{max-height:196px;overflow-x:hidden;padding:0;margin:0}#wpforms-entries-list .form-details .form-selector ul li{list-style:none;margin:0;font-size:13px}#wpforms-entries-list .form-details .form-selector ul li a{display:block;text-decoration:none;padding:5px 15px;color:#444}#wpforms-entries-list .form-details .form-selector ul li a:hover{background-color:#f7f7f7}#wpforms-entries-list .form-details .form-details-actions{float:right}@media (max-width: 1199px){#wpforms-entries-list .form-details .form-details-actions{float:none}}#wpforms-entries-list .form-details .form-details-actions a{text-decoration:none;display:inline-block;margin:0 12px 0 0}#wpforms-entries-list .form-details .form-details-actions a:last-of-type{margin:0}#wpforms-entries-list .form-details .form-details-actions a .dashicons{width:16px;height:16px;font-size:16px}#wpforms-entries-list .search-box .wpforms-form-search-box-field{max-width:180px;vertical-align:top;margin:0 2px 0 0}#wpforms-entries-list .search-box .wpforms-form-search-box-comparison{max-width:90px;vertical-align:top;margin:0 2px 0 0}#wpforms-entries-list .search-box .wpforms-form-search-box-term{height:28px;margin:0 2px 0 0}#wpforms-entries-list .wpforms-filter-date .wpforms-filter-date-selector{height:28px;background-color:#fff;vertical-align:middle;max-width:210px}#wpforms-entries-list .wpforms-filter-date button{margin:1px 8px 0 0;vertical-align:top}#wpforms-entries-list .wp-list-table .new-entries-notification td{padding:0;text-align:center}#wpforms-entries-list .wp-list-table .new-entries-notification td a{display:none;padding:10px;background-color:#d9edf7}#wpforms-entries-list .wp-list-table .column-indicators{width:35px;text-align:center}#wpforms-entries-list .wp-list-table .column-indicators a:focus{-webkit-box-shadow:none;box-shadow:none}#wpforms-entries-list .wp-list-table .column-indicators .dashicons{width:14px;height:14px;font-size:14px;margin-top:3px}#wpforms-entries-list .wp-list-table .indicator-star .dashicons{margin-right:6px}#wpforms-entries-list .wp-list-table .indicator-star{color:#e4e4e4}#wpforms-entries-list .wp-list-table .indicator-star:hover,#wpforms-entries-list .wp-list-table .indicator-star.unstar{color:#e27730}#wpforms-entries-list .wp-list-table .indicator-read{color:#9ede84}#wpforms-entries-list .wp-list-table .indicator-read:hover,#wpforms-entries-list .wp-list-table .indicator-read.unread{color:#e4e4e4}#wpforms-entries-list .wp-list-table .column-date{width:150px}#wpforms-entries-list .wp-list-table .column-status{width:120px}#wpforms-entries-list .wp-list-table .column-status img{display:inline-block;height:12px;width:auto;margin:0 0 0 3px}#wpforms-entries-list .wp-list-table .column-payment_total{width:100px}#wpforms-entries-list .wp-list-table .column-actions{width:100px}#wpforms-entries-list .wp-list-table .sep{color:#ddd}#wpforms-entries-list .wp-list-table .delete:hover{color:red}#wpforms-entries-list #wpforms-entries-table-edit-columns{float:right;color:#ccc}#wpforms-entries-list #wpforms-entries-table-edit-columns:hover{color:#666}@media screen and (max-width: 782px){.wpforms-admin-content{padding-left:10px;padding-right:10px}.wp-list-table{margin:0 -10px 0 -10px;width:100vw;table-layout:auto}.wp-list-table.entries .column-indicators{width:auto !important}.wp-list-table.entries .indicators .indicator-star{display:none}.wp-list-table.entries .indicators .indicator-read{display:none}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary{height:8px;padding:0;z-index:+1;margin-right:0;overflow:visible}.wp-list-table.entries .toggle-row{right:5px;top:15px}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary+td{display:block !important}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary ~ td{margin-right:5px;min-width:50vw}p.search-box{margin:0;width:auto}input[type=checkbox],input[type=radio]{height:16px;width:16px}}#wpforms-welcome{border-top:3px solid #e27730;color:#555;padding-top:110px}@media (max-width: 767px){#wpforms-welcome{padding-top:64px}}#wpforms-welcome *,#wpforms-welcome *::before,#wpforms-welcome *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-welcome .container{margin:0 auto;max-width:720px;padding:0}#wpforms-welcome .block{padding:40px}@media (max-width: 767px){#wpforms-welcome .block{padding:20px}}#wpforms-welcome img{max-width:100%;height:auto}#wpforms-welcome h1{color:#222;font-size:24px;text-align:center;margin:0 0 16px 0}#wpforms-welcome h5{color:#222;font-size:16px;margin:0 0 8px 0}#wpforms-welcome h6{font-size:16px;font-weight:400;line-height:1.6;text-align:center;margin:0}#wpforms-welcome p{font-size:14px;margin:0 0 20px 0}#wpforms-welcome .button-wrap{max-width:590px;margin:0 auto 0 auto}#wpforms-welcome .button-wrap .left{float:left;width:50%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .left{float:none;width:100%;padding:0;margin-bottom:20px}}#wpforms-welcome .button-wrap .right{float:right;width:50%;padding-left:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .right{float:none;width:100%;padding:0}}#wpforms-welcome .intro{background-color:#fff;border:2px solid #e1e1e1;border-radius:2px;margin-bottom:30px;position:relative;padding-top:40px}#wpforms-welcome .intro .sullie{background-color:#fff;border:2px solid #e1e1e1;border-radius:50%;height:110px;width:110px;padding:18px 14px 0 14px;position:absolute;top:-58px;left:50%;margin-left:-55px}#wpforms-welcome .intro .video-thumbnail{display:block;margin:0 auto}#wpforms-welcome .intro .button-wrap{margin-top:25px}#wpforms-welcome .features{background-color:#fff;border:2px solid #e1e1e1;border-bottom:0;border-radius:2px 2px 0 0;position:relative;padding-top:20px;padding-bottom:20px}#wpforms-welcome .features .feature-list{margin-top:60px}#wpforms-welcome .features .feature-block{float:left;width:50%;padding-bottom:35px;overflow:auto}@media (max-width: 767px){#wpforms-welcome .features .feature-block{float:none;width:100%}}#wpforms-welcome .features .feature-block.first{padding-right:20px;clear:both}@media (max-width: 767px){#wpforms-welcome .features .feature-block.first{padding-right:0}}#wpforms-welcome .features .feature-block.last{padding-left:20px}@media (max-width: 767px){#wpforms-welcome .features .feature-block.last{padding-left:0}}#wpforms-welcome .features .feature-block img{float:left;max-width:46px}#wpforms-welcome .features .feature-block h5{margin-left:68px}#wpforms-welcome .features .feature-block p{margin:0;margin-left:68px}#wpforms-welcome .features .button-wrap{margin-top:25px;text-align:center}#wpforms-welcome .upgrade-cta{background-color:#000;border:2px solid #e1e1e1;border-top:0;border-bottom:0;color:#fff}#wpforms-welcome .upgrade-cta h2{color:#fff;font-size:20px;margin:0 0 30px 0}#wpforms-welcome .upgrade-cta ul{display:-ms-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;font-size:15px;margin:0;padding:0}#wpforms-welcome .upgrade-cta ul li{display:block;width:50%;margin:0 0 8px 0;padding:0}#wpforms-welcome .upgrade-cta ul li .dashicons{color:#2a9b39;margin-right:5px}#wpforms-welcome .upgrade-cta .left{float:left;width:66.666666%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .upgrade-cta .left{float:none;width:100%;padding-right:0;margin-bottom:20px}}#wpforms-welcome .upgrade-cta .right{float:right;width:33.333333%;padding:20px 0 0 20px;text-align:center}@media (max-width: 767px){#wpforms-welcome .upgrade-cta .right{float:none;width:100%;padding-left:0}}#wpforms-welcome .upgrade-cta .right h2{text-align:center;margin:0}#wpforms-welcome .upgrade-cta .right h2 span{display:inline-block;border-bottom:1px solid #555;padding:0 15px 12px}#wpforms-welcome .upgrade-cta .right .price{padding:26px 0}#wpforms-welcome .upgrade-cta .right .price .amount{font-size:48px;font-weight:600;position:relative;display:inline-block}#wpforms-welcome .upgrade-cta .right .price .amount:before{content:'$';position:absolute;top:-8px;left:-16px;font-size:18px}#wpforms-welcome .upgrade-cta .right .price .term{font-size:12px;display:inline-block}#wpforms-welcome .testimonials{background-color:#fff;border:2px solid #e1e1e1;border-top:0;padding:20px 0}#wpforms-welcome .testimonials .testimonial-block{margin:50px 0 0 0}#wpforms-welcome .testimonials .testimonial-block img{border-radius:50%;float:left;max-width:100px;box-shadow:0 0 18px rgba(0,0,0,0.2)}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block img{width:65px}}#wpforms-welcome .testimonials .testimonial-block p{font-size:14px;margin:0 0 12px 140px}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block p{margin-left:100px}}#wpforms-welcome .testimonials .testimonial-block p:last-of-type{margin-bottom:0}#wpforms-welcome .footer{background-color:#f1f1f1;border:2px solid #e1e1e1;border-top:0;border-radius:0 0 2px 2px}#wpforms-welcome.pro .features{border:2px solid #e1e1e1;margin-bottom:30px}#wpforms-welcome.pro .upgrade,#wpforms-welcome.pro .footer{display:none}#wpforms-welcome.pro .testimonials{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started .video-container{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started #wpfooter,.dashboard_page_wpforms-getting-started div.notice{display:none !important}#wpforms-admin-addons *,#wpforms-admin-addons *::before,#wpforms-admin-addons *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-addons .addons-container{margin-left:-20px;margin-right:-20px}#wpforms-admin-addons .unlock-msg{padding:0 20px;margin-top:-20px;clear:both}#wpforms-admin-addons #wpforms-admin-addons-search{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;vertical-align:middle;padding:7px 12px;margin:-3px 10px 0 0;width:200px;min-height:35px;float:right}#wpforms-admin-addons #wpforms-admin-addons-search:focus{border-color:#bbb}#wpforms-admin-addons .addon-container{padding:0 20px;float:left;width:33.333333%}@media (max-width: 1249px){#wpforms-admin-addons .addon-container{width:50%}}@media (max-width: 767px){#wpforms-admin-addons .addon-container{width:100%;margin-bottom:20px}}#wpforms-admin-addons h4{font-size:17px;font-weight:700}#wpforms-admin-addons .addon-item{background-color:#fff;border:1px solid #ddd;border-radius:3px;margin:0 0 40px 0}@media (max-width: 767px){#wpforms-admin-addons .addon-item{margin:0 0}}#wpforms-admin-addons .addon-item img{border:1px solid #eee;float:left;max-width:75px}#wpforms-admin-addons .addon-item h5{margin:0 0 10px 100px;font-size:16px}#wpforms-admin-addons .addon-item p{margin:0 0 0 100px}#wpforms-admin-addons .addon-item .details{padding:30px 20px}#wpforms-admin-addons .addon-item .actions{background-color:#f7f7f7;border-top:1px solid #ddd;padding:20px;position:relative}#wpforms-admin-addons .addon-item .actions .msg{background-color:#f7f7f7;position:absolute;text-align:center;font-weight:600;top:0;left:0;height:100%;width:100%;z-index:99;padding:20px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-ms-align-items:center;align-items:center;justify-content:center}#wpforms-admin-addons .addon-item .actions .msg.success{color:#2a9b39}#wpforms-admin-addons .addon-item .actions .msg.error{color:red}#wpforms-admin-addons .addon-item .status{float:left;padding-top:8px}#wpforms-admin-addons .addon-item .status .status-inactive{color:red}#wpforms-admin-addons .addon-item .status .status-download{color:#666}#wpforms-admin-addons .addon-item .status .status-active{color:#2a9b39}#wpforms-admin-addons .addon-item .upgrade-button{text-align:center}#wpforms-admin-addons .addon-item .upgrade-button a{font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button{float:right}#wpforms-admin-addons .addon-item .action-button button{background:none;border:1px solid #ddd;border-radius:3px;box-shadow:none;cursor:pointer;font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button button:hover,#wpforms-admin-addons .addon-item .action-button button.loading{background-color:#e9e9e9}#wpforms-admin-addons .addon-item .action-button button .fa{margin-right:8px}#wpforms-admin-addons .addon-item .action-button button .fa.fa-spinner{margin-right:0}#wpforms-admin-addons .addon-item .action-button button.status-active .fa{color:#2a9b39}#wpforms-admin-addons .addon-item .action-button button.status-inactive .fa{color:red}#wpforms-admin-addons .addon-item .action-button button.status-download .fa{color:#999}#wpforms-admin-addons .addon-item .action-button button.disabled{cursor:default}#wpforms-admin-addons .addon-item .action-button button.loading .fa{color:#666}#wpforms-admin-about *,#wpforms-admin-about *::before,#wpforms-admin-about *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-about .wpforms-admin-about-section{margin:0 20px 20px;padding:30px;background:#fff;border:1px solid #DDDDDD;line-height:2}#wpforms-admin-about .wpforms-admin-about-section h1,#wpforms-admin-about .wpforms-admin-about-section h2,#wpforms-admin-about .wpforms-admin-about-section h3,#wpforms-admin-about .wpforms-admin-about-section h4,#wpforms-admin-about .wpforms-admin-about-section h5{margin-top:0;padding-top:0;line-height:1.6}#wpforms-admin-about .wpforms-admin-about-section h2{font-size:24px}#wpforms-admin-about .wpforms-admin-about-section h3{font-size:18px;margin-bottom:30px;color:#23282C}#wpforms-admin-about .wpforms-admin-about-section ul,#wpforms-admin-about .wpforms-admin-about-section p{font-size:16px}#wpforms-admin-about .wpforms-admin-about-section p{margin-bottom:20px}#wpforms-admin-about .wpforms-admin-about-section p.bigger{font-size:18px}#wpforms-admin-about .wpforms-admin-about-section p.smaller{font-size:14px}#wpforms-admin-about .wpforms-admin-about-section p:last-child{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section hr{margin:30px 0}#wpforms-admin-about .wpforms-admin-about-section figure{margin:0}#wpforms-admin-about .wpforms-admin-about-section figure img{width:100%}#wpforms-admin-about .wpforms-admin-about-section figure figcaption{font-size:14px;color:#888888;margin-top:5px;text-align:center;line-height:initial}#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-40{padding-left:15px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-40{width:100%;padding-left:0;padding-top:20px}}#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-60{padding-right:15px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-60{width:100%;padding-right:0}}#wpforms-admin-about .wpforms-admin-about-section ul.list-plain{margin-top:0;margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section ul.list-plain li{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section ul.list-features li .fa{color:#2a9b39;margin:0 8px 0 0}#wpforms-admin-about .wpforms-admin-about-section .fa-star{color:gold}#wpforms-admin-about .wpforms-admin-about-section .no-margin{margin:0 !important}#wpforms-admin-about .wpforms-admin-about-section .no-padding{padding:0 !important}#wpforms-admin-about .wpforms-admin-about-section .centered{text-align:center !important}#wpforms-admin-about .wpforms-admin-about-section-first-form{display:flex}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form{display:block !important}}#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-text{flex:1;padding-right:30px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-text{flex:none}}#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-video iframe{border:1px solid #DDDDDD}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-video{padding-top:20px}}#wpforms-admin-about .wpforms-admin-about-section-hero{padding:0}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main,#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-extra{padding:30px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-extra .wpforms-admin-column-50{float:none;width:100%}}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main{background-color:#FAFAFA;border-bottom:1px solid #DDDDDD}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main.no-border{border-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main p{color:#666}#wpforms-admin-about .wpforms-admin-about-section-hero h3.call-to-action{margin-bottom:-10px}#wpforms-admin-about .wpforms-admin-about-section-hero span.price-20-off{color:#6AB255}#wpforms-admin-about .wpforms-admin-about-section-squashed{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-squashed:not(:last-of-type){border-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-post h2{margin-bottom:-10px}#wpforms-admin-about .wpforms-admin-about-section-post h3{margin-bottom:15px}#wpforms-admin-about .wpforms-admin-about-section-post p:last-of-type{margin-bottom:30px}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20{padding-right:20px;width:auto}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20 img{width:270px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20{width:20%}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20 img{width:auto;max-width:100%}}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-80{padding-left:20px;width:calc(100% - 20px - 270px)}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-80{width:80%}}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link{padding:10px 15px;background-color:#DF7739;color:#fff;border-radius:3px;text-decoration:none;margin-top:15px;font-size:14px}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link:hover{background-color:#B85A1B}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link .fa{color:#EDBA9E;vertical-align:middle;margin-left:8px}#wpforms-admin-about .wpforms-admin-about-section-table table{border-collapse:collapse}#wpforms-admin-about .wpforms-admin-about-section-table table tr td{border-bottom:1px solid #DDDDDD;border-right:1px solid #DDDDDD;padding:30px;vertical-align:top}#wpforms-admin-about .wpforms-admin-about-section-table table tr td:last-of-type{border-right:0}#wpforms-admin-about .wpforms-admin-about-section-table table tr:last-child td{border-bottom:none}#wpforms-admin-about .wpforms-admin-about-section-table table p{background-repeat:no-repeat;background-size:15px auto;background-position:0 6px;margin:0}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-full{padding-left:30px;background-image:url(../images/about/icon-full.svg)}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-none{padding-left:30px;background-image:url(../images/about/icon-none.svg)}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-partial{padding-left:30px;background-position:-3px 0;background-size:23px auto;background-image:url(../images/about/icon-partial.svg)}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main{padding:0}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main h3{padding:30px 30px 30px 60px}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main .wpforms-admin-column-33:first-child h3{padding:30px}#wpforms-admin-about #wpforms-admin-addons{padding:0 30px}#wpforms-admin-about #wpforms-admin-addons .addon-container{padding:0 10px}#wpforms-admin-about #wpforms-admin-addons .addon-item .details{padding:20px}#wpforms-admin-about #wpforms-admin-addons .addon-item img{padding:10px}#wpforms-admin-about #wpforms-admin-addons .addon-item img[src*="-mi"]{padding:13px}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;-webkit-appearance:none;border-radius:3px;border:1px solid #cccccc;background:#f7f7f7;box-shadow:0 1px 0 #cccccc;font-weight:normal}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button:focus{background:#fafafa;border-color:#999;color:#23282d}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary:focus{background:#008ec2;border-color:#006799;color:#fff}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary .fa-spinner{color:#fff}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary{color:#555;border-color:#cccccc;background:#f7f7f7;box-shadow:0 1px 0 #cccccc}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary:focus{background:#fafafa;border-color:#999;color:#23282d}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.disabled{cursor:default}.wpforms-admin-settings *,.wpforms-admin-settings *::before,.wpforms-admin-settings *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wpforms-admin-settings .wpforms-setting-row{border-bottom:1px solid #e4e4e4;padding:30px 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row:first-of-type{padding-top:10px !important}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-row{padding:20px 0}}.wpforms-admin-settings .wpforms-setting-row.section-heading{padding:20px 0}.wpforms-admin-settings .wpforms-setting-row.section-heading.no-desc h4{margin:0}.wpforms-admin-settings .wpforms-setting-row.section-heading .wpforms-setting-field{margin:0;max-width:1000px}.wpforms-admin-settings .wpforms-setting-row.tools p,.wpforms-admin-settings .wpforms-setting-row.tools p:first-of-type{margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox input[type=checkbox]{float:left;margin:1px 0 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox .desc{margin:0 0 0 30px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license p.type{margin-top:12px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-text .wpforms-setting-label,.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-number .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-select .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field input[type=radio]{margin:-3px 10px 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field label{margin-right:30px;display:inline-block}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field label:before{content:" ";display:block;width:155px;height:180px;margin:0 0 10px 0}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-default:before{background:url(../images/settings-email-html.png) center center}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-none:before{background:url(../images/settings-email-plaintext.png) center center}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-image .wpforms-setting-field img{display:block;margin:0 0 20px 0;max-width:400px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .wpforms-color-picker{padding-left:40px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .minicolors-input-swatch{top:7px;left:7px;height:21px;width:21px;border-radius:2px}.wpforms-admin-settings .wpforms-setting-row h4{font-size:20px;font-weight:700;margin:0 0 6px 0}.wpforms-admin-settings .wpforms-setting-row h3{font-size:24px;font-weight:600;margin:0 0 20px 0}.wpforms-admin-settings .wpforms-setting-row p{margin:12px 0 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row p:first-of-type{margin:8px 0 0}.wpforms-admin-settings .wpforms-setting-row p.desc{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row p.discount-note{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row p.discount-note strong{color:green}.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=number],.wpforms-admin-settings .wpforms-setting-row input[type=password]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=number],.wpforms-admin-settings .wpforms-setting-row input[type=password]{width:300px}}.wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=number]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=password]:focus{border-color:#bbb}.wpforms-admin-settings .wpforms-setting-row input[type=number]{width:100px}.wpforms-admin-settings .wpforms-setting-row button{margin-right:10px}.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{display:block;max-width:400px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{width:300px}}.wpforms-admin-settings .wpforms-setting-row .progress-bar{background:#fff;border:1px solid #e27730;height:30px;width:100%;position:relative;border-radius:3px;margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete{border:1px solid #2a9b39}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete .bar{background-color:#2a9b39}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete .bar:after{content:none;display:none}.wpforms-admin-settings .wpforms-setting-row .progress-bar .bar{display:block;background:#e27730;height:100%;left:0;position:absolute;-webkit-transition:width 0.5s ease-in-out;-moz-transition:width 0.5s ease-in-out;-o-transition:width 0.5s ease-in-out;transition:width 0.5s ease-in-out}@-webkit-keyframes progress{to{background-position:60px 0}}@-moz-keyframes progress{to{background-position:60px 0}}@keyframes progress{to{background-position:60px 0}}.wpforms-admin-settings .wpforms-setting-row .progress-bar .bar:after{content:'';display:block;position:absolute;top:0;left:0;width:100%;height:100%;-webkit-animation:progress 1s linear infinite;-moz-animation:progress 1s linear infinite;animation:progress 1s linear infinite;background-repeat:repeat-x;background-size:60px 60px;background-image:-webkit-linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.wpforms-admin-settings .wpforms-setting-label{display:block;float:left;width:200px;padding:0}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-label{float:none;width:100%;padding-bottom:15px}}.wpforms-admin-settings .wpforms-setting-label label{display:block;font-weight:600}.wpforms-admin-settings .wpforms-setting-field{display:block;margin:0 0 0 200px;max-width:800px}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-field{margin:0}}.wpforms-admin-settings p.submit{margin:0;padding:25px 0}.wpforms-admin-settings .info-area,.wpforms-admin-settings .pre-error{display:block;width:100%;max-width:1000px;height:450px;font-family:Menlo,Monaco,monospace;font-size:12px;background:#fff;box-shadow:none;border:1px solid #ddd;white-space:pre;overflow:auto;padding:20px}.wpforms-admin-settings .pre-error{height:auto;max-height:250px;margin-bottom:20px}.wpforms-admin-settings .checkbox-multiselect-columns{max-width:600px;position:relative}.wpforms-admin-settings .checkbox-multiselect-columns:after{content:".";display:block;height:0;line-height:0;font-size:0;clear:both;min-height:0;visibility:hidden}.wpforms-admin-settings .checkbox-multiselect-columns:before{content:"\f0ec";color:#999;font:normal normal normal 20px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:130px;left:50%;margin:0 0 0 -10px}.wpforms-admin-settings .checkbox-multiselect-columns .header{font-weight:600;font-size:13px;margin:0;padding:0 0 5px 0;text-align:center}.wpforms-admin-settings .checkbox-multiselect-columns .first-column,.wpforms-admin-settings .checkbox-multiselect-columns .second-column{width:45%;float:left}.wpforms-admin-settings .checkbox-multiselect-columns .second-column{float:right}.wpforms-admin-settings .checkbox-multiselect-columns .second-column ul li{padding:10px}.wpforms-admin-settings .checkbox-multiselect-columns ul{background-color:#fff;border:1px solid #ddd;border-radius:3px;position:relative;height:250px;padding:0;overflow-y:auto;margin:0;list-style-type:none}.wpforms-admin-settings .checkbox-multiselect-columns ul li{border-bottom:1px #eee solid;margin:0;font-size:14px}.wpforms-admin-settings .checkbox-multiselect-columns ul li label{display:block;padding:10px 10px 10px 32px;position:relative;vertical-align:baseline}.wpforms-admin-settings .checkbox-multiselect-columns ul li label:hover{background-color:#e27730;color:#fff}.wpforms-admin-settings .checkbox-multiselect-columns ul li label:before{content:"\f0c8";color:#ddd;font:normal normal normal 16px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:12px;left:10px}.wpforms-admin-settings .checkbox-multiselect-columns ul li label.checked{opacity:0.6}.wpforms-admin-settings .checkbox-multiselect-columns ul li label.checked:before{content:"\f14a";color:#2a9b39}.wpforms-admin-settings .checkbox-multiselect-columns ul li input{display:none}.wpforms-admin-settings .checkbox-multiselect-columns .all{color:#999;display:inline-block;font-size:13px;margin:10px 0 0}.wpforms-admin-settings #wpforms-importer-analyze{display:none}.wpforms-admin-settings #wpforms-importer-analyze .process-count,.wpforms-admin-settings #wpforms-importer-analyze p{font-size:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade{display:none;font-size:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade h5{font-size:18px;font-weight:600;padding:0;margin:30px 0 20px 0}.wpforms-admin-settings #wpforms-importer-analyze .upgrade hr{border:none;border-bottom:1px solid #e4e4e4;margin:40px 0}.wpforms-admin-settings #wpforms-importer-analyze .upgrade .wpforms-btn{margin-right:10px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade ul li{list-style-type:disc;margin-left:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade ul li.form{list-style-type:none;margin-left:0;font-weight:700}.wpforms-admin-settings #wpforms-importer-process{display:none}.wpforms-admin-settings #wpforms-importer-process .process-count,.wpforms-admin-settings #wpforms-importer-process .process-completed{font-size:14px}.wpforms-admin-settings #wpforms-importer-process .process-completed{display:none}.wpforms-admin-settings #wpforms-importer-process .status{margin:20px 0 30px;background-color:#fff;border-radius:3px;border:1px solid #ddd;max-height:800px;overflow-y:scroll;display:none}.wpforms-admin-settings #wpforms-importer-process .status .item{border-bottom:1px solid #ddd;padding:20px}.wpforms-admin-settings #wpforms-importer-process .status .item:last-of-type{border:none}.wpforms-admin-settings #wpforms-importer-process .status .item p{font-size:13px;margin:12px 0 0}.wpforms-admin-settings #wpforms-importer-process .status .item ul{font-size:13px;margin:12px 0 0 16px}.wpforms-admin-settings #wpforms-importer-process .status .item ul li{list-style:disc}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon{display:inline-block;margin:0 10px 0 0}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-info-circle{color:#00a0d2}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-check{color:#46b450}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-triangle{color:#ffb900}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-times,.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-circle{color:red}.wpforms-admin-settings #wpforms-importer-process .status .item .name{font-size:14px;float:left}.wpforms-admin-settings #wpforms-importer-process .status .item .actions{font-size:14px;float:right}.wpforms-admin-settings #wpforms-importer-process .status .item .actions .sep{color:#ddd}.wpforms-admin-settings .settings-lite-cta{background-color:#fff;border:1px solid #dadada;padding:25px 20px;margin:10px 0 0 0;position:relative}.wpforms-admin-settings .settings-lite-cta .dismiss{position:absolute;top:10px;right:10px;color:#666;font-size:16px}.wpforms-admin-settings .settings-lite-cta h5{margin:0 0 16px;font-size:18px;font-weight:700}.wpforms-admin-settings .settings-lite-cta h6{font-weight:700;font-size:14px;margin:0 0 16px}.wpforms-admin-settings .settings-lite-cta p{color:#555;font-size:14px;margin:0 0 16px}.wpforms-admin-settings .settings-lite-cta p:last-of-type{margin:0}.wpforms-admin-settings .settings-lite-cta p a{color:#e27730}.wpforms-admin-settings .settings-lite-cta p a:hover{color:#b85a1b}.wpforms-admin-settings .settings-lite-cta ul{margin:0;padding:0;width:50%;float:left}@media (max-width: 600px){.wpforms-admin-settings .settings-lite-cta ul{width:100%;float:none}}.wpforms-admin-settings .settings-lite-cta ul li{margin:0;padding:0 0 2px 16px;color:#555;font-size:14px;position:relative}.wpforms-admin-settings .settings-lite-cta ul li:before{content:'+';position:absolute;top:-1px;left:0}.wpforms-admin-settings .settings-lite-cta .list{margin:0 0 16px 0;overflow:auto;max-width:900px}.wpforms-admin-settings .settings-lite-cta .green{color:#218900;font-weight:700}.wpforms-admin-settings .settings-lite-cta .fa-star{color:#ff982d}#wpforms-settings-providers .wpforms-settings-provider{border-bottom:1px solid #ddd;padding:30px 0}#wpforms-settings-providers .wpforms-settings-provider.focus-out{opacity:0.4}#wpforms-settings-providers .wpforms-settings-provider-header{cursor:pointer;max-width:1000px}#wpforms-settings-providers .wpforms-settings-provider-logo{float:left;position:relative}#wpforms-settings-providers .wpforms-settings-provider-logo .fa{position:absolute;top:50%;margin:-9px 0 0 0;left:10px;color:#666;font-size:18px}#wpforms-settings-providers .wpforms-settings-provider-logo img{background:#fff;border:1px solid #ddd;max-width:90px;display:block;margin:0 0 0 40px}#wpforms-settings-providers .wpforms-settings-provider-info{margin:0 0 0 160px;position:relative;padding:20px 0 0}#wpforms-settings-providers .wpforms-settings-provider-info h3{margin:0 0 10px 0;font-size:20px;font-weight:600}#wpforms-settings-providers .wpforms-settings-provider-info p{margin:0;font-size:14px}#wpforms-settings-providers .wpforms-settings-provider-info .connected-indicator{color:#83c11f;width:135px;border:1px solid #83c11f;border-radius:4px;padding:8px 14px;font-size:16px;position:absolute;top:28px;right:0;display:none}#wpforms-settings-providers .connected .wpforms-settings-provider-info .connected-indicator{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts{margin:0 0 0 160px;display:none;max-width:840px}#wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul{padding:0;margin:0}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li{border-bottom:1px solid #ddd;margin:0;padding:10px 0;font-size:14px}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:first-of-type{border-top:1px solid #ddd}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:last-of-type{margin-bottom:16px}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.label{float:left;width:50%}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.date{color:#999;float:left;width:35%}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.remove{float:right;width:15%;text-align:right}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect{display:none;padding:20px;background-color:#ebf3fb;border:1px solid #0e6cad}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:block;padding:7px 12px;margin:5px 0;width:400px;min-height:35px}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]:focus{border-color:#bbb}#wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts-connect{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect .fa{display:none}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect p,#wpforms-settings-providers .wpforms-settings-provider-accounts p{margin:0 0 15px 0;font-size:14px}
1
+ .choices{position:relative;margin-bottom:24px;font-size:16px}.choices:focus{outline:none}.choices:last-child{margin-bottom:0}.choices.is-disabled .choices__inner,.choices.is-disabled .choices__input{background-color:#EAEAEA;cursor:not-allowed;user-select:none}.choices.is-disabled .choices__item{cursor:not-allowed}.choices[data-type*="select-one"]{cursor:pointer}.choices[data-type*="select-one"] .choices__inner{padding-bottom:3.0px}.choices[data-type*="select-one"] .choices__input{display:block;width:100% !important;padding:10px !important;border-bottom:1px solid #DDDDDD !important;background-color:#FFFFFF;margin:0 !important}.choices[data-type*="select-one"] .choices__button{background-image:url("../images/cross-inverse.svg");padding:0;background-size:8px;height:100%;position:absolute;top:50%;right:0;margin-top:-10px;margin-right:25px;height:20px;width:20px;border-radius:10em;opacity:.5}.choices[data-type*="select-one"] .choices__button:hover,.choices[data-type*="select-one"] .choices__button:focus{opacity:1}.choices[data-type*="select-one"] .choices__button:focus{box-shadow:0px 0px 0px 2px #0e6cad}.choices[data-type*="select-one"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:50%;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-one"].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*="select-one"][dir="rtl"]:after{left:11.5px;right:auto}.choices[data-type*="select-one"][dir="rtl"] .choices__button{right:auto;left:0;margin-left:25px;margin-right:0}.choices[data-type*="select-multiple"]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:18px;margin-top:-2.5px;pointer-events:none}.choices[data-type*="select-multiple"].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*="select-multiple"] .choices__inner,.choices[data-type*="text"] .choices__inner{cursor:text}.choices[data-type*="select-multiple"] .choices__button,.choices[data-type*="text"] .choices__button{position:relative;display:inline-block;margin-top:0;margin-right:-4px;margin-bottom:0;margin-left:8px;padding-left:16px;border-left:1px solid #0a4f7e;background-image:url("../images/cross.svg");background-size:8px;width:8px;line-height:1;opacity:.75}.choices[data-type*="select-multiple"] .choices__button:hover,.choices[data-type*="select-multiple"] .choices__button:focus,.choices[data-type*="text"] .choices__button:hover,.choices[data-type*="text"] .choices__button:focus{opacity:1}.choices__inner{display:inline-block;vertical-align:top;width:100%;background-color:#fff;padding:4px 7.5px 1px;border:1px solid #DDDDDD;border-radius:3px;font-size:14px;min-height:35px;overflow:hidden}.is-focused .choices__inner,.is-open .choices__inner{border-color:#b7b7b7}.is-open .choices__inner{border-radius:3px 3px 0 0}.is-flipped.is-open .choices__inner{border-radius:0 0 3px 3px}.choices__list{margin:0;padding-left:0;list-style:none}.choices__list--single{display:inline-block;padding:4px 16px 4px 4px;width:100%}[dir="rtl"] .choices__list--single{padding-right:4px;padding-left:16px}.choices__list--single .choices__item{width:100%}.choices__list--multiple{display:inline}.choices__list--multiple .choices__item{display:inline-block;vertical-align:middle;border-radius:3px;padding:3px 10px;font-size:12px;font-weight:500;margin-right:4px;margin-top:0px;margin-bottom:3px;background-color:#0e6cad;border:1px solid #0c5d95;color:#FFFFFF;word-break:break-all}.choices__list--multiple .choices__item[data-deletable]{padding-right:5px}[dir="rtl"] .choices__list--multiple .choices__item{margin-right:0;margin-left:3.75px}.choices__list--multiple .choices__item.is-highlighted{background-color:#0c5d95;border:1px solid #0a4f7e}.is-disabled .choices__list--multiple .choices__item{background-color:#aaaaaa;border:1px solid #919191}.choices__list--dropdown{display:none;z-index:1;position:absolute;width:100%;background-color:#FFFFFF;border:1px solid #DDDDDD;top:100%;margin-top:-1px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow:hidden;word-break:break-all}.choices__list--dropdown.is-active{display:block}.is-open .choices__list--dropdown{border-color:#b7b7b7}.is-flipped .choices__list--dropdown{top:auto;bottom:100%;margin-top:0;margin-bottom:-1px;border-radius:.25rem .25rem 0 0}.choices__list--dropdown .choices__list{position:relative;max-height:300px;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position}.choices__list--dropdown .choices__item{position:relative;padding:10px;font-size:14px}[dir="rtl"] .choices__list--dropdown .choices__item{text-align:right}@media (min-width: 640px){.choices__list--dropdown .choices__item--selectable{padding-right:100px}.choices__list--dropdown .choices__item--selectable:after{content:attr(data-select-text);font-size:12px;opacity:0;position:absolute;right:10px;top:50%;transform:translateY(-50%)}[dir="rtl"] .choices__list--dropdown .choices__item--selectable{text-align:right;padding-left:100px;padding-right:10px}[dir="rtl"] .choices__list--dropdown .choices__item--selectable:after{right:auto;left:10px}}.choices__list--dropdown .choices__item--selectable.is-highlighted{background-color:#f2f2f2}.choices__list--dropdown .choices__item--selectable.is-highlighted:after{opacity:.5}.choices__item{cursor:default}.choices__item--selectable{cursor:pointer}.choices__item--disabled{cursor:not-allowed;user-select:none;opacity:.5}.choices__heading{font-weight:600;font-size:12px;padding:10px;border-bottom:1px solid #f7f7f7;color:gray}.choices__button{text-indent:-9999px;-webkit-appearance:none;appearance:none;border:0;background-color:transparent;background-repeat:no-repeat;background-position:center;cursor:pointer}.choices__button:focus{outline:none}.choices__input{display:inline-block;vertical-align:baseline !important;background-color:#f9f9f9;font-size:14px;margin:0 !important;border:0 !important;border-radius:0 !important;max-width:100%;min-height:0 !important;width:auto !important;padding:4px 0 4px 2px !important}.choices__input:focus{outline:0}[dir="rtl"] .choices__input{padding-right:2px;padding-left:0}.choices__placeholder{opacity:.5}.wpforms-admin-page .wpforms-btn{border:0;border-radius:3px;cursor:pointer;display:inline-block;margin:0;text-decoration:none;text-align:center;vertical-align:middle;white-space:nowrap;box-shadow:none}.wpforms-admin-page .wpforms-btn-block{display:block;width:100%}.wpforms-admin-page .wpforms-btn-md{font-size:13px;font-weight:600;padding:8px 12px;min-height:35px}.wpforms-admin-page .wpforms-btn-lg{font-size:16px;font-weight:600;padding:16px 28px}.wpforms-admin-page .wpforms-btn-orange{background-color:#e27730;border-color:#e27730;color:#fff}.wpforms-admin-page .wpforms-btn-orange:hover{background-color:#b85a1b;border-color:#b85a1b}.wpforms-admin-page .wpforms-btn-grey{background-color:#eee;border-color:#ccc;color:#666}.wpforms-admin-page .wpforms-btn-grey:hover{background-color:#d7d7d7;border-color:#ccc;color:#444}.wpforms-admin-page .wpforms-btn-light-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wpforms-admin-page .wpforms-btn-light-grey:hover{background-color:#eee;color:#444}.wpforms-admin-page .wpforms-btn-trans-green{background-color:none;color:#2a9b39}.wpforms-admin-page .wpforms-btn-trans-green:hover{background-color:#2a9b39;color:#fff}.wpforms-admin-page .wpforms-btn-trans-green .underline{position:relative}.wpforms-admin-page .wpforms-btn-trans-green .underline:after{content:" ";border-bottom:1px dashed #2a9b39;position:absolute;bottom:-5px;left:0;width:100%}.wpforms-admin-page .wpforms-btn-trans-green .dashicons{height:18px}body div.jconfirm *,body div.jconfirm *::before,body div.jconfirm *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body div.jconfirm div.jconfirm-box-container div.jconfirm-box{border-radius:0;box-shadow:0 2px 6px rgba(0,0,0,0.2)}body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,0.4);top:8px;right:8px}body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon:hover{color:rgba(0,0,0,0.8)}body div.jconfirm div.jconfirm-box div.jconfirm-title-c{margin:0 0 26px 0 !important;padding:0 !important}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c{margin:0 !important;color:#c4c4c4 !important}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-title{display:block;color:#333}body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c+span.jconfirm-title{margin-top:20px !important}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane{margin-bottom:26px;display:block}body div.jconfirm div.jconfirm-box div.jconfirm-content-pane .jconfirm-content{overflow:inherit}body div.jconfirm div.jconfirm-box div.jconfirm-content{font-size:16px;color:#555;line-height:1.4}body div.jconfirm div.jconfirm-box div.jconfirm-content.lite-upgrade p{font-size:18px;padding:0 20px}body div.jconfirm div.jconfirm-box div.jconfirm-content p{margin:0 0 16px;font-size:16px;line-height:1.5}body div.jconfirm div.jconfirm-box div.jconfirm-content p:last-of-type{margin:0}body div.jconfirm div.jconfirm-box div.jconfirm-content p.large{font-size:18px}body div.jconfirm div.jconfirm-box div.jconfirm-content p.small{font-size:14px}body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased{font-size:12px;color:#ccc;text-decoration:none}body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased:hover{text-decoration:underline}body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased{display:block;font-size:12px;color:#aaa;text-decoration:none;padding-top:20px}body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased:hover{color:#999;text-decoration:underline}body div.jconfirm div.jconfirm-box .discount-note{text-align:center;margin:30px 0 0}body div.jconfirm div.jconfirm-box .discount-note p{background-color:#faffac;margin:0 -30px;padding:24px 60px 20px;font-size:15px;color:#4d4d4d;position:relative}body div.jconfirm div.jconfirm-box .discount-note p:after{content:'\f058';display:inline-block;font:normal normal normal 14px/1 FontAwesome;background-color:#fff;font-size:26px;border-radius:50%;padding:5px 6px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:-20px;right:50%;margin-right:-18px;color:#3abc01}body div.jconfirm div.jconfirm-box .discount-note span{font-weight:700;color:#3abc01}body div.jconfirm div.jconfirm-box .discount-note a{color:#aaa;display:block;margin-top:12px}body div.jconfirm div.jconfirm-box input[type=text]{display:block;width:99%;border:1px solid #d6d6d6;padding:10px;box-shadow:none;margin:20px auto 0 auto}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode{margin:20px 0;text-align:center;font-size:24px;padding:8px 5px}body div.jconfirm div.jconfirm-box #wpforms-embed-shortcode:disabled{color:#333}body div.jconfirm div.jconfirm-box button.btn-confirm{background-color:#e27730;color:#fff;outline:none}body div.jconfirm div.jconfirm-box button.btn-confirm:hover{background-color:#b85a1b;border-color:#b85a1b}body div.jconfirm div.jconfirm-box button.btn-default{color:#666}body div.jconfirm div.jconfirm-box .error{display:none;color:red}body div.jconfirm div.jconfirm-box .wpforms-error{border:1px solid #ebccd1 !important}body div.jconfirm div.jconfirm-box .jconfirm-title-c .jconfirm-icon-c{-webkit-transition:none !important;transition:none !important;-webkit-transform:none !important;-ms-transform:none !important;transform:none !important;font-size:45px !important}body .choices{text-align:left}body .choices input[type=text].choices__input{display:inline-block !important}.wpforms-admin-page .wpforms-alert{padding:16px;margin-bottom:18px;border:1px solid transparent}.wpforms-admin-page .wpforms-alert h4{margin-top:0;color:inherit}.wpforms-admin-page .wpforms-alert p{margin:0 0 15px 0}.wpforms-admin-page .wpforms-alert p:last-of-type{margin:0}.wpforms-admin-page .wpforms-alert.wpforms-alert-nomargin{margin:0}.wpforms-admin-page .wpforms-alert.wpforms-alert-small{font-size:12px}.wpforms-admin-page .wpforms-alert.wpforms-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wpforms-admin-page .wpforms-alert.wpforms-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wpforms-admin-page .wpforms-alert.wpforms-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wpforms-admin-page .wpforms-alert.wpforms-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wpforms-flag{width:16px;height:16px;background:url(../images/flags.png) no-repeat;display:inline-block}.wpforms-flag.wpforms-flag-ad{background-position:-16px 0}.wpforms-flag.wpforms-flag-ae{background-position:-32px 0}.wpforms-flag.wpforms-flag-af{background-position:-48px 0}.wpforms-flag.wpforms-flag-ag{background-position:-64px 0}.wpforms-flag.wpforms-flag-ai{background-position:-80px 0}.wpforms-flag.wpforms-flag-al{background-position:-96px 0}.wpforms-flag.wpforms-flag-am{background-position:-112px 0}.wpforms-flag.wpforms-flag-an{background-position:-128px 0}.wpforms-flag.wpforms-flag-ao{background-position:-144px 0}.wpforms-flag.wpforms-flag-ar{background-position:-160px 0}.wpforms-flag.wpforms-flag-as{background-position:-176px 0}.wpforms-flag.wpforms-flag-at{background-position:-192px 0}.wpforms-flag.wpforms-flag-au{background-position:-208px 0}.wpforms-flag.wpforms-flag-aw{background-position:-224px 0}.wpforms-flag.wpforms-flag-az{background-position:0 -16px}.wpforms-flag.wpforms-flag-ba{background-position:-16px -16px}.wpforms-flag.wpforms-flag-bb{background-position:-32px -16px}.wpforms-flag.wpforms-flag-bd{background-position:-48px -16px}.wpforms-flag.wpforms-flag-be{background-position:-64px -16px}.wpforms-flag.wpforms-flag-bf{background-position:-80px -16px}.wpforms-flag.wpforms-flag-bg{background-position:-96px -16px}.wpforms-flag.wpforms-flag-bh{background-position:-112px -16px}.wpforms-flag.wpforms-flag-bi{background-position:-128px -16px}.wpforms-flag.wpforms-flag-bj{background-position:-144px -16px}.wpforms-flag.wpforms-flag-bm{background-position:-160px -16px}.wpforms-flag.wpforms-flag-bn{background-position:-176px -16px}.wpforms-flag.wpforms-flag-bo{background-position:-192px -16px}.wpforms-flag.wpforms-flag-br{background-position:-208px -16px}.wpforms-flag.wpforms-flag-bs{background-position:-224px -16px}.wpforms-flag.wpforms-flag-bt{background-position:0 -32px}.wpforms-flag.wpforms-flag-bw{background-position:-16px -32px}.wpforms-flag.wpforms-flag-by{background-position:-32px -32px}.wpforms-flag.wpforms-flag-bz{background-position:-48px -32px}.wpforms-flag.wpforms-flag-ca{background-position:-64px -32px}.wpforms-flag.wpforms-flag-cd{background-position:-80px -32px}.wpforms-flag.wpforms-flag-cf{background-position:-96px -32px}.wpforms-flag.wpforms-flag-cg{background-position:-112px -32px}.wpforms-flag.wpforms-flag-ch{background-position:-128px -32px}.wpforms-flag.wpforms-flag-ci{background-position:-144px -32px}.wpforms-flag.wpforms-flag-ck{background-position:-160px -32px}.wpforms-flag.wpforms-flag-cl{background-position:-176px -32px}.wpforms-flag.wpforms-flag-cm{background-position:-192px -32px}.wpforms-flag.wpforms-flag-cn{background-position:-208px -32px}.wpforms-flag.wpforms-flag-co{background-position:-224px -32px}.wpforms-flag.wpforms-flag-cr{background-position:0 -48px}.wpforms-flag.wpforms-flag-cu{background-position:-16px -48px}.wpforms-flag.wpforms-flag-cv{background-position:-32px -48px}.wpforms-flag.wpforms-flag-cy{background-position:-48px -48px}.wpforms-flag.wpforms-flag-cz{background-position:-64px -48px}.wpforms-flag.wpforms-flag-de{background-position:-80px -48px}.wpforms-flag.wpforms-flag-dj{background-position:-96px -48px}.wpforms-flag.wpforms-flag-dk{background-position:-112px -48px}.wpforms-flag.wpforms-flag-dm{background-position:-128px -48px}.wpforms-flag.wpforms-flag-do{background-position:-144px -48px}.wpforms-flag.wpforms-flag-dz{background-position:-160px -48px}.wpforms-flag.wpforms-flag-ec{background-position:-176px -48px}.wpforms-flag.wpforms-flag-ee{background-position:-192px -48px}.wpforms-flag.wpforms-flag-eg{background-position:-208px -48px}.wpforms-flag.wpforms-flag-eh{background-position:-224px -48px}.wpforms-flag.wpforms-flag-er{background-position:0 -64px}.wpforms-flag.wpforms-flag-es{background-position:-16px -64px}.wpforms-flag.wpforms-flag-et{background-position:-32px -64px}.wpforms-flag.wpforms-flag-fi{background-position:-48px -64px}.wpforms-flag.wpforms-flag-fj{background-position:-64px -64px}.wpforms-flag.wpforms-flag-fm{background-position:-80px -64px}.wpforms-flag.wpforms-flag-fo{background-position:-96px -64px}.wpforms-flag.wpforms-flag-fr{background-position:-112px -64px}.wpforms-flag.wpforms-flag-ga{background-position:-128px -64px}.wpforms-flag.wpforms-flag-gb{background-position:-144px -64px}.wpforms-flag.wpforms-flag-gd{background-position:-160px -64px}.wpforms-flag.wpforms-flag-ge{background-position:-176px -64px}.wpforms-flag.wpforms-flag-gg{background-position:-192px -64px}.wpforms-flag.wpforms-flag-gh{background-position:-208px -64px}.wpforms-flag.wpforms-flag-gi{background-position:-224px -64px}.wpforms-flag.wpforms-flag-gl{background-position:0 -80px}.wpforms-flag.wpforms-flag-gm{background-position:-16px -80px}.wpforms-flag.wpforms-flag-gn{background-position:-32px -80px}.wpforms-flag.wpforms-flag-gp{background-position:-48px -80px}.wpforms-flag.wpforms-flag-gq{background-position:-64px -80px}.wpforms-flag.wpforms-flag-gr{background-position:-80px -80px}.wpforms-flag.wpforms-flag-gt{background-position:-96px -80px}.wpforms-flag.wpforms-flag-gu{background-position:-112px -80px}.wpforms-flag.wpforms-flag-gw{background-position:-128px -80px}.wpforms-flag.wpforms-flag-gy{background-position:-144px -80px}.wpforms-flag.wpforms-flag-hk{background-position:-160px -80px}.wpforms-flag.wpforms-flag-hn{background-position:-176px -80px}.wpforms-flag.wpforms-flag-hr{background-position:-192px -80px}.wpforms-flag.wpforms-flag-ht{background-position:-208px -80px}.wpforms-flag.wpforms-flag-hu{background-position:-224px -80px}.wpforms-flag.wpforms-flag-id{background-position:0 -96px}.wpforms-flag.wpforms-flag-ie{background-position:-16px -96px}.wpforms-flag.wpforms-flag-il{background-position:-32px -96px}.wpforms-flag.wpforms-flag-im{background-position:-48px -96px}.wpforms-flag.wpforms-flag-in{background-position:-64px -96px}.wpforms-flag.wpforms-flag-iq{background-position:-80px -96px}.wpforms-flag.wpforms-flag-ir{background-position:-96px -96px}.wpforms-flag.wpforms-flag-is{background-position:-112px -96px}.wpforms-flag.wpforms-flag-it{background-position:-128px -96px}.wpforms-flag.wpforms-flag-je{background-position:-144px -96px}.wpforms-flag.wpforms-flag-jm{background-position:-160px -96px}.wpforms-flag.wpforms-flag-jo{background-position:-176px -96px}.wpforms-flag.wpforms-flag-jp{background-position:-192px -96px}.wpforms-flag.wpforms-flag-ke{background-position:-208px -96px}.wpforms-flag.wpforms-flag-kg{background-position:-224px -96px}.wpforms-flag.wpforms-flag-kh{background-position:0 -112px}.wpforms-flag.wpforms-flag-ki{background-position:-16px -112px}.wpforms-flag.wpforms-flag-km{background-position:-32px -112px}.wpforms-flag.wpforms-flag-kn{background-position:-48px -112px}.wpforms-flag.wpforms-flag-kp{background-position:-64px -112px}.wpforms-flag.wpforms-flag-kr{background-position:-80px -112px}.wpforms-flag.wpforms-flag-kw{background-position:-96px -112px}.wpforms-flag.wpforms-flag-ky{background-position:-112px -112px}.wpforms-flag.wpforms-flag-kz{background-position:-128px -112px}.wpforms-flag.wpforms-flag-la{background-position:-144px -112px}.wpforms-flag.wpforms-flag-lb{background-position:-160px -112px}.wpforms-flag.wpforms-flag-lc{background-position:-176px -112px}.wpforms-flag.wpforms-flag-li{background-position:-192px -112px}.wpforms-flag.wpforms-flag-lk{background-position:-208px -112px}.wpforms-flag.wpforms-flag-lr{background-position:-224px -112px}.wpforms-flag.wpforms-flag-ls{background-position:0 -128px}.wpforms-flag.wpforms-flag-lt{background-position:-16px -128px}.wpforms-flag.wpforms-flag-lu{background-position:-32px -128px}.wpforms-flag.wpforms-flag-lv{background-position:-48px -128px}.wpforms-flag.wpforms-flag-ly{background-position:-64px -128px}.wpforms-flag.wpforms-flag-ma{background-position:-80px -128px}.wpforms-flag.wpforms-flag-mc{background-position:-96px -128px}.wpforms-flag.wpforms-flag-md{background-position:-112px -128px}.wpforms-flag.wpforms-flag-me{background-position:-128px -128px}.wpforms-flag.wpforms-flag-mg{background-position:-144px -128px}.wpforms-flag.wpforms-flag-mh{background-position:-160px -128px}.wpforms-flag.wpforms-flag-mk{background-position:-176px -128px}.wpforms-flag.wpforms-flag-ml{background-position:-192px -128px}.wpforms-flag.wpforms-flag-mm{background-position:-208px -128px}.wpforms-flag.wpforms-flag-mn{background-position:-224px -128px}.wpforms-flag.wpforms-flag-mo{background-position:0 -144px}.wpforms-flag.wpforms-flag-mq{background-position:-16px -144px}.wpforms-flag.wpforms-flag-mr{background-position:-32px -144px}.wpforms-flag.wpforms-flag-ms{background-position:-48px -144px}.wpforms-flag.wpforms-flag-mt{background-position:-64px -144px}.wpforms-flag.wpforms-flag-mu{background-position:-80px -144px}.wpforms-flag.wpforms-flag-mv{background-position:-96px -144px}.wpforms-flag.wpforms-flag-mw{background-position:-112px -144px}.wpforms-flag.wpforms-flag-mx{background-position:-128px -144px}.wpforms-flag.wpforms-flag-my{background-position:-144px -144px}.wpforms-flag.wpforms-flag-mz{background-position:-160px -144px}.wpforms-flag.wpforms-flag-na{background-position:-176px -144px}.wpforms-flag.wpforms-flag-nc{background-position:-192px -144px}.wpforms-flag.wpforms-flag-ne{background-position:-208px -144px}.wpforms-flag.wpforms-flag-ng{background-position:-224px -144px}.wpforms-flag.wpforms-flag-ni{background-position:0 -160px}.wpforms-flag.wpforms-flag-nl{background-position:-16px -160px}.wpforms-flag.wpforms-flag-no{background-position:-32px -160px}.wpforms-flag.wpforms-flag-np{background-position:-48px -160px}.wpforms-flag.wpforms-flag-nr{background-position:-64px -160px}.wpforms-flag.wpforms-flag-nz{background-position:-80px -160px}.wpforms-flag.wpforms-flag-om{background-position:-96px -160px}.wpforms-flag.wpforms-flag-pa{background-position:-112px -160px}.wpforms-flag.wpforms-flag-pe{background-position:-128px -160px}.wpforms-flag.wpforms-flag-pf{background-position:-144px -160px}.wpforms-flag.wpforms-flag-pg{background-position:-160px -160px}.wpforms-flag.wpforms-flag-ph{background-position:-176px -160px}.wpforms-flag.wpforms-flag-pk{background-position:-192px -160px}.wpforms-flag.wpforms-flag-pl{background-position:-208px -160px}.wpforms-flag.wpforms-flag-pr{background-position:-224px -160px}.wpforms-flag.wpforms-flag-ps{background-position:0 -176px}.wpforms-flag.wpforms-flag-pt{background-position:-16px -176px}.wpforms-flag.wpforms-flag-pw{background-position:-32px -176px}.wpforms-flag.wpforms-flag-py{background-position:-48px -176px}.wpforms-flag.wpforms-flag-qa{background-position:-64px -176px}.wpforms-flag.wpforms-flag-re{background-position:-80px -176px}.wpforms-flag.wpforms-flag-ro{background-position:-96px -176px}.wpforms-flag.wpforms-flag-rs{background-position:-112px -176px}.wpforms-flag.wpforms-flag-ru{background-position:-128px -176px}.wpforms-flag.wpforms-flag-rw{background-position:-144px -176px}.wpforms-flag.wpforms-flag-sa{background-position:-160px -176px}.wpforms-flag.wpforms-flag-sb{background-position:-176px -176px}.wpforms-flag.wpforms-flag-sc{background-position:-192px -176px}.wpforms-flag.wpforms-flag-sd{background-position:-208px -176px}.wpforms-flag.wpforms-flag-se{background-position:-224px -176px}.wpforms-flag.wpforms-flag-sg{background-position:0 -192px}.wpforms-flag.wpforms-flag-si{background-position:-16px -192px}.wpforms-flag.wpforms-flag-sk{background-position:-32px -192px}.wpforms-flag.wpforms-flag-sl{background-position:-48px -192px}.wpforms-flag.wpforms-flag-sm{background-position:-64px -192px}.wpforms-flag.wpforms-flag-sn{background-position:-80px -192px}.wpforms-flag.wpforms-flag-so{background-position:-96px -192px}.wpforms-flag.wpforms-flag-sr{background-position:-112px -192px}.wpforms-flag.wpforms-flag-st{background-position:-128px -192px}.wpforms-flag.wpforms-flag-sv{background-position:-144px -192px}.wpforms-flag.wpforms-flag-sy{background-position:-160px -192px}.wpforms-flag.wpforms-flag-sz{background-position:-176px -192px}.wpforms-flag.wpforms-flag-tc{background-position:-192px -192px}.wpforms-flag.wpforms-flag-td{background-position:-208px -192px}.wpforms-flag.wpforms-flag-tg{background-position:-224px -192px}.wpforms-flag.wpforms-flag-th{background-position:0 -208px}.wpforms-flag.wpforms-flag-tj{background-position:-16px -208px}.wpforms-flag.wpforms-flag-tl{background-position:-32px -208px}.wpforms-flag.wpforms-flag-tm{background-position:-48px -208px}.wpforms-flag.wpforms-flag-tn{background-position:-64px -208px}.wpforms-flag.wpforms-flag-to{background-position:-80px -208px}.wpforms-flag.wpforms-flag-tr{background-position:-96px -208px}.wpforms-flag.wpforms-flag-tt{background-position:-112px -208px}.wpforms-flag.wpforms-flag-tv{background-position:-128px -208px}.wpforms-flag.wpforms-flag-tw{background-position:-144px -208px}.wpforms-flag.wpforms-flag-tz{background-position:-160px -208px}.wpforms-flag.wpforms-flag-ua{background-position:-176px -208px}.wpforms-flag.wpforms-flag-ug{background-position:-192px -208px}.wpforms-flag.wpforms-flag-us{background-position:-208px -208px}.wpforms-flag.wpforms-flag-uy{background-position:-224px -208px}.wpforms-flag.wpforms-flag-uz{background-position:0 -224px}.wpforms-flag.wpforms-flag-va{background-position:-16px -224px}.wpforms-flag.wpforms-flag-vc{background-position:-32px -224px}.wpforms-flag.wpforms-flag-ve{background-position:-48px -224px}.wpforms-flag.wpforms-flag-vg{background-position:-64px -224px}.wpforms-flag.wpforms-flag-vi{background-position:-80px -224px}.wpforms-flag.wpforms-flag-vn{background-position:-96px -224px}.wpforms-flag.wpforms-flag-vu{background-position:-112px -224px}.wpforms-flag.wpforms-flag-ws{background-position:-128px -224px}.wpforms-flag.wpforms-flag-ye{background-position:-144px -224px}.wpforms-flag.wpforms-flag-za{background-position:-160px -224px}.wpforms-flag.wpforms-flag-zm{background-position:-176px -224px}.wpforms-flag.wpforms-flag-zw{background-position:-192px -224px}#wpforms-header-temp{position:relative;margin:0;position:absolute;top:-1px;left:20px;right:20px;z-index:99}#wpforms-header{border-top:3px solid #e27730;padding:22px 20px}#wpforms-header img{display:block;margin:0;max-width:235px}@media (max-width: 782px){#wpforms-header img{max-width:200px}}.wpforms-admin-wrap .page-title{background-color:#fff;margin:0 0 20px 0;padding:15px 20px}.wpforms-admin-wrap .page-title .add-new-h2{margin-left:28px}.wpforms-admin-tabs{background-color:#fff;margin:0 0 20px 0;padding:0 20px;list-style:none;overflow:auto;font-size:14px}.wpforms-admin-tabs li{margin:0 30px 0 0;padding:0;float:left}.wpforms-admin-tabs li:last-of-type{margin:0}.wpforms-admin-tabs li a{color:#666;display:block;padding:20px 0 18px 0;text-decoration:none;border-bottom:2px solid #fff;box-shadow:none}.wpforms-admin-tabs li a:hover{border-color:#999}.wpforms-admin-tabs li a.active{border-color:#e27730}#wpcontent{padding-left:0 !important;position:relative}@media (max-width: 600px){#wpcontent{padding-top:46px}}@media (max-width: 600px){#wpbody{padding-top:0}}.wpforms-admin-page #screen-meta-links,.wpforms-admin-page #screen-meta{display:none}.wpforms-admin-page .video-container{position:relative;padding-bottom:56.1%;height:0;overflow:hidden}.wpforms-admin-page .video-container iframe,.wpforms-admin-page .video-container object,.wpforms-admin-page .video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.wpforms-admin-page .wpforms-file-upload input[type=file]{width:0.1px;height:0.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.wpforms-admin-page .wpforms-file-upload label{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;display:inline-block;overflow:hidden;padding:0}.wpforms-admin-page .wpforms-file-upload input[type=file]:focus+label,.wpforms-admin-page .wpforms-file-upload input[type=file].has-focus+label{outline:1px dotted #000;outline:-webkit-focus-ring-color auto 5px}.wpforms-admin-page .wpforms-file-upload .fld{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}.wpforms-admin-page .wpforms-file-upload .fld .placeholder{color:#ccc}.wpforms-admin-page .wpforms-file-upload strong .fa{margin-right:8px}.wpforms-admin-page .wpforms-hide{display:none}.wpforms-admin-page .wpforms-h1-placeholder{display:none}.wpforms-admin-page .notice{display:none}.wpforms-admin-wrap{margin:0}.wpforms-admin-wrap .notice{margin-left:20px !important;margin-right:20px !important}.wpforms-admin-content{padding-left:20px;padding-right:20px}.wpforms-admin-content:before{content:" ";display:table}.wpforms-admin-content:after{clear:both;content:" ";display:table}.wpforms-admin-content hr{border:none;border-top:1px solid #e4e4e4;margin:20px 0;background:none}.wpforms-clear:before{content:" ";display:table}.wpforms-clear:after{clear:both;content:" ";display:table}.wpforms-admin-columns>div[class*="-column-"]{float:left}.wpforms-admin-columns .wpforms-admin-column-20{width:20%}.wpforms-admin-columns .wpforms-admin-column-33{width:33.33333%}.wpforms-admin-columns .wpforms-admin-column-40{width:40%}.wpforms-admin-columns .wpforms-admin-column-50{width:50%}.wpforms-admin-columns .wpforms-admin-column-60{width:60%}.wpforms-admin-columns .wpforms-admin-column-80{width:80%}.wpforms-admin-columns .wpforms-admin-column-last{float:right !important}.wpforms-admin-columns:after{content:"";display:table;clear:both}#wpforms-overview .tablenav.top{margin-top:0}#wpforms-overview .wp-list-table .column-id{width:30px}#wpforms-overview .wp-list-table .column-entries{width:70px}#wpforms-overview .wp-list-table .column-shortcode{width:150px}#wpforms-overview .wp-list-table .column-created{width:145px}#wpforms-entries-single #poststuff{padding:0}#wpforms-entries-single .postbox .hndle{cursor:default !important}#wpforms-entries-single .wpforms-entry-navigation{font-size:13px;line-height:29px;float:right;position:relative;padding-top:2px;padding-right:1px;white-space:nowrap}@media (max-width: 600px){#wpforms-entries-single .wpforms-entry-navigation{display:none}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{top:auto;margin:0;padding:4px 0px;text-align:center}@media (max-width: 782px){#wpforms-entries-single .wpforms-entry-navigation .add-new-h2{font-size:13px}}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2 .dashicons{font-size:16px;height:auto;width:28px;line-height:29px}#wpforms-entries-single .wpforms-entry-navigation .add-new-h2.inactive{opacity:0.5;pointer-events:none;cursor:default}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-navigation-text{display:inline-block;margin-right:10px}#wpforms-entries-single .wpforms-entry-navigation .wpforms-entry-current{top:auto;margin:0 -5px 0 -3px;text-align:center;padding:4px 10px;position:relative;text-decoration:none;border:1px solid #ccc;-webkit-border-radius:2px;border-radius:2px;background:#fff;font-size:13px;line-height:29px;text-transform:center}#wpforms-entries-single #wpforms-entry-fields h2.hndle{font-size:18px}#wpforms-entries-single #wpforms-entry-fields h2.hndle .dashicons{font-size:16px;height:16px;width:16px;margin:4px 4px 0 0;color:#e27730}#wpforms-entries-single #wpforms-entry-fields .no-fields{padding:12px;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside p{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-name{font-weight:600;background:#ebf3fb;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .wpforms-entry-field-value{background:#fff;padding:8px 12px}#wpforms-entries-single #wpforms-entry-fields .inside .empty .wpforms-entry-field-value{font-style:italic;color:#999}#wpforms-entries-single #wpforms-entry-fields .wpforms-empty-field-toggle{float:right;text-decoration:none;padding:5px 0 0}#wpforms-entries-single #wpforms-entry-notes .inside{margin:0;padding:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-new{padding:10px}#wpforms-entries-single #wpforms-entry-notes form{display:none}#wpforms-entries-single #wpforms-entry-notes .btns{overflow:auto;padding:8px 0}#wpforms-entries-single #wpforms-entry-notes .no-notes{margin:0;padding:4px 10px 8px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single{padding:10px;border-top:1px solid #e3e1e3}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single p:last-of-type{margin-bottom:0}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-single.even{background-color:#f9f9f9}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline{color:#888;margin-bottom:10px}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .sep{color:#ddd}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .notes-user{text-decoration:none;font-weight:600}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete{color:#a00;text-decoration:none}#wpforms-entries-single #wpforms-entry-notes .wpforms-entry-notes-byline .note-delete:hover{color:red;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .inside,#wpforms-entries-single #wpforms-entry-payment .inside,#wpforms-entries-single #wpforms-entry-actions .inside{margin:0;padding:0}#wpforms-entries-single .wpforms-entry-details-meta,#wpforms-entries-single .wpforms-entry-actions-meta{padding:6px 0 0}#wpforms-entries-single .wpforms-entry-details-meta p,#wpforms-entries-single .wpforms-entry-payment-meta p,#wpforms-entries-single .wpforms-entry-actions-meta p{padding:6px 10px 8px;margin:0}#wpforms-entries-single .wpforms-entry-payment-meta{padding:0}#wpforms-entries-single .wpforms-entry-payment-meta p{border-bottom:1px solid #eee;padding:10px}#wpforms-entries-single .wpforms-entry-payment-meta p:last-of-type{border-bottom:0}#wpforms-entries-single .wpforms-entry-details-meta strong,#wpforms-entries-single .wpforms-entry-actions-meta strong{font-weight:600}#wpforms-entries-single .wpforms-entry-details-meta .dashicons,#wpforms-entries-single .wpforms-entry-actions-meta .dashicons{padding:0 2px 0 0;color:#82878A;top:-1px;left:-1px;position:relative;text-decoration:none}#wpforms-entries-single #wpforms-entry-details .submitdelete{color:#a00;text-decoration:none;padding:1px 2px}#wpforms-entries-single #wpforms-entry-details .submitdelete:hover{color:red}#wpforms-entries-single .wpforms-entry-actions-meta a{text-decoration:none}#wpforms-entries-single .wpforms-entry-actions-meta a:hover{text-decoration:underline}#wpforms-entries-single #wpforms-entry-geolocation .inside{padding:0;margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul{margin:0}#wpforms-entries-single #wpforms-entry-geolocation ul li{border-bottom:1px solid #eee;margin:0;overflow:auto}#wpforms-entries-single #wpforms-entry-geolocation ul li:last-of-type{border-bottom:0}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-meta{width:85px;float:left;border-right:1px solid #eee;padding:10px 20px 10px 12px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-geolocation-value{display:inline-block;padding:10px 12px 10px 20px}#wpforms-entries-single #wpforms-entry-geolocation .wpforms-flag{vertical-align:text-top;margin-right:4px}#wpforms-entries-list .form-details{border-bottom:1px solid #ddd;padding-bottom:15px;margin:0 0 10px}#wpforms-entries-list .form-details .form-details-sub{color:#999;display:block;font-size:10px;text-transform:uppercase;margin:0 0 8px 0}#wpforms-entries-list .form-details .form-details-title{float:left;font-size:18px;font-weight:400;margin:0}@media (max-width: 1199px){#wpforms-entries-list .form-details .form-details-title{float:none;margin-bottom:10px}}#wpforms-entries-list .form-details .form-selector{display:inline-block;position:relative}#wpforms-entries-list .form-details .form-selector .toggle{border-radius:50%;color:#444;font-size:16px;box-shadow:none}#wpforms-entries-list .form-details .form-selector .toggle:hover,#wpforms-entries-list .form-details .form-selector .toggle.active{background-color:#e3e3e3;outline:none}#wpforms-entries-list .form-details .form-selector .toggle:before{vertical-align:middle}#wpforms-entries-list .form-details .form-selector .form-list{display:none;background:#fff;border-radius:3px;box-shadow:0 2px 8px 0 rgba(0,0,0,0.1);position:absolute;top:27px;left:-108px;width:230px;padding:10px 0;z-index:9991}#wpforms-entries-list .form-details .form-selector .form-list:before{content:" ";position:absolute;top:-10px;left:110px;width:0;height:0;border-style:solid;border-width:0 8px 10px 8px;border-color:transparent transparent #fff transparent}#wpforms-entries-list .form-details .form-selector ul{max-height:196px;overflow-x:hidden;padding:0;margin:0}#wpforms-entries-list .form-details .form-selector ul li{list-style:none;margin:0;font-size:13px}#wpforms-entries-list .form-details .form-selector ul li a{display:block;text-decoration:none;padding:5px 15px;color:#444}#wpforms-entries-list .form-details .form-selector ul li a:hover{background-color:#f7f7f7}#wpforms-entries-list .form-details .form-details-actions{float:right}@media (max-width: 1199px){#wpforms-entries-list .form-details .form-details-actions{float:none}}#wpforms-entries-list .form-details .form-details-actions a{text-decoration:none;display:inline-block;margin:0 12px 0 0}#wpforms-entries-list .form-details .form-details-actions a:last-of-type{margin:0}#wpforms-entries-list .form-details .form-details-actions a .dashicons{width:16px;height:16px;font-size:16px}#wpforms-entries-list .search-box .wpforms-form-search-box-field{max-width:180px;vertical-align:top;margin:0 2px 0 0}#wpforms-entries-list .search-box .wpforms-form-search-box-comparison{max-width:90px;vertical-align:top;margin:0 2px 0 0}#wpforms-entries-list .search-box .wpforms-form-search-box-term{height:28px;margin:0 2px 0 0}#wpforms-entries-list .wpforms-filter-date .wpforms-filter-date-selector{height:28px;background-color:#fff;vertical-align:middle;max-width:210px}#wpforms-entries-list .wpforms-filter-date button{margin:1px 8px 0 0;vertical-align:top}#wpforms-entries-list .wp-list-table .new-entries-notification td{padding:0;text-align:center}#wpforms-entries-list .wp-list-table .new-entries-notification td a{display:none;padding:10px;background-color:#d9edf7}#wpforms-entries-list .wp-list-table .column-indicators{width:35px;text-align:center}#wpforms-entries-list .wp-list-table .column-indicators a:focus{-webkit-box-shadow:none;box-shadow:none}#wpforms-entries-list .wp-list-table .column-indicators .dashicons{width:14px;height:14px;font-size:14px;margin-top:3px}#wpforms-entries-list .wp-list-table .indicator-star .dashicons{margin-right:6px}#wpforms-entries-list .wp-list-table .indicator-star{color:#e4e4e4}#wpforms-entries-list .wp-list-table .indicator-star:hover,#wpforms-entries-list .wp-list-table .indicator-star.unstar{color:#e27730}#wpforms-entries-list .wp-list-table .indicator-read{color:#9ede84}#wpforms-entries-list .wp-list-table .indicator-read:hover,#wpforms-entries-list .wp-list-table .indicator-read.unread{color:#e4e4e4}#wpforms-entries-list .wp-list-table .column-date{width:150px}#wpforms-entries-list .wp-list-table .column-status{width:120px}#wpforms-entries-list .wp-list-table .column-status img{display:inline-block;height:12px;width:auto;margin:0 0 0 3px}#wpforms-entries-list .wp-list-table .column-payment_total{width:100px}#wpforms-entries-list .wp-list-table .column-actions{width:100px}#wpforms-entries-list .wp-list-table .sep{color:#ddd}#wpforms-entries-list .wp-list-table .delete:hover{color:red}#wpforms-entries-list #wpforms-entries-table-edit-columns{float:right;color:#ccc}#wpforms-entries-list #wpforms-entries-table-edit-columns:hover{color:#666}#wpforms-entries-list .wpforms-dash-widget-chart-block{padding:12px 12px 0 8px;background-color:#ffffff;border:1px solid #e5e5e5;margin-top:20px;box-shadow:0 1px 1px rgba(0,0,0,0.04)}#wpforms-entries-list .wpforms-dash-widget-chart-block .wpforms-error-no-data-chart{border:none}#wpforms-entries-list #wpforms-dash-widget-chart-title{margin-left:-12px;font-size:18px}#wpforms-entries-list .wpforms-dash-widget-block:first-child{margin-top:0}#wpforms-entries-list .wpforms-dash-widget-reset-chart{color:#d83638;opacity:1;vertical-align:text-bottom;margin:0 0 -1px 0}#wpforms-entries-list .wpforms-dash-widget-reset-chart:hover{color:#ad2b2c}#wpforms-entries-list .wpforms-dash-widget-reset-chart .dashicons{font-size:20px;height:20px;width:20px}#wpforms-entries-list #wpforms-dash-widget-timespan{margin:5px -12px 0 0}#wpforms-entries-list #wpforms-dash-widget-forms-list-block{overflow:visible}#wpforms-entries-list #wpforms-dash-widget-forms-list-table{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,0.04)}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-forms-list-columns td{padding:12px 20px;border-bottom:1px solid #e1e1e1}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tbody{border-top:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr{border-bottom:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:first-child{border-top:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:first-child td{border-top:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr:nth-child(even) td{background-color:#f9f9f9}#wpforms-entries-list #wpforms-dash-widget-forms-list-table td{text-align:left;padding:20px 20px;font-size:14px;border:none;color:#555;background-color:#fff}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr>td:nth-child(2){width:180px}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr>td:nth-child(3){width:60px;text-align:center}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr>td:nth-child(4){width:90px;text-align:center}#wpforms-entries-list #wpforms-dash-widget-forms-list-table tr>td:nth-child(5){width:60px;text-align:center;padding-top:0;padding-bottom:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active td:first-child{border-left:3px solid #0073aa;padding-left:17px}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active .wpforms-dash-widget-single-chart-btn{display:none !important}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-active .wpforms-dash-widget-reset-chart{display:inline-block !important;border:none;background:none;margin:0}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-forms-list-columns{background-color:#ffffff;border-bottom:1px solid #ddd}#wpforms-entries-list #wpforms-dash-widget-forms-list-table a{text-decoration:none}#wpforms-entries-list #wpforms-dash-widget-forms-list-table a:hover{text-decoration:none}#wpforms-entries-list #wpforms-dash-widget-forms-list-table .wpforms-dash-widget-form-title a{font-weight:600}@media screen and (max-width: 782px){.wpforms-admin-content{padding-left:10px;padding-right:10px}.wp-list-table{margin:0 -10px 0 -10px;width:100vw;table-layout:auto}.wp-list-table.entries .column-indicators{width:auto !important}.wp-list-table.entries .indicators .indicator-star{display:none}.wp-list-table.entries .indicators .indicator-read{display:none}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary{height:8px;padding:0;z-index:+1;margin-right:0;overflow:visible}.wp-list-table.entries .toggle-row{right:5px;top:15px}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary+td{display:block !important}.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary ~ td{margin-right:5px;min-width:50vw}p.search-box{margin:0;width:auto}input[type=checkbox],input[type=radio]{height:16px;width:16px}}#wpforms-welcome{border-top:3px solid #e27730;color:#555;padding-top:110px}@media (max-width: 767px){#wpforms-welcome{padding-top:64px}}#wpforms-welcome *,#wpforms-welcome *::before,#wpforms-welcome *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-welcome .container{margin:0 auto;max-width:720px;padding:0}#wpforms-welcome .block{padding:40px}@media (max-width: 767px){#wpforms-welcome .block{padding:20px}}#wpforms-welcome img{max-width:100%;height:auto}#wpforms-welcome h1{color:#222;font-size:24px;text-align:center;margin:0 0 16px 0}#wpforms-welcome h5{color:#222;font-size:16px;margin:0 0 8px 0}#wpforms-welcome h6{font-size:16px;font-weight:400;line-height:1.6;text-align:center;margin:0}#wpforms-welcome p{font-size:14px;margin:0 0 20px 0}#wpforms-welcome .button-wrap{max-width:590px;margin:0 auto 0 auto}#wpforms-welcome .button-wrap .left{float:left;width:50%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .left{float:none;width:100%;padding:0;margin-bottom:20px}}#wpforms-welcome .button-wrap .right{float:right;width:50%;padding-left:20px}@media (max-width: 767px){#wpforms-welcome .button-wrap .right{float:none;width:100%;padding:0}}#wpforms-welcome .intro{background-color:#fff;border:2px solid #e1e1e1;border-radius:2px;margin-bottom:30px;position:relative;padding-top:40px}#wpforms-welcome .intro .sullie{background-color:#fff;border:2px solid #e1e1e1;border-radius:50%;height:110px;width:110px;padding:18px 14px 0 14px;position:absolute;top:-58px;left:50%;margin-left:-55px}#wpforms-welcome .intro .video-thumbnail{display:block;margin:0 auto}#wpforms-welcome .intro .button-wrap{margin-top:25px}#wpforms-welcome .features{background-color:#fff;border:2px solid #e1e1e1;border-bottom:0;border-radius:2px 2px 0 0;position:relative;padding-top:20px;padding-bottom:20px}#wpforms-welcome .features .feature-list{margin-top:60px}#wpforms-welcome .features .feature-block{float:left;width:50%;padding-bottom:35px;overflow:auto}@media (max-width: 767px){#wpforms-welcome .features .feature-block{float:none;width:100%}}#wpforms-welcome .features .feature-block.first{padding-right:20px;clear:both}@media (max-width: 767px){#wpforms-welcome .features .feature-block.first{padding-right:0}}#wpforms-welcome .features .feature-block.last{padding-left:20px}@media (max-width: 767px){#wpforms-welcome .features .feature-block.last{padding-left:0}}#wpforms-welcome .features .feature-block img{float:left;max-width:46px}#wpforms-welcome .features .feature-block h5{margin-left:68px}#wpforms-welcome .features .feature-block p{margin:0;margin-left:68px}#wpforms-welcome .features .button-wrap{margin-top:25px;text-align:center}#wpforms-welcome .upgrade-cta{background-color:#000;border:2px solid #e1e1e1;border-top:0;border-bottom:0;color:#fff}#wpforms-welcome .upgrade-cta h2{color:#fff;font-size:20px;margin:0 0 30px 0}#wpforms-welcome .upgrade-cta ul{display:-ms-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;font-size:15px;margin:0;padding:0}#wpforms-welcome .upgrade-cta ul li{display:block;width:50%;margin:0 0 8px 0;padding:0}#wpforms-welcome .upgrade-cta ul li .dashicons{color:#2a9b39;margin-right:5px}#wpforms-welcome .upgrade-cta .left{float:left;width:66.666666%;padding-right:20px}@media (max-width: 767px){#wpforms-welcome .upgrade-cta .left{float:none;width:100%;padding-right:0;margin-bottom:20px}}#wpforms-welcome .upgrade-cta .right{float:right;width:33.333333%;padding:20px 0 0 20px;text-align:center}@media (max-width: 767px){#wpforms-welcome .upgrade-cta .right{float:none;width:100%;padding-left:0}}#wpforms-welcome .upgrade-cta .right h2{text-align:center;margin:0}#wpforms-welcome .upgrade-cta .right h2 span{display:inline-block;border-bottom:1px solid #555;padding:0 15px 12px}#wpforms-welcome .upgrade-cta .right .price{padding:26px 0}#wpforms-welcome .upgrade-cta .right .price .amount{font-size:48px;font-weight:600;position:relative;display:inline-block}#wpforms-welcome .upgrade-cta .right .price .amount:before{content:'$';position:absolute;top:-8px;left:-16px;font-size:18px}#wpforms-welcome .upgrade-cta .right .price .term{font-size:12px;display:inline-block}#wpforms-welcome .testimonials{background-color:#fff;border:2px solid #e1e1e1;border-top:0;padding:20px 0}#wpforms-welcome .testimonials .testimonial-block{margin:50px 0 0 0}#wpforms-welcome .testimonials .testimonial-block img{border-radius:50%;float:left;max-width:100px;box-shadow:0 0 18px rgba(0,0,0,0.2)}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block img{width:65px}}#wpforms-welcome .testimonials .testimonial-block p{font-size:14px;margin:0 0 12px 140px}@media (max-width: 767px){#wpforms-welcome .testimonials .testimonial-block p{margin-left:100px}}#wpforms-welcome .testimonials .testimonial-block p:last-of-type{margin-bottom:0}#wpforms-welcome .footer{background-color:#f1f1f1;border:2px solid #e1e1e1;border-top:0;border-radius:0 0 2px 2px}#wpforms-welcome.pro .features{border:2px solid #e1e1e1;margin-bottom:30px}#wpforms-welcome.pro .upgrade,#wpforms-welcome.pro .footer{display:none}#wpforms-welcome.pro .testimonials{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started .video-container{border:2px solid #e1e1e1}.dashboard_page_wpforms-getting-started #wpfooter,.dashboard_page_wpforms-getting-started div.notice{display:none !important}#wpforms-admin-addons *,#wpforms-admin-addons *::before,#wpforms-admin-addons *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-addons .addons-container{margin-left:-20px;margin-right:-20px}#wpforms-admin-addons .unlock-msg{padding:0 20px;margin-top:-20px;clear:both}#wpforms-admin-addons #wpforms-admin-addons-search{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;vertical-align:middle;padding:7px 12px;margin:-3px 10px 0 0;width:200px;min-height:35px;float:right}#wpforms-admin-addons #wpforms-admin-addons-search:focus{border-color:#bbb}#wpforms-admin-addons .addon-container{padding:0 20px;float:left;width:33.333333%}@media (max-width: 1249px){#wpforms-admin-addons .addon-container{width:50%}}@media (max-width: 767px){#wpforms-admin-addons .addon-container{width:100%;margin-bottom:20px}}#wpforms-admin-addons h4{font-size:17px;font-weight:700}#wpforms-admin-addons .addon-item{background-color:#fff;border:1px solid #ddd;border-radius:3px;margin:0 0 40px 0}@media (max-width: 767px){#wpforms-admin-addons .addon-item{margin:0 0}}#wpforms-admin-addons .addon-item img{border:1px solid #eee;float:left;max-width:75px}#wpforms-admin-addons .addon-item h5{margin:0 0 10px 100px;font-size:16px}#wpforms-admin-addons .addon-item p{margin:0 0 0 100px}#wpforms-admin-addons .addon-item .details{padding:30px 20px}#wpforms-admin-addons .addon-item .actions{background-color:#f7f7f7;border-top:1px solid #ddd;padding:20px;position:relative}#wpforms-admin-addons .addon-item .actions .msg{background-color:#f7f7f7;position:absolute;text-align:center;font-weight:600;top:0;left:0;height:100%;width:100%;z-index:99;padding:20px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-ms-align-items:center;align-items:center;justify-content:center}#wpforms-admin-addons .addon-item .actions .msg.success{color:#2a9b39}#wpforms-admin-addons .addon-item .actions .msg.error{color:red}#wpforms-admin-addons .addon-item .status{float:left;padding-top:8px}#wpforms-admin-addons .addon-item .status .status-inactive{color:red}#wpforms-admin-addons .addon-item .status .status-download{color:#666}#wpforms-admin-addons .addon-item .status .status-active{color:#2a9b39}#wpforms-admin-addons .addon-item .upgrade-button{text-align:center}#wpforms-admin-addons .addon-item .upgrade-button a{font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button{float:right}#wpforms-admin-addons .addon-item .action-button button{background:none;border:1px solid #ddd;border-radius:3px;box-shadow:none;cursor:pointer;font-weight:600;width:140px;text-align:center;padding:8px 5px}#wpforms-admin-addons .addon-item .action-button button:hover,#wpforms-admin-addons .addon-item .action-button button.loading{background-color:#e9e9e9}#wpforms-admin-addons .addon-item .action-button button .fa{margin-right:8px}#wpforms-admin-addons .addon-item .action-button button .fa.fa-spinner{margin-right:0}#wpforms-admin-addons .addon-item .action-button button.status-active .fa{color:#2a9b39}#wpforms-admin-addons .addon-item .action-button button.status-inactive .fa{color:red}#wpforms-admin-addons .addon-item .action-button button.status-download .fa{color:#999}#wpforms-admin-addons .addon-item .action-button button.disabled{cursor:default}#wpforms-admin-addons .addon-item .action-button button.loading .fa{color:#666}#wpforms-admin-about *,#wpforms-admin-about *::before,#wpforms-admin-about *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpforms-admin-about .wpforms-admin-about-section{margin:0 20px 20px;padding:30px;background:#fff;border:1px solid #DDDDDD;line-height:2}#wpforms-admin-about .wpforms-admin-about-section h1,#wpforms-admin-about .wpforms-admin-about-section h2,#wpforms-admin-about .wpforms-admin-about-section h3,#wpforms-admin-about .wpforms-admin-about-section h4,#wpforms-admin-about .wpforms-admin-about-section h5{margin-top:0;padding-top:0;line-height:1.6}#wpforms-admin-about .wpforms-admin-about-section h2{font-size:24px}#wpforms-admin-about .wpforms-admin-about-section h3{font-size:18px;margin-bottom:30px;color:#23282C}#wpforms-admin-about .wpforms-admin-about-section ul,#wpforms-admin-about .wpforms-admin-about-section p{font-size:16px}#wpforms-admin-about .wpforms-admin-about-section p{margin-bottom:20px}#wpforms-admin-about .wpforms-admin-about-section p.bigger{font-size:18px}#wpforms-admin-about .wpforms-admin-about-section p.smaller{font-size:14px}#wpforms-admin-about .wpforms-admin-about-section p:last-child{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section hr{margin:30px 0}#wpforms-admin-about .wpforms-admin-about-section figure{margin:0}#wpforms-admin-about .wpforms-admin-about-section figure img{width:100%}#wpforms-admin-about .wpforms-admin-about-section figure figcaption{font-size:14px;color:#888888;margin-top:5px;text-align:center;line-height:initial}#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-40{padding-left:15px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-40{width:100%;padding-left:0;padding-top:20px}}#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-60{padding-right:15px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section .wpforms-admin-column-60{width:100%;padding-right:0}}#wpforms-admin-about .wpforms-admin-about-section ul.list-plain{margin-top:0;margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section ul.list-plain li{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section ul.list-features li .fa{color:#2a9b39;margin:0 8px 0 0}#wpforms-admin-about .wpforms-admin-about-section .fa-star{color:gold}#wpforms-admin-about .wpforms-admin-about-section .no-margin{margin:0 !important}#wpforms-admin-about .wpforms-admin-about-section .no-padding{padding:0 !important}#wpforms-admin-about .wpforms-admin-about-section .centered{text-align:center !important}#wpforms-admin-about .wpforms-admin-about-section-first-form{display:flex}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form{display:block !important}}#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-text{flex:1;padding-right:30px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-text{flex:none}}#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-video iframe{border:1px solid #DDDDDD}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-first-form .wpforms-admin-about-section-first-form-video{padding-top:20px}}#wpforms-admin-about .wpforms-admin-about-section-hero{padding:0}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main,#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-extra{padding:30px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-extra .wpforms-admin-column-50{float:none;width:100%}}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main{background-color:#FAFAFA;border-bottom:1px solid #DDDDDD}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main.no-border{border-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-hero .wpforms-admin-about-section-hero-main p{color:#666}#wpforms-admin-about .wpforms-admin-about-section-hero h3.call-to-action{margin-bottom:-10px}#wpforms-admin-about .wpforms-admin-about-section-hero span.price-20-off{color:#6AB255}#wpforms-admin-about .wpforms-admin-about-section-squashed{margin-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-squashed:not(:last-of-type){border-bottom:0}#wpforms-admin-about .wpforms-admin-about-section-post h2{margin-bottom:-10px}#wpforms-admin-about .wpforms-admin-about-section-post h3{margin-bottom:15px}#wpforms-admin-about .wpforms-admin-about-section-post p:last-of-type{margin-bottom:30px}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20{padding-right:20px;width:auto}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20 img{width:270px}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20{width:20%}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-20 img{width:auto;max-width:100%}}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-80{padding-left:20px;width:calc(100% - 20px - 270px)}@media (max-width: 767px){#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-column-80{width:80%}}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link{padding:10px 15px;background-color:#DF7739;color:#fff;border-radius:3px;text-decoration:none;margin-top:15px;font-size:14px}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link:hover{background-color:#B85A1B}#wpforms-admin-about .wpforms-admin-about-section-post .wpforms-admin-about-section-post-link .fa{color:#EDBA9E;vertical-align:middle;margin-left:8px}#wpforms-admin-about .wpforms-admin-about-section-table table{border-collapse:collapse}#wpforms-admin-about .wpforms-admin-about-section-table table tr td{border-bottom:1px solid #DDDDDD;border-right:1px solid #DDDDDD;padding:30px;vertical-align:top}#wpforms-admin-about .wpforms-admin-about-section-table table tr td:last-of-type{border-right:0}#wpforms-admin-about .wpforms-admin-about-section-table table tr:last-child td{border-bottom:none}#wpforms-admin-about .wpforms-admin-about-section-table table p{background-repeat:no-repeat;background-size:15px auto;background-position:0 6px;margin:0}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-full{padding-left:30px;background-image:url(../images/about/icon-full.svg)}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-none{padding-left:30px;background-image:url(../images/about/icon-none.svg)}#wpforms-admin-about .wpforms-admin-about-section-table table p.features-partial{padding-left:30px;background-position:-3px 0;background-size:23px auto;background-image:url(../images/about/icon-partial.svg)}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main{padding:0}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main h3{padding:30px 30px 30px 60px}#wpforms-admin-about .wpforms-admin-about-section-table .wpforms-admin-about-section-hero-main .wpforms-admin-column-33:first-child h3{padding:30px}#wpforms-admin-about #wpforms-admin-addons{padding:0 30px}#wpforms-admin-about #wpforms-admin-addons .addon-container{padding:0 10px}#wpforms-admin-about #wpforms-admin-addons .addon-item .details{padding:20px}#wpforms-admin-about #wpforms-admin-addons .addon-item img{padding:10px}#wpforms-admin-about #wpforms-admin-addons .addon-item img[src*="-mi"]{padding:13px}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;-webkit-appearance:none;border-radius:3px;border:1px solid #cccccc;background:#f7f7f7;box-shadow:0 1px 0 #cccccc;font-weight:normal}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button:focus{background:#fafafa;border-color:#999;color:#23282d}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary:focus{background:#008ec2;border-color:#006799;color:#fff}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-primary .fa-spinner{color:#fff}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary{color:#555;border-color:#cccccc;background:#f7f7f7;box-shadow:0 1px 0 #cccccc}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary:hover,#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.button-secondary:focus{background:#fafafa;border-color:#999;color:#23282d}#wpforms-admin-about #wpforms-admin-addons .addon-item .action-button .button.disabled{cursor:default}.wpforms-admin-settings *,.wpforms-admin-settings *::before,.wpforms-admin-settings *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wpforms-admin-settings .wpforms-setting-row{border-bottom:1px solid #e4e4e4;padding:30px 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row:first-of-type{padding-top:10px !important}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-row{padding:20px 0}}.wpforms-admin-settings .wpforms-setting-row.section-heading{padding:20px 0}.wpforms-admin-settings .wpforms-setting-row.section-heading.no-desc h4{margin:0}.wpforms-admin-settings .wpforms-setting-row.section-heading .wpforms-setting-field{margin:0;max-width:1000px}.wpforms-admin-settings .wpforms-setting-row.tools p,.wpforms-admin-settings .wpforms-setting-row.tools p:first-of-type{margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox input[type=checkbox]{float:left;margin:1px 0 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-checkbox .desc{margin:0 0 0 30px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-license p.type{margin-top:12px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-text .wpforms-setting-label,.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-number .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-select .wpforms-setting-label{padding-top:8px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field input[type=radio]{margin:-3px 10px 0 0}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-radio .wpforms-setting-field label{margin-right:30px;display:inline-block}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field label:before{content:" ";display:block;width:155px;height:180px;margin:0 0 10px 0}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-default:before{background:url(../images/settings-email-html.png) center center}.wpforms-admin-settings .wpforms-setting-row#wpforms-setting-row-email-template .wpforms-setting-field .option-none:before{background:url(../images/settings-email-plaintext.png) center center}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-image .wpforms-setting-field img{display:block;margin:0 0 20px 0;max-width:400px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .wpforms-color-picker{padding-left:40px}.wpforms-admin-settings .wpforms-setting-row.wpforms-setting-row-color .minicolors-input-swatch{top:7px;left:7px;height:21px;width:21px;border-radius:2px}.wpforms-admin-settings .wpforms-setting-row h5{font-size:16px;font-weight:600;margin:0 0 20px 0}.wpforms-admin-settings .wpforms-setting-row h4{font-size:20px;font-weight:700;margin:0 0 6px 0}.wpforms-admin-settings .wpforms-setting-row h3{font-size:24px;font-weight:600;margin:0 0 20px 0}.wpforms-admin-settings .wpforms-setting-row p{margin:12px 0 0;font-size:14px;line-height:1.3}.wpforms-admin-settings .wpforms-setting-row p:first-of-type{margin:8px 0 0}.wpforms-admin-settings .wpforms-setting-row p.desc{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row p.discount-note{font-style:italic;color:#666}.wpforms-admin-settings .wpforms-setting-row p.discount-note strong{color:green}.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=password],.wpforms-admin-settings .wpforms-setting-row input[type=number],.wpforms-admin-settings .wpforms-setting-row select{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row input[type=text],.wpforms-admin-settings .wpforms-setting-row input[type=password],.wpforms-admin-settings .wpforms-setting-row input[type=number],.wpforms-admin-settings .wpforms-setting-row select{width:300px}}.wpforms-admin-settings .wpforms-setting-row input[type=text]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=password]:focus,.wpforms-admin-settings .wpforms-setting-row input[type=number]:focus,.wpforms-admin-settings .wpforms-setting-row select:focus{border-color:#bbb}.wpforms-admin-settings .wpforms-setting-row input[type=number]{width:100px}.wpforms-admin-settings .wpforms-setting-row button{margin-right:10px}.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{display:block;max-width:400px}@media (max-width: 959px){.wpforms-admin-settings .wpforms-setting-row .choicesjs-select-wrap{width:300px}}.wpforms-admin-settings .wpforms-setting-row .progress-bar{background:#fff;border:1px solid #e27730;height:30px;width:100%;position:relative;border-radius:3px;margin:0 0 16px 0}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete{border:1px solid #2a9b39}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete .bar{background-color:#2a9b39}.wpforms-admin-settings .wpforms-setting-row .progress-bar.complete .bar:after{content:none;display:none}.wpforms-admin-settings .wpforms-setting-row .progress-bar .bar{display:block;background:#e27730;height:100%;left:0;position:absolute;-webkit-transition:width 0.5s ease-in-out;-moz-transition:width 0.5s ease-in-out;-o-transition:width 0.5s ease-in-out;transition:width 0.5s ease-in-out}@-webkit-keyframes progress{to{background-position:60px 0}}@-moz-keyframes progress{to{background-position:60px 0}}@keyframes progress{to{background-position:60px 0}}.wpforms-admin-settings .wpforms-setting-row .progress-bar .bar:after{content:'';display:block;position:absolute;top:0;left:0;width:100%;height:100%;-webkit-animation:progress 1s linear infinite;-moz-animation:progress 1s linear infinite;animation:progress 1s linear infinite;background-repeat:repeat-x;background-size:60px 60px;background-image:-webkit-linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.wpforms-admin-settings .wpforms-setting-label{display:block;float:left;width:200px;padding:0}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-label{float:none;width:100%;padding-bottom:15px}}.wpforms-admin-settings .wpforms-setting-label label{display:block;font-weight:600}.wpforms-admin-settings .wpforms-setting-field{display:block;margin:0 0 0 200px;max-width:800px}@media (max-width: 781px){.wpforms-admin-settings .wpforms-setting-field{margin:0}}.wpforms-admin-settings p.submit{margin:0;padding:25px 0}.wpforms-admin-settings .info-area,.wpforms-admin-settings .pre-error{display:block;width:100%;max-width:1000px;height:450px;font-family:Menlo,Monaco,monospace;font-size:12px;background:#fff;box-shadow:none;border:1px solid #ddd;white-space:pre;overflow:auto;padding:20px}.wpforms-admin-settings .pre-error{height:auto;max-height:250px;margin-bottom:20px}.wpforms-admin-settings .checkbox-multiselect-columns{max-width:600px;position:relative}.wpforms-admin-settings .checkbox-multiselect-columns:after{content:".";display:block;height:0;line-height:0;font-size:0;clear:both;min-height:0;visibility:hidden}.wpforms-admin-settings .checkbox-multiselect-columns:before{content:"\f0ec";color:#999;font:normal normal normal 20px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:130px;left:50%;margin:0 0 0 -10px}.wpforms-admin-settings .checkbox-multiselect-columns .header{font-weight:600;font-size:13px;margin:0;padding:0 0 5px 0;text-align:center}.wpforms-admin-settings .checkbox-multiselect-columns .first-column,.wpforms-admin-settings .checkbox-multiselect-columns .second-column{width:45%;float:left}.wpforms-admin-settings .checkbox-multiselect-columns .second-column{float:right}.wpforms-admin-settings .checkbox-multiselect-columns .second-column ul li{padding:10px}.wpforms-admin-settings .checkbox-multiselect-columns ul{background-color:#fff;border:1px solid #ddd;border-radius:3px;position:relative;height:250px;padding:0;overflow-y:auto;margin:0;list-style-type:none}.wpforms-admin-settings .checkbox-multiselect-columns ul li{border-bottom:1px #eee solid;margin:0;font-size:14px}.wpforms-admin-settings .checkbox-multiselect-columns ul li label{display:block;padding:10px 10px 10px 32px;position:relative;vertical-align:baseline}.wpforms-admin-settings .checkbox-multiselect-columns ul li label:hover{background-color:#e27730;color:#fff}.wpforms-admin-settings .checkbox-multiselect-columns ul li label:before{content:"\f0c8";color:#ddd;font:normal normal normal 16px/1 FontAwesome;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:12px;left:10px}.wpforms-admin-settings .checkbox-multiselect-columns ul li label.checked{opacity:0.6}.wpforms-admin-settings .checkbox-multiselect-columns ul li label.checked:before{content:"\f14a";color:#2a9b39}.wpforms-admin-settings .checkbox-multiselect-columns ul li input{display:none}.wpforms-admin-settings .checkbox-multiselect-columns .all{color:#999;display:inline-block;font-size:13px;margin:10px 0 0}.wpforms-admin-settings #wpforms-importer-analyze{display:none}.wpforms-admin-settings #wpforms-importer-analyze .process-count,.wpforms-admin-settings #wpforms-importer-analyze p{font-size:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade{display:none;font-size:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade h5{font-size:18px;font-weight:600;padding:0;margin:30px 0 20px 0}.wpforms-admin-settings #wpforms-importer-analyze .upgrade hr{border:none;border-bottom:1px solid #e4e4e4;margin:40px 0}.wpforms-admin-settings #wpforms-importer-analyze .upgrade .wpforms-btn{margin-right:10px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade ul li{list-style-type:disc;margin-left:14px}.wpforms-admin-settings #wpforms-importer-analyze .upgrade ul li.form{list-style-type:none;margin-left:0;font-weight:700}.wpforms-admin-settings #wpforms-tools-entries-export h5{clear:both;margin:20px 0 10px 0}.wpforms-admin-settings #wpforms-tools-entries-export label{clear:both;float:left;margin:3px 0 3px 0}.wpforms-admin-settings #wpforms-tools-entries-export .choicesjs-select-wrap{position:relative}.wpforms-admin-settings #wpforms-tools-entries-export .choicesjs-select-wrap .choices{margin-bottom:0}.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-spinner{position:absolute;top:6px;right:-30px}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-date-selector{width:200px;cursor:pointer}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-field{width:200px}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-comparison{width:140px}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-search-box-term{width:300px}.wpforms-admin-settings #wpforms-tools-entries-export section{margin-top:20px}.wpforms-admin-settings #wpforms-tools-entries-export iframe{width:0;height:0;visibility:hidden}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-text{opacity:1;transition:all .5s}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);opacity:0;transition:all .5s}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on{cursor:default;opacity:0.75;position:relative}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on .wpforms-btn-text{opacity:0 !important;transition:all .5s}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on .wpforms-btn-spinner{opacity:1 !important;transition:all .5s}.wpforms-admin-settings #wpforms-tools-entries-export .wpforms-btn-spinner-on:hover{background-color:#e27730;border-color:#e27730}.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-process-msg,.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-msg{background:#fff;border-left:4px solid #22A0D0;line-height:1.5em;margin:20px 0 0 0;padding:10px}.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-process-msg.wpforms-error,.wpforms-admin-settings #wpforms-tools-entries-export #wpforms-tools-entries-export-selectform-msg.wpforms-error{border-color:#dc3232}.wpforms-admin-settings #wpforms-importer-process{display:none}.wpforms-admin-settings #wpforms-importer-process .process-count,.wpforms-admin-settings #wpforms-importer-process .process-completed{font-size:14px}.wpforms-admin-settings #wpforms-importer-process .process-completed{display:none}.wpforms-admin-settings #wpforms-importer-process .status{margin:20px 0 30px;background-color:#fff;border-radius:3px;border:1px solid #ddd;max-height:800px;overflow-y:scroll;display:none}.wpforms-admin-settings #wpforms-importer-process .status .item{border-bottom:1px solid #ddd;padding:20px}.wpforms-admin-settings #wpforms-importer-process .status .item:last-of-type{border:none}.wpforms-admin-settings #wpforms-importer-process .status .item p{font-size:13px;margin:12px 0 0}.wpforms-admin-settings #wpforms-importer-process .status .item ul{font-size:13px;margin:12px 0 0 16px}.wpforms-admin-settings #wpforms-importer-process .status .item ul li{list-style:disc}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon{display:inline-block;margin:0 10px 0 0}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-info-circle{color:#00a0d2}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-check{color:#46b450}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-triangle{color:#ffb900}.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-times,.wpforms-admin-settings #wpforms-importer-process .status .item .status-icon.fa-exclamation-circle{color:#dc3232}.wpforms-admin-settings #wpforms-importer-process .status .item .name{font-size:14px;float:left}.wpforms-admin-settings #wpforms-importer-process .status .item .actions{font-size:14px;float:right}.wpforms-admin-settings #wpforms-importer-process .status .item .actions .sep{color:#ddd}.wpforms-admin-settings .settings-lite-cta{background-color:#fff;border:1px solid #dadada;padding:25px 20px;margin:10px 0 0 0;position:relative}.wpforms-admin-settings .settings-lite-cta .dismiss{position:absolute;top:10px;right:10px;color:#666;font-size:16px}.wpforms-admin-settings .settings-lite-cta h5{margin:0 0 16px;font-size:18px;font-weight:700}.wpforms-admin-settings .settings-lite-cta h6{font-weight:700;font-size:14px;margin:0 0 16px}.wpforms-admin-settings .settings-lite-cta p{color:#555;font-size:14px;margin:0 0 16px}.wpforms-admin-settings .settings-lite-cta p:last-of-type{margin:0}.wpforms-admin-settings .settings-lite-cta p a{color:#e27730}.wpforms-admin-settings .settings-lite-cta p a:hover{color:#b85a1b}.wpforms-admin-settings .settings-lite-cta ul{margin:0;padding:0;width:50%;float:left}@media (max-width: 600px){.wpforms-admin-settings .settings-lite-cta ul{width:100%;float:none}}.wpforms-admin-settings .settings-lite-cta ul li{margin:0;padding:0 0 2px 16px;color:#555;font-size:14px;position:relative}.wpforms-admin-settings .settings-lite-cta ul li:before{content:'+';position:absolute;top:-1px;left:0}.wpforms-admin-settings .settings-lite-cta .list{margin:0 0 16px 0;overflow:auto;max-width:900px}.wpforms-admin-settings .settings-lite-cta .green{color:#218900;font-weight:700}.wpforms-admin-settings .settings-lite-cta .fa-star{color:#ff982d}#wpforms-settings-providers .wpforms-settings-provider{border-bottom:1px solid #ddd;padding:30px 0}#wpforms-settings-providers .wpforms-settings-provider.focus-out{opacity:0.4}#wpforms-settings-providers .wpforms-settings-provider-header{cursor:pointer;max-width:1000px}#wpforms-settings-providers .wpforms-settings-provider-logo{float:left;position:relative}#wpforms-settings-providers .wpforms-settings-provider-logo .fa{position:absolute;top:50%;margin:-9px 0 0 0;left:10px;color:#666;font-size:18px}#wpforms-settings-providers .wpforms-settings-provider-logo img{background:#fff;border:1px solid #ddd;max-width:90px;display:block;margin:0 0 0 40px}#wpforms-settings-providers .wpforms-settings-provider-info{margin:0 0 0 160px;position:relative;padding:20px 0 0}#wpforms-settings-providers .wpforms-settings-provider-info h3{margin:0 0 10px 0;font-size:20px;font-weight:600}#wpforms-settings-providers .wpforms-settings-provider-info p{margin:0;font-size:14px}#wpforms-settings-providers .wpforms-settings-provider-info .connected-indicator{color:#83c11f;width:135px;border:1px solid #83c11f;border-radius:4px;padding:8px 14px;font-size:16px;position:absolute;top:28px;right:0;display:none}#wpforms-settings-providers .connected .wpforms-settings-provider-info .connected-indicator{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts{margin:0 0 0 160px;display:none;max-width:840px}#wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul{padding:0;margin:0}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li{border-bottom:1px solid #ddd;margin:0;padding:10px 0;font-size:14px}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:first-of-type{border-top:1px solid #ddd}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul li:last-of-type{margin-bottom:16px}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.label{float:left;width:50%}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.date{color:#999;float:left;width:35%}#wpforms-settings-providers .wpforms-settings-provider-accounts-list ul span.remove{float:right;width:15%;text-align:right}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect{display:none;padding:20px;background-color:#ebf3fb;border:1px solid #0e6cad}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:block;padding:7px 12px;margin:5px 0;width:400px;min-height:35px}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect input[type=text]:focus{border-color:#bbb}#wpforms-settings-providers .focus-in .wpforms-settings-provider-accounts-connect{display:block}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect .fa{display:none}#wpforms-settings-providers .wpforms-settings-provider-accounts-connect p,#wpforms-settings-providers .wpforms-settings-provider-accounts p{margin:0 0 15px 0;font-size:14px}
assets/css/wpforms-base.css CHANGED
@@ -880,6 +880,14 @@ div.wpforms-container-full .wpforms-notice.wpforms-error .wpforms-notice-action:
880
  /* Small devices */
881
  @media only screen and (max-width: 600px) {
882
 
 
 
 
 
 
 
 
 
883
  /* Mobile width override */
884
  .wpforms-container .wpforms-mobile-full {
885
  width: 100%;
880
  /* Small devices */
881
  @media only screen and (max-width: 600px) {
882
 
883
+ /* Аvoid horizontal scroll on mobiles */
884
+ .wpforms-container .wpforms-field {
885
+ overflow-x: hidden;
886
+ }
887
+ .wpforms-container .wpforms-field > * {
888
+ max-width: 100%;
889
+ }
890
+
891
  /* Mobile width override */
892
  .wpforms-container .wpforms-mobile-full {
893
  width: 100%;
assets/css/wpforms-full.css CHANGED
@@ -1209,6 +1209,14 @@ div.wpforms-container-full .wpforms-form .wpforms-screen-reader-element {
1209
  /* Small devices */
1210
  @media only screen and (max-width: 600px) {
1211
 
 
 
 
 
 
 
 
 
1212
  /* Mobile width override */
1213
  div.wpforms-container-full .wpforms-form .wpforms-mobile-full {
1214
  width: 100%;
1209
  /* Small devices */
1210
  @media only screen and (max-width: 600px) {
1211
 
1212
+ /* Аvoid horizontal scroll on mobiles */
1213
+ div.wpforms-container-full .wpforms-form .wpforms-field {
1214
+ overflow-x: hidden;
1215
+ }
1216
+ div.wpforms-container-full .wpforms-form .wpforms-field > * {
1217
+ max-width: 100%;
1218
+ }
1219
+
1220
  /* Mobile width override */
1221
  div.wpforms-container-full .wpforms-form .wpforms-mobile-full {
1222
  width: 100%;
assets/js/admin-builder.js CHANGED
@@ -622,11 +622,11 @@ var WPFormsBuilder = window.WPFormsBuilder || ( function( document, window, $ )
622
  });
623
 
624
  // Field Options group toggle
625
- $builder.on('click', '.wpforms-field-option-group-toggle', function(e) {
626
  e.preventDefault();
627
- var $this = $(this);
628
- $this.parent().toggleClass('wpforms-hide').find('.wpforms-field-option-group-inner').slideToggle();
629
- $this.find('i').toggleClass('fa-angle-down fa-angle-right');
630
  });
631
 
632
  // Display toggle for Address field hide address line 2 option
622
  });
623
 
624
  // Field Options group toggle
625
+ $builder.on('click', '.wpforms-field-option-group-toggle:not(.upgrade-modal)', function( e ) {
626
  e.preventDefault();
627
+ var $this = $( this );
628
+ $this.parent().toggleClass( 'wpforms-hide' ).find( '.wpforms-field-option-group-inner' ).slideToggle();
629
+ $this.find( 'i' ).toggleClass( 'fa-angle-down fa-angle-right' );
630
  });
631
 
632
  // Display toggle for Address field hide address line 2 option
assets/js/admin.js CHANGED
@@ -569,7 +569,7 @@
569
  var $entriesList = $( '#wpforms-entries-list' );
570
 
571
  // Works on entry list page only.
572
- if ( ! $entriesList.length ) {
573
  return;
574
  }
575
 
@@ -1026,7 +1026,7 @@
1026
  });
1027
 
1028
  // Integration individual display toggling.
1029
- $( document ).on( 'click', '.wpforms-settings-provider-header', function( event ) {
1030
 
1031
  event.preventDefault();
1032
 
569
  var $entriesList = $( '#wpforms-entries-list' );
570
 
571
  // Works on entry list page only.
572
+ if ( ! $entriesList.length || $entriesList.find( '.wpforms-dash-widget' ).length ) {
573
  return;
574
  }
575
 
1026
  });
1027
 
1028
  // Integration individual display toggling.
1029
+ $( document ).on( 'click', '.wpforms-settings-provider:not(.focus-out) .wpforms-settings-provider-header', function( event ) {
1030
 
1031
  event.preventDefault();
1032
 
assets/js/admin.min.js CHANGED
@@ -1 +1 @@
1
- !function(l){"use strict";var f,s={settings:{iconActivate:'<i class="fa fa-toggle-on fa-flip-horizontal" aria-hidden="true"></i>',iconDeactivate:'<i class="fa fa-toggle-on" aria-hidden="true"></i>',iconInstall:'<i class="fa fa-cloud-download" aria-hidden="true"></i>',iconSpinner:'<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>',mediaFrame:!1},init:function(){f=this.settings,l(document).ready(s.ready),s.initFormOverview(),s.initEntriesSingle(),s.initEntriesList(),s.initWelcome(),s.initAddons(),s.initSettings(),s.initTools(),s.initUpgrades()},ready:function(){l(".notice").show(),l("#screen-meta-links, #screen-meta").prependTo("#wpforms-header-temp").show(),s.initChoicesJS(),s.initCheckboxMultiselectColumns(),l(".wpforms-color-picker").minicolors(),l(".wpforms-file-upload").each(function(){var e=l(this).find("input[type=file]"),n=l(this).find("label"),o=n.html();e.on("change",function(e){var t="";this.files&&1<this.files.length?t=(this.getAttribute("data-multiple-caption")||"").replace("{count}",this.files.length):e.target.value&&(t=e.target.value.split("\\").pop()),t?n.find(".fld").html(t):n.html(o)}),e.on("focus",function(){e.addClass("has-focus")}).on("blur",function(){e.removeClass("has-focus")})}),jconfirm.defaults={closeIcon:!0,backgroundDismiss:!0,escapeKey:!0,animationBounce:1,useBootstrap:!1,theme:"modern",boxWidth:"400px",animateFromElement:!1},l(document).on("click",".wpforms-upgrade-modal",function(){l.alert({title:!1,content:wpforms_admin.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).trigger("wpformsReady")},initChoicesJS:function(){l(".choicesjs-select").each(function(){var e=l(this),t={searchEnabled:!1};e.attr("multiple")&&(t.searchEnabled=!0,t.removeItemButton=!0),e.data("placeholder")&&(t.placeholderValue=e.data("placeholder")),"off"===e.data("sorting")&&(t.shouldSort=!1),e.data("search")&&(t.searchEnabled=!0),t.loadingText=wpforms_admin.choicesjs_loading,t.noResultsText=wpforms_admin.choicesjs_no_results,t.noChoicesText=wpforms_admin.choicesjs_no_choices,t.itemSelectText=wpforms_admin.choicesjs_item_select,new Choices(e[0],t)})},initCheckboxMultiselectColumns:function(){l(document).on("change",".checkbox-multiselect-columns input",function(){var e=l(this),t=e.parent(),n=e.closest(".checkbox-multiselect-columns"),o=t.text(),i="check-item-"+e.val(),s=n.find("#"+i);e.prop("checked")?(e.parent().addClass("checked"),s.length||n.find(".second-column ul").append('<li id="'+i+'">'+o+"</li>")):(e.parent().removeClass("checked"),n.find("#"+i).remove())}),l(document).on("click",".checkbox-multiselect-columns .all",function(e){e.preventDefault(),l(this).closest(".checkbox-multiselect-columns").find("input[type=checkbox]").prop("checked",!0).trigger("change"),l(this).remove()})},initFormOverview:function(){l(document).on("click","#wpforms-overview .wp-list-table .delete a, #wpforms-overview .wp-list-table .duplicate a",function(e){e.preventDefault();var t=l(this).attr("href"),n=l(this).parent().hasClass("delete")?wpforms_admin.form_delete_confirm:wpforms_admin.form_duplicate_confirm;l.confirm({title:!1,content:n,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},initEntriesSingle:function(){"wpforms-entries"===s.getQueryString("page")&&"details"===s.getQueryString("view")&&s.entryHotkeys(),l(document).on("click","#wpforms-entries-single .submitdelete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-single .wpforms-entry-print a",function(e){e.preventDefault(),window.open(l(this).attr("href"))}),l(document).on("click","#wpforms-entries-single .wpforms-empty-field-toggle",function(e){e.preventDefault(),"true"===wpCookies.get("wpforms_entry_hide_empty")?(wpCookies.remove("wpforms_entry_hide_empty"),l(this).text(wpforms_admin.entry_empty_fields_hide)):(wpCookies.set("wpforms_entry_hide_empty","true",2592e3),l(this).text(wpforms_admin.entry_empty_fields_show)),l(".wpforms-entry-field.empty").toggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .add",function(e){e.preventDefault(),l(this).hide().next("form").slideToggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .cancel",function(e){e.preventDefault(),l(this).closest("form").slideToggle(),l(".wpforms-entry-notes-new .add").show()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-byline .note-delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_note_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},entryHotkeys:function(){l(document).keydown(function(e){if(74!==e.keyCode||s.isFormTypeNode(e.target.nodeName)){if(75===e.keyCode&&!s.isFormTypeNode(e.target.nodeName)){var t=l("#wpforms-entry-next-link").attr("href");"#"!==t&&(window.location.href=t)}}else{var n=l("#wpforms-entry-prev-link").attr("href");"#"!==n&&(window.location.href=n)}})},initEntriesList:function(){l(document).on("click","#wpforms-entries-table-edit-columns",function(e){e.preventDefault(),s.entriesListFieldColumn()}),l(document).on("click","#wpforms-entries-list .form-selector .toggle",function(e){e.preventDefault(),l(this).toggleClass("active").next(".form-list").toggle()}),l(document).on("click","#wpforms-entries-list .wp-list-table .delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-star",function(e){e.preventDefault();var t=l(this),n="",o=Number(l("#wpforms-entries-list .starred-num").text()),i=t.data("id");t.hasClass("star")?(n="star",o++,t.attr("title",wpforms_admin.entry_unstar)):(n="unstar",o--,t.attr("title",wpforms_admin.entry_star)),t.toggleClass("star unstar"),l("#wpforms-entries-list .starred-num").text(o);var s={task:n,action:"wpforms_entry_list_star",nonce:wpforms_admin.nonce,entry_id:i};l.post(wpforms_admin.ajax_url,s)}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-read",function(e){e.preventDefault();var t=l(this),n="",o=Number(l("#wpforms-entries-list .unread-num").text()),i=t.data("id");t.hasClass("read")?(n="read",o--,t.attr("title",wpforms_admin.entry_unread)):(n="unread",o++,t.attr("title",wpforms_admin.entry_read)),t.toggleClass("read unread"),l("#wpforms-entries-list .unread-num").text(o);var s={task:n,action:"wpforms_entry_list_read",nonce:wpforms_admin.nonce,entry_id:i};l.post(wpforms_admin.ajax_url,s)}),l(document).on("click","#wpforms-entries-list .form-details-actions-deleteall",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_delete_all_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("heartbeat-send",function(e,t){var n=l("#wpforms-entries-list");if(n.length){var o=n.find("#wpforms-entries-table").data("last-entry-id");void 0!==o&&(t.wpforms_new_entries_entry_id=o,t.wpforms_new_entries_form_id=n.find("input[name=form_id]").val())}}),l(document).on("heartbeat-tick",function(e,t){var n,o=l("#wpforms-entries-list");o.length&&t.wpforms_new_entries_notification&&(n=o.find(".wp-list-table thead tr").first().children().length,o.find(".new-entries-notification").length||o.find(".wp-list-table thead").append('<tr class="new-entries-notification"><td colspan="'+n+'"><a href=""></a></td></tr>'),o.find(".new-entries-notification a").text(t.wpforms_new_entries_notification).slideDown({duration:500,start:function(){l(this).css({display:"block"})}}))})},entriesListFieldColumn:function(){l.alert({title:wpforms_admin.entry_field_columns,boxWidth:"500px",content:f.iconSpinner+l("#wpforms-field-column-select").html(),onContentReady:function(){var e=this.$content,t=e.find("select"),n=new Choices(t[0],{shouldSort:!1,removeItemButton:!0,placeholderValue:wpforms_admin.choicesjs_fields_select+"...",loadingText:wpforms_admin.choicesjs_loading,noResultsText:wpforms_admin.choicesjs_no_results,noChoicesText:wpforms_admin.choicesjs_no_choices,itemSelectText:wpforms_admin.choicesjs_item_select,callbackOnInit:function(){e.find(".fa").remove(),e.find("form").show()}});l(".jconfirm-content-pane, .jconfirm-box").css("overflow","visible"),n.passedElement.addEventListener("change",function(){n.hideDropdown()},!1)},buttons:{confirm:{text:wpforms_admin.save_refresh,btnClass:"btn-confirm",keys:["enter"],action:function(){this.$content.find("form").submit()}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},initWelcome:function(){l(document).on("click","#wpforms-welcome .play-video",function(e){e.preventDefault();l.dialog({title:!1,content:'<div class="video-container"><iframe width="1280" height="720" src="https://www.youtube-nocookie.com/embed/yDyvSGV7tP4?rel=0&amp;showinfo=0&amp;autoplay=1" frameborder="0" allowfullscreen></iframe></div>',closeIcon:!0,boxWidth:"70%"})})},initAddons:function(){l(document).on("wpformsReady",function(){if(l("#wpforms-admin-addons").length&&(l(".addon-item .details").matchHeight({byrow:!1,property:"height"}),l("#wpforms-admin-addons-list").length)){var n=new List("wpforms-admin-addons-list",{valueNames:["addon-name"]});l("#wpforms-admin-addons-search").on("keyup",function(){var e=l(this).val(),t=l("#addons-heading");e?t.text(wpforms_admin.addon_search):t.text(t.data("text")),n.search(e)})}}),l(document).on("click","#wpforms-admin-addons .addon-item button",function(e){if(e.preventDefault(),l(this).hasClass("disabled"))return!1;s.addonToggle(l(this))})},addonToggle:function(t){var n,o,i,s,a,r,c=t.closest(".addon-item"),e=t.attr("data-plugin"),d=t.attr("data-type");if(t.hasClass("status-go-to-url"))window.open(t.attr("data-plugin"),"_blank");else{if(t.prop("disabled",!0).addClass("loading"),t.html(f.iconSpinner),t.hasClass("status-active"))n="wpforms_deactivate_addon",o="status-inactive","plugin"===d&&(o+=" button button-secondary"),i=wpforms_admin.addon_inactive,s=wpforms_admin.addon_activate,"addon"===d&&(s=f.iconActivate+s),a=f.iconDeactivate+wpforms_admin.addon_deactivate;else if(t.hasClass("status-inactive"))n="wpforms_activate_addon",o="status-active","plugin"===d&&(o+=" button button-secondary disabled"),i=wpforms_admin.addon_active,s=wpforms_admin.addon_deactivate,"addon"===d?s=f.iconDeactivate+s:"plugin"===d&&(s=wpforms_admin.addon_activated),a=f.iconActivate+wpforms_admin.addon_activate;else{if(!t.hasClass("status-download"))return;n="wpforms_install_addon",o="status-active","plugin"===d&&(o+=" button disabled"),i=wpforms_admin.addon_active,s=wpforms_admin.addon_activated,"addon"===d&&(s=f.iconActivate+wpforms_admin.addon_deactivate),a=f.iconInstall+wpforms_admin.addon_activate}var m={action:n,nonce:wpforms_admin.nonce,plugin:e,type:d};l.post(wpforms_admin.ajax_url,m,function(e){e.success?("wpforms_install_addon"===n?(t.attr("data-plugin",e.data.basename),r=e.data.msg,e.data.is_activated||(o="status-inactive","plugin"===d&&(o="button"),i=wpforms_admin.addon_inactive,s=f.iconActivate+wpforms_admin.addon_activate)):r=e.data,c.find(".actions").append('<div class="msg success">'+r+"</div>"),c.find("span.status-label").removeClass("status-active status-inactive status-download").addClass(o).removeClass("button button-primary button-secondary disabled").text(i),t.removeClass("status-active status-inactive status-download").removeClass("button button-primary button-secondary disabled").addClass(o).html(s)):("download_failed"===e.data[0].code?"addon"===d?c.find(".actions").append('<div class="msg error">'+wpforms_admin.addon_error+"</div>"):c.find(".actions").append('<div class="msg error">'+wpforms_admin.plugin_error+"</div>"):c.find(".actions").append('<div class="msg error">'+e.data+"</div>"),t.html(a)),t.prop("disabled",!1).removeClass("loading"),setTimeout(function(){l(".addon-item .msg").remove()},3e3)}).fail(function(e){console.log(e.responseText)})}},initSettings:function(){l(document).on("wpformsReady",function(){if(l("#wpforms-settings").length){var e=s.getQueryString("wpforms-integration"),t=s.getQueryString("jump");e?l("body").animate({scrollTop:l("#wpforms-integration-"+e).offset().top},1e3):t&&l("body").animate({scrollTop:l("#"+t).offset().top},1e3),l(".wpforms-admin-settings-form").conditions([{conditions:{element:"#wpforms-setting-gdpr",type:"checked",operator:"is"},actions:{if:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"show"},else:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"hide"}},effect:"appear"},{conditions:{element:"input[name=recaptcha-type]:checked",type:"value",operator:"=",condition:"v3"},actions:{if:{element:"#wpforms-setting-row-recaptcha-v3-threshold",action:"show"},else:{element:"#wpforms-setting-row-recaptcha-v3-threshold",action:"hide"}},effect:"appear"}])}}),l(document).on("change","#wpforms-setting-disable-css",function(){s.settingsFormStylesAlert(l(this).val())}),l(document).on("click",".wpforms-setting-row-image button",function(e){e.preventDefault(),s.imageUploadModal(l(this))}),l(document).on("click","#wpforms-setting-license-key-verify",function(e){e.preventDefault(),s.licenseVerify(l(this))}),l(document).on("click","#wpforms-setting-license-key-deactivate",function(e){e.preventDefault(),s.licenseDeactivate(l(this))}),l(document).on("click","#wpforms-setting-license-key-refresh",function(e){e.preventDefault(),s.licenseRefresh(l(this))}),l(document).on("click",".wpforms-settings-provider-connect",function(e){e.preventDefault();var t=l(this);s.integrationConnect(t)}),l(document).on("click",".wpforms-settings-provider-accounts-list a",function(e){e.preventDefault(),s.integrationDisconnect(l(this))}),l(document).on("click",".wpforms-settings-provider-header",function(e){e.preventDefault(),l(this).parent().find(".wpforms-settings-provider-accounts").slideToggle(),l(this).parent().find(".wpforms-settings-provider-logo i").toggleClass("fa-chevron-right fa-chevron-down")}),l(document).on("click",".wpforms-settings-provider-accounts-toggle a",function(e){e.preventDefault();var t=l(this).parent().next(".wpforms-settings-provider-accounts-connect");t.find("input[type=text], input[type=password]").val(""),t.slideToggle()})},settingsFormStylesAlert:function(e){if("2"===e)var t=wpforms_admin.settings_form_style_base;else{if("3"!==e)return;t=wpforms_admin.settings_form_style_none}l.alert({title:wpforms_admin.heads_up,content:t,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})},imageUploadModal:function(e){if(f.media_frame)f.media_frame.open();else{var t=l(e).closest(".wpforms-setting-field");f.media_frame=wp.media.frames.wpforms_media_frame=wp.media({className:"media-frame wpforms-media-frame",frame:"select",multiple:!1,title:wpforms_admin.upload_image_title,library:{type:"image"},button:{text:wpforms_admin.upload_image_button}}),f.media_frame.on("select",function(){var e=f.media_frame.state().get("selection").first().toJSON();t.find("input[type=text]").val(e.url),t.find("img").remove(),t.prepend('<img src="'+e.url+'">')}),f.media_frame.open()}},licenseVerify:function(e){var i=l(e),s=i.closest(".wpforms-setting-row"),t=i.outerWidth(),a=i.text(),n={action:"wpforms_verify_license",nonce:wpforms_admin.nonce,license:l("#wpforms-setting-license-key").val()};i.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,n,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").show(),s.find(".type strong").text(e.data.type),l(".wpforms-license-notice").remove()):(n="fa fa-exclamation-circle",o="orange",t=e.data,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),l.alert({title:!1,content:t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseDeactivate:function(e){var i=l(e),s=i.closest(".wpforms-setting-row"),t=i.outerWidth(),a=i.text(),n={action:"wpforms_deactivate_license",nonce:wpforms_admin.nonce};i.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,n,function(e){var t="fa fa-info-circle",n="blue",o=e.data;e.success?(s.find("#wpforms-setting-license-key").val(""),s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()):(t="fa fa-exclamation-circle",n="orange"),l.alert({title:!1,content:o,icon:t,type:n,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseRefresh:function(e){var i=l(e).closest(".wpforms-setting-row"),t={action:"wpforms_refresh_license",nonce:wpforms_admin.nonce,license:l("#wpforms-setting-license-key").val()};l.post(wpforms_admin.ajax_url,t,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,i.find(".type strong").text(e.data.type)):(n="fa fa-exclamation-circle",o="orange",t=e.data,i.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),l.alert({title:!1,content:t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(e){console.log(e.responseText)})},integrationConnect:function(n){var e=n.outerWidth(),o=n.text(),i=n.closest(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_add",data:n.closest("form").serialize(),provider:n.data("provider"),nonce:wpforms_admin.nonce};n.html("Connecting...").css("width",e).prop("disabled",!0),l.post(wpforms_admin.ajax_url,t,function(e){if(e.success)i.find(".wpforms-settings-provider-accounts-list ul").append(e.data.html),i.addClass("connected"),n.closest(".wpforms-settings-provider-accounts-connect").slideToggle();else{var t=wpforms_admin.provider_auth_error;e.hasOwnProperty("data")&&e.data.hasOwnProperty("error_msg")&&(t+="\n"+e.data.error_msg),l.alert({title:!1,content:t,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}n.html(o).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},integrationDisconnect:function(e){var n=l(e),o=n.parents(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_disconnect",provider:n.data("provider"),key:n.data("key"),nonce:wpforms_admin.nonce};l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.provider_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){l.post(wpforms_admin.ajax_url,t,function(e){if(e.success){n.parent().parent().remove();var t=o.find(".wpforms-settings-provider-accounts-list li").length;void 0!==t&&0!==t||o.removeClass("connected")}else console.log(e)}).fail(function(e){console.log(e.responseText)})}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},initTools:function(){l(document).on("click","#wpforms-ssl-verify",function(e){e.preventDefault(),s.verifySSLConnection()}),l(document).on("click","#wpforms-importer-forms-submit",function(e){if(e.preventDefault(),l("#wpforms-importer-forms input:checked").length){var t=[];l("#wpforms-importer-forms input:checked").each(function(e){t[e]=l(this).val()}),wpforms_admin.isPro?s.importForms(t):s.analyzeForms(t)}else l.alert({title:!1,content:wpforms_admin.importer_forms_required,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).on("click","#wpforms-importer-continue-submit",function(e){e.preventDefault(),s.importForms(f.formIDs)})},verifySSLConnection:function(){var t=l("#wpforms-ssl-verify"),n=t.text(),o=t.outerWidth(),i=t.parent(),e={action:"wpforms_verify_ssl",nonce:wpforms_admin.nonce};t.css("width",o).prop("disabled",!0).text(wpforms_admin.testing),l.post(wpforms_admin.ajax_url,e,function(e){console.log(e),i.find(".wpforms-alert, .wpforms-ssl-error").remove(),e.success?t.before('<div class="wpforms-alert wpforms-alert-success">'+e.data.msg+"</div>"):(t.before('<div class="wpforms-alert wpforms-alert-danger">'+e.data.msg+"</div>"),t.before('<div class="wpforms-ssl-error pre-error">'+e.data.debug+"</div>")),t.css("width",o).prop("disabled",!1).text(n)})},analyzeForms:function(e){var t=l("#wpforms-importer-analyze");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms").hide(),t.show(),f.analyzeQueue=e,f.analyzed=0,f.analyzeUpgrade=[],f.formIDs=e,s.analyzeForm()},analyzeForm:function(){var n=l("#wpforms-importer-analyze"),o=_.first(f.analyzeQueue),e={action:"wpforms_import_form_"+s.getQueryString("provider"),analyze:1,form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){if(e.success)if(_.isEmpty(e.data.upgrade_plain)&&_.isEmpty(e.data.upgrade_omit)||f.analyzeUpgrade.push({name:e.data.name,fields:_.union(e.data.upgrade_omit,e.data.upgrade_plain)}),f.analyzeQueue=_.without(f.analyzeQueue,o),f.analyzed++,_.isEmpty(f.analyzeQueue))if(_.isEmpty(f.analyzeUpgrade))s.importForms(f.formIDs);else{var t=wp.template("wpforms-importer-upgrade");n.find(".upgrade").append(t(f.analyzeUpgrade)),n.find(".upgrade").show(),n.find(".process-analyze").hide()}else n.find(".form-current").text(f.analyzed+1),s.analyzeForm()})},importForms:function(e){var t=l("#wpforms-importer-process");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms, #wpforms-importer-analyze").hide(),t.show(),f.importQueue=e,f.imported=0,s.importForm()},importForm:function(){var n=l("#wpforms-importer-process"),o=_.first(f.importQueue),e={action:"wpforms_import_form_"+s.getQueryString("provider"),form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){var t;e.success&&(t=e.data.error?wp.template("wpforms-importer-status-error"):wp.template("wpforms-importer-status-update"),n.find(".status").prepend(t(e.data)),n.find(".status").show(),f.importQueue=_.without(f.importQueue,o),f.imported++,_.isEmpty(f.importQueue)?(n.find(".process-count").hide(),n.find(".forms-completed").text(f.imported),n.find(".process-completed").show()):(n.find(".form-current").text(f.imported+1),s.importForm()))})},initUpgrades:function(){l(document).on("click","#wpforms-upgrade-143 button",function(e){e.preventDefault();var n=l(this),t=n.outerWidth(),o=l("#wpforms-upgrade-143 .status"),i={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,init:!0,incomplete:n.data("incomplete")};n.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,i,function(e){if(e.success){f.upgraded=Number(e.data.upgraded),f.upgradeTotal=Number(e.data.total);var t=Math.round(Number(f.upgraded)/Number(f.upgradeTotal)*100);n.remove(),o.find(".bar").css("width",t+"%"),o.show().find(".total").text(f.upgradeTotal),o.find(".current").text(f.upgraded),o.find(".percent").text(t+"%"),s.upgrade143()}})})},upgrade143:function(){var n=l("#wpforms-upgrade-143 .status"),e={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,upgraded:f.upgraded};l.post(wpforms_admin.ajax_url,e,function(e){if(e.success){f.upgraded=Number(f.upgraded)+Number(e.data.count);var t=Math.round(Number(f.upgraded)/Number(f.upgradeTotal)*100);n.find(".bar").css("width",t+"%"),Number(e.data.count)<10?(n.find(".progress-bar").addClass("complete"),n.find(".msg").text(wpforms_admin.upgrade_completed)):(n.find(".current").text(f.upgraded),n.find(".percent").text(t+"%"),s.upgrade143())}})},isFormTypeNode:function(e){return"TEXTAREA"===(e=e||!1)||"INPUT"===e||"SELECT"===e},getQueryString:function(e){var t=new RegExp("[?&]"+e+"=([^&]*)").exec(window.location.search);return t&&decodeURIComponent(t[1].replace(/\+/g," "))},debug:function(e){s.isDebug()&&("object"==typeof e||e.constructor===Array?(console.log("WPForms Debug:"),console.log(e)):console.log("WPForms Debug: "+e))},isDebug:function(){return window.location.hash&&"#wpformsdebug"===window.location.hash}};s.init(),window.WPFormsAdmin=s}(jQuery);
1
+ !function(l){"use strict";var f,s={settings:{iconActivate:'<i class="fa fa-toggle-on fa-flip-horizontal" aria-hidden="true"></i>',iconDeactivate:'<i class="fa fa-toggle-on" aria-hidden="true"></i>',iconInstall:'<i class="fa fa-cloud-download" aria-hidden="true"></i>',iconSpinner:'<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>',mediaFrame:!1},init:function(){f=this.settings,l(document).ready(s.ready),s.initFormOverview(),s.initEntriesSingle(),s.initEntriesList(),s.initWelcome(),s.initAddons(),s.initSettings(),s.initTools(),s.initUpgrades()},ready:function(){l(".notice").show(),l("#screen-meta-links, #screen-meta").prependTo("#wpforms-header-temp").show(),s.initChoicesJS(),s.initCheckboxMultiselectColumns(),l(".wpforms-color-picker").minicolors(),l(".wpforms-file-upload").each(function(){var e=l(this).find("input[type=file]"),n=l(this).find("label"),o=n.html();e.on("change",function(e){var t="";this.files&&1<this.files.length?t=(this.getAttribute("data-multiple-caption")||"").replace("{count}",this.files.length):e.target.value&&(t=e.target.value.split("\\").pop()),t?n.find(".fld").html(t):n.html(o)}),e.on("focus",function(){e.addClass("has-focus")}).on("blur",function(){e.removeClass("has-focus")})}),jconfirm.defaults={closeIcon:!0,backgroundDismiss:!0,escapeKey:!0,animationBounce:1,useBootstrap:!1,theme:"modern",boxWidth:"400px",animateFromElement:!1},l(document).on("click",".wpforms-upgrade-modal",function(){l.alert({title:!1,content:wpforms_admin.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).trigger("wpformsReady")},initChoicesJS:function(){l(".choicesjs-select").each(function(){var e=l(this),t={searchEnabled:!1};e.attr("multiple")&&(t.searchEnabled=!0,t.removeItemButton=!0),e.data("placeholder")&&(t.placeholderValue=e.data("placeholder")),"off"===e.data("sorting")&&(t.shouldSort=!1),e.data("search")&&(t.searchEnabled=!0),t.loadingText=wpforms_admin.choicesjs_loading,t.noResultsText=wpforms_admin.choicesjs_no_results,t.noChoicesText=wpforms_admin.choicesjs_no_choices,t.itemSelectText=wpforms_admin.choicesjs_item_select,new Choices(e[0],t)})},initCheckboxMultiselectColumns:function(){l(document).on("change",".checkbox-multiselect-columns input",function(){var e=l(this),t=e.parent(),n=e.closest(".checkbox-multiselect-columns"),o=t.text(),i="check-item-"+e.val(),s=n.find("#"+i);e.prop("checked")?(e.parent().addClass("checked"),s.length||n.find(".second-column ul").append('<li id="'+i+'">'+o+"</li>")):(e.parent().removeClass("checked"),n.find("#"+i).remove())}),l(document).on("click",".checkbox-multiselect-columns .all",function(e){e.preventDefault(),l(this).closest(".checkbox-multiselect-columns").find("input[type=checkbox]").prop("checked",!0).trigger("change"),l(this).remove()})},initFormOverview:function(){l(document).on("click","#wpforms-overview .wp-list-table .delete a, #wpforms-overview .wp-list-table .duplicate a",function(e){e.preventDefault();var t=l(this).attr("href"),n=l(this).parent().hasClass("delete")?wpforms_admin.form_delete_confirm:wpforms_admin.form_duplicate_confirm;l.confirm({title:!1,content:n,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},initEntriesSingle:function(){"wpforms-entries"===s.getQueryString("page")&&"details"===s.getQueryString("view")&&s.entryHotkeys(),l(document).on("click","#wpforms-entries-single .submitdelete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-single .wpforms-entry-print a",function(e){e.preventDefault(),window.open(l(this).attr("href"))}),l(document).on("click","#wpforms-entries-single .wpforms-empty-field-toggle",function(e){e.preventDefault(),"true"===wpCookies.get("wpforms_entry_hide_empty")?(wpCookies.remove("wpforms_entry_hide_empty"),l(this).text(wpforms_admin.entry_empty_fields_hide)):(wpCookies.set("wpforms_entry_hide_empty","true",2592e3),l(this).text(wpforms_admin.entry_empty_fields_show)),l(".wpforms-entry-field.empty").toggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .add",function(e){e.preventDefault(),l(this).hide().next("form").slideToggle()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-new .cancel",function(e){e.preventDefault(),l(this).closest("form").slideToggle(),l(".wpforms-entry-notes-new .add").show()}),l(document).on("click","#wpforms-entries-single .wpforms-entry-notes-byline .note-delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_note_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})})},entryHotkeys:function(){l(document).keydown(function(e){if(74!==e.keyCode||s.isFormTypeNode(e.target.nodeName)){if(75===e.keyCode&&!s.isFormTypeNode(e.target.nodeName)){var t=l("#wpforms-entry-next-link").attr("href");"#"!==t&&(window.location.href=t)}}else{var n=l("#wpforms-entry-prev-link").attr("href");"#"!==n&&(window.location.href=n)}})},initEntriesList:function(){l(document).on("click","#wpforms-entries-table-edit-columns",function(e){e.preventDefault(),s.entriesListFieldColumn()}),l(document).on("click","#wpforms-entries-list .form-selector .toggle",function(e){e.preventDefault(),l(this).toggleClass("active").next(".form-list").toggle()}),l(document).on("click","#wpforms-entries-list .wp-list-table .delete",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:!1,content:wpforms_admin.entry_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-star",function(e){e.preventDefault();var t=l(this),n="",o=Number(l("#wpforms-entries-list .starred-num").text()),i=t.data("id");t.hasClass("star")?(n="star",o++,t.attr("title",wpforms_admin.entry_unstar)):(n="unstar",o--,t.attr("title",wpforms_admin.entry_star)),t.toggleClass("star unstar"),l("#wpforms-entries-list .starred-num").text(o);var s={task:n,action:"wpforms_entry_list_star",nonce:wpforms_admin.nonce,entry_id:i};l.post(wpforms_admin.ajax_url,s)}),l(document).on("click","#wpforms-entries-list .wp-list-table .indicator-read",function(e){e.preventDefault();var t=l(this),n="",o=Number(l("#wpforms-entries-list .unread-num").text()),i=t.data("id");t.hasClass("read")?(n="read",o--,t.attr("title",wpforms_admin.entry_unread)):(n="unread",o++,t.attr("title",wpforms_admin.entry_read)),t.toggleClass("read unread"),l("#wpforms-entries-list .unread-num").text(o);var s={task:n,action:"wpforms_entry_list_read",nonce:wpforms_admin.nonce,entry_id:i};l.post(wpforms_admin.ajax_url,s)}),l(document).on("click","#wpforms-entries-list .form-details-actions-deleteall",function(e){e.preventDefault();var t=l(this).attr("href");l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.entry_delete_all_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){window.location=t}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})}),l(document).on("heartbeat-send",function(e,t){var n=l("#wpforms-entries-list");if(n.length&&!n.find(".wpforms-dash-widget").length){var o=n.find("#wpforms-entries-table").data("last-entry-id");void 0!==o&&(t.wpforms_new_entries_entry_id=o,t.wpforms_new_entries_form_id=n.find("input[name=form_id]").val())}}),l(document).on("heartbeat-tick",function(e,t){var n,o=l("#wpforms-entries-list");o.length&&t.wpforms_new_entries_notification&&(n=o.find(".wp-list-table thead tr").first().children().length,o.find(".new-entries-notification").length||o.find(".wp-list-table thead").append('<tr class="new-entries-notification"><td colspan="'+n+'"><a href=""></a></td></tr>'),o.find(".new-entries-notification a").text(t.wpforms_new_entries_notification).slideDown({duration:500,start:function(){l(this).css({display:"block"})}}))})},entriesListFieldColumn:function(){l.alert({title:wpforms_admin.entry_field_columns,boxWidth:"500px",content:f.iconSpinner+l("#wpforms-field-column-select").html(),onContentReady:function(){var e=this.$content,t=e.find("select"),n=new Choices(t[0],{shouldSort:!1,removeItemButton:!0,placeholderValue:wpforms_admin.choicesjs_fields_select+"...",loadingText:wpforms_admin.choicesjs_loading,noResultsText:wpforms_admin.choicesjs_no_results,noChoicesText:wpforms_admin.choicesjs_no_choices,itemSelectText:wpforms_admin.choicesjs_item_select,callbackOnInit:function(){e.find(".fa").remove(),e.find("form").show()}});l(".jconfirm-content-pane, .jconfirm-box").css("overflow","visible"),n.passedElement.addEventListener("change",function(){n.hideDropdown()},!1)},buttons:{confirm:{text:wpforms_admin.save_refresh,btnClass:"btn-confirm",keys:["enter"],action:function(){this.$content.find("form").submit()}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},initWelcome:function(){l(document).on("click","#wpforms-welcome .play-video",function(e){e.preventDefault();l.dialog({title:!1,content:'<div class="video-container"><iframe width="1280" height="720" src="https://www.youtube-nocookie.com/embed/yDyvSGV7tP4?rel=0&amp;showinfo=0&amp;autoplay=1" frameborder="0" allowfullscreen></iframe></div>',closeIcon:!0,boxWidth:"70%"})})},initAddons:function(){l(document).on("wpformsReady",function(){if(l("#wpforms-admin-addons").length&&(l(".addon-item .details").matchHeight({byrow:!1,property:"height"}),l("#wpforms-admin-addons-list").length)){var n=new List("wpforms-admin-addons-list",{valueNames:["addon-name"]});l("#wpforms-admin-addons-search").on("keyup",function(){var e=l(this).val(),t=l("#addons-heading");e?t.text(wpforms_admin.addon_search):t.text(t.data("text")),n.search(e)})}}),l(document).on("click","#wpforms-admin-addons .addon-item button",function(e){if(e.preventDefault(),l(this).hasClass("disabled"))return!1;s.addonToggle(l(this))})},addonToggle:function(t){var n,o,i,s,a,r,c=t.closest(".addon-item"),e=t.attr("data-plugin"),d=t.attr("data-type");if(t.hasClass("status-go-to-url"))window.open(t.attr("data-plugin"),"_blank");else{if(t.prop("disabled",!0).addClass("loading"),t.html(f.iconSpinner),t.hasClass("status-active"))n="wpforms_deactivate_addon",o="status-inactive","plugin"===d&&(o+=" button button-secondary"),i=wpforms_admin.addon_inactive,s=wpforms_admin.addon_activate,"addon"===d&&(s=f.iconActivate+s),a=f.iconDeactivate+wpforms_admin.addon_deactivate;else if(t.hasClass("status-inactive"))n="wpforms_activate_addon",o="status-active","plugin"===d&&(o+=" button button-secondary disabled"),i=wpforms_admin.addon_active,s=wpforms_admin.addon_deactivate,"addon"===d?s=f.iconDeactivate+s:"plugin"===d&&(s=wpforms_admin.addon_activated),a=f.iconActivate+wpforms_admin.addon_activate;else{if(!t.hasClass("status-download"))return;n="wpforms_install_addon",o="status-active","plugin"===d&&(o+=" button disabled"),i=wpforms_admin.addon_active,s=wpforms_admin.addon_activated,"addon"===d&&(s=f.iconActivate+wpforms_admin.addon_deactivate),a=f.iconInstall+wpforms_admin.addon_activate}var m={action:n,nonce:wpforms_admin.nonce,plugin:e,type:d};l.post(wpforms_admin.ajax_url,m,function(e){e.success?("wpforms_install_addon"===n?(t.attr("data-plugin",e.data.basename),r=e.data.msg,e.data.is_activated||(o="status-inactive","plugin"===d&&(o="button"),i=wpforms_admin.addon_inactive,s=f.iconActivate+wpforms_admin.addon_activate)):r=e.data,c.find(".actions").append('<div class="msg success">'+r+"</div>"),c.find("span.status-label").removeClass("status-active status-inactive status-download").addClass(o).removeClass("button button-primary button-secondary disabled").text(i),t.removeClass("status-active status-inactive status-download").removeClass("button button-primary button-secondary disabled").addClass(o).html(s)):("download_failed"===e.data[0].code?"addon"===d?c.find(".actions").append('<div class="msg error">'+wpforms_admin.addon_error+"</div>"):c.find(".actions").append('<div class="msg error">'+wpforms_admin.plugin_error+"</div>"):c.find(".actions").append('<div class="msg error">'+e.data+"</div>"),t.html(a)),t.prop("disabled",!1).removeClass("loading"),setTimeout(function(){l(".addon-item .msg").remove()},3e3)}).fail(function(e){console.log(e.responseText)})}},initSettings:function(){l(document).on("wpformsReady",function(){if(l("#wpforms-settings").length){var e=s.getQueryString("wpforms-integration"),t=s.getQueryString("jump");e?l("body").animate({scrollTop:l("#wpforms-integration-"+e).offset().top},1e3):t&&l("body").animate({scrollTop:l("#"+t).offset().top},1e3),l(".wpforms-admin-settings-form").conditions([{conditions:{element:"#wpforms-setting-gdpr",type:"checked",operator:"is"},actions:{if:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"show"},else:{element:"#wpforms-setting-row-gdpr-disable-uuid,#wpforms-setting-row-gdpr-disable-details",action:"hide"}},effect:"appear"},{conditions:{element:"input[name=recaptcha-type]:checked",type:"value",operator:"=",condition:"v3"},actions:{if:{element:"#wpforms-setting-row-recaptcha-v3-threshold",action:"show"},else:{element:"#wpforms-setting-row-recaptcha-v3-threshold",action:"hide"}},effect:"appear"}])}}),l(document).on("change","#wpforms-setting-disable-css",function(){s.settingsFormStylesAlert(l(this).val())}),l(document).on("click",".wpforms-setting-row-image button",function(e){e.preventDefault(),s.imageUploadModal(l(this))}),l(document).on("click","#wpforms-setting-license-key-verify",function(e){e.preventDefault(),s.licenseVerify(l(this))}),l(document).on("click","#wpforms-setting-license-key-deactivate",function(e){e.preventDefault(),s.licenseDeactivate(l(this))}),l(document).on("click","#wpforms-setting-license-key-refresh",function(e){e.preventDefault(),s.licenseRefresh(l(this))}),l(document).on("click",".wpforms-settings-provider-connect",function(e){e.preventDefault();var t=l(this);s.integrationConnect(t)}),l(document).on("click",".wpforms-settings-provider-accounts-list a",function(e){e.preventDefault(),s.integrationDisconnect(l(this))}),l(document).on("click",".wpforms-settings-provider:not(.focus-out) .wpforms-settings-provider-header",function(e){e.preventDefault(),l(this).parent().find(".wpforms-settings-provider-accounts").slideToggle(),l(this).parent().find(".wpforms-settings-provider-logo i").toggleClass("fa-chevron-right fa-chevron-down")}),l(document).on("click",".wpforms-settings-provider-accounts-toggle a",function(e){e.preventDefault();var t=l(this).parent().next(".wpforms-settings-provider-accounts-connect");t.find("input[type=text], input[type=password]").val(""),t.slideToggle()})},settingsFormStylesAlert:function(e){if("2"===e)var t=wpforms_admin.settings_form_style_base;else{if("3"!==e)return;t=wpforms_admin.settings_form_style_none}l.alert({title:wpforms_admin.heads_up,content:t,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})},imageUploadModal:function(e){if(f.media_frame)f.media_frame.open();else{var t=l(e).closest(".wpforms-setting-field");f.media_frame=wp.media.frames.wpforms_media_frame=wp.media({className:"media-frame wpforms-media-frame",frame:"select",multiple:!1,title:wpforms_admin.upload_image_title,library:{type:"image"},button:{text:wpforms_admin.upload_image_button}}),f.media_frame.on("select",function(){var e=f.media_frame.state().get("selection").first().toJSON();t.find("input[type=text]").val(e.url),t.find("img").remove(),t.prepend('<img src="'+e.url+'">')}),f.media_frame.open()}},licenseVerify:function(e){var i=l(e),s=i.closest(".wpforms-setting-row"),t=i.outerWidth(),a=i.text(),n={action:"wpforms_verify_license",nonce:wpforms_admin.nonce,license:l("#wpforms-setting-license-key").val()};i.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,n,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").show(),s.find(".type strong").text(e.data.type),l(".wpforms-license-notice").remove()):(n="fa fa-exclamation-circle",o="orange",t=e.data,s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),l.alert({title:!1,content:t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseDeactivate:function(e){var i=l(e),s=i.closest(".wpforms-setting-row"),t=i.outerWidth(),a=i.text(),n={action:"wpforms_deactivate_license",nonce:wpforms_admin.nonce};i.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,n,function(e){var t="fa fa-info-circle",n="blue",o=e.data;e.success?(s.find("#wpforms-setting-license-key").val(""),s.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()):(t="fa fa-exclamation-circle",n="orange"),l.alert({title:!1,content:o,icon:t,type:n,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}),i.html(a).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},licenseRefresh:function(e){var i=l(e).closest(".wpforms-setting-row"),t={action:"wpforms_refresh_license",nonce:wpforms_admin.nonce,license:l("#wpforms-setting-license-key").val()};l.post(wpforms_admin.ajax_url,t,function(e){var t,n="fa fa-check-circle",o="green";e.success?(t=e.data.msg,i.find(".type strong").text(e.data.type)):(n="fa fa-exclamation-circle",o="orange",t=e.data,i.find(".type, .desc, #wpforms-setting-license-key-deactivate").hide()),l.alert({title:!1,content:t,icon:n,type:o,buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(e){console.log(e.responseText)})},integrationConnect:function(n){var e=n.outerWidth(),o=n.text(),i=n.closest(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_add",data:n.closest("form").serialize(),provider:n.data("provider"),nonce:wpforms_admin.nonce};n.html("Connecting...").css("width",e).prop("disabled",!0),l.post(wpforms_admin.ajax_url,t,function(e){if(e.success)i.find(".wpforms-settings-provider-accounts-list ul").append(e.data.html),i.addClass("connected"),n.closest(".wpforms-settings-provider-accounts-connect").slideToggle();else{var t=wpforms_admin.provider_auth_error;e.hasOwnProperty("data")&&e.data.hasOwnProperty("error_msg")&&(t+="\n"+e.data.error_msg),l.alert({title:!1,content:t,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}n.html(o).css("width","auto").prop("disabled",!1)}).fail(function(e){console.log(e.responseText)})},integrationDisconnect:function(e){var n=l(e),o=n.parents(".wpforms-settings-provider"),t={action:"wpforms_settings_provider_disconnect",provider:n.data("provider"),key:n.data("key"),nonce:wpforms_admin.nonce};l.confirm({title:wpforms_admin.heads_up,content:wpforms_admin.provider_delete_confirm,backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){l.post(wpforms_admin.ajax_url,t,function(e){if(e.success){n.parent().parent().remove();var t=o.find(".wpforms-settings-provider-accounts-list li").length;void 0!==t&&0!==t||o.removeClass("connected")}else console.log(e)}).fail(function(e){console.log(e.responseText)})}},cancel:{text:wpforms_admin.cancel,keys:["esc"]}}})},initTools:function(){l(document).on("click","#wpforms-ssl-verify",function(e){e.preventDefault(),s.verifySSLConnection()}),l(document).on("click","#wpforms-importer-forms-submit",function(e){if(e.preventDefault(),l("#wpforms-importer-forms input:checked").length){var t=[];l("#wpforms-importer-forms input:checked").each(function(e){t[e]=l(this).val()}),wpforms_admin.isPro?s.importForms(t):s.analyzeForms(t)}else l.alert({title:!1,content:wpforms_admin.importer_forms_required,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}),l(document).on("click","#wpforms-importer-continue-submit",function(e){e.preventDefault(),s.importForms(f.formIDs)})},verifySSLConnection:function(){var t=l("#wpforms-ssl-verify"),n=t.text(),o=t.outerWidth(),i=t.parent(),e={action:"wpforms_verify_ssl",nonce:wpforms_admin.nonce};t.css("width",o).prop("disabled",!0).text(wpforms_admin.testing),l.post(wpforms_admin.ajax_url,e,function(e){console.log(e),i.find(".wpforms-alert, .wpforms-ssl-error").remove(),e.success?t.before('<div class="wpforms-alert wpforms-alert-success">'+e.data.msg+"</div>"):(t.before('<div class="wpforms-alert wpforms-alert-danger">'+e.data.msg+"</div>"),t.before('<div class="wpforms-ssl-error pre-error">'+e.data.debug+"</div>")),t.css("width",o).prop("disabled",!1).text(n)})},analyzeForms:function(e){var t=l("#wpforms-importer-analyze");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms").hide(),t.show(),f.analyzeQueue=e,f.analyzed=0,f.analyzeUpgrade=[],f.formIDs=e,s.analyzeForm()},analyzeForm:function(){var n=l("#wpforms-importer-analyze"),o=_.first(f.analyzeQueue),e={action:"wpforms_import_form_"+s.getQueryString("provider"),analyze:1,form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){if(e.success)if(_.isEmpty(e.data.upgrade_plain)&&_.isEmpty(e.data.upgrade_omit)||f.analyzeUpgrade.push({name:e.data.name,fields:_.union(e.data.upgrade_omit,e.data.upgrade_plain)}),f.analyzeQueue=_.without(f.analyzeQueue,o),f.analyzed++,_.isEmpty(f.analyzeQueue))if(_.isEmpty(f.analyzeUpgrade))s.importForms(f.formIDs);else{var t=wp.template("wpforms-importer-upgrade");n.find(".upgrade").append(t(f.analyzeUpgrade)),n.find(".upgrade").show(),n.find(".process-analyze").hide()}else n.find(".form-current").text(f.analyzed+1),s.analyzeForm()})},importForms:function(e){var t=l("#wpforms-importer-process");t.find(".form-total").text(e.length),t.find(".form-current").text("1"),l("#wpforms-importer-forms, #wpforms-importer-analyze").hide(),t.show(),f.importQueue=e,f.imported=0,s.importForm()},importForm:function(){var n=l("#wpforms-importer-process"),o=_.first(f.importQueue),e={action:"wpforms_import_form_"+s.getQueryString("provider"),form_id:o,nonce:wpforms_admin.nonce};l.post(wpforms_admin.ajax_url,e,function(e){var t;e.success&&(t=e.data.error?wp.template("wpforms-importer-status-error"):wp.template("wpforms-importer-status-update"),n.find(".status").prepend(t(e.data)),n.find(".status").show(),f.importQueue=_.without(f.importQueue,o),f.imported++,_.isEmpty(f.importQueue)?(n.find(".process-count").hide(),n.find(".forms-completed").text(f.imported),n.find(".process-completed").show()):(n.find(".form-current").text(f.imported+1),s.importForm()))})},initUpgrades:function(){l(document).on("click","#wpforms-upgrade-143 button",function(e){e.preventDefault();var n=l(this),t=n.outerWidth(),o=l("#wpforms-upgrade-143 .status"),i={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,init:!0,incomplete:n.data("incomplete")};n.html(f.iconSpinner).css("width",t).prop("disabled",!0),l.post(wpforms_admin.ajax_url,i,function(e){if(e.success){f.upgraded=Number(e.data.upgraded),f.upgradeTotal=Number(e.data.total);var t=Math.round(Number(f.upgraded)/Number(f.upgradeTotal)*100);n.remove(),o.find(".bar").css("width",t+"%"),o.show().find(".total").text(f.upgradeTotal),o.find(".current").text(f.upgraded),o.find(".percent").text(t+"%"),s.upgrade143()}})})},upgrade143:function(){var n=l("#wpforms-upgrade-143 .status"),e={action:"wpforms_upgrade_143",nonce:wpforms_admin.nonce,upgraded:f.upgraded};l.post(wpforms_admin.ajax_url,e,function(e){if(e.success){f.upgraded=Number(f.upgraded)+Number(e.data.count);var t=Math.round(Number(f.upgraded)/Number(f.upgradeTotal)*100);n.find(".bar").css("width",t+"%"),Number(e.data.count)<10?(n.find(".progress-bar").addClass("complete"),n.find(".msg").text(wpforms_admin.upgrade_completed)):(n.find(".current").text(f.upgraded),n.find(".percent").text(t+"%"),s.upgrade143())}})},isFormTypeNode:function(e){return"TEXTAREA"===(e=e||!1)||"INPUT"===e||"SELECT"===e},getQueryString:function(e){var t=new RegExp("[?&]"+e+"=([^&]*)").exec(window.location.search);return t&&decodeURIComponent(t[1].replace(/\+/g," "))},debug:function(e){s.isDebug()&&("object"==typeof e||e.constructor===Array?(console.log("WPForms Debug:"),console.log(e)):console.log("WPForms Debug: "+e))},isDebug:function(){return window.location.hash&&"#wpformsdebug"===window.location.hash}};s.init(),window.WPFormsAdmin=s}(jQuery);
changelog.txt CHANGED
@@ -1,5 +1,15 @@
1
  == Changelog ==
2
 
 
 
 
 
 
 
 
 
 
 
3
  = 1.5.4.2 =
4
  - Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`.
5
  - Fixed: About Us page behaviour when WP Mail SMTP Pro is installed.
1
  == Changelog ==
2
 
3
+ = 1.5.5 =
4
+ - Added: WPForms details inside Site Health Info reports (Tools > Site Health > Info).
5
+ - Added: Filter `wpforms_emails_summaries_is_disabled` to easily disable Email Summaries functionality.
6
+ - Added: New smart tag: `{field_html_id="42"}` - that will postprocess field value and display its HTML representation.
7
+ - Changed: Improve `wpforms_get_ip()` IP detection and related `{user_ip}` smart-tag value.
8
+ - Fixed: Giving access to WPForms for Editors (and other roles) should give access to dashboard widget as well.
9
+ - Fixed: Add 'attr' property to 'input_container' for radio/checkbox-based fields.
10
+ - Fixed: Various typos.
11
+ - Fixed: WP Mail SMTP plugin description on About us page.
12
+
13
  = 1.5.4.2 =
14
  - Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`.
15
  - Fixed: About Us page behaviour when WP Mail SMTP Pro is installed.
includes/admin/admin.php CHANGED
@@ -146,6 +146,8 @@ function wpforms_admin_scripts() {
146
  'importer_forms_required' => esc_html__( 'Please select at least one form to import.', 'wpforms-lite' ),
147
  'isPro' => wpforms()->pro,
148
  'nonce' => wp_create_nonce( 'wpforms-admin' ),
 
 
149
  'ok' => esc_html__( 'OK', 'wpforms-lite' ),
150
  'plugin_install_activate_btn' => esc_html__( 'Install and Activate', 'wpforms-lite' ),
151
  'plugin_install_activate_confirm' => esc_html__( 'needs to be installed and activated to import its forms. Would you like us to install and activate it for you?', 'wpforms-lite' ),
@@ -154,6 +156,7 @@ function wpforms_admin_scripts() {
154
  'provider_delete_confirm' => esc_html__( 'Are you sure you want to disconnect this account?', 'wpforms-lite' ),
155
  'provider_auth_error' => esc_html__( 'Could not authenticate with the provider.', 'wpforms-lite' ),
156
  'save_refresh' => esc_html__( 'Save and Refresh', 'wpforms-lite' ),
 
157
  'settings_form_style_base' => sprintf(
158
  wp_kses(
159
  /* translators: %s - WPForms.com docs page URL. */
146
  'importer_forms_required' => esc_html__( 'Please select at least one form to import.', 'wpforms-lite' ),
147
  'isPro' => wpforms()->pro,
148
  'nonce' => wp_create_nonce( 'wpforms-admin' ),
149
+ 'almost_done' => esc_html__( 'Almost Done', 'wpforms-lite' ),
150
+ 'oops' => esc_html__( 'Oops!', 'wpforms-lite' ),
151
  'ok' => esc_html__( 'OK', 'wpforms-lite' ),
152
  'plugin_install_activate_btn' => esc_html__( 'Install and Activate', 'wpforms-lite' ),
153
  'plugin_install_activate_confirm' => esc_html__( 'needs to be installed and activated to import its forms. Would you like us to install and activate it for you?', 'wpforms-lite' ),
156
  'provider_delete_confirm' => esc_html__( 'Are you sure you want to disconnect this account?', 'wpforms-lite' ),
157
  'provider_auth_error' => esc_html__( 'Could not authenticate with the provider.', 'wpforms-lite' ),
158
  'save_refresh' => esc_html__( 'Save and Refresh', 'wpforms-lite' ),
159
+ 'server_error' => esc_html__( 'Unfortunately, there was an server connection error.', 'wpforms-lite' ),
160
  'settings_form_style_base' => sprintf(
161
  wp_kses(
162
  /* translators: %s - WPForms.com docs page URL. */
includes/admin/builder/panels/class-setup.php CHANGED
@@ -90,7 +90,7 @@ class WPForms_Builder_Panel_Setup extends WPForms_Builder_Panel {
90
  printf(
91
  wp_kses(
92
  /* translators: %1$s - WPForms.com URL to a template suggestion, %2$s - WPForms.com URL to a doc about custom templates. */
93
- __( 'Have a suggestion for a new template? <a href="%1$s" target="_blank" rel="noopener noreferrer">We\'d love to hear it</a>. Also, you can <a href="%1$s" target="_blank" rel="noopener noreferrer">create your own templates</a>!', 'wpforms-lite' ),
94
  array(
95
  'a' => array(
96
  'href' => array(),
90
  printf(
91
  wp_kses(
92
  /* translators: %1$s - WPForms.com URL to a template suggestion, %2$s - WPForms.com URL to a doc about custom templates. */
93
+ __( 'Have a suggestion for a new template? <a href="%1$s" target="_blank" rel="noopener noreferrer">We\'d love to hear it</a>. Also, you can <a href="%2$s" target="_blank" rel="noopener noreferrer">create your own templates</a>!', 'wpforms-lite' ),
94
  array(
95
  'a' => array(
96
  'href' => array(),
includes/admin/class-about.php CHANGED
@@ -774,13 +774,13 @@ class WPForms_About {
774
  'wp-mail-smtp/wp_mail_smtp.php' => array(
775
  'icon' => WPFORMS_PLUGIN_URL . 'assets/images/about/plugin-smtp.png',
776
  'name' => esc_html__( 'WP Mail SMTP', 'wpforms-lite' ),
777
- 'desc' => esc_html__( 'SMTP (Simple Mail Transfer Protocol) is an industry standard for sending emails. SMTP helps increase email deliverability by using proper authentication.', 'wpforms-lite' ),
778
  'url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
779
  'pro' => array(
780
  'plug' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
781
  'icon' => WPFORMS_PLUGIN_URL . 'assets/images/about/plugin-smtp.png',
782
  'name' => esc_html__( 'WP Mail SMTP Pro', 'wpforms-lite' ),
783
- 'desc' => esc_html__( 'SMTP (Simple Mail Transfer Protocol) is an industry standard for sending emails. SMTP helps increase email deliverability by using proper authentication.', 'wpforms-lite' ),
784
  'url' => 'https://wpmailsmtp.com/pricing/',
785
  'act' => 'go-to-url',
786
  ),
774
  'wp-mail-smtp/wp_mail_smtp.php' => array(
775
  'icon' => WPFORMS_PLUGIN_URL . 'assets/images/about/plugin-smtp.png',
776
  'name' => esc_html__( 'WP Mail SMTP', 'wpforms-lite' ),
777
+ 'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'wpforms-lite' ),
778
  'url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
779
  'pro' => array(
780
  'plug' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
781
  'icon' => WPFORMS_PLUGIN_URL . 'assets/images/about/plugin-smtp.png',
782
  'name' => esc_html__( 'WP Mail SMTP Pro', 'wpforms-lite' ),
783
+ 'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'wpforms-lite' ),
784
  'url' => 'https://wpmailsmtp.com/pricing/',
785
  'act' => 'go-to-url',
786
  ),
includes/admin/class-settings.php CHANGED
@@ -152,34 +152,6 @@ class WPForms_Settings {
152
  */
153
  public function enqueues() {
154
 
155
- $min = \wpforms_get_min_suffix();
156
-
157
- // Enqueue Lite's assets.
158
- if ( ! wpforms()->pro ) {
159
- \wp_enqueue_script(
160
- 'wpforms-upgrade',
161
- \WPFORMS_PLUGIN_URL . "lite/assets/js/admin/upgrade{$min}.js",
162
- array( 'jquery' ),
163
- \WPFORMS_VERSION,
164
- true
165
- );
166
-
167
- \wp_localize_script(
168
- 'wpforms-upgrade',
169
- 'wpforms_upgrade',
170
- array(
171
- 'error' => esc_html__( 'Oops!', 'wpforms-lite' ),
172
- 'error_intro' => esc_html__( 'Unfortunately, there was an server connection error:', 'wpforms-lite' ),
173
- 'upgrd_to_pro_license_ok_title' => esc_html__( 'Almost Done', 'wpforms-lite' ),
174
- 'upgrd_to_pro_license_ok_msg' => esc_html__( 'We can automatically upgrade the installed version to WPForms PRO.', 'wpforms-lite' ),
175
- 'upgrd_to_pro_btn_ok' => esc_html__( 'Ok', 'wpforms-lite' ),
176
- 'upgrd_to_pro_btn_upgrade' => esc_html__( 'Upgrade now', 'wpforms-lite' ),
177
- 'upgrd_to_pro_btn_activate' => esc_html__( 'Activate now', 'wpforms-lite' ),
178
- 'upgrd_to_pro_btn_cancel' => esc_html__( 'Do upgrade later', 'wpforms-lite' ),
179
- )
180
- );
181
- }
182
-
183
  do_action( 'wpforms_settings_enqueue' );
184
  }
185
 
152
  */
153
  public function enqueues() {
154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  do_action( 'wpforms_settings_enqueue' );
156
  }
157
 
includes/admin/class-tools.php CHANGED
@@ -512,6 +512,8 @@ class WPForms_Tools {
512
  */
513
  public function export_tab() {
514
 
 
 
515
  ?>
516
 
517
  <div class="wpforms-setting-row tools">
@@ -593,6 +595,8 @@ class WPForms_Tools {
593
  </div>
594
 
595
  <?php
 
 
596
  }
597
 
598
  /**
512
  */
513
  public function export_tab() {
514
 
515
+ do_action( 'wpforms_admin_tools_export_top' );
516
+
517
  ?>
518
 
519
  <div class="wpforms-setting-row tools">
595
  </div>
596
 
597
  <?php
598
+
599
+ do_action( 'wpforms_admin_tools_export_bottom' );
600
  }
601
 
602
  /**
includes/admin/settings-api.php CHANGED
@@ -101,15 +101,12 @@ function wpforms_settings_content_callback( $args ) {
101
  */
102
  function wpforms_settings_license_callback( $args ) {
103
 
104
- $key = wpforms_setting( 'key', '', 'wpforms_license' );
105
- $type = wpforms_setting( 'type', '', 'wpforms_license' );
106
-
107
  // Lite users don't need to worry about license keys.
108
  if ( ! wpforms()->pro || ! class_exists( 'WPForms_License', false ) ) {
109
 
110
  $output = '<p>' . esc_html__( 'You\'re using WPForms Lite - no license needed. Enjoy!', 'wpforms-lite' ) . ' 🙂</p>';
111
  $output .=
112
- '<div id="wpforms-settings-upgrade-license-key-cont" class="wpforms-hide"><p>' .
113
  sprintf(
114
  wp_kses(
115
  /* translators: %s - WPForms.com upgrade URL. */
@@ -138,13 +135,18 @@ function wpforms_settings_license_callback( $args ) {
138
  ) .
139
  '</p>';
140
 
141
- $output .= '<hr><p>' . esc_html__( 'Already purchased? Simply enter your license key below to automatically unlock WPForms PRO!', 'wpforms-lite' ) . '</p>';
142
- $output .= '<p><input type="password" id="wpforms-settings-upgrade-license-key" placeholder="' . esc_attr__( 'Paste license key here', 'wpforms-lite' ) . '" value="' . esc_attr( $key ) . '" /><i class="wpforms-spinner wpforms-hide fa fa-circle-o-notch fa-spin fa-lg fa-fw"></i></p></div>';
143
- $output .= '<p><button type="button" class="wpforms-btn wpforms-btn-md wpforms-btn-orange wpforms-hide " id="wpforms-settings-upgrade-btn">' . esc_attr__( 'Unlock PRO Features Now', 'wpforms-lite' ) . '</button></p>';
 
 
144
 
145
  return $output;
146
  }
147
 
 
 
 
148
  $output = '<input type="password" id="wpforms-setting-license-key" value="' . esc_attr( $key ) . '" />';
149
  $output .= '<button id="wpforms-setting-license-key-verify" class="wpforms-btn wpforms-btn-md wpforms-btn-orange">' . esc_html__( 'Verify Key', 'wpforms-lite' ) . '</button>';
150
 
101
  */
102
  function wpforms_settings_license_callback( $args ) {
103
 
 
 
 
104
  // Lite users don't need to worry about license keys.
105
  if ( ! wpforms()->pro || ! class_exists( 'WPForms_License', false ) ) {
106
 
107
  $output = '<p>' . esc_html__( 'You\'re using WPForms Lite - no license needed. Enjoy!', 'wpforms-lite' ) . ' 🙂</p>';
108
  $output .=
109
+ '<p>' .
110
  sprintf(
111
  wp_kses(
112
  /* translators: %s - WPForms.com upgrade URL. */
135
  ) .
136
  '</p>';
137
 
138
+ $output .= '<hr><p>' . esc_html__( 'Already purchased? Simply enter your license key below to connect with WPForms PRO!', 'wpforms-lite' ) . '</p>';
139
+ $output .= '<p>';
140
+ $output .= '<input type="password" id="wpforms-settings-upgrade-license-key" placeholder="' . esc_attr__( 'Paste license key here', 'wpforms-lite' ) . '" value="" />';
141
+ $output .= '<button type="button" class="wpforms-btn wpforms-btn-md wpforms-btn-orange" id="wpforms-settings-connect-btn">' . esc_attr__( 'Connect', 'wpforms-lite' ) . '</button>';
142
+ $output .= '</p>';
143
 
144
  return $output;
145
  }
146
 
147
+ $key = wpforms_setting( 'key', '', 'wpforms_license' );
148
+ $type = wpforms_setting( 'type', '', 'wpforms_license' );
149
+
150
  $output = '<input type="password" id="wpforms-setting-license-key" value="' . esc_attr( $key ) . '" />';
151
  $output .= '<button id="wpforms-setting-license-key-verify" class="wpforms-btn wpforms-btn-md wpforms-btn-orange">' . esc_html__( 'Verify Key', 'wpforms-lite' ) . '</button>';
152
 
includes/class-form.php CHANGED
@@ -485,10 +485,10 @@ class WPForms_Form_Handler {
485
  *
486
  * @since 1.0.0
487
  *
488
- * @param string $form_id
489
- * @param string $field
490
  *
491
- * @return bool
492
  */
493
  public function get_meta( $form_id, $field = '' ) {
494
 
@@ -496,9 +496,12 @@ class WPForms_Form_Handler {
496
  return false;
497
  }
498
 
499
- $data = $this->get( $form_id, array(
500
- 'content_only' => true,
501
- ) );
 
 
 
502
 
503
  if ( isset( $data['meta'] ) ) {
504
  if ( empty( $field ) ) {
485
  *
486
  * @since 1.0.0
487
  *
488
+ * @param string $form_id Form ID.
489
+ * @param string $field Field.
490
  *
491
+ * @return false|array
492
  */
493
  public function get_meta( $form_id, $field = '' ) {
494
 
496
  return false;
497
  }
498
 
499
+ $data = $this->get(
500
+ $form_id,
501
+ array(
502
+ 'content_only' => true,
503
+ )
504
+ );
505
 
506
  if ( isset( $data['meta'] ) ) {
507
  if ( empty( $field ) ) {
includes/class-license.php DELETED
@@ -1,830 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * License key fun.
5
- *
6
- * @package WPForms
7
- * @author WPForms
8
- * @since 1.0.0
9
- * @license GPL-2.0+
10
- * @copyright Copyright (c) 2016, WPForms LLC
11
- */
12
- class WPForms_License {
13
-
14
- /**
15
- * Holds any license error messages.
16
- *
17
- * @since 1.0.0
18
- * @var array
19
- */
20
- public $errors = array();
21
-
22
- /**
23
- * Holds any license success messages.
24
- *
25
- * @since 1.0.0
26
- * @var array
27
- */
28
- public $success = array();
29
-
30
- /**
31
- * Primary class constructor.
32
- *
33
- * @since 1.0.0
34
- */
35
- public function __construct() {
36
-
37
- add_action( 'wp_ajax_wpforms_verify_license', array( $this, 'verify_license' ) );
38
- add_action( 'wp_ajax_wpforms_get_upgrade_url', array( $this, 'get_upgrade_url' ) );
39
- add_action( 'wp_ajax_nopriv_wpforms_run_one_click_upgrade', array( $this, 'run_one_click_upgrade' ) );
40
-
41
- // Admin notices.
42
- if ( wpforms()->pro && ( ! isset( $_GET['page'] ) || 'wpforms-settings' !== $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
43
- add_action( 'admin_notices', array( $this, 'notices' ) );
44
- }
45
-
46
- // Periodic background license check.
47
- if ( $this->get() ) {
48
- $this->maybe_validate_key();
49
- }
50
- }
51
-
52
- /**
53
- * Load the license key.
54
- *
55
- * @since 1.0.0
56
- */
57
- public function get() {
58
-
59
- // Check for license key.
60
- $key = wpforms_setting( 'key', false, 'wpforms_license' );
61
-
62
- // Allow wp-config constant to pass key.
63
- if ( ! $key && defined( 'WPFORMS_LICENSE_KEY' ) ) {
64
- $key = WPFORMS_LICENSE_KEY;
65
- }
66
-
67
- return $key;
68
- }
69
-
70
- /**
71
- * Load the license key level.
72
- *
73
- * @since 1.0.0
74
- */
75
- public function type() {
76
-
77
- $type = wpforms_setting( 'type', false, 'wpforms_license' );
78
-
79
- return $type;
80
- }
81
-
82
- /**
83
- * Verifies a license key entered by the user.
84
- *
85
- * @since 1.0.0
86
- *
87
- * @param string $key
88
- * @param bool $ajax
89
- *
90
- * @return bool
91
- */
92
- public function verify_key( $key = '', $ajax = false ) {
93
-
94
- if ( empty( $key ) ) {
95
- return false;
96
- }
97
-
98
- // Perform a request to verify the key.
99
- $verify = $this->perform_remote_request( 'verify-key', array( 'tgm-updater-key' => $key ) );
100
-
101
- // If it returns false, send back a generic error message and return.
102
- if ( ! $verify ) {
103
- $msg = esc_html__( 'There was an error connecting to the remote key API. Please try again later.', 'wpforms' );
104
- if ( $ajax ) {
105
- wp_send_json_error( $msg );
106
- } else {
107
- $this->errors[] = $msg;
108
-
109
- return false;
110
- }
111
- }
112
-
113
- // If an error is returned, set the error and return.
114
- if ( ! empty( $verify->error ) ) {
115
- if ( $ajax ) {
116
- wp_send_json_error( $verify->error );
117
- } else {
118
- $this->errors[] = $verify->error;
119
-
120
- return false;
121
- }
122
- }
123
-
124
- $success = isset( $verify->success ) ? $verify->success : esc_html__( 'Congratulations! This site is now receiving automatic updates.', 'wpforms' );
125
-
126
- // Otherwise, our request has been done successfully. Update the option and set the success message.
127
- $option = (array) get_option( 'wpforms_license', array() );
128
- $option['key'] = $key;
129
- $option['type'] = isset( $verify->type ) ? $verify->type : $option['type'];
130
- $option['is_expired'] = false;
131
- $option['is_disabled'] = false;
132
- $option['is_invalid'] = false;
133
- $this->success[] = $success;
134
- update_option( 'wpforms_license', $option );
135
- delete_transient( '_wpforms_addons' );
136
-
137
- wp_clean_plugins_cache( true );
138
-
139
- if ( $ajax ) {
140
- wp_send_json_success(
141
- array(
142
- 'type' => $option['type'],
143
- 'msg' => $success,
144
- )
145
- );
146
- }
147
- }
148
-
149
- /**
150
- * Maybe validates a license key entered by the user.
151
- *
152
- * @since 1.0.0
153
- *
154
- * @return void Return early if the transient has not expired yet.
155
- */
156
- public function maybe_validate_key() {
157
-
158
- $key = $this->get();
159
-
160
- if ( ! $key ) {
161
- return;
162
- }
163
-
164
- // Perform a request to validate the key - Only run every 12 hours.
165
- $timestamp = get_option( 'wpforms_license_updates' );
166
-
167
- if ( ! $timestamp ) {
168
- $timestamp = strtotime( '+24 hours' );
169
- update_option( 'wpforms_license_updates', $timestamp );
170
- $this->validate_key( $key );
171
- } else {
172
- $current_timestamp = time();
173
- if ( $current_timestamp < $timestamp ) {
174
- return;
175
- } else {
176
- update_option( 'wpforms_license_updates', strtotime( '+24 hours' ) );
177
- $this->validate_key( $key );
178
- }
179
- }
180
- }
181
-
182
- /**
183
- * Validates a license key entered by the user.
184
- *
185
- * @since 1.0.0
186
- *
187
- * @param string $key
188
- * @param bool $forced Force to set contextual messages (false by default).
189
- * @param bool $ajax
190
- */
191
- public function validate_key( $key = '', $forced = false, $ajax = false ) {
192
-
193
- $validate = $this->perform_remote_request( 'validate-key', array( 'tgm-updater-key' => $key ) );
194
-
195
- // If there was a basic API error in validation, only set the transient for 10 minutes before retrying.
196
- if ( ! $validate ) {
197
- // If forced, set contextual success message.
198
- if ( $forced ) {
199
- $msg = esc_html__( 'There was an error connecting to the remote key API. Please try again later.', 'wpforms' );
200
- if ( $ajax ) {
201
- wp_send_json_error( $msg );
202
- } else {
203
- $this->errors[] = $msg;
204
- }
205
- }
206
-
207
- return;
208
- }
209
-
210
- // If a key or author error is returned, the license no longer exists or the user has been deleted, so reset license.
211
- if ( isset( $validate->key ) || isset( $validate->author ) ) {
212
- $option = get_option( 'wpforms_license' );
213
- $option['is_expired'] = false;
214
- $option['is_disabled'] = false;
215
- $option['is_invalid'] = true;
216
- update_option( 'wpforms_license', $option );
217
- if ( $ajax ) {
218
- wp_send_json_error( esc_html__( 'Your license key for WPForms is invalid. The key no longer exists or the user associated with the key has been deleted. Please use a different key to continue receiving automatic updates.', 'wpforms' ) );
219
- }
220
-
221
- return;
222
- }
223
-
224
- // If the license has expired, set the transient and expired flag and return.
225
- if ( isset( $validate->expired ) ) {
226
- $option = get_option( 'wpforms_license' );
227
- $option['is_expired'] = true;
228
- $option['is_disabled'] = false;
229
- $option['is_invalid'] = false;
230
- update_option( 'wpforms_license', $option );
231
- if ( $ajax ) {
232
- wp_send_json_error( esc_html__( 'Your license key for WPForms has expired. Please renew your license key on WPForms.com to continue receiving automatic updates.', 'wpforms' ) );
233
- }
234
-
235
- return;
236
- }
237
-
238
- // If the license is disabled, set the transient and disabled flag and return.
239
- if ( isset( $validate->disabled ) ) {
240
- $option = get_option( 'wpforms_license' );
241
- $option['is_expired'] = false;
242
- $option['is_disabled'] = true;
243
- $option['is_invalid'] = false;
244
- update_option( 'wpforms_license', $option );
245
- if ( $ajax ) {
246
- wp_send_json_error( esc_html__( 'Your license key for WPForms has been disabled. Please use a different key to continue receiving automatic updates.', 'wpforms' ) );
247
- }
248
-
249
- return;
250
- }
251
-
252
- // Otherwise, our check has returned successfully. Set the transient and update our license type and flags.
253
- $option = get_option( 'wpforms_license' );
254
- $option['type'] = isset( $validate->type ) ? $validate->type : $option['type'];
255
- $option['is_expired'] = false;
256
- $option['is_disabled'] = false;
257
- $option['is_invalid'] = false;
258
- update_option( 'wpforms_license', $option );
259
-
260
- // If forced, set contextual success message.
261
- if ( $forced ) {
262
- $msg = esc_html__( 'Your key has been refreshed successfully.', 'wpforms' );
263
- $this->success[] = $msg;
264
- if ( $ajax ) {
265
- wp_send_json_success(
266
- array(
267
- 'type' => $option['type'],
268
- 'msg' => $msg,
269
- )
270
- );
271
- }
272
- }
273
- }
274
-
275
- /**
276
- * Deactivates a license key entered by the user.
277
- *
278
- * @since 1.0.0
279
- *
280
- * @param bool $ajax
281
- */
282
- public function deactivate_key( $ajax = false ) {
283
-
284
- $key = $this->get();
285
-
286
- if ( ! $key ) {
287
- return;
288
- }
289
-
290
- // Perform a request to deactivate the key.
291
- $deactivate = $this->perform_remote_request( 'deactivate-key', array( 'tgm-updater-key' => $key ) );
292
-
293
- // If it returns false, send back a generic error message and return.
294
- if ( ! $deactivate ) {
295
- $msg = esc_html__( 'There was an error connecting to the remote key API. Please try again later.', 'wpforms' );
296
- if ( $ajax ) {
297
- wp_send_json_error( $msg );
298
- } else {
299
- $this->errors[] = $msg;
300
-
301
- return;
302
- }
303
- }
304
-
305
- // If an error is returned, set the error and return.
306
- if ( ! empty( $deactivate->error ) ) {
307
- if ( $ajax ) {
308
- wp_send_json_error( $deactivate->error );
309
- } else {
310
- $this->errors[] = $deactivate->error;
311
-
312
- return;
313
- }
314
- }
315
-
316
- // Otherwise, our request has been done successfully. Reset the option and set the success message.
317
- $success = isset( $deactivate->success ) ? $deactivate->success : esc_html__( 'You have deactivated the key from this site successfully.', 'wpforms' );
318
- $this->success[] = $success;
319
- update_option( 'wpforms_license', '' );
320
- delete_transient( '_wpforms_addons' );
321
-
322
- if ( $ajax ) {
323
- wp_send_json_success( $success );
324
- }
325
- }
326
-
327
- /**
328
- * Returns possible license key error flag.
329
- *
330
- * @since 1.0.0
331
- * @return bool True if there are license key errors, false otherwise.
332
- */
333
- public function get_errors() {
334
-
335
- $option = get_option( 'wpforms_license' );
336
-
337
- return ! empty( $option['is_expired'] ) || ! empty( $option['is_disabled'] ) || ! empty( $option['is_invalid'] );
338
- }
339
-
340
- /**
341
- * Outputs any notices generated by the class.
342
- *
343
- * @since 1.0.0
344
- *
345
- * @param bool $below_h2
346
- */
347
- public function notices( $below_h2 = false ) {
348
-
349
- // Grab the option and output any nag dealing with license keys.
350
- $key = $this->get();
351
- $option = get_option( 'wpforms_license' );
352
- $below_h2 = $below_h2 ? 'below-h2' : '';
353
-
354
- // If there is no license key, output nag about ensuring key is set for automatic updates.
355
- if ( ! $key ) :
356
- ?>
357
- <div class="notice notice-info <?php echo $below_h2; ?> wpforms-license-notice">
358
- <p>
359
- <?php
360
- printf(
361
- wp_kses(
362
- /* translators: %s - plugin settings page URL. */
363
- __( 'Please <a href="%s">enter and activate</a> your license key for WPForms to enable automatic updates.', 'wpforms' ),
364
- array(
365
- 'a' => array(
366
- 'href' => array(),
367
- ),
368
- )
369
- ),
370
- esc_url( add_query_arg( array( 'page' => 'wpforms-settings' ), admin_url( 'admin.php' ) ) )
371
- );
372
- ?>
373
- </p>
374
- </div>
375
- <?php
376
- endif;
377
-
378
- // If a key has expired, output nag about renewing the key.
379
- if ( isset( $option['is_expired'] ) && $option['is_expired'] ) :
380
- ?>
381
- <div class="error notice <?php echo $below_h2; ?> wpforms-license-notice">
382
- <p>
383
- <?php
384
- printf(
385
- wp_kses(
386
- /* translators: %s - WPForms.com login page URL. */
387
- __( 'Your license key for WPForms has expired. <a href="%s" target="_blank" rel="noopener noreferrer">Please click here to renew your license key and continue receiving automatic updates.</a>', 'wpforms' ),
388
- array(
389
- 'a' => array(
390
- 'href' => array(),
391
- 'target' => array(),
392
- 'rel' => array(),
393
- ),
394
- )
395
- ),
396
- 'https://wpforms.com/login/'
397
- );
398
- ?>
399
- </p>
400
- </div>
401
- <?php
402
- endif;
403
-
404
- // If a key has been disabled, output nag about using another key.
405
- if ( isset( $option['is_disabled'] ) && $option['is_disabled'] ) :
406
- ?>
407
- <div class="error notice <?php echo $below_h2; ?> wpforms-license-notice">
408
- <p><?php esc_html_e( 'Your license key for WPForms has been disabled. Please use a different key to continue receiving automatic updates.', 'wpforms' ); ?></p>
409
- </div>
410
- <?php
411
- endif;
412
-
413
- // If a key is invalid, output nag about using another key.
414
- if ( isset( $option['is_invalid'] ) && $option['is_invalid'] ) :
415
- ?>
416
- <div class="error notice <?php echo $below_h2; ?> wpforms-license-notice">
417
- <p><?php esc_html_e( 'Your license key for WPForms is invalid. The key no longer exists or the user associated with the key has been deleted. Please use a different key to continue receiving automatic updates.', 'wpforms' ); ?></p>
418
- </div>
419
- <?php
420
- endif;
421
-
422
- // If there are any license errors, output them now.
423
- if ( ! empty( $this->errors ) ) :
424
- ?>
425
- <div class="error notice <?php echo $below_h2; ?> wpforms-license-notice">
426
- <p><?php echo implode( '<br>', $this->errors ); ?></p>
427
- </div>
428
- <?php
429
- endif;
430
-
431
- // If there are any success messages, output them now.
432
- if ( ! empty( $this->success ) ) :
433
- ?>
434
- <div class="updated notice <?php echo $below_h2; ?> wpforms-license-notice">
435
- <p><?php echo implode( '<br>', $this->success ); ?></p>
436
- </div>
437
- <?php
438
- endif;
439
-
440
- }
441
-
442
- /**
443
- * Retrieves addons from the stored transient or remote server.
444
- *
445
- * @param bool $force
446
- *
447
- * @return array|bool|mixed 1.0.0
448
- */
449
- public function addons( $force = false ) {
450
-
451
- $key = $this->get();
452
-
453
- if ( ! $key ) {
454
- return false;
455
- }
456
-
457
- $addons = get_transient( '_wpforms_addons' );
458
-
459
- if ( $force || false === $addons ) {
460
- $addons = $this->get_addons();
461
- }
462
-
463
- return $addons;
464
- }
465
-
466
- /**
467
- * Pings the remote server for addons data.
468
- *
469
- * @since 1.0.0
470
- *
471
- * @return bool|array False if no key or failure, array of addon data otherwise.
472
- */
473
- public function get_addons() {
474
-
475
- $key = $this->get();
476
- $addons = $this->perform_remote_request( 'get-addons-data', array( 'tgm-updater-key' => $key ) );
477
-
478
- // If there was an API error, set transient for only 10 minutes.
479
- if ( ! $addons ) {
480
- set_transient( '_wpforms_addons', false, 10 * MINUTE_IN_SECONDS );
481
-
482
- return false;
483
- }
484
-
485
- // If there was an error retrieving the addons, set the error.
486
- if ( isset( $addons->error ) ) {
487
- set_transient( '_wpforms_addons', false, 10 * MINUTE_IN_SECONDS );
488
-
489
- return false;
490
- }
491
-
492
- // Otherwise, our request worked. Save the data and return it.
493
- set_transient( '_wpforms_addons', $addons, DAY_IN_SECONDS );
494
-
495
- return $addons;
496
- }
497
-
498
- /**
499
- * Queries the remote URL via wp_remote_post and returns a json decoded response.
500
- *
501
- * @since 1.0.0
502
- *
503
- * @param string $action The name of the $_POST action var.
504
- * @param array $body The content to retrieve from the remote URL.
505
- * @param array $headers The headers to send to the remote URL.
506
- * @param string $return_format The format for returning content from the remote URL.
507
- *
508
- * @return string|bool Json decoded response on success, false on failure.
509
- */
510
- public function perform_remote_request( $action, $body = array(), $headers = array(), $return_format = 'json' ) {
511
-
512
- // Build the body of the request.
513
- $body = wp_parse_args(
514
- $body,
515
- array(
516
- 'tgm-updater-action' => $action,
517
- 'tgm-updater-key' => $body['tgm-updater-key'],
518
- 'tgm-updater-wp-version' => get_bloginfo( 'version' ),
519
- 'tgm-updater-referer' => site_url(),
520
- )
521
- );
522
- $body = http_build_query( $body, '', '&' );
523
-
524
- // Build the headers of the request.
525
- $headers = wp_parse_args(
526
- $headers,
527
- array(
528
- 'Content-Type' => 'application/x-www-form-urlencoded',
529
- 'Content-Length' => strlen( $body ),
530
- )
531
- );
532
-
533
- // Setup variable for wp_remote_post.
534
- $post = array(
535
- 'headers' => $headers,
536
- 'body' => $body,
537
- );
538
-
539
- // Perform the query and retrieve the response.
540
- $response = wp_remote_post( WPFORMS_UPDATER_API, $post );
541
- $response_code = wp_remote_retrieve_response_code( $response );
542
- $response_body = wp_remote_retrieve_body( $response );
543
-
544
- // Bail out early if there are any errors.
545
- if ( 200 != $response_code || is_wp_error( $response_body ) ) {
546
- return false;
547
- }
548
-
549
- // Return the json decoded content.
550
- return json_decode( $response_body );
551
- }
552
-
553
- /**
554
- * Checks to see if the site is using an active license.
555
- *
556
- * @since 1.5.0
557
- *
558
- * @return bool
559
- */
560
- public function is_active() {
561
-
562
- $license = get_option( 'wpforms_license', false );
563
-
564
- if (
565
- empty( $license ) ||
566
- ! empty( $license['is_expired'] ) ||
567
- ! empty( $license['is_disabled'] ) ||
568
- ! empty( $license['is_invalid'] )
569
- ) {
570
- return false;
571
- }
572
-
573
- return true;
574
- }
575
-
576
- /**
577
- * Verify license.
578
- *
579
- * @since 1.5.4
580
- */
581
- public function verify_license() {
582
-
583
- // Run a security check.
584
- check_ajax_referer( 'wpforms-admin', 'nonce' );
585
-
586
- // Check for permissions.
587
- if ( ! wpforms_current_user_can() ) {
588
- wp_send_json_error();
589
- }
590
-
591
- // Check for license key.
592
- if ( empty( $_POST['license'] ) ) {
593
- wp_send_json_error( esc_html__( 'Please enter a license key.', 'wpforms-lite' ) );
594
- }
595
-
596
- $this->verify_key( sanitize_text_field( wp_unslash( $_POST['license'] ) ), true );
597
- }
598
-
599
- /**
600
- * Converting errors to exceptions.
601
- *
602
- * @since 1.5.4
603
- */
604
- public function init_error_handler() {
605
- set_error_handler( // phpcs:ignore
606
- function ( $errno, $errstr, $errfile, $errline, array $errcontex ) {
607
- throw new \Exception( $errstr );
608
- }
609
- );
610
- }
611
-
612
- /**
613
- * Ajax handler for grabbing the upgrade url.
614
- *
615
- * @since 1.5.4
616
- */
617
- public function get_upgrade_url() {
618
-
619
- $this->init_error_handler();
620
- try {
621
-
622
- // Run a security check.
623
- check_ajax_referer( 'wpforms-admin', 'nonce' );
624
-
625
- // Check for permissions.
626
- if ( ! current_user_can( 'install_plugins' ) ) {
627
- wp_send_json_error( array( 'message' => esc_html__( 'Sorry, you do not have permission to install plugins.', 'wpforms-lite' ) ) );
628
- }
629
-
630
- // Check license key.
631
- $key = wpforms_setting( 'key', false, 'wpforms_license' );
632
- if ( empty( $key ) ) {
633
- wp_send_json_error( array( 'message' => esc_html__( 'You are not licensed.', 'wpforms-lite' ) ) );
634
- }
635
- if ( wpforms()->pro ) {
636
- wp_send_json_error( array( 'message' => esc_html__( 'Only the Lite version can upgrade.', 'wpforms-lite' ) ) );
637
- }
638
-
639
- // Verify pro version is not installed.
640
- $active = activate_plugin( 'wpforms/wpforms.php', false, false, true );
641
- if ( ! is_wp_error( $active ) ) {
642
- // Deactivate Lite.
643
- deactivate_plugins( plugin_basename( WPFORMS_PLUGIN_FILE ) );
644
- wp_send_json_success(
645
- array(
646
- 'message' => esc_html__( 'WPForms Pro was already installed and has not been activated.', 'wpforms-lite' ),
647
- 'reload' => true,
648
- )
649
- );
650
- }
651
-
652
- $args = array(
653
- 'plugin_name' => 'WPForms Pro',
654
- 'plugin_slug' => 'wpforms',
655
- 'plugin_path' => plugin_basename( WPFORMS_PLUGIN_FILE ),
656
- 'plugin_url' => trailingslashit( WP_PLUGIN_URL ) . 'wpforms',
657
- 'remote_url' => 'https://wpforms.com/',
658
- 'version' => WPFORMS_VERSION,
659
- 'key' => $key,
660
- );
661
- $updater = new WPForms_Updater( $args );
662
- $addons = $updater->update_plugins_filter( $updater );
663
-
664
- if ( empty( $addons->update->package ) ) {
665
- wp_send_json_error(
666
- array(
667
- 'message' => esc_html__( 'We encountered a problem unlocking the PRO features. Please install the PRO version manually.', 'wpforms-lite' ),
668
- )
669
- );
670
- }
671
-
672
- // Generate URL.
673
- $oth = hash( 'sha512', wp_rand() );
674
- update_option( 'wpforms_one_click_upgrade', $oth );
675
- $version = WPFORMS_VERSION;
676
- $file = $addons->update->package;
677
- $siteurl = admin_url();
678
- $endpoint = admin_url( 'admin-ajax.php' );
679
- $redirect = admin_url( 'admin.php?page=wpforms-settings' );
680
- $url = add_query_arg(
681
- array(
682
- 'key' => $key,
683
- 'oth' => $oth,
684
- 'endpoint' => $endpoint,
685
- 'version' => $version,
686
- 'siteurl' => $siteurl,
687
- 'redirect' => rawurldecode( base64_encode( $redirect ) ), // phpcs:ignore
688
- 'file' => rawurldecode( base64_encode( $file ) ), // phpcs:ignore
689
- ),
690
- 'https://upgrade.wpforms.com'
691
- );
692
- wp_send_json_success(
693
- array(
694
- 'url' => $url,
695
- 'back_url' => add_query_arg(
696
- array(
697
- 'action' => 'wpforms_run_one_click_upgrade',
698
- 'oth' => $oth,
699
- 'file' => rawurldecode( base64_encode( $file ) ), // phpcs:ignore
700
- ),
701
- $endpoint
702
- ),
703
- )
704
- );
705
-
706
- } catch ( \Exception $e ) {
707
-
708
- wp_send_json_error( array( 'error' => $e->getMessage() . ' in file ' . $e->getFile() . ', line ' . $e->getLine() ) );
709
-
710
- }
711
- }
712
-
713
- /**
714
- * Endpoint for one-click upgrade.
715
- *
716
- * @since 1.5.4
717
- */
718
- public function run_one_click_upgrade() {
719
-
720
- $this->init_error_handler();
721
- try {
722
-
723
- $error = esc_html__( 'Could not install upgrade. Please download from wpforms.com and install manually.', 'wpforms-lite' );
724
-
725
- // verify params present (oth & download link).
726
- $post_oth = ! empty( $_REQUEST['oth'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['oth'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
727
- $post_url = ! empty( $_REQUEST['file'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['file'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
728
- if ( empty( $post_oth ) || empty( $post_url ) ) {
729
- wp_send_json_error( $error );
730
- }
731
- // Verify oth.
732
- $oth = get_option( 'wpforms_one_click_upgrade' );
733
- if ( empty( $oth ) ) {
734
- wp_send_json_error( $error );
735
- }
736
- if ( ! hash_equals( $oth, $post_oth ) ) {
737
- wp_send_json_error( $error );
738
- }
739
- // Delete so cannot replay.
740
- delete_option( 'wpforms_one_click_upgrade' );
741
-
742
- // Set the current screen to avoid undefined notices.
743
- set_current_screen( 'wpforms_page_wpforms-settings' );
744
-
745
- // Prepare variables.
746
- $url = esc_url_raw(
747
- add_query_arg(
748
- array(
749
- 'page' => 'wpforms-settings',
750
- ),
751
- admin_url( 'admin.php' )
752
- )
753
- );
754
- // Verify pro not activated.
755
- if ( wpforms()->pro ) {
756
- wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
757
- }
758
- // Verify pro not installed.
759
- $active = activate_plugin( 'wpforms/wpforms.php', $url, false, true );
760
- if ( ! is_wp_error( $active ) ) {
761
- deactivate_plugins( plugin_basename( WPFORMS_PLUGIN_FILE ) );
762
- wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
763
- }
764
- $creds = request_filesystem_credentials( $url, '', false, false, null );
765
- // Check for file system permissions.
766
- $perm_error = esc_html__( 'Could not install upgrade. Please check for file system permissions and try again. Also you can download plugin from wpforms.com and install manually.', 'wpforms-lite' );
767
- if ( false === $creds ) {
768
- wp_send_json_error( $perm_error );
769
- }
770
- if ( ! WP_Filesystem( $creds ) ) {
771
- wp_send_json_error( $perm_error );
772
- }
773
- // We do not need any extra credentials if we have gotten this far, so let's install the plugin.
774
- require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
775
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-upgrader-skin.php';
776
- // Do not allow WordPress to search/download translations, as this will break JS output.
777
- remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
778
- // Create the plugin upgrader with our custom skin.
779
- $installer = new Plugin_Upgrader( new WPForms_Upgrader_Skin() );
780
- // Error check.
781
- if ( ! method_exists( $installer, 'install' ) ) {
782
- wp_send_json_error( $error );
783
- }
784
- // Check license key.
785
- $key = wpforms_setting( 'key', false, 'wpforms_license' );
786
- if ( empty( $key ) ) {
787
- wp_send_json_error( new WP_Error( '403', esc_html__( 'You are not licensed.', 'wpforms-lite' ) ) );
788
- }
789
-
790
- $args = array(
791
- 'plugin_name' => 'WPForms Pro',
792
- 'plugin_slug' => 'wpforms',
793
- 'plugin_path' => plugin_basename( WPFORMS_PLUGIN_FILE ),
794
- 'plugin_url' => trailingslashit( WP_PLUGIN_URL ) . 'wpforms',
795
- 'remote_url' => 'https://wpforms.com/',
796
- 'version' => WPFORMS_VERSION,
797
- 'key' => $key,
798
- );
799
- $updater = new WPForms_Updater( $args );
800
- $addons = $updater->update_plugins_filter( $updater );
801
- if ( empty( $addons->update->package ) ) {
802
- wp_send_json_error( $error );
803
- }
804
- $installer->install( $addons->update->package ); // phpcs:ignore
805
- // Flush the cache and return the newly installed plugin basename.
806
- wp_cache_flush();
807
- $plugin_basename = $installer->plugin_info();
808
- if ( $plugin_basename ) {
809
- // Deactivate the lite version first.
810
- deactivate_plugins( plugin_basename( WPFORMS_PLUGIN_FILE ) );
811
- // Activate the plugin silently.
812
- $activated = activate_plugin( $plugin_basename, '', false, true );
813
- if ( ! is_wp_error( $activated ) ) {
814
- add_option( 'wpforms_install', 1 );
815
- wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
816
- } else {
817
- // Reactivate the lite plugin if pro activation failed.
818
- activate_plugin( plugin_basename( WPFORMS_PLUGIN_FILE ), '', false, true );
819
- wp_send_json_error( esc_html__( 'Pro version installed but needs to be activated from the Plugins page inside your WordPress admin.', 'wpforms-lite' ) );
820
- }
821
- }
822
- wp_send_json_error( $error );
823
-
824
- } catch ( \Exception $e ) {
825
-
826
- wp_send_json_error( array( 'error' => $e->getMessage() . ' in file ' . $e->getFile() . ', line ' . $e->getLine() ) );
827
-
828
- }
829
- }
830
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-smart-tags.php CHANGED
@@ -138,8 +138,7 @@ class WPForms_Smart_Tags {
138
  break;
139
 
140
  case 'user_ip':
141
- $ip = ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
142
- $content = str_replace( '{' . $tag . '}', sanitize_text_field( $ip ), $content );
143
  break;
144
 
145
  case 'user_id':
@@ -275,7 +274,6 @@ class WPForms_Smart_Tags {
275
  }
276
  }
277
 
278
-
279
  // User meta smart tags.
280
  preg_match_all( "/\{user_meta key=\"(.+?)\"\}/", $content, $user_metas );
281
 
@@ -283,15 +281,15 @@ class WPForms_Smart_Tags {
283
 
284
  foreach ( $user_metas[1] as $key => $user_meta ) {
285
 
286
- $value = is_user_logged_in() ? get_user_meta( get_current_user_id(), sanitize_text_field( $user_meta ), true ) : '';
287
  $content = str_replace( $user_metas[0][ $key ], $value, $content );
288
  }
289
  }
290
 
291
- // Field smart tags (settings, etc).
292
  preg_match_all( "/\{field_id=\"(.+?)\"\}/", $content, $ids );
293
 
294
- // We can only process field smart tags if we have $fields
295
  if ( ! empty( $ids[1] ) && ! empty( $fields ) ) {
296
 
297
  foreach ( $ids[1] as $key => $parts ) {
@@ -304,7 +302,7 @@ class WPForms_Smart_Tags {
304
  }
305
  }
306
 
307
- // Field value smart tags (settings, etc).
308
  preg_match_all( "/\{field_value_id=\"(.+?)\"\}/", $content, $value_ids );
309
 
310
  // We can only process field smart tags if we have $fields.
@@ -322,6 +320,28 @@ class WPForms_Smart_Tags {
322
  }
323
  }
324
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
325
  return $content;
326
  }
327
  }
138
  break;
139
 
140
  case 'user_ip':
141
+ $content = str_replace( '{' . $tag . '}', wpforms_get_ip(), $content );
 
142
  break;
143
 
144
  case 'user_id':
274
  }
275
  }
276
 
 
277
  // User meta smart tags.
278
  preg_match_all( "/\{user_meta key=\"(.+?)\"\}/", $content, $user_metas );
279
 
281
 
282
  foreach ( $user_metas[1] as $key => $user_meta ) {
283
 
284
+ $value = is_user_logged_in() ? get_user_meta( get_current_user_id(), sanitize_text_field( $user_meta ), true ) : '';
285
  $content = str_replace( $user_metas[0][ $key ], $value, $content );
286
  }
287
  }
288
 
289
+ // Field smart tag to get data from 'value'.
290
  preg_match_all( "/\{field_id=\"(.+?)\"\}/", $content, $ids );
291
 
292
+ // We can only process field smart tags if we have $fields.
293
  if ( ! empty( $ids[1] ) && ! empty( $fields ) ) {
294
 
295
  foreach ( $ids[1] as $key => $parts ) {
302
  }
303
  }
304
 
305
+ // Field smart tag to get data from 'value_raw'.
306
  preg_match_all( "/\{field_value_id=\"(.+?)\"\}/", $content, $value_ids );
307
 
308
  // We can only process field smart tags if we have $fields.
320
  }
321
  }
322
 
323
+ // Field smart tag to get HTML-postprocessed value (as seen in {all_fields}).
324
+ preg_match_all( '/\{field_html_id="(.+?)"\}/', $content, $html_ids );
325
+
326
+ // We can only process field smart tags if we have $fields.
327
+ if ( ! empty( $html_ids[1] ) && ! empty( $fields ) ) {
328
+
329
+ foreach ( $html_ids[1] as $key => $field_id ) {
330
+ $value = '';
331
+ if ( ! empty( $fields[ $field_id ] ) ) {
332
+ $value = apply_filters(
333
+ 'wpforms_html_field_value',
334
+ wpforms_decode_string( $fields[ $field_id ]['value'] ),
335
+ $fields[ $field_id ],
336
+ $form_data,
337
+ 'smart-tag'
338
+ );
339
+ }
340
+
341
+ $content = str_replace( '{field_html_id="' . $field_id . '"}', $value, $content );
342
+ }
343
+ }
344
+
345
  return $content;
346
  }
347
  }
includes/class-updater.php DELETED
@@ -1,315 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Updater class.
5
- *
6
- * @package WPForms
7
- * @author WPForms
8
- * @since 1.0.0
9
- * @license GPL-2.0+
10
- * @copyright Copyright (c) 2016, WPForms LLC
11
- */
12
- class WPForms_Updater {
13
-
14
- /**
15
- * Plugin name.
16
- *
17
- * @since 2.0.0
18
- *
19
- * @var bool|string
20
- */
21
- public $plugin_name = false;
22
-
23
- /**
24
- * Plugin slug.
25
- *
26
- * @since 2.0.0
27
- *
28
- * @var bool|string
29
- */
30
- public $plugin_slug = false;
31
-
32
- /**
33
- * Plugin path.
34
- *
35
- * @since 2.0.0
36
- *
37
- * @var bool|string
38
- */
39
- public $plugin_path = false;
40
-
41
- /**
42
- * URL of the plugin.
43
- *
44
- * @since 2.0.0
45
- *
46
- * @var bool|string
47
- */
48
- public $plugin_url = false;
49
-
50
- /**
51
- * Remote URL for getting plugin updates.
52
- *
53
- * @since 2.0.0
54
- *
55
- * @var bool|string
56
- */
57
- public $remote_url = false;
58
-
59
- /**
60
- * Version number of the plugin.
61
- *
62
- * @since 2.0.0
63
- *
64
- * @var bool|int
65
- */
66
- public $version = false;
67
-
68
- /**
69
- * License key for the plugin.
70
- *
71
- * @since 2.0.0
72
- *
73
- * @var bool|string
74
- */
75
- public $key = false;
76
-
77
- /**
78
- * Holds the update data returned from the API.
79
- *
80
- * @since 2.1.3
81
- *
82
- * @var bool|object
83
- */
84
- public $update = false;
85
-
86
- /**
87
- * Holds the plugin info details for the update.
88
- *
89
- * @since 2.1.3
90
- *
91
- * @var bool|object
92
- */
93
- public $info = false;
94
-
95
- /**
96
- * Primary class constructor.
97
- *
98
- * @since 2.0.0
99
- *
100
- * @param array $config Array of updater config args.
101
- */
102
- public function __construct( array $config ) {
103
-
104
- // Set class properties.
105
- $accepted_args = array(
106
- 'plugin_name',
107
- 'plugin_slug',
108
- 'plugin_path',
109
- 'plugin_url',
110
- 'remote_url',
111
- 'version',
112
- 'key',
113
- );
114
-
115
- foreach ( $accepted_args as $arg ) {
116
- $this->$arg = $config[ $arg ];
117
- }
118
-
119
- // If the user cannot update plugins, stop processing here.
120
- if ( ! current_user_can( 'update_plugins' ) ) {
121
- return;
122
- }
123
-
124
- // Load the updater hooks and filters.
125
- add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'update_plugins_filter' ) );
126
- //add_filter( 'set_site_transient_update_plugins', array( $this, 'set_site_transient_update_plugins' ) );
127
- //add_filter( 'transient_update_plugins', array( $this, 'transient_update_plugins' ) );
128
- add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 );
129
- add_filter( 'plugins_api', array( $this, 'plugins_api' ), 10, 3 );
130
-
131
- }
132
-
133
- /**
134
- * Infuse plugin update details when WordPress runs its update checker.
135
- *
136
- * @since 2.0.0
137
- *
138
- * @param object $value The WordPress update object.
139
- *
140
- * @return object $value Amended WordPress update object on success, default if object is empty.
141
- */
142
- public function update_plugins_filter( $value ) {
143
-
144
- // If no update object exists, return early.
145
- if ( empty( $value ) ) {
146
- return $value;
147
- }
148
-
149
- // Run update check by pinging the external API. If it fails, return the default update object.
150
- if ( ! $this->update ) {
151
- $this->update = $this->perform_remote_request( 'get-plugin-update', array( 'tgm-updater-plugin' => $this->plugin_slug ) );
152
- if ( ! $this->update || ! empty( $this->update->error ) ) {
153
- $this->update = false;
154
-
155
- return $value;
156
- }
157
- }
158
-
159
- // Infuse the update object with our data if the version from the remote API is newer.
160
- if ( isset( $this->update->new_version ) && version_compare( $this->version, $this->update->new_version, '<' ) ) {
161
- // The $plugin_update object contains new_version, package, slug and last_update keys.
162
- $value->response[ $this->plugin_path ] = $this->update;
163
- }
164
-
165
- // Return the update object.
166
- return $value;
167
- }
168
-
169
- /**
170
- * Disables SSL verification to prevent download package failures.
171
- *
172
- * @since 2.0.0
173
- *
174
- * @param array $args Array of request args.
175
- * @param string $url The URL to be pinged.
176
- *
177
- * @return array $args Amended array of request args.
178
- */
179
- public function http_request_args( $args, $url ) {
180
- return $args;
181
- }
182
-
183
- /**
184
- * Filters the plugins_api function to get our own custom plugin information
185
- * from our private repo.
186
- *
187
- * @since 2.0.0
188
- *
189
- * @param object $api The original plugins_api object.
190
- * @param string $action The action sent by plugins_api.
191
- * @param array $args Additional args to send to plugins_api.
192
- *
193
- * @return object $api New stdClass with plugin information on success, default response on failure.
194
- */
195
- public function plugins_api( $api, $action = '', $args = null ) {
196
-
197
- $plugin = ( 'plugin_information' === $action ) && isset( $args->slug ) && ( $this->plugin_slug === $args->slug );
198
-
199
- // If our plugin matches the request, set our own plugin data, else return the default response.
200
- if ( $plugin ) {
201
- return $this->set_plugins_api( $api );
202
- } else {
203
- return $api;
204
- }
205
- }
206
-
207
- /**
208
- * Pings a remote API to retrieve plugin information for WordPress to display.
209
- *
210
- * @since 2.0.0
211
- *
212
- * @param object $default_api The default API object.
213
- *
214
- * @return object $api Return custom plugin information to plugins_api.
215
- */
216
- public function set_plugins_api( $default_api ) {
217
-
218
- // Perform the remote request to retrieve our plugin information. If it fails, return the default object.
219
- if ( ! $this->info ) {
220
- $this->info = $this->perform_remote_request( 'get-plugin-info', array( 'tgm-updater-plugin' => $this->plugin_slug ) );
221
- if ( ! $this->info || ! empty( $this->info->error ) ) {
222
- $this->info = false;
223
-
224
- return $default_api;
225
- }
226
- }
227
-
228
- // Create a new stdClass object and populate it with our plugin information.
229
- $api = new stdClass;
230
- $api->name = isset( $this->info->name ) ? $this->info->name : '';
231
- $api->slug = isset( $this->info->slug ) ? $this->info->slug : '';
232
- $api->version = isset( $this->info->version ) ? $this->info->version : '';
233
- $api->author = isset( $this->info->author ) ? $this->info->author : '';
234
- $api->author_profile = isset( $this->info->author_profile ) ? $this->info->author_profile : '';
235
- $api->requires = isset( $this->info->requires ) ? $this->info->requires : '';
236
- $api->tested = isset( $this->info->tested ) ? $this->info->tested : '';
237
- $api->last_updated = isset( $this->info->last_updated ) ? $this->info->last_updated : '';
238
- $api->homepage = isset( $this->info->homepage ) ? $this->info->homepage : '';
239
- $api->sections['changelog'] = isset( $this->info->changelog ) ? $this->info->changelog : '';
240
- $api->download_link = isset( $this->info->download_link ) ? $this->info->download_link : '';
241
- $api->active_installs = isset( $this->info->active_installs ) ? $this->info->active_installs : '';
242
- $api->banners = isset( $this->info->banners ) ? (array) $this->info->banners : '';
243
-
244
- // Return the new API object with our custom data.
245
- return $api;
246
- }
247
-
248
- /**
249
- * Queries the remote URL via wp_remote_post and returns a json decoded response.
250
- *
251
- * @since 2.0.0
252
- *
253
- * @param string $action The name of the $_POST action var.
254
- * @param array $body The content to retrieve from the remote URL.
255
- * @param array $headers The headers to send to the remote URL.
256
- * @param string $return_format The format for returning content from the remote URL.
257
- *
258
- * @return string|bool Json decoded response on success, false on failure.
259
- */
260
- public function perform_remote_request( $action, $body = array(), $headers = array(), $return_format = 'json' ) {
261
-
262
- // Build the body of the request.
263
- $body = wp_parse_args(
264
- $body,
265
- array(
266
- 'tgm-updater-action' => $action,
267
- 'tgm-updater-key' => $this->key,
268
- 'tgm-updater-wp-version' => get_bloginfo( 'version' ),
269
- 'tgm-updater-referer' => site_url(),
270
- )
271
- );
272
- $body = http_build_query( $body, '', '&' );
273
-
274
- // Build the headers of the request.
275
- $headers = wp_parse_args(
276
- $headers,
277
- array(
278
- 'Content-Type' => 'application/x-www-form-urlencoded',
279
- 'Content-Length' => strlen( $body ),
280
- )
281
- );
282
-
283
- // Setup variable for wp_remote_post.
284
- $post = array(
285
- 'headers' => $headers,
286
- 'body' => $body,
287
- );
288
-
289
- // Perform the query and retrieve the response.
290
- $response = wp_remote_post( esc_url_raw( $this->remote_url ), $post );
291
- $response_code = wp_remote_retrieve_response_code( $response );
292
- $response_body = wp_remote_retrieve_body( $response );
293
-
294
- // Bail out early if there are any errors.
295
- if ( 200 !== $response_code || is_wp_error( $response_body ) ) {
296
- return false;
297
- }
298
-
299
- $response_body = json_decode( $response_body );
300
-
301
- // A few items need to be converted from an object to an array as that
302
- // is what WordPress expects.
303
- if ( ! empty( $response_body->package ) ) {
304
- if ( ! empty ( $response_body->icons ) ) {
305
- $response_body->icons = (array) $response_body->icons;
306
- }
307
- if ( ! empty ( $response_body->banners ) ) {
308
- $response_body->banners = (array) $response_body->banners;
309
- }
310
- }
311
-
312
- // Return the json decoded content.
313
- return $response_body;
314
- }
315
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/fields/class-checkbox.php CHANGED
@@ -129,6 +129,7 @@ class WPForms_Field_Checkbox extends WPForms_Field {
129
  $properties['input_container'] = array(
130
  'class' => array( ! empty( $field['random'] ) ? 'wpforms-randomize' : '' ),
131
  'data' => array(),
 
132
  'id' => "wpforms-{$form_id}-field_{$field_id}",
133
  );
134
 
@@ -462,7 +463,7 @@ class WPForms_Field_Checkbox extends WPForms_Field {
462
 
463
  printf(
464
  '<ul %s>',
465
- wpforms_html_attributes( $container['id'], $container['class'], $container['data'] )
466
  );
467
 
468
  foreach ( $choices as $key => $choice ) {
129
  $properties['input_container'] = array(
130
  'class' => array( ! empty( $field['random'] ) ? 'wpforms-randomize' : '' ),
131
  'data' => array(),
132
+ 'attr' => array(),
133
  'id' => "wpforms-{$form_id}-field_{$field_id}",
134
  );
135
 
463
 
464
  printf(
465
  '<ul %s>',
466
+ wpforms_html_attributes( $container['id'], $container['class'], $container['data'], $container['attr'] )
467
  );
468
 
469
  foreach ( $choices as $key => $choice ) {
includes/fields/class-gdpr-checkbox.php CHANGED
@@ -83,6 +83,7 @@ class WPForms_Field_GDPR_Checkbox extends WPForms_Field {
83
  $properties['input_container'] = array(
84
  'class' => array(),
85
  'data' => array(),
 
86
  'id' => "wpforms-{$form_id}-field_{$field_id}",
87
  );
88
 
@@ -256,7 +257,7 @@ class WPForms_Field_GDPR_Checkbox extends WPForms_Field {
256
 
257
  printf(
258
  '<ul %s>',
259
- wpforms_html_attributes( $container['id'], $container['class'], $container['data'] )
260
  );
261
 
262
  foreach ( $choices as $key => $choice ) {
83
  $properties['input_container'] = array(
84
  'class' => array(),
85
  'data' => array(),
86
+ 'attr' => array(),
87
  'id' => "wpforms-{$form_id}-field_{$field_id}",
88
  );
89
 
257
 
258
  printf(
259
  '<ul %s>',
260
+ wpforms_html_attributes( $container['id'], $container['class'], $container['data'], $container['attr'] )
261
  );
262
 
263
  foreach ( $choices as $key => $choice ) {
includes/fields/class-radio.php CHANGED
@@ -119,6 +119,7 @@ class WPForms_Field_Radio extends WPForms_Field {
119
  $properties['input_container'] = array(
120
  'class' => array( ! empty( $field['random'] ) ? 'wpforms-randomize' : '' ),
121
  'data' => array(),
 
122
  'id' => "wpforms-{$form_id}-field_{$field_id}",
123
  );
124
 
@@ -372,7 +373,7 @@ class WPForms_Field_Radio extends WPForms_Field {
372
 
373
  printf(
374
  '<ul %s>',
375
- wpforms_html_attributes( $container['id'], $container['class'], $container['data'] )
376
  ); // WPCS: XSS ok.
377
 
378
  foreach ( $choices as $key => $choice ) {
119
  $properties['input_container'] = array(
120
  'class' => array( ! empty( $field['random'] ) ? 'wpforms-randomize' : '' ),
121
  'data' => array(),
122
+ 'attr' => array(),
123
  'id' => "wpforms-{$form_id}-field_{$field_id}",
124
  );
125
 
373
 
374
  printf(
375
  '<ul %s>',
376
+ wpforms_html_attributes( $container['id'], $container['class'], $container['data'], $container['attr'] )
377
  ); // WPCS: XSS ok.
378
 
379
  foreach ( $choices as $key => $choice ) {
includes/functions.php CHANGED
@@ -1096,18 +1096,29 @@ function wpforms_days() {
1096
  */
1097
  function wpforms_get_ip() {
1098
 
1099
- $ip = '127.0.0.1';
1100
 
1101
- if ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
1102
- $ip = $_SERVER['HTTP_CLIENT_IP']; //phpcs:ignore
 
 
 
1103
  } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
1104
- $ip = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ); //phpcs:ignore
1105
- $ip = trim( $ip[0] );
 
 
 
 
 
 
1106
  } elseif ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
1107
- $ip = $_SERVER['REMOTE_ADDR']; //phpcs:ignore
1108
  }
1109
 
1110
- $ip_array = array_map( 'trim', explode( ',', $ip ) );
 
 
1111
 
1112
  return sanitize_text_field( apply_filters( 'wpforms_get_ip', $ip_array[0] ) );
1113
  }
@@ -1766,12 +1777,70 @@ function wpforms_get_day_period_date( $period, $timestamp = '', $format = 'Y-m-d
1766
  case 'end_of_day':
1767
  $date = date( $format, strtotime( 'tomorrow', $timestamp ) - 1 );
1768
  break;
1769
-
1770
  }
1771
 
1772
  return $date;
1773
  }
1774
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1775
  /**
1776
  * Get an array of all the active provider addons.
1777
  *
1096
  */
1097
  function wpforms_get_ip() {
1098
 
1099
+ $ip = false;
1100
 
1101
+ if ( ! empty( $_SERVER['HTTP_X_REAL_IP'] ) ) {
1102
+ $ip = filter_var( wp_unslash( $_SERVER['HTTP_X_REAL_IP'] ), FILTER_VALIDATE_IP );
1103
+ } elseif ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
1104
+ // Check ip from share internet.
1105
+ $ip = filter_var( wp_unslash( $_SERVER['HTTP_CLIENT_IP'] ), FILTER_VALIDATE_IP );
1106
  } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
1107
+ // To check ip is pass from proxy.
1108
+ // Can include more than 1 ip, first is the public one.
1109
+ // WPCS: sanitization ok.
1110
+ // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1111
+ $ips = explode( ',', wp_unslash( $_SERVER['HTTP_X_FORWARDED_FOR'] ) );
1112
+ if ( is_array( $ips ) ) {
1113
+ $ip = filter_var( $ips[0], FILTER_VALIDATE_IP );
1114
+ }
1115
  } elseif ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
1116
+ $ip = filter_var( wp_unslash( $_SERVER['REMOTE_ADDR'] ), FILTER_VALIDATE_IP );
1117
  }
1118
 
1119
+ $ip = false !== $ip ? $ip : '127.0.0.1';
1120
+ $ip_array = explode( ',', $ip );
1121
+ $ip_array = array_map( 'trim', $ip_array );
1122
 
1123
  return sanitize_text_field( apply_filters( 'wpforms_get_ip', $ip_array[0] ) );
1124
  }
1777
  case 'end_of_day':
1778
  $date = date( $format, strtotime( 'tomorrow', $timestamp ) - 1 );
1779
  break;
 
1780
  }
1781
 
1782
  return $date;
1783
  }
1784
 
1785
+ /**
1786
+ * Get an array of all possible provider addons.
1787
+ *
1788
+ * @since 1.5.5
1789
+ *
1790
+ * @return array
1791
+ */
1792
+ function wpforms_get_providers_all() {
1793
+
1794
+ $providers = array(
1795
+ array(
1796
+ 'name' => 'AWeber',
1797
+ 'slug' => 'aweber',
1798
+ 'img' => 'addon-icon-aweber.png',
1799
+ 'plugin' => 'wpforms-aweber/wpforms-aweber.php',
1800
+ 'plugin_slug' => 'wpforms-aweber',
1801
+ ),
1802
+ array(
1803
+ 'name' => 'Campaign Monitor',
1804
+ 'slug' => 'campaign-monitor',
1805
+ 'img' => 'addon-icon-campaign-monitor.png',
1806
+ 'plugin' => 'wpforms-campaign-monitor/wpforms-campaign-monitor.php',
1807
+ 'plugin_slug' => 'wpforms-campaign-monitor',
1808
+ ),
1809
+ array(
1810
+ 'name' => 'Drip',
1811
+ 'slug' => 'drip',
1812
+ 'img' => 'addon-icon-drip.png',
1813
+ 'plugin' => 'wpforms-drip/wpforms-drip.php',
1814
+ 'plugin_slug' => 'wpforms-drip',
1815
+ ),
1816
+ array(
1817
+ 'name' => 'GetResponse',
1818
+ 'slug' => 'getresponse',
1819
+ 'img' => 'addon-icon-getresponse.png',
1820
+ 'plugin' => 'wpforms-getresponse/wpforms-getresponse.php',
1821
+ 'plugin_slug' => 'wpforms-getresponse',
1822
+ ),
1823
+ array(
1824
+ 'name' => 'MailChimp',
1825
+ 'slug' => 'mailchimp',
1826
+ 'img' => 'addon-icon-mailchimp.png',
1827
+ 'plugin' => 'wpforms-mailchimp/wpforms-mailchimp.php',
1828
+ 'plugin_slug' => 'wpforms-mailchimp',
1829
+ ),
1830
+ array(
1831
+ 'name' => 'Zapier',
1832
+ 'slug' => 'zapier',
1833
+ 'img' => 'addon-icon-zapier.png',
1834
+ 'plugin' => 'wpforms-zapier/wpforms-zapier.php',
1835
+ 'plugin_slug' => 'wpforms-zapier',
1836
+ ),
1837
+ );
1838
+
1839
+ return $providers;
1840
+ }
1841
+
1842
+
1843
+
1844
  /**
1845
  * Get an array of all the active provider addons.
1846
  *
languages/wpforms-lite.pot CHANGED
@@ -1,13 +1,13 @@
1
  msgid ""
2
  msgstr ""
3
- "Project-Id-Version: WPForms Lite 1.5.4.2\n"
4
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms-lite\n"
5
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
6
  "Language-Team: LANGUAGE <LL@li.org>\n"
7
  "MIME-Version: 1.0\n"
8
  "Content-Type: text/plain; charset=UTF-8\n"
9
  "Content-Transfer-Encoding: 8bit\n"
10
- "POT-Creation-Date: 2019-08-06T23:14:31+00:00\n"
11
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12
  "X-Generator: WP-CLI 2.1.0\n"
13
  "X-Domain: wpforms-lite\n"
@@ -20,7 +20,7 @@ msgstr ""
20
  #: includes/admin/class-menu.php:109
21
  #: includes/integrations.php:45
22
  #: includes/class-form.php:74
23
- #: src/Lite/Admin/DashboardWidget.php:162
24
  #: src/Emails/Templates/General.php:97
25
  #: src/Integrations/Gutenberg/FormSelector.php:94
26
  msgid "WPForms"
@@ -1607,9 +1607,9 @@ msgstr ""
1607
  msgid "Saturday"
1608
  msgstr ""
1609
 
1610
- #: includes/functions.php:1695
1611
  #: includes/class-frontend.php:1291
1612
- #: includes/admin/class-settings.php:502
1613
  msgid "This field is required."
1614
  msgstr ""
1615
 
@@ -1653,27 +1653,23 @@ msgctxt "Widget"
1653
  msgid "Display form description"
1654
  msgstr ""
1655
 
1656
- #: includes/class-upgrader-skin.php:85
1657
- msgid "There was an error installing the addon. Please try again."
1658
- msgstr ""
1659
-
1660
  #. translators: %s - URL to a non-amp version of a page with the form.
1661
  #: includes/class-frontend.php:161
1662
  msgid "<a href=\"%s\">Go to the full page</a> to view and submit the form."
1663
  msgstr ""
1664
 
1665
  #: includes/class-frontend.php:1292
1666
- #: includes/admin/class-settings.php:508
1667
  msgid "Please enter a valid URL."
1668
  msgstr ""
1669
 
1670
  #: includes/class-frontend.php:1293
1671
- #: includes/admin/class-settings.php:514
1672
  msgid "Please enter a valid email address."
1673
  msgstr ""
1674
 
1675
  #: includes/class-frontend.php:1294
1676
- #: includes/admin/class-settings.php:520
1677
  msgid "Did you mean {suggestion}?"
1678
  msgstr ""
1679
 
@@ -1682,13 +1678,13 @@ msgid "Click to accept this suggestion."
1682
  msgstr ""
1683
 
1684
  #: includes/class-frontend.php:1296
1685
- #: includes/admin/class-settings.php:526
1686
  #: includes/fields/class-number.php:162
1687
  msgid "Please enter a valid number."
1688
  msgstr ""
1689
 
1690
  #: includes/class-frontend.php:1297
1691
- #: includes/admin/class-settings.php:532
1692
  msgid "Field values do not match."
1693
  msgstr ""
1694
 
@@ -1726,8 +1722,8 @@ msgid "The total size of the selected files {totalSize} Mb exceeds the allowed l
1726
  msgstr ""
1727
 
1728
  #: includes/class-frontend.php:1306
1729
- #: includes/admin/class-settings.php:538
1730
- #: includes/fields/class-checkbox.php:592
1731
  msgid "You have exceeded the number of allowed selections: {#}."
1732
  msgstr ""
1733
 
@@ -1904,6 +1900,7 @@ msgid "Account Nickname"
1904
  msgstr ""
1905
 
1906
  #: includes/providers/class-constant-contact.php:511
 
1907
  msgid "Connect"
1908
  msgstr ""
1909
 
@@ -2068,7 +2065,7 @@ msgid "You cannot send emails with WPForms_WP_Emails() until init/admin_init has
2068
  msgstr ""
2069
 
2070
  #: includes/emails/class-emails.php:492
2071
- #: src/Lite/Admin/Builder/Education.php:217
2072
  msgid "Page Break"
2073
  msgstr ""
2074
 
@@ -2195,7 +2192,7 @@ msgstr ""
2195
 
2196
  #: includes/admin/class-about.php:321
2197
  #: includes/admin/admin.php:121
2198
- #: includes/admin/admin.php:152
2199
  msgid "Activate"
2200
  msgstr ""
2201
 
@@ -2352,7 +2349,7 @@ msgid "Pro"
2352
  msgstr ""
2353
 
2354
  #: includes/admin/class-about.php:754
2355
- #: src/Lite/Admin/DashboardWidget.php:364
2356
  msgid "MonsterInsights"
2357
  msgstr ""
2358
 
@@ -2379,7 +2376,7 @@ msgstr ""
2379
 
2380
  #: includes/admin/class-about.php:777
2381
  #: includes/admin/class-about.php:783
2382
- msgid "SMTP (Simple Mail Transfer Protocol) is an industry standard for sending emails. SMTP helps increase email deliverability by using proper authentication."
2383
  msgstr ""
2384
 
2385
  #: includes/admin/class-about.php:782
@@ -2653,49 +2650,45 @@ msgstr ""
2653
  msgid "The callback function used for the %s setting is missing."
2654
  msgstr ""
2655
 
2656
- #: includes/admin/settings-api.php:110
2657
  msgid "You're using WPForms Lite - no license needed. Enjoy!"
2658
  msgstr ""
2659
 
2660
  #. translators: %s - WPForms.com upgrade URL.
2661
- #: includes/admin/settings-api.php:116
2662
  msgid "To unlock more features consider <strong><a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wpforms-upgrade-modal\">upgrading to PRO</a></strong>."
2663
  msgstr ""
2664
 
2665
- #: includes/admin/settings-api.php:133
2666
  msgid "As a valued WPForms Lite user you receive <strong>50% off</strong>, automatically applied at checkout!"
2667
  msgstr ""
2668
 
2669
- #: includes/admin/settings-api.php:141
2670
- msgid "Already purchased? Simply enter your license key below to automatically unlock WPForms PRO!"
2671
  msgstr ""
2672
 
2673
- #: includes/admin/settings-api.php:142
2674
  msgid "Paste license key here"
2675
  msgstr ""
2676
 
2677
- #: includes/admin/settings-api.php:143
2678
- msgid "Unlock PRO Features Now"
2679
- msgstr ""
2680
-
2681
- #: includes/admin/settings-api.php:149
2682
  msgid "Verify Key"
2683
  msgstr ""
2684
 
2685
- #: includes/admin/settings-api.php:153
2686
  msgid "Deactivate Key"
2687
  msgstr ""
2688
 
2689
  #. translators: $s - license type.
2690
- #: includes/admin/settings-api.php:160
2691
  msgid "Your license key type is %s."
2692
  msgstr ""
2693
 
2694
- #: includes/admin/settings-api.php:166
2695
  msgid "If your license has been upgraded or is incorrect, <a href=\"#\" id=\"wpforms-setting-license-key-refresh\">click here to force a refresh</a>."
2696
  msgstr ""
2697
 
2698
- #: includes/admin/settings-api.php:357
2699
  #: includes/fields/class-base.php:825
2700
  #: includes/fields/class-base.php:956
2701
  msgid "Upload Image"
@@ -2778,9 +2771,9 @@ msgid "Could not install addon. Please download from wpforms.com and install man
2778
  msgstr ""
2779
 
2780
  #: includes/admin/ajax-actions.php:549
2781
- #: includes/class-license.php:756
2782
- #: includes/class-license.php:762
2783
- #: includes/class-license.php:815
2784
  msgid "Plugin installed & activated."
2785
  msgstr ""
2786
 
@@ -2804,7 +2797,7 @@ msgid "Import"
2804
  msgstr ""
2805
 
2806
  #: includes/admin/class-tools.php:99
2807
- #: includes/admin/class-tools.php:540
2808
  msgid "Export"
2809
  msgstr ""
2810
 
@@ -2904,7 +2897,7 @@ msgstr ""
2904
 
2905
  #: includes/admin/class-tools.php:381
2906
  #: includes/admin/class-welcome.php:309
2907
- #: src/Lite/Admin/DashboardWidget.php:261
2908
  msgid "Upgrade to WPForms Pro"
2909
  msgstr ""
2910
 
@@ -2948,68 +2941,68 @@ msgstr ""
2948
  msgid "The following fields are not supported and were not imported:"
2949
  msgstr ""
2950
 
2951
- #: includes/admin/class-tools.php:519
2952
  msgid "Form Export"
2953
  msgstr ""
2954
 
2955
- #: includes/admin/class-tools.php:521
2956
  msgid "Form exports files can be used to create a backup of your forms or to import forms into another site."
2957
  msgstr ""
2958
 
2959
- #: includes/admin/class-tools.php:527
2960
  msgid "Select form(s)"
2961
  msgstr ""
2962
 
2963
- #: includes/admin/class-tools.php:534
2964
  msgid "You need to create a form before you can use form export."
2965
  msgstr ""
2966
 
2967
- #: includes/admin/class-tools.php:546
2968
  msgid "Form Template Export"
2969
  msgstr ""
2970
 
2971
- #: includes/admin/class-tools.php:550
2972
  msgid "The following code can be used to register your custom form template. Copy and paste the following code to your theme's functions.php file or include it within an external file."
2973
  msgstr ""
2974
 
2975
  #. translators: %s - WPForms.com docs URL.
2976
- #: includes/admin/class-tools.php:555
2977
  msgid "For more information <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">see our documentation</a>."
2978
  msgstr ""
2979
 
2980
- #: includes/admin/class-tools.php:571
2981
  msgid "Select a form to generate PHP code that can be used to register a custom form template."
2982
  msgstr ""
2983
 
2984
- #: includes/admin/class-tools.php:584
2985
  msgid "You need to create a form before you can generate a template."
2986
  msgstr ""
2987
 
2988
- #: includes/admin/class-tools.php:590
2989
  msgid "Export Template"
2990
  msgstr ""
2991
 
2992
- #: includes/admin/class-tools.php:608
2993
  msgid "System Information"
2994
  msgstr ""
2995
 
2996
- #: includes/admin/class-tools.php:613
2997
  msgid "Test SSL Connections"
2998
  msgstr ""
2999
 
3000
- #: includes/admin/class-tools.php:614
3001
  msgid "Click the button below to verify your web server can perform SSL connections successfully."
3002
  msgstr ""
3003
 
3004
- #: includes/admin/class-tools.php:615
3005
  msgid "Test Connection"
3006
  msgstr ""
3007
 
3008
- #: includes/admin/class-tools.php:685
3009
  msgid "Please upload a valid .json form export file."
3010
  msgstr ""
3011
 
3012
- #: includes/admin/class-tools.php:686
3013
  msgid "Error"
3014
  msgstr ""
3015
 
@@ -3030,7 +3023,7 @@ msgstr ""
3030
  #: includes/admin/overview/class-overview-table.php:172
3031
  #: templates/emails/summary-body.php:42
3032
  #: templates/emails/summary-body-plain.php:34
3033
- #: src/Lite/Admin/DashboardWidget.php:143
3034
  msgid "Entries"
3035
  msgstr ""
3036
 
@@ -3118,7 +3111,7 @@ msgstr ""
3118
 
3119
  #: includes/admin/class-welcome.php:114
3120
  #: includes/admin/builder/class-builder.php:513
3121
- #: src/Lite/Admin/DashboardWidget.php:216
3122
  #: src/Admin/Challenge.php:506
3123
  msgid "Sullie the WPForms mascot"
3124
  msgstr ""
@@ -3231,7 +3224,8 @@ msgstr ""
3231
 
3232
  #: includes/admin/class-welcome.php:237
3233
  #: includes/admin/builder/panels/class-payments.php:82
3234
- #: src/Lite/Admin/Builder/Education.php:77
 
3235
  msgid "Upgrade to PRO"
3236
  msgstr ""
3237
 
@@ -3374,110 +3368,122 @@ msgid "Please select at least one form to import."
3374
  msgstr ""
3375
 
3376
  #: includes/admin/admin.php:149
 
 
 
 
 
 
 
 
3377
  #: includes/admin/builder/class-builder.php:337
3378
  msgid "OK"
3379
  msgstr ""
3380
 
3381
- #: includes/admin/admin.php:150
3382
  msgid "Install and Activate"
3383
  msgstr ""
3384
 
3385
- #: includes/admin/admin.php:151
3386
  msgid "needs to be installed and activated to import its forms. Would you like us to install and activate it for you?"
3387
  msgstr ""
3388
 
3389
- #: includes/admin/admin.php:153
3390
  msgid "needs to be activated to import its forms. Would you like us to activate it for you?"
3391
  msgstr ""
3392
 
3393
- #: includes/admin/admin.php:154
3394
  msgid "Are you sure you want to disconnect this account?"
3395
  msgstr ""
3396
 
3397
- #: includes/admin/admin.php:155
3398
  msgid "Could not authenticate with the provider."
3399
  msgstr ""
3400
 
3401
- #: includes/admin/admin.php:156
3402
  msgid "Save and Refresh"
3403
  msgstr ""
3404
 
 
 
 
 
3405
  #. translators: %s - WPForms.com docs page URL.
3406
- #: includes/admin/admin.php:160
3407
  msgid "You've selected <strong>Base Styling Only</strong>, which may result in styling issues. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Please check out our tutorial</a> for common issues and recommendations."
3408
  msgstr ""
3409
 
3410
  #. translators: %s - WPForms.com docs page URL.
3411
- #: includes/admin/admin.php:175
3412
  msgid "You've selected <strong>No Styling</strong>, which will likely result in significant styling issues and is recommended only for developers. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Please check out our tutorial</a> for more details and recommendations."
3413
  msgstr ""
3414
 
3415
- #: includes/admin/admin.php:187
3416
  msgid "Testing"
3417
  msgstr ""
3418
 
3419
- #: includes/admin/admin.php:188
3420
  msgid "Upgrade was successfully completed!"
3421
  msgstr ""
3422
 
3423
- #: includes/admin/admin.php:189
3424
  #: includes/admin/builder/class-builder.php:414
3425
  msgid "Upload or Choose Your Image"
3426
  msgstr ""
3427
 
3428
- #: includes/admin/admin.php:190
3429
  #: includes/admin/builder/class-builder.php:415
3430
  msgid "Use Image"
3431
  msgstr ""
3432
 
3433
- #: includes/admin/admin.php:192
3434
  msgid "Select fields"
3435
  msgstr ""
3436
 
3437
- #: includes/admin/admin.php:193
3438
  msgid "Loading..."
3439
  msgstr ""
3440
 
3441
- #: includes/admin/admin.php:194
3442
  msgid "No results found"
3443
  msgstr ""
3444
 
3445
- #: includes/admin/admin.php:195
3446
  msgid "No choices to choose from"
3447
  msgstr ""
3448
 
3449
- #: includes/admin/admin.php:196
3450
  msgid "Press to select"
3451
  msgstr ""
3452
 
3453
  #. translators: %1$s - WPForms plugin name; %2$s - WPForms.com URL to a related doc.
3454
- #: includes/admin/admin.php:368
3455
  msgid "Your site is running an outdated version of PHP that is no longer supported and may cause issues with %1$s. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Read more</a> for additional information."
3456
  msgstr ""
3457
 
3458
- #: includes/admin/admin.php:382
3459
  msgid "<strong>Please Note:</strong> Support for PHP 5.3 to 5.5 will be discontinued in 2019. After this, if no further action is taken, WPForms functionality will be disabled."
3460
  msgstr ""
3461
 
3462
- #: includes/admin/admin.php:404
3463
  msgid "Thanks for your interest in WPForms Pro!"
3464
  msgstr ""
3465
 
3466
  #. translators: %s - WPForms.com contact page URL.
3467
- #: includes/admin/admin.php:408
3468
  msgid "If you have any questions or issues just <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">let us know</a>."
3469
  msgstr ""
3470
 
3471
- #: includes/admin/admin.php:422
3472
  msgid "After purchasing WPForms Pro, you'll need to <strong>download and install the Pro version of the plugin</strong>, and then <strong>remove the free plugin</strong>."
3473
  msgstr ""
3474
 
3475
- #: includes/admin/admin.php:427
3476
  msgid "(Don't worry, all your forms and settings will be preserved.)"
3477
  msgstr ""
3478
 
3479
  #. translators: %s - WPForms.com upgrade from Lite to paid docs page URL.
3480
- #: includes/admin/admin.php:433
3481
  msgid "Check out <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">our documentation</a> for step-by-step instructions."
3482
  msgstr ""
3483
 
@@ -3594,7 +3600,7 @@ msgstr ""
3594
 
3595
  #. translators: %1$s - WPForms.com URL to a template suggestion, %2$s - WPForms.com URL to a doc about custom templates.
3596
  #: includes/admin/builder/panels/class-setup.php:93
3597
- msgid "Have a suggestion for a new template? <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">We'd love to hear it</a>. Also, you can <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">create your own templates</a>!"
3598
  msgstr ""
3599
 
3600
  #: includes/admin/builder/panels/class-setup.php:110
@@ -3726,8 +3732,8 @@ msgstr ""
3726
 
3727
  #: includes/admin/builder/panels/class-settings.php:42
3728
  #: includes/admin/builder/panels/class-settings.php:82
3729
- #: includes/admin/class-settings.php:196
3730
- #: includes/admin/class-settings.php:329
3731
  msgid "General"
3732
  msgstr ""
3733
 
@@ -4198,49 +4204,17 @@ msgstr ""
4198
  msgid "Settings were successfully saved."
4199
  msgstr ""
4200
 
4201
- #: includes/admin/class-settings.php:171
4202
- msgid "Oops!"
4203
- msgstr ""
4204
-
4205
- #: includes/admin/class-settings.php:172
4206
- msgid "Unfortunately, there was an server connection error:"
4207
- msgstr ""
4208
-
4209
- #: includes/admin/class-settings.php:173
4210
- msgid "Almost Done"
4211
- msgstr ""
4212
-
4213
- #: includes/admin/class-settings.php:174
4214
- msgid "We can automatically upgrade the installed version to WPForms PRO."
4215
- msgstr ""
4216
-
4217
  #: includes/admin/class-settings.php:175
4218
- msgid "Ok"
4219
- msgstr ""
4220
-
4221
- #: includes/admin/class-settings.php:176
4222
- msgid "Upgrade now"
4223
- msgstr ""
4224
-
4225
- #: includes/admin/class-settings.php:177
4226
- msgid "Activate now"
4227
- msgstr ""
4228
-
4229
- #: includes/admin/class-settings.php:178
4230
- msgid "Do upgrade later"
4231
- msgstr ""
4232
-
4233
- #: includes/admin/class-settings.php:198
4234
- #: includes/admin/class-settings.php:203
4235
- #: includes/admin/class-settings.php:208
4236
- #: includes/admin/class-settings.php:213
4237
- #: includes/admin/class-settings.php:223
4238
  msgid "Save Settings"
4239
  msgstr ""
4240
 
4241
- #: includes/admin/class-settings.php:201
4242
- #: includes/admin/class-settings.php:397
4243
- #: includes/admin/class-settings.php:512
4244
  #: includes/templates/class-subscribe.php:44
4245
  #: includes/templates/class-suggestion.php:41
4246
  #: includes/templates/class-contact.php:42
@@ -4250,257 +4224,257 @@ msgstr ""
4250
  msgid "Email"
4251
  msgstr ""
4252
 
4253
- #: includes/admin/class-settings.php:206
4254
- #: includes/admin/class-settings.php:437
4255
  msgid "reCAPTCHA"
4256
  msgstr ""
4257
 
4258
- #: includes/admin/class-settings.php:211
4259
  msgid "Validation"
4260
  msgstr ""
4261
 
4262
- #: includes/admin/class-settings.php:216
4263
- #: includes/admin/class-settings.php:545
4264
- #: includes/admin/class-settings.php:552
4265
  msgid "Integrations"
4266
  msgstr ""
4267
 
4268
- #: includes/admin/class-settings.php:221
4269
- #: includes/admin/class-settings.php:561
4270
  msgid "Misc"
4271
  msgstr ""
4272
 
4273
- #: includes/admin/class-settings.php:262
4274
  msgid "reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease."
4275
  msgstr ""
4276
 
4277
- #: includes/admin/class-settings.php:263
4278
  msgid "Google offers 3 versions of reCAPTCHA (all supported within WPForms):"
4279
  msgstr ""
4280
 
4281
- #: includes/admin/class-settings.php:268
4282
  msgid "<strong>v2 Checkbox reCAPTCHA</strong>: Prompts users to check a box to prove they're human."
4283
  msgstr ""
4284
 
4285
- #: includes/admin/class-settings.php:277
4286
  msgid "<strong>v2 Invisible reCAPTCHA</strong>: Uses advanced technology to detect real users without requiring any input."
4287
  msgstr ""
4288
 
4289
- #: includes/admin/class-settings.php:286
4290
  msgid "<strong>v3 reCAPTCHA</strong>: Uses a behind-the-scenes scoring system to detect abusive traffic, and lets you decide the minimum passing score. Recommended for advanced use only (or if using Google AMP)."
4291
  msgstr ""
4292
 
4293
- #: includes/admin/class-settings.php:293
4294
  msgid "Sites already using one type of reCAPTCHA will need to create new site keys before switching to a different option."
4295
  msgstr ""
4296
 
4297
  #. translators: %s - WPForms.com Setup Captcha URL.
4298
- #: includes/admin/class-settings.php:299
4299
  msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Read our walk through</a> to learn more and for step-by-step directions."
4300
  msgstr ""
4301
 
4302
- #: includes/admin/class-settings.php:317
4303
  msgid "License"
4304
  msgstr ""
4305
 
4306
- #: includes/admin/class-settings.php:317
4307
  msgid "Your license key provides access to updates and addons."
4308
  msgstr ""
4309
 
4310
- #: includes/admin/class-settings.php:324
4311
  msgid "License Key"
4312
  msgstr ""
4313
 
4314
- #: includes/admin/class-settings.php:336
4315
  msgid "Include Form Styling"
4316
  msgstr ""
4317
 
4318
  #. translators: %s - WPForms.com documentation URL.
4319
- #: includes/admin/class-settings.php:340
4320
  msgid "Determines which CSS files to load for the site (<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">please see our tutorial for full details</a>). Unless experienced with CSS or instructed by support, \"Base and Form Theme Styling\" is recommended."
4321
  msgstr ""
4322
 
4323
- #: includes/admin/class-settings.php:355
4324
  msgid "Base and form theme styling"
4325
  msgstr ""
4326
 
4327
- #: includes/admin/class-settings.php:356
4328
  msgid "Base styling only"
4329
  msgstr ""
4330
 
4331
- #: includes/admin/class-settings.php:357
4332
  msgid "No styling"
4333
  msgstr ""
4334
 
4335
- #: includes/admin/class-settings.php:362
4336
  msgid "Load Assets Globally"
4337
  msgstr ""
4338
 
4339
- #: includes/admin/class-settings.php:363
4340
  msgid "Check this if you would like to load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support."
4341
  msgstr ""
4342
 
4343
- #: includes/admin/class-settings.php:368
4344
  msgid "GDPR"
4345
  msgstr ""
4346
 
4347
- #: includes/admin/class-settings.php:375
4348
  msgid "GDPR Enhancements"
4349
  msgstr ""
4350
 
4351
  #. translators: %s - WPForms.com GDPR documentation URL.
4352
- #: includes/admin/class-settings.php:379
4353
  msgid "Check this to turn on GDPR related features and enhancements. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Read our GDPR documentation</a> to learn more."
4354
  msgstr ""
4355
 
4356
- #: includes/admin/class-settings.php:404
4357
  msgid "Template"
4358
  msgstr ""
4359
 
4360
- #: includes/admin/class-settings.php:405
4361
  msgid "Determines how email notifications will be formatted. HTML Templates are the default."
4362
  msgstr ""
4363
 
4364
- #: includes/admin/class-settings.php:409
4365
  msgid "HTML Template"
4366
  msgstr ""
4367
 
4368
- #: includes/admin/class-settings.php:410
4369
  msgid "Plain text"
4370
  msgstr ""
4371
 
4372
- #: includes/admin/class-settings.php:415
4373
  msgid "Header Image"
4374
  msgstr ""
4375
 
4376
- #: includes/admin/class-settings.php:416
4377
  msgid "Upload or choose a logo to be displayed at the top of email notifications.<br>Recommended size is 300x100 or smaller for best support on all devices."
4378
  msgstr ""
4379
 
4380
- #: includes/admin/class-settings.php:421
4381
  msgid "Background Color"
4382
  msgstr ""
4383
 
4384
- #: includes/admin/class-settings.php:422
4385
  msgid "Customize the background color of the HTML email template."
4386
  msgstr ""
4387
 
4388
- #: includes/admin/class-settings.php:428
4389
  msgid "Carbon Copy"
4390
  msgstr ""
4391
 
4392
- #: includes/admin/class-settings.php:429
4393
  msgid "Check this if you would like to enable the ability to CC: email addresses in the form notification settings."
4394
  msgstr ""
4395
 
4396
- #: includes/admin/class-settings.php:444
4397
  msgid "Type"
4398
  msgstr ""
4399
 
4400
- #: includes/admin/class-settings.php:448
4401
  msgid "Checkbox reCAPTCHA v2"
4402
  msgstr ""
4403
 
4404
- #: includes/admin/class-settings.php:449
4405
  msgid "Invisible reCAPTCHA v2"
4406
  msgstr ""
4407
 
4408
- #: includes/admin/class-settings.php:450
4409
  msgid "reCAPTCHA v3"
4410
  msgstr ""
4411
 
4412
- #: includes/admin/class-settings.php:455
4413
  msgid "Site Key"
4414
  msgstr ""
4415
 
4416
- #: includes/admin/class-settings.php:460
4417
  msgid "Secret Key"
4418
  msgstr ""
4419
 
4420
- #: includes/admin/class-settings.php:465
4421
  msgid "Fail Message"
4422
  msgstr ""
4423
 
4424
- #: includes/admin/class-settings.php:466
4425
  msgid "The message displayed to users who fail the reCAPTCHA verification process."
4426
  msgstr ""
4427
 
4428
- #: includes/admin/class-settings.php:468
4429
  #: includes/class-process.php:176
4430
  msgid "Google reCAPTCHA verification failed, please try again later."
4431
  msgstr ""
4432
 
4433
- #: includes/admin/class-settings.php:472
4434
  msgid "Score Threshold"
4435
  msgstr ""
4436
 
4437
- #: includes/admin/class-settings.php:473
4438
  msgid "reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot). If the score less than or equal to this threshold, the form submission will be blocked and the message above will be displayed."
4439
  msgstr ""
4440
 
4441
- #: includes/admin/class-settings.php:480
4442
  msgid "0.4"
4443
  msgstr ""
4444
 
4445
- #: includes/admin/class-settings.php:484
4446
  msgid "No-Conflict Mode"
4447
  msgstr ""
4448
 
4449
- #: includes/admin/class-settings.php:485
4450
  msgid "When checked, other reCAPTCHA occurrences are forcefully removed, to prevent conflicts. Only check if your site is having compatibility issues or instructed to by support."
4451
  msgstr ""
4452
 
4453
- #: includes/admin/class-settings.php:493
4454
  msgid "Validation Messages"
4455
  msgstr ""
4456
 
4457
- #: includes/admin/class-settings.php:493
4458
  msgid "These messages are displayed to the users as they fill out a form in real-time."
4459
  msgstr ""
4460
 
4461
- #: includes/admin/class-settings.php:500
4462
  #: includes/fields/class-base.php:722
4463
  msgid "Required"
4464
  msgstr ""
4465
 
4466
- #: includes/admin/class-settings.php:506
4467
  msgid "Website URL"
4468
  msgstr ""
4469
 
4470
- #: includes/admin/class-settings.php:518
4471
  msgid "Email Suggestion"
4472
  msgstr ""
4473
 
4474
- #: includes/admin/class-settings.php:524
4475
  msgid "Number"
4476
  msgstr ""
4477
 
4478
- #: includes/admin/class-settings.php:530
4479
  msgid "Confirm Value"
4480
  msgstr ""
4481
 
4482
- #: includes/admin/class-settings.php:536
4483
  msgid "Checkbox Selection Limit"
4484
  msgstr ""
4485
 
4486
- #: includes/admin/class-settings.php:545
4487
- #: includes/admin/class-settings.php:552
4488
  msgid "Manage integrations with popular providers such as Constant Contact, MailChimp, Zapier, and more."
4489
  msgstr ""
4490
 
4491
- #: includes/admin/class-settings.php:568
4492
  msgid "Hide Announcements"
4493
  msgstr ""
4494
 
4495
- #: includes/admin/class-settings.php:569
4496
  msgid "Check this if you would like to hide plugin announcements and update details."
4497
  msgstr ""
4498
 
4499
- #: includes/admin/class-settings.php:574
4500
  msgid "Uninstall WPForms"
4501
  msgstr ""
4502
 
4503
- #: includes/admin/class-settings.php:575
4504
  msgid "Check this if you would like to remove ALL WPForms data upon plugin deletion. All forms and settings will be unrecoverable."
4505
  msgstr ""
4506
 
@@ -4645,43 +4619,6 @@ msgstr ""
4645
  msgid "Lost Password URL"
4646
  msgstr ""
4647
 
4648
- #: includes/class-license.php:593
4649
- msgid "Please enter a license key."
4650
- msgstr ""
4651
-
4652
- #: includes/class-license.php:627
4653
- msgid "Sorry, you do not have permission to install plugins."
4654
- msgstr ""
4655
-
4656
- #: includes/class-license.php:633
4657
- #: includes/class-license.php:787
4658
- msgid "You are not licensed."
4659
- msgstr ""
4660
-
4661
- #: includes/class-license.php:636
4662
- msgid "Only the Lite version can upgrade."
4663
- msgstr ""
4664
-
4665
- #: includes/class-license.php:646
4666
- msgid "WPForms Pro was already installed and has not been activated."
4667
- msgstr ""
4668
-
4669
- #: includes/class-license.php:667
4670
- msgid "We encountered a problem unlocking the PRO features. Please install the PRO version manually."
4671
- msgstr ""
4672
-
4673
- #: includes/class-license.php:723
4674
- msgid "Could not install upgrade. Please download from wpforms.com and install manually."
4675
- msgstr ""
4676
-
4677
- #: includes/class-license.php:766
4678
- msgid "Could not install upgrade. Please check for file system permissions and try again. Also you can download plugin from wpforms.com and install manually."
4679
- msgstr ""
4680
-
4681
- #: includes/class-license.php:819
4682
- msgid "Pro version installed but needs to be activated from the Plugins page inside your WordPress admin."
4683
- msgstr ""
4684
-
4685
  #: includes/class-conditional-logic-core.php:193
4686
  msgid "this field if"
4687
  msgstr ""
@@ -4824,50 +4761,50 @@ msgstr ""
4824
  msgid "Third Choice"
4825
  msgstr ""
4826
 
4827
- #: includes/fields/class-checkbox.php:151
4828
  msgid "Checked"
4829
  msgstr ""
4830
 
4831
  #. translators: %s - choice number.
4832
- #: includes/fields/class-checkbox.php:154
4833
  msgid "Choice %s"
4834
  msgstr ""
4835
 
4836
- #: includes/fields/class-checkbox.php:299
4837
- #: includes/fields/class-radio.php:260
4838
  msgid "Randomize Choices"
4839
  msgstr ""
4840
 
4841
- #: includes/fields/class-checkbox.php:300
4842
- #: includes/fields/class-radio.php:261
4843
  msgid "Check this option to randomize the order of the choices."
4844
  msgstr ""
4845
 
4846
- #: includes/fields/class-checkbox.php:321
4847
  #: includes/fields/class-select.php:196
4848
- #: includes/fields/class-radio.php:282
4849
  msgid "Show Values"
4850
  msgstr ""
4851
 
4852
- #: includes/fields/class-checkbox.php:322
4853
  #: includes/fields/class-select.php:197
4854
- #: includes/fields/class-radio.php:283
4855
  msgid "Check this to manually set form field values."
4856
  msgstr ""
4857
 
4858
- #: includes/fields/class-checkbox.php:349
4859
  msgid "Choice Limit"
4860
  msgstr ""
4861
 
4862
- #: includes/fields/class-checkbox.php:350
4863
  msgid "Limit the number of checkboxes a user can select. Leave empty for unlimited."
4864
  msgstr ""
4865
 
4866
- #: includes/fields/class-checkbox.php:390
4867
  msgid "Enable Disclaimer / Terms of Service Display"
4868
  msgstr ""
4869
 
4870
- #: includes/fields/class-checkbox.php:391
4871
  msgid "Check this option to adjust the field styling to support Disclaimers and Terms of Service type agreements."
4872
  msgstr ""
4873
 
@@ -5093,7 +5030,7 @@ msgstr ""
5093
  msgid "I consent to having this website store my submitted information so they can respond to my inquiry."
5094
  msgstr ""
5095
 
5096
- #: includes/fields/class-gdpr-checkbox.php:178
5097
  msgid "Agreement"
5098
  msgstr ""
5099
 
@@ -5323,17 +5260,17 @@ msgstr ""
5323
  msgid "Hi there!"
5324
  msgstr ""
5325
 
5326
- #: wpforms.php:86
5327
  msgid "Please deactivate WPForms Lite before activating WPForms."
5328
  msgstr ""
5329
 
5330
  #. translators: %1$s - WPBeginner URL for recommended WordPress hosting.
5331
- #: wpforms.php:116
5332
  msgid "Your site is running an <strong>insecure version</strong> of PHP that is no longer supported. Please contact your web hosting provider to update your PHP version or switch to a <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">recommended WordPress hosting company</a>."
5333
  msgstr ""
5334
 
5335
  #. translators: %1$s - WPForms.com URL for documentation with more details.
5336
- #: wpforms.php:134
5337
  msgid "<strong>Note:</strong> WPForms plugin is disabled on your site until you fix the issue. <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">Read more for additional information.</a>"
5338
  msgstr ""
5339
 
@@ -5403,210 +5340,257 @@ msgstr ""
5403
  msgid "Added by %1$s on %2$s"
5404
  msgstr ""
5405
 
5406
- #: src/Lite/Admin/DashboardWidget.php:140
5407
- #: src/Lite/Admin/DashboardWidget.php:341
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5408
  msgid "Show More"
5409
  msgstr ""
5410
 
5411
- #: src/Lite/Admin/DashboardWidget.php:141
5412
  msgid "Show Less"
5413
  msgstr ""
5414
 
5415
- #: src/Lite/Admin/DashboardWidget.php:217
5416
  msgid "Create Your First Form to Start Collecting Leads"
5417
  msgstr ""
5418
 
5419
- #: src/Lite/Admin/DashboardWidget.php:218
5420
  msgid "You can use WPForms to build contact forms, surveys, payment forms, and more with just a few clicks."
5421
  msgstr ""
5422
 
5423
- #: src/Lite/Admin/DashboardWidget.php:220
5424
  msgid "Create Your Form"
5425
  msgstr ""
5426
 
5427
- #: src/Lite/Admin/DashboardWidget.php:223
5428
- #: src/Lite/Admin/DashboardWidget.php:366
5429
  msgid "Learn More"
5430
  msgstr ""
5431
 
5432
- #: src/Lite/Admin/DashboardWidget.php:242
5433
  msgid "Total Entries"
5434
  msgstr ""
5435
 
5436
- #: src/Lite/Admin/DashboardWidget.php:245
5437
  msgid "Last 7 days"
5438
  msgstr ""
5439
 
5440
- #: src/Lite/Admin/DashboardWidget.php:255
5441
  msgid "View all Form Entries inside WordPress Dashboard"
5442
  msgstr ""
5443
 
5444
- #: src/Lite/Admin/DashboardWidget.php:256
5445
  msgid "Form entries reports are not available."
5446
  msgstr ""
5447
 
5448
- #: src/Lite/Admin/DashboardWidget.php:257
5449
  msgid "Form entries are not stored in Lite."
5450
  msgstr ""
5451
 
5452
- #: src/Lite/Admin/DashboardWidget.php:258
5453
  msgid "Upgrade to Pro and get access to the reports."
5454
  msgstr ""
5455
 
5456
- #: src/Lite/Admin/DashboardWidget.php:267
5457
  msgid "Go to WPForms.com"
5458
  msgstr ""
5459
 
5460
- #: src/Lite/Admin/DashboardWidget.php:277
5461
  msgid "Total Entries by Form"
5462
  msgstr ""
5463
 
5464
- #: src/Lite/Admin/DashboardWidget.php:312
5465
  msgid "No entries were submitted yet."
5466
  msgstr ""
5467
 
5468
- #: src/Lite/Admin/DashboardWidget.php:340
5469
  msgid "Show all forms"
5470
  msgstr ""
5471
 
5472
- #: src/Lite/Admin/DashboardWidget.php:363
5473
  msgid "Recommended Plugin:"
5474
  msgstr ""
5475
 
5476
- #: src/Lite/Admin/DashboardWidget.php:365
5477
  msgid "Install"
5478
  msgstr ""
5479
 
5480
- #: src/Lite/Admin/Builder/Education.php:65
5481
- msgid "is a PRO Feature"
5482
- msgstr ""
5483
-
5484
- #: src/Lite/Admin/Builder/Education.php:66
5485
- msgid "We're sorry, the %name% is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features."
5486
- msgstr ""
5487
-
5488
- #: src/Lite/Admin/Builder/Education.php:69
5489
- msgid "<strong>Bonus:</strong> WPForms Lite users get <span>50% off</span> regular price, automatically applied at checkout."
5490
- msgstr ""
5491
-
5492
- #: src/Lite/Admin/Builder/Education.php:111
5493
  msgid "Request A Quote Form"
5494
  msgstr ""
5495
 
5496
- #: src/Lite/Admin/Builder/Education.php:113
5497
  msgid "Start collecting leads with this pre-made Request a quote form. You can add and remove fields as needed."
5498
  msgstr ""
5499
 
5500
- #: src/Lite/Admin/Builder/Education.php:116
5501
  msgid "Donation Form"
5502
  msgstr ""
5503
 
5504
- #: src/Lite/Admin/Builder/Education.php:118
5505
  msgid "Start collecting donation payments on your website with this ready-made Donation form. You can add and remove fields as needed."
5506
  msgstr ""
5507
 
5508
- #: src/Lite/Admin/Builder/Education.php:121
5509
  msgid "Billing / Order Form"
5510
  msgstr ""
5511
 
5512
- #: src/Lite/Admin/Builder/Education.php:123
5513
  msgid "Collect payments for product and service orders with this ready-made form template. You can add and remove fields as needed."
5514
  msgstr ""
5515
 
5516
- #: src/Lite/Admin/Builder/Education.php:129
5517
  msgid "Unlock Pre-Made Form Templates"
5518
  msgstr ""
5519
 
5520
- #: src/Lite/Admin/Builder/Education.php:133
5521
  msgid "Upgrade"
5522
  msgstr ""
5523
 
5524
- #: src/Lite/Admin/Builder/Education.php:137
5525
  msgid "While WPForms Lite allows you to create any type of form, you can speed up the process by unlocking our other pre-built form templates among other features, so you never have to start from scratch again..."
5526
  msgstr ""
5527
 
5528
- #: src/Lite/Admin/Builder/Education.php:175
5529
  msgid "Phone"
5530
  msgstr ""
5531
 
5532
- #: src/Lite/Admin/Builder/Education.php:182
5533
  msgid "Address"
5534
  msgstr ""
5535
 
5536
- #: src/Lite/Admin/Builder/Education.php:189
5537
  msgid "Date / Time"
5538
  msgstr ""
5539
 
5540
- #: src/Lite/Admin/Builder/Education.php:196
5541
  msgid "Website / URL"
5542
  msgstr ""
5543
 
5544
- #: src/Lite/Admin/Builder/Education.php:203
5545
  msgid "File Upload"
5546
  msgstr ""
5547
 
5548
- #: src/Lite/Admin/Builder/Education.php:210
5549
  msgid "Password"
5550
  msgstr ""
5551
 
5552
- #: src/Lite/Admin/Builder/Education.php:224
5553
  msgid "Section Divider"
5554
  msgstr ""
5555
 
5556
- #: src/Lite/Admin/Builder/Education.php:231
5557
  msgid "Hidden Field"
5558
  msgstr ""
5559
 
5560
- #: src/Lite/Admin/Builder/Education.php:238
5561
  msgid "HTML"
5562
  msgstr ""
5563
 
5564
- #: src/Lite/Admin/Builder/Education.php:245
5565
  msgid "Rating"
5566
  msgstr ""
5567
 
5568
- #: src/Lite/Admin/Builder/Education.php:252
5569
  msgid "Captcha"
5570
  msgstr ""
5571
 
5572
- #: src/Lite/Admin/Builder/Education.php:259
5573
  msgid "Signature"
5574
  msgstr ""
5575
 
5576
- #: src/Lite/Admin/Builder/Education.php:266
5577
  msgid "Likert Scale"
5578
  msgstr ""
5579
 
5580
- #: src/Lite/Admin/Builder/Education.php:273
5581
  msgid "Net Promoter Score"
5582
  msgstr ""
5583
 
5584
- #: src/Lite/Admin/Builder/Education.php:283
5585
  msgid "Single Item"
5586
  msgstr ""
5587
 
5588
- #: src/Lite/Admin/Builder/Education.php:290
5589
  msgid "Multiple Items"
5590
  msgstr ""
5591
 
5592
- #: src/Lite/Admin/Builder/Education.php:297
5593
  msgid "Checkbox Items"
5594
  msgstr ""
5595
 
5596
- #: src/Lite/Admin/Builder/Education.php:304
5597
  msgid "Dropdown Items"
5598
  msgstr ""
5599
 
5600
- #: src/Lite/Admin/Builder/Education.php:311
5601
  msgid "Total"
5602
  msgstr ""
5603
 
 
 
 
 
5604
  #. translators: %s - addon name
5605
- #: src/Lite/Admin/Builder/Education.php:433
5606
- #: src/Lite/Admin/Builder/Education.php:465
5607
  msgid "%s addon"
5608
  msgstr ""
5609
 
 
 
 
 
5610
  #: src/Providers/Provider/Settings/PageIntegrations.php:235
5611
  msgid "You do not have permissions."
5612
  msgstr ""
@@ -5669,23 +5653,23 @@ msgstr ""
5669
  msgid "You cannot send emails with WPForms\\Emails\\Mailer until init/admin_init has been reached."
5670
  msgstr ""
5671
 
5672
- #: src/Emails/Summaries.php:98
5673
  msgid "Disable Email Summaries weekly delivery."
5674
  msgstr ""
5675
 
5676
- #: src/Emails/Summaries.php:101
5677
  msgid "View Email Summary Example"
5678
  msgstr ""
5679
 
5680
- #: src/Emails/Summaries.php:106
5681
  msgid "Disable Email Summaries"
5682
  msgstr ""
5683
 
5684
- #: src/Emails/Summaries.php:181
5685
  msgid "Weekly WPForms Email Summaries"
5686
  msgstr ""
5687
 
5688
- #: src/Emails/Summaries.php:222
5689
  msgid "WPForms Summary"
5690
  msgstr ""
5691
 
@@ -5857,13 +5841,49 @@ msgid "Show Description"
5857
  msgstr ""
5858
 
5859
  #: src/Integrations/Gutenberg/FormSelector.php:107
5860
- msgid "Dont forget to test your form."
5861
  msgstr ""
5862
 
5863
  #: src/Integrations/Gutenberg/FormSelector.php:108
5864
  msgid "Check out our complete guide!"
5865
  msgstr ""
5866
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5867
  #. translators: %s - URL WP Mail SMTP settings.
5868
  #: src/Integrations/WPMailSMTP/Notifications.php:78
5869
  msgid "This setting is disabled because you have the \"Force From Name\" setting enabled in <a href=\"%s\" rel=\"noopener noreferrer\" target=\"_blank\">WP Mail SMTP</a>."
1
  msgid ""
2
  msgstr ""
3
+ "Project-Id-Version: WPForms Lite 1.5.5\n"
4
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpforms-lite\n"
5
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
6
  "Language-Team: LANGUAGE <LL@li.org>\n"
7
  "MIME-Version: 1.0\n"
8
  "Content-Type: text/plain; charset=UTF-8\n"
9
  "Content-Transfer-Encoding: 8bit\n"
10
+ "POT-Creation-Date: 2019-08-28T14:43:28+00:00\n"
11
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12
  "X-Generator: WP-CLI 2.1.0\n"
13
  "X-Domain: wpforms-lite\n"
20
  #: includes/admin/class-menu.php:109
21
  #: includes/integrations.php:45
22
  #: includes/class-form.php:74
23
+ #: src/Lite/Admin/DashboardWidget.php:173
24
  #: src/Emails/Templates/General.php:97
25
  #: src/Integrations/Gutenberg/FormSelector.php:94
26
  msgid "WPForms"
1607
  msgid "Saturday"
1608
  msgstr ""
1609
 
1610
+ #: includes/functions.php:1706
1611
  #: includes/class-frontend.php:1291
1612
+ #: includes/admin/class-settings.php:474
1613
  msgid "This field is required."
1614
  msgstr ""
1615
 
1653
  msgid "Display form description"
1654
  msgstr ""
1655
 
 
 
 
 
1656
  #. translators: %s - URL to a non-amp version of a page with the form.
1657
  #: includes/class-frontend.php:161
1658
  msgid "<a href=\"%s\">Go to the full page</a> to view and submit the form."
1659
  msgstr ""
1660
 
1661
  #: includes/class-frontend.php:1292
1662
+ #: includes/admin/class-settings.php:480
1663
  msgid "Please enter a valid URL."
1664
  msgstr ""
1665
 
1666
  #: includes/class-frontend.php:1293
1667
+ #: includes/admin/class-settings.php:486
1668
  msgid "Please enter a valid email address."
1669
  msgstr ""
1670
 
1671
  #: includes/class-frontend.php:1294
1672
+ #: includes/admin/class-settings.php:492
1673
  msgid "Did you mean {suggestion}?"
1674
  msgstr ""
1675
 
1678
  msgstr ""
1679
 
1680
  #: includes/class-frontend.php:1296
1681
+ #: includes/admin/class-settings.php:498
1682
  #: includes/fields/class-number.php:162
1683
  msgid "Please enter a valid number."
1684
  msgstr ""
1685
 
1686
  #: includes/class-frontend.php:1297
1687
+ #: includes/admin/class-settings.php:504
1688
  msgid "Field values do not match."
1689
  msgstr ""
1690
 
1722
  msgstr ""
1723
 
1724
  #: includes/class-frontend.php:1306
1725
+ #: includes/admin/class-settings.php:510
1726
+ #: includes/fields/class-checkbox.php:593
1727
  msgid "You have exceeded the number of allowed selections: {#}."
1728
  msgstr ""
1729
 
1900
  msgstr ""
1901
 
1902
  #: includes/providers/class-constant-contact.php:511
1903
+ #: includes/admin/settings-api.php:141
1904
  msgid "Connect"
1905
  msgstr ""
1906
 
2065
  msgstr ""
2066
 
2067
  #: includes/emails/class-emails.php:492
2068
+ #: src/Lite/Admin/Builder/Education.php:219
2069
  msgid "Page Break"
2070
  msgstr ""
2071
 
2192
 
2193
  #: includes/admin/class-about.php:321
2194
  #: includes/admin/admin.php:121
2195
+ #: includes/admin/admin.php:154
2196
  msgid "Activate"
2197
  msgstr ""
2198
 
2349
  msgstr ""
2350
 
2351
  #: includes/admin/class-about.php:754
2352
+ #: src/Lite/Admin/DashboardWidget.php:375
2353
  msgid "MonsterInsights"
2354
  msgstr ""
2355
 
2376
 
2377
  #: includes/admin/class-about.php:777
2378
  #: includes/admin/class-about.php:783
2379
+ msgid "Make sure your website's emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites."
2380
  msgstr ""
2381
 
2382
  #: includes/admin/class-about.php:782
2650
  msgid "The callback function used for the %s setting is missing."
2651
  msgstr ""
2652
 
2653
+ #: includes/admin/settings-api.php:107
2654
  msgid "You're using WPForms Lite - no license needed. Enjoy!"
2655
  msgstr ""
2656
 
2657
  #. translators: %s - WPForms.com upgrade URL.
2658
+ #: includes/admin/settings-api.php:113
2659
  msgid "To unlock more features consider <strong><a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wpforms-upgrade-modal\">upgrading to PRO</a></strong>."
2660
  msgstr ""
2661
 
2662
+ #: includes/admin/settings-api.php:130
2663
  msgid "As a valued WPForms Lite user you receive <strong>50% off</strong>, automatically applied at checkout!"
2664
  msgstr ""
2665
 
2666
+ #: includes/admin/settings-api.php:138
2667
+ msgid "Already purchased? Simply enter your license key below to connect with WPForms PRO!"
2668
  msgstr ""
2669
 
2670
+ #: includes/admin/settings-api.php:140
2671
  msgid "Paste license key here"
2672
  msgstr ""
2673
 
2674
+ #: includes/admin/settings-api.php:151
 
 
 
 
2675
  msgid "Verify Key"
2676
  msgstr ""
2677
 
2678
+ #: includes/admin/settings-api.php:155
2679
  msgid "Deactivate Key"
2680
  msgstr ""
2681
 
2682
  #. translators: $s - license type.
2683
+ #: includes/admin/settings-api.php:162
2684
  msgid "Your license key type is %s."
2685
  msgstr ""
2686
 
2687
+ #: includes/admin/settings-api.php:168
2688
  msgid "If your license has been upgraded or is incorrect, <a href=\"#\" id=\"wpforms-setting-license-key-refresh\">click here to force a refresh</a>."
2689
  msgstr ""
2690
 
2691
+ #: includes/admin/settings-api.php:359
2692
  #: includes/fields/class-base.php:825
2693
  #: includes/fields/class-base.php:956
2694
  msgid "Upload Image"
2771
  msgstr ""
2772
 
2773
  #: includes/admin/ajax-actions.php:549
2774
+ #: src/Lite/Admin/Connect.php:207
2775
+ #: src/Lite/Admin/Connect.php:215
2776
+ #: src/Lite/Admin/Connect.php:270
2777
  msgid "Plugin installed & activated."
2778
  msgstr ""
2779
 
2797
  msgstr ""
2798
 
2799
  #: includes/admin/class-tools.php:99
2800
+ #: includes/admin/class-tools.php:542
2801
  msgid "Export"
2802
  msgstr ""
2803
 
2897
 
2898
  #: includes/admin/class-tools.php:381
2899
  #: includes/admin/class-welcome.php:309
2900
+ #: src/Lite/Admin/DashboardWidget.php:272
2901
  msgid "Upgrade to WPForms Pro"
2902
  msgstr ""
2903
 
2941
  msgid "The following fields are not supported and were not imported:"
2942
  msgstr ""
2943
 
2944
+ #: includes/admin/class-tools.php:521
2945
  msgid "Form Export"
2946
  msgstr ""
2947
 
2948
+ #: includes/admin/class-tools.php:523
2949
  msgid "Form exports files can be used to create a backup of your forms or to import forms into another site."
2950
  msgstr ""
2951
 
2952
+ #: includes/admin/class-tools.php:529
2953
  msgid "Select form(s)"
2954
  msgstr ""
2955
 
2956
+ #: includes/admin/class-tools.php:536
2957
  msgid "You need to create a form before you can use form export."
2958
  msgstr ""
2959
 
2960
+ #: includes/admin/class-tools.php:548
2961
  msgid "Form Template Export"
2962
  msgstr ""
2963
 
2964
+ #: includes/admin/class-tools.php:552
2965
  msgid "The following code can be used to register your custom form template. Copy and paste the following code to your theme's functions.php file or include it within an external file."
2966
  msgstr ""
2967
 
2968
  #. translators: %s - WPForms.com docs URL.
2969
+ #: includes/admin/class-tools.php:557
2970
  msgid "For more information <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">see our documentation</a>."
2971
  msgstr ""
2972
 
2973
+ #: includes/admin/class-tools.php:573
2974
  msgid "Select a form to generate PHP code that can be used to register a custom form template."
2975
  msgstr ""
2976
 
2977
+ #: includes/admin/class-tools.php:586
2978
  msgid "You need to create a form before you can generate a template."
2979
  msgstr ""
2980
 
2981
+ #: includes/admin/class-tools.php:592
2982
  msgid "Export Template"
2983
  msgstr ""
2984
 
2985
+ #: includes/admin/class-tools.php:612
2986
  msgid "System Information"
2987
  msgstr ""
2988
 
2989
+ #: includes/admin/class-tools.php:617
2990
  msgid "Test SSL Connections"
2991
  msgstr ""
2992
 
2993
+ #: includes/admin/class-tools.php:618
2994
  msgid "Click the button below to verify your web server can perform SSL connections successfully."
2995
  msgstr ""
2996
 
2997
+ #: includes/admin/class-tools.php:619
2998
  msgid "Test Connection"
2999
  msgstr ""
3000
 
3001
+ #: includes/admin/class-tools.php:689
3002
  msgid "Please upload a valid .json form export file."
3003
  msgstr ""
3004
 
3005
+ #: includes/admin/class-tools.php:690
3006
  msgid "Error"
3007
  msgstr ""
3008
 
3023
  #: includes/admin/overview/class-overview-table.php:172
3024
  #: templates/emails/summary-body.php:42
3025
  #: templates/emails/summary-body-plain.php:34
3026
+ #: src/Lite/Admin/DashboardWidget.php:154
3027
  msgid "Entries"
3028
  msgstr ""
3029
 
3111
 
3112
  #: includes/admin/class-welcome.php:114
3113
  #: includes/admin/builder/class-builder.php:513
3114
+ #: src/Lite/Admin/DashboardWidget.php:227
3115
  #: src/Admin/Challenge.php:506
3116
  msgid "Sullie the WPForms mascot"
3117
  msgstr ""
3224
 
3225
  #: includes/admin/class-welcome.php:237
3226
  #: includes/admin/builder/panels/class-payments.php:82
3227
+ #: src/Lite/Admin/Settings/Education.php:70
3228
+ #: src/Lite/Admin/Builder/Education.php:79
3229
  msgid "Upgrade to PRO"
3230
  msgstr ""
3231
 
3368
  msgstr ""
3369
 
3370
  #: includes/admin/admin.php:149
3371
+ msgid "Almost Done"
3372
+ msgstr ""
3373
+
3374
+ #: includes/admin/admin.php:150
3375
+ msgid "Oops!"
3376
+ msgstr ""
3377
+
3378
+ #: includes/admin/admin.php:151
3379
  #: includes/admin/builder/class-builder.php:337
3380
  msgid "OK"
3381
  msgstr ""
3382
 
3383
+ #: includes/admin/admin.php:152
3384
  msgid "Install and Activate"
3385
  msgstr ""
3386
 
3387
+ #: includes/admin/admin.php:153
3388
  msgid "needs to be installed and activated to import its forms. Would you like us to install and activate it for you?"
3389
  msgstr ""
3390
 
3391
+ #: includes/admin/admin.php:155
3392
  msgid "needs to be activated to import its forms. Would you like us to activate it for you?"
3393
  msgstr ""
3394
 
3395
+ #: includes/admin/admin.php:156
3396
  msgid "Are you sure you want to disconnect this account?"
3397
  msgstr ""
3398
 
3399
+ #: includes/admin/admin.php:157
3400
  msgid "Could not authenticate with the provider."
3401
  msgstr ""
3402
 
3403
+ #: includes/admin/admin.php:158
3404
  msgid "Save and Refresh"
3405
  msgstr ""
3406
 
3407
+ #: includes/admin/admin.php:159
3408
+ msgid "Unfortunately, there was an server connection error."
3409
+ msgstr ""
3410
+
3411
  #. translators: %s - WPForms.com docs page URL.
3412
+ #: includes/admin/admin.php:163
3413
  msgid "You've selected <strong>Base Styling Only</strong>, which may result in styling issues. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Please check out our tutorial</a> for common issues and recommendations."
3414
  msgstr ""
3415
 
3416
  #. translators: %s - WPForms.com docs page URL.
3417
+ #: includes/admin/admin.php:178
3418
  msgid "You've selected <strong>No Styling</strong>, which will likely result in significant styling issues and is recommended only for developers. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Please check out our tutorial</a> for more details and recommendations."
3419
  msgstr ""
3420
 
3421
+ #: includes/admin/admin.php:190
3422
  msgid "Testing"
3423
  msgstr ""
3424
 
3425
+ #: includes/admin/admin.php:191
3426
  msgid "Upgrade was successfully completed!"
3427
  msgstr ""
3428
 
3429
+ #: includes/admin/admin.php:192
3430
  #: includes/admin/builder/class-builder.php:414
3431
  msgid "Upload or Choose Your Image"
3432
  msgstr ""
3433
 
3434
+ #: includes/admin/admin.php:193
3435
  #: includes/admin/builder/class-builder.php:415
3436
  msgid "Use Image"
3437
  msgstr ""
3438
 
3439
+ #: includes/admin/admin.php:195
3440
  msgid "Select fields"
3441
  msgstr ""
3442
 
3443
+ #: includes/admin/admin.php:196
3444
  msgid "Loading..."
3445
  msgstr ""
3446
 
3447
+ #: includes/admin/admin.php:197
3448
  msgid "No results found"
3449
  msgstr ""
3450
 
3451
+ #: includes/admin/admin.php:198
3452
  msgid "No choices to choose from"
3453
  msgstr ""
3454
 
3455
+ #: includes/admin/admin.php:199
3456
  msgid "Press to select"
3457
  msgstr ""
3458
 
3459
  #. translators: %1$s - WPForms plugin name; %2$s - WPForms.com URL to a related doc.
3460
+ #: includes/admin/admin.php:371
3461
  msgid "Your site is running an outdated version of PHP that is no longer supported and may cause issues with %1$s. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Read more</a> for additional information."
3462
  msgstr ""
3463
 
3464
+ #: includes/admin/admin.php:385
3465
  msgid "<strong>Please Note:</strong> Support for PHP 5.3 to 5.5 will be discontinued in 2019. After this, if no further action is taken, WPForms functionality will be disabled."
3466
  msgstr ""
3467
 
3468
+ #: includes/admin/admin.php:407
3469
  msgid "Thanks for your interest in WPForms Pro!"
3470
  msgstr ""
3471
 
3472
  #. translators: %s - WPForms.com contact page URL.
3473
+ #: includes/admin/admin.php:411
3474
  msgid "If you have any questions or issues just <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">let us know</a>."
3475
  msgstr ""
3476
 
3477
+ #: includes/admin/admin.php:425
3478
  msgid "After purchasing WPForms Pro, you'll need to <strong>download and install the Pro version of the plugin</strong>, and then <strong>remove the free plugin</strong>."
3479
  msgstr ""
3480
 
3481
+ #: includes/admin/admin.php:430
3482
  msgid "(Don't worry, all your forms and settings will be preserved.)"
3483
  msgstr ""
3484
 
3485
  #. translators: %s - WPForms.com upgrade from Lite to paid docs page URL.
3486
+ #: includes/admin/admin.php:436
3487
  msgid "Check out <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">our documentation</a> for step-by-step instructions."
3488
  msgstr ""
3489
 
3600
 
3601
  #. translators: %1$s - WPForms.com URL to a template suggestion, %2$s - WPForms.com URL to a doc about custom templates.
3602
  #: includes/admin/builder/panels/class-setup.php:93
3603
+ msgid "Have a suggestion for a new template? <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">We'd love to hear it</a>. Also, you can <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">create your own templates</a>!"
3604
  msgstr ""
3605
 
3606
  #: includes/admin/builder/panels/class-setup.php:110
3732
 
3733
  #: includes/admin/builder/panels/class-settings.php:42
3734
  #: includes/admin/builder/panels/class-settings.php:82
3735
+ #: includes/admin/class-settings.php:168
3736
+ #: includes/admin/class-settings.php:301
3737
  msgid "General"
3738
  msgstr ""
3739
 
4204
  msgid "Settings were successfully saved."
4205
  msgstr ""
4206
 
4207
+ #: includes/admin/class-settings.php:170
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4208
  #: includes/admin/class-settings.php:175
4209
+ #: includes/admin/class-settings.php:180
4210
+ #: includes/admin/class-settings.php:185
4211
+ #: includes/admin/class-settings.php:195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4212
  msgid "Save Settings"
4213
  msgstr ""
4214
 
4215
+ #: includes/admin/class-settings.php:173
4216
+ #: includes/admin/class-settings.php:369
4217
+ #: includes/admin/class-settings.php:484
4218
  #: includes/templates/class-subscribe.php:44
4219
  #: includes/templates/class-suggestion.php:41
4220
  #: includes/templates/class-contact.php:42
4224
  msgid "Email"
4225
  msgstr ""
4226
 
4227
+ #: includes/admin/class-settings.php:178
4228
+ #: includes/admin/class-settings.php:409
4229
  msgid "reCAPTCHA"
4230
  msgstr ""
4231
 
4232
+ #: includes/admin/class-settings.php:183
4233
  msgid "Validation"
4234
  msgstr ""
4235
 
4236
+ #: includes/admin/class-settings.php:188
4237
+ #: includes/admin/class-settings.php:517
4238
+ #: includes/admin/class-settings.php:524
4239
  msgid "Integrations"
4240
  msgstr ""
4241
 
4242
+ #: includes/admin/class-settings.php:193
4243
+ #: includes/admin/class-settings.php:533
4244
  msgid "Misc"
4245
  msgstr ""
4246
 
4247
+ #: includes/admin/class-settings.php:234
4248
  msgid "reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease."
4249
  msgstr ""
4250
 
4251
+ #: includes/admin/class-settings.php:235
4252
  msgid "Google offers 3 versions of reCAPTCHA (all supported within WPForms):"
4253
  msgstr ""
4254
 
4255
+ #: includes/admin/class-settings.php:240
4256
  msgid "<strong>v2 Checkbox reCAPTCHA</strong>: Prompts users to check a box to prove they're human."
4257
  msgstr ""
4258
 
4259
+ #: includes/admin/class-settings.php:249
4260
  msgid "<strong>v2 Invisible reCAPTCHA</strong>: Uses advanced technology to detect real users without requiring any input."
4261
  msgstr ""
4262
 
4263
+ #: includes/admin/class-settings.php:258
4264
  msgid "<strong>v3 reCAPTCHA</strong>: Uses a behind-the-scenes scoring system to detect abusive traffic, and lets you decide the minimum passing score. Recommended for advanced use only (or if using Google AMP)."
4265
  msgstr ""
4266
 
4267
+ #: includes/admin/class-settings.php:265
4268
  msgid "Sites already using one type of reCAPTCHA will need to create new site keys before switching to a different option."
4269
  msgstr ""
4270
 
4271
  #. translators: %s - WPForms.com Setup Captcha URL.
4272
+ #: includes/admin/class-settings.php:271
4273
  msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Read our walk through</a> to learn more and for step-by-step directions."
4274
  msgstr ""
4275
 
4276
+ #: includes/admin/class-settings.php:289
4277
  msgid "License"
4278
  msgstr ""
4279
 
4280
+ #: includes/admin/class-settings.php:289
4281
  msgid "Your license key provides access to updates and addons."
4282
  msgstr ""
4283
 
4284
+ #: includes/admin/class-settings.php:296
4285
  msgid "License Key"
4286
  msgstr ""
4287
 
4288
+ #: includes/admin/class-settings.php:308
4289
  msgid "Include Form Styling"
4290
  msgstr ""
4291
 
4292
  #. translators: %s - WPForms.com documentation URL.
4293
+ #: includes/admin/class-settings.php:312
4294
  msgid "Determines which CSS files to load for the site (<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">please see our tutorial for full details</a>). Unless experienced with CSS or instructed by support, \"Base and Form Theme Styling\" is recommended."
4295
  msgstr ""
4296
 
4297
+ #: includes/admin/class-settings.php:327
4298
  msgid "Base and form theme styling"
4299
  msgstr ""
4300
 
4301
+ #: includes/admin/class-settings.php:328
4302
  msgid "Base styling only"
4303
  msgstr ""
4304
 
4305
+ #: includes/admin/class-settings.php:329
4306
  msgid "No styling"
4307
  msgstr ""
4308
 
4309
+ #: includes/admin/class-settings.php:334
4310
  msgid "Load Assets Globally"
4311
  msgstr ""
4312
 
4313
+ #: includes/admin/class-settings.php:335
4314
  msgid "Check this if you would like to load WPForms assets site-wide. Only check if your site is having compatibility issues or instructed to by support."
4315
  msgstr ""
4316
 
4317
+ #: includes/admin/class-settings.php:340
4318
  msgid "GDPR"
4319
  msgstr ""
4320
 
4321
+ #: includes/admin/class-settings.php:347
4322
  msgid "GDPR Enhancements"
4323
  msgstr ""
4324
 
4325
  #. translators: %s - WPForms.com GDPR documentation URL.
4326
+ #: includes/admin/class-settings.php:351
4327
  msgid "Check this to turn on GDPR related features and enhancements. <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Read our GDPR documentation</a> to learn more."
4328
  msgstr ""
4329
 
4330
+ #: includes/admin/class-settings.php:376
4331
  msgid "Template"
4332
  msgstr ""
4333
 
4334
+ #: includes/admin/class-settings.php:377
4335
  msgid "Determines how email notifications will be formatted. HTML Templates are the default."
4336
  msgstr ""
4337
 
4338
+ #: includes/admin/class-settings.php:381
4339
  msgid "HTML Template"
4340
  msgstr ""
4341
 
4342
+ #: includes/admin/class-settings.php:382
4343
  msgid "Plain text"
4344
  msgstr ""
4345
 
4346
+ #: includes/admin/class-settings.php:387
4347
  msgid "Header Image"
4348
  msgstr ""
4349
 
4350
+ #: includes/admin/class-settings.php:388
4351
  msgid "Upload or choose a logo to be displayed at the top of email notifications.<br>Recommended size is 300x100 or smaller for best support on all devices."
4352
  msgstr ""
4353
 
4354
+ #: includes/admin/class-settings.php:393
4355
  msgid "Background Color"
4356
  msgstr ""
4357
 
4358
+ #: includes/admin/class-settings.php:394
4359
  msgid "Customize the background color of the HTML email template."
4360
  msgstr ""
4361
 
4362
+ #: includes/admin/class-settings.php:400
4363
  msgid "Carbon Copy"
4364
  msgstr ""
4365
 
4366
+ #: includes/admin/class-settings.php:401
4367
  msgid "Check this if you would like to enable the ability to CC: email addresses in the form notification settings."
4368
  msgstr ""
4369
 
4370
+ #: includes/admin/class-settings.php:416
4371
  msgid "Type"
4372
  msgstr ""
4373
 
4374
+ #: includes/admin/class-settings.php:420
4375
  msgid "Checkbox reCAPTCHA v2"
4376
  msgstr ""
4377
 
4378
+ #: includes/admin/class-settings.php:421
4379
  msgid "Invisible reCAPTCHA v2"
4380
  msgstr ""
4381
 
4382
+ #: includes/admin/class-settings.php:422
4383
  msgid "reCAPTCHA v3"
4384
  msgstr ""
4385
 
4386
+ #: includes/admin/class-settings.php:427
4387
  msgid "Site Key"
4388
  msgstr ""
4389
 
4390
+ #: includes/admin/class-settings.php:432
4391
  msgid "Secret Key"
4392
  msgstr ""
4393
 
4394
+ #: includes/admin/class-settings.php:437
4395
  msgid "Fail Message"
4396
  msgstr ""
4397
 
4398
+ #: includes/admin/class-settings.php:438
4399
  msgid "The message displayed to users who fail the reCAPTCHA verification process."
4400
  msgstr ""
4401
 
4402
+ #: includes/admin/class-settings.php:440
4403
  #: includes/class-process.php:176
4404
  msgid "Google reCAPTCHA verification failed, please try again later."
4405
  msgstr ""
4406
 
4407
+ #: includes/admin/class-settings.php:444
4408
  msgid "Score Threshold"
4409
  msgstr ""
4410
 
4411
+ #: includes/admin/class-settings.php:445
4412
  msgid "reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot). If the score less than or equal to this threshold, the form submission will be blocked and the message above will be displayed."
4413
  msgstr ""
4414
 
4415
+ #: includes/admin/class-settings.php:452
4416
  msgid "0.4"
4417
  msgstr ""
4418
 
4419
+ #: includes/admin/class-settings.php:456
4420
  msgid "No-Conflict Mode"
4421
  msgstr ""
4422
 
4423
+ #: includes/admin/class-settings.php:457
4424
  msgid "When checked, other reCAPTCHA occurrences are forcefully removed, to prevent conflicts. Only check if your site is having compatibility issues or instructed to by support."
4425
  msgstr ""
4426
 
4427
+ #: includes/admin/class-settings.php:465
4428
  msgid "Validation Messages"
4429
  msgstr ""
4430
 
4431
+ #: includes/admin/class-settings.php:465
4432
  msgid "These messages are displayed to the users as they fill out a form in real-time."
4433
  msgstr ""
4434
 
4435
+ #: includes/admin/class-settings.php:472
4436
  #: includes/fields/class-base.php:722
4437
  msgid "Required"
4438
  msgstr ""
4439
 
4440
+ #: includes/admin/class-settings.php:478
4441
  msgid "Website URL"
4442
  msgstr ""
4443
 
4444
+ #: includes/admin/class-settings.php:490
4445
  msgid "Email Suggestion"
4446
  msgstr ""
4447
 
4448
+ #: includes/admin/class-settings.php:496
4449
  msgid "Number"
4450
  msgstr ""
4451
 
4452
+ #: includes/admin/class-settings.php:502
4453
  msgid "Confirm Value"
4454
  msgstr ""
4455
 
4456
+ #: includes/admin/class-settings.php:508
4457
  msgid "Checkbox Selection Limit"
4458
  msgstr ""
4459
 
4460
+ #: includes/admin/class-settings.php:517
4461
+ #: includes/admin/class-settings.php:524
4462
  msgid "Manage integrations with popular providers such as Constant Contact, MailChimp, Zapier, and more."
4463
  msgstr ""
4464
 
4465
+ #: includes/admin/class-settings.php:540
4466
  msgid "Hide Announcements"
4467
  msgstr ""
4468
 
4469
+ #: includes/admin/class-settings.php:541
4470
  msgid "Check this if you would like to hide plugin announcements and update details."
4471
  msgstr ""
4472
 
4473
+ #: includes/admin/class-settings.php:546
4474
  msgid "Uninstall WPForms"
4475
  msgstr ""
4476
 
4477
+ #: includes/admin/class-settings.php:547
4478
  msgid "Check this if you would like to remove ALL WPForms data upon plugin deletion. All forms and settings will be unrecoverable."
4479
  msgstr ""
4480
 
4619
  msgid "Lost Password URL"
4620
  msgstr ""
4621
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4622
  #: includes/class-conditional-logic-core.php:193
4623
  msgid "this field if"
4624
  msgstr ""
4761
  msgid "Third Choice"
4762
  msgstr ""
4763
 
4764
+ #: includes/fields/class-checkbox.php:152
4765
  msgid "Checked"
4766
  msgstr ""
4767
 
4768
  #. translators: %s - choice number.
4769
+ #: includes/fields/class-checkbox.php:155
4770
  msgid "Choice %s"
4771
  msgstr ""
4772
 
4773
+ #: includes/fields/class-checkbox.php:300
4774
+ #: includes/fields/class-radio.php:261
4775
  msgid "Randomize Choices"
4776
  msgstr ""
4777
 
4778
+ #: includes/fields/class-checkbox.php:301
4779
+ #: includes/fields/class-radio.php:262
4780
  msgid "Check this option to randomize the order of the choices."
4781
  msgstr ""
4782
 
4783
+ #: includes/fields/class-checkbox.php:322
4784
  #: includes/fields/class-select.php:196
4785
+ #: includes/fields/class-radio.php:283
4786
  msgid "Show Values"
4787
  msgstr ""
4788
 
4789
+ #: includes/fields/class-checkbox.php:323
4790
  #: includes/fields/class-select.php:197
4791
+ #: includes/fields/class-radio.php:284
4792
  msgid "Check this to manually set form field values."
4793
  msgstr ""
4794
 
4795
+ #: includes/fields/class-checkbox.php:350
4796
  msgid "Choice Limit"
4797
  msgstr ""
4798
 
4799
+ #: includes/fields/class-checkbox.php:351
4800
  msgid "Limit the number of checkboxes a user can select. Leave empty for unlimited."
4801
  msgstr ""
4802
 
4803
+ #: includes/fields/class-checkbox.php:391
4804
  msgid "Enable Disclaimer / Terms of Service Display"
4805
  msgstr ""
4806
 
4807
+ #: includes/fields/class-checkbox.php:392
4808
  msgid "Check this option to adjust the field styling to support Disclaimers and Terms of Service type agreements."
4809
  msgstr ""
4810
 
5030
  msgid "I consent to having this website store my submitted information so they can respond to my inquiry."
5031
  msgstr ""
5032
 
5033
+ #: includes/fields/class-gdpr-checkbox.php:179
5034
  msgid "Agreement"
5035
  msgstr ""
5036
 
5260
  msgid "Hi there!"
5261
  msgstr ""
5262
 
5263
+ #: wpforms.php:81
5264
  msgid "Please deactivate WPForms Lite before activating WPForms."
5265
  msgstr ""
5266
 
5267
  #. translators: %1$s - WPBeginner URL for recommended WordPress hosting.
5268
+ #: wpforms.php:111
5269
  msgid "Your site is running an <strong>insecure version</strong> of PHP that is no longer supported. Please contact your web hosting provider to update your PHP version or switch to a <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">recommended WordPress hosting company</a>."
5270
  msgstr ""
5271
 
5272
  #. translators: %1$s - WPForms.com URL for documentation with more details.
5273
+ #: wpforms.php:129
5274
  msgid "<strong>Note:</strong> WPForms plugin is disabled on your site until you fix the issue. <a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">Read more for additional information.</a>"
5275
  msgstr ""
5276
 
5340
  msgid "Added by %1$s on %2$s"
5341
  msgstr ""
5342
 
5343
+ #: src/Lite/Admin/Settings/Education.php:58
5344
+ #: src/Lite/Admin/Builder/Education.php:67
5345
+ msgid "is a PRO Feature"
5346
+ msgstr ""
5347
+
5348
+ #: src/Lite/Admin/Settings/Education.php:59
5349
+ #: src/Lite/Admin/Builder/Education.php:68
5350
+ msgid "We're sorry, the %name% is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features."
5351
+ msgstr ""
5352
+
5353
+ #: src/Lite/Admin/Settings/Education.php:62
5354
+ #: src/Lite/Admin/Builder/Education.php:71
5355
+ msgid "<strong>Bonus:</strong> WPForms Lite users get <span>50% off</span> regular price, automatically applied at checkout."
5356
+ msgstr ""
5357
+
5358
+ #: src/Lite/Admin/Settings/Education.php:69
5359
+ msgid "Already purchased?"
5360
+ msgstr ""
5361
+
5362
+ #: src/Lite/Admin/Connect.php:79
5363
+ msgid "Sorry, you do not have permission to install plugins."
5364
+ msgstr ""
5365
+
5366
+ #: src/Lite/Admin/Connect.php:89
5367
+ msgid "Please enter your license key to connect."
5368
+ msgstr ""
5369
+
5370
+ #: src/Lite/Admin/Connect.php:96
5371
+ msgid "Only the Lite version can upgrade."
5372
+ msgstr ""
5373
+
5374
+ #: src/Lite/Admin/Connect.php:111
5375
+ msgid "WPForms Pro was already installed and has not been activated."
5376
+ msgstr ""
5377
+
5378
+ #: src/Lite/Admin/Connect.php:172
5379
+ msgid "Could not install upgrade. Please download from wpforms.com and install manually."
5380
+ msgstr ""
5381
+
5382
+ #: src/Lite/Admin/Connect.php:221
5383
+ msgid "Could not install upgrade. Please check for file system permissions and try again. Also you can download plugin from wpforms.com and install manually."
5384
+ msgstr ""
5385
+
5386
+ #: src/Lite/Admin/Connect.php:248
5387
+ msgid "No key provided."
5388
+ msgstr ""
5389
+
5390
+ #: src/Lite/Admin/Connect.php:274
5391
+ msgid "Pro version installed but needs to be activated from the Plugins page inside your WordPress admin."
5392
+ msgstr ""
5393
+
5394
+ #: src/Lite/Admin/DashboardWidget.php:151
5395
+ #: src/Lite/Admin/DashboardWidget.php:352
5396
  msgid "Show More"
5397
  msgstr ""
5398
 
5399
+ #: src/Lite/Admin/DashboardWidget.php:152
5400
  msgid "Show Less"
5401
  msgstr ""
5402
 
5403
+ #: src/Lite/Admin/DashboardWidget.php:228
5404
  msgid "Create Your First Form to Start Collecting Leads"
5405
  msgstr ""
5406
 
5407
+ #: src/Lite/Admin/DashboardWidget.php:229
5408
  msgid "You can use WPForms to build contact forms, surveys, payment forms, and more with just a few clicks."
5409
  msgstr ""
5410
 
5411
+ #: src/Lite/Admin/DashboardWidget.php:231
5412
  msgid "Create Your Form"
5413
  msgstr ""
5414
 
5415
+ #: src/Lite/Admin/DashboardWidget.php:234
5416
+ #: src/Lite/Admin/DashboardWidget.php:377
5417
  msgid "Learn More"
5418
  msgstr ""
5419
 
5420
+ #: src/Lite/Admin/DashboardWidget.php:253
5421
  msgid "Total Entries"
5422
  msgstr ""
5423
 
5424
+ #: src/Lite/Admin/DashboardWidget.php:256
5425
  msgid "Last 7 days"
5426
  msgstr ""
5427
 
5428
+ #: src/Lite/Admin/DashboardWidget.php:266
5429
  msgid "View all Form Entries inside WordPress Dashboard"
5430
  msgstr ""
5431
 
5432
+ #: src/Lite/Admin/DashboardWidget.php:267
5433
  msgid "Form entries reports are not available."
5434
  msgstr ""
5435
 
5436
+ #: src/Lite/Admin/DashboardWidget.php:268
5437
  msgid "Form entries are not stored in Lite."
5438
  msgstr ""
5439
 
5440
+ #: src/Lite/Admin/DashboardWidget.php:269
5441
  msgid "Upgrade to Pro and get access to the reports."
5442
  msgstr ""
5443
 
5444
+ #: src/Lite/Admin/DashboardWidget.php:278
5445
  msgid "Go to WPForms.com"
5446
  msgstr ""
5447
 
5448
+ #: src/Lite/Admin/DashboardWidget.php:288
5449
  msgid "Total Entries by Form"
5450
  msgstr ""
5451
 
5452
+ #: src/Lite/Admin/DashboardWidget.php:323
5453
  msgid "No entries were submitted yet."
5454
  msgstr ""
5455
 
5456
+ #: src/Lite/Admin/DashboardWidget.php:351
5457
  msgid "Show all forms"
5458
  msgstr ""
5459
 
5460
+ #: src/Lite/Admin/DashboardWidget.php:374
5461
  msgid "Recommended Plugin:"
5462
  msgstr ""
5463
 
5464
+ #: src/Lite/Admin/DashboardWidget.php:376
5465
  msgid "Install"
5466
  msgstr ""
5467
 
5468
+ #: src/Lite/Admin/Builder/Education.php:113
 
 
 
 
 
 
 
 
 
 
 
 
5469
  msgid "Request A Quote Form"
5470
  msgstr ""
5471
 
5472
+ #: src/Lite/Admin/Builder/Education.php:115
5473
  msgid "Start collecting leads with this pre-made Request a quote form. You can add and remove fields as needed."
5474
  msgstr ""
5475
 
5476
+ #: src/Lite/Admin/Builder/Education.php:118
5477
  msgid "Donation Form"
5478
  msgstr ""
5479
 
5480
+ #: src/Lite/Admin/Builder/Education.php:120
5481
  msgid "Start collecting donation payments on your website with this ready-made Donation form. You can add and remove fields as needed."
5482
  msgstr ""
5483
 
5484
+ #: src/Lite/Admin/Builder/Education.php:123
5485
  msgid "Billing / Order Form"
5486
  msgstr ""
5487
 
5488
+ #: src/Lite/Admin/Builder/Education.php:125
5489
  msgid "Collect payments for product and service orders with this ready-made form template. You can add and remove fields as needed."
5490
  msgstr ""
5491
 
5492
+ #: src/Lite/Admin/Builder/Education.php:131
5493
  msgid "Unlock Pre-Made Form Templates"
5494
  msgstr ""
5495
 
5496
+ #: src/Lite/Admin/Builder/Education.php:135
5497
  msgid "Upgrade"
5498
  msgstr ""
5499
 
5500
+ #: src/Lite/Admin/Builder/Education.php:139
5501
  msgid "While WPForms Lite allows you to create any type of form, you can speed up the process by unlocking our other pre-built form templates among other features, so you never have to start from scratch again..."
5502
  msgstr ""
5503
 
5504
+ #: src/Lite/Admin/Builder/Education.php:177
5505
  msgid "Phone"
5506
  msgstr ""
5507
 
5508
+ #: src/Lite/Admin/Builder/Education.php:184
5509
  msgid "Address"
5510
  msgstr ""
5511
 
5512
+ #: src/Lite/Admin/Builder/Education.php:191
5513
  msgid "Date / Time"
5514
  msgstr ""
5515
 
5516
+ #: src/Lite/Admin/Builder/Education.php:198
5517
  msgid "Website / URL"
5518
  msgstr ""
5519
 
5520
+ #: src/Lite/Admin/Builder/Education.php:205
5521
  msgid "File Upload"
5522
  msgstr ""
5523
 
5524
+ #: src/Lite/Admin/Builder/Education.php:212
5525
  msgid "Password"
5526
  msgstr ""
5527
 
5528
+ #: src/Lite/Admin/Builder/Education.php:226
5529
  msgid "Section Divider"
5530
  msgstr ""
5531
 
5532
+ #: src/Lite/Admin/Builder/Education.php:233
5533
  msgid "Hidden Field"
5534
  msgstr ""
5535
 
5536
+ #: src/Lite/Admin/Builder/Education.php:240
5537
  msgid "HTML"
5538
  msgstr ""
5539
 
5540
+ #: src/Lite/Admin/Builder/Education.php:247
5541
  msgid "Rating"
5542
  msgstr ""
5543
 
5544
+ #: src/Lite/Admin/Builder/Education.php:254
5545
  msgid "Captcha"
5546
  msgstr ""
5547
 
5548
+ #: src/Lite/Admin/Builder/Education.php:261
5549
  msgid "Signature"
5550
  msgstr ""
5551
 
5552
+ #: src/Lite/Admin/Builder/Education.php:268
5553
  msgid "Likert Scale"
5554
  msgstr ""
5555
 
5556
+ #: src/Lite/Admin/Builder/Education.php:275
5557
  msgid "Net Promoter Score"
5558
  msgstr ""
5559
 
5560
+ #: src/Lite/Admin/Builder/Education.php:285
5561
  msgid "Single Item"
5562
  msgstr ""
5563
 
5564
+ #: src/Lite/Admin/Builder/Education.php:292
5565
  msgid "Multiple Items"
5566
  msgstr ""
5567
 
5568
+ #: src/Lite/Admin/Builder/Education.php:299
5569
  msgid "Checkbox Items"
5570
  msgstr ""
5571
 
5572
+ #: src/Lite/Admin/Builder/Education.php:306
5573
  msgid "Dropdown Items"
5574
  msgstr ""
5575
 
5576
+ #: src/Lite/Admin/Builder/Education.php:313
5577
  msgid "Total"
5578
  msgstr ""
5579
 
5580
+ #: src/Lite/Admin/Builder/Education.php:342
5581
+ msgid "Conditionals"
5582
+ msgstr ""
5583
+
5584
  #. translators: %s - addon name
5585
+ #: src/Lite/Admin/Builder/Education.php:430
5586
+ #: src/Lite/Admin/Builder/Education.php:462
5587
  msgid "%s addon"
5588
  msgstr ""
5589
 
5590
+ #: src/Lite/Admin/ConnectSkin.php:86
5591
+ msgid "There was an error installing WPForms Pro. Please try again."
5592
+ msgstr ""
5593
+
5594
  #: src/Providers/Provider/Settings/PageIntegrations.php:235
5595
  msgid "You do not have permissions."
5596
  msgstr ""
5653
  msgid "You cannot send emails with WPForms\\Emails\\Mailer until init/admin_init has been reached."
5654
  msgstr ""
5655
 
5656
+ #: src/Emails/Summaries.php:102
5657
  msgid "Disable Email Summaries weekly delivery."
5658
  msgstr ""
5659
 
5660
+ #: src/Emails/Summaries.php:105
5661
  msgid "View Email Summary Example"
5662
  msgstr ""
5663
 
5664
+ #: src/Emails/Summaries.php:110
5665
  msgid "Disable Email Summaries"
5666
  msgstr ""
5667
 
5668
+ #: src/Emails/Summaries.php:185
5669
  msgid "Weekly WPForms Email Summaries"
5670
  msgstr ""
5671
 
5672
+ #: src/Emails/Summaries.php:226
5673
  msgid "WPForms Summary"
5674
  msgstr ""
5675
 
5841
  msgstr ""
5842
 
5843
  #: src/Integrations/Gutenberg/FormSelector.php:107
5844
+ msgid "Do not forget to test your form."
5845
  msgstr ""
5846
 
5847
  #: src/Integrations/Gutenberg/FormSelector.php:108
5848
  msgid "Check out our complete guide!"
5849
  msgstr ""
5850
 
5851
+ #: src/Integrations/SiteHealth/SiteHealth.php:67
5852
+ msgid "Version"
5853
+ msgstr ""
5854
+
5855
+ #: src/Integrations/SiteHealth/SiteHealth.php:75
5856
+ msgid "License key type"
5857
+ msgstr ""
5858
+
5859
+ #: src/Integrations/SiteHealth/SiteHealth.php:85
5860
+ msgid "Lite install date"
5861
+ msgstr ""
5862
+
5863
+ #: src/Integrations/SiteHealth/SiteHealth.php:93
5864
+ msgid "Pro install date"
5865
+ msgstr ""
5866
+
5867
+ #: src/Integrations/SiteHealth/SiteHealth.php:102
5868
+ msgid "Not found"
5869
+ msgstr ""
5870
+
5871
+ #: src/Integrations/SiteHealth/SiteHealth.php:105
5872
+ msgid "DB tables"
5873
+ msgstr ""
5874
+
5875
+ #: src/Integrations/SiteHealth/SiteHealth.php:111
5876
+ msgid "Total forms"
5877
+ msgstr ""
5878
+
5879
+ #: src/Integrations/SiteHealth/SiteHealth.php:118
5880
+ msgid "Total entries"
5881
+ msgstr ""
5882
+
5883
+ #: src/Integrations/SiteHealth/SiteHealth.php:135
5884
+ msgid "Total submissions (since v1.5.0)"
5885
+ msgstr ""
5886
+
5887
  #. translators: %s - URL WP Mail SMTP settings.
5888
  #: src/Integrations/WPMailSMTP/Notifications.php:78
5889
  msgid "This setting is disabled because you have the \"Force From Name\" setting enabled in <a href=\"%s\" rel=\"noopener noreferrer\" target=\"_blank\">WP Mail SMTP</a>."
lite/assets/js/admin/builder-education.js CHANGED
@@ -54,7 +54,7 @@ var WPFormsBuilderEducation = window.WPFormsBuilderEducation || ( function( docu
54
 
55
  $( document ).on(
56
  'click',
57
- '.wpforms-add-fields-button, .wpforms-panel-sidebar-section, .wpforms-builder-settings-block-add',
58
  function( event ) {
59
 
60
  var $this = $( this );
54
 
55
  $( document ).on(
56
  'click',
57
+ '.wpforms-add-fields-button, .wpforms-panel-sidebar-section, .wpforms-builder-settings-block-add, .wpforms-field-option-group-toggle',
58
  function( event ) {
59
 
60
  var $this = $( this );
lite/assets/js/admin/builder-education.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";var WPFormsBuilderEducation=window.WPFormsBuilderEducation||function(e,i,o){var n={init:function(){o(e).ready(n.ready)},ready:function(){n.events()},events:function(){n.clickEvents()},clickEvents:function(){o(e).on("click",".wpforms-add-fields-button, .wpforms-panel-sidebar-section, .wpforms-builder-settings-block-add",function(e){var t=o(this);t.hasClass("upgrade-modal")&&(e.preventDefault(),e.stopImmediatePropagation(),t.hasClass("wpforms-add-fields-button")?n.upgradeModal(t.text()+" "+wpforms_builder.field):n.upgradeModal(t.data("name")))})},upgradeModal:function(e){var t=wpforms_builder_lite.upgrade_message.replace(/%name%/g,e),n=encodeURI(wpforms_builder_lite.upgrade_url+"&utm_content="+e.trim());o.alert({title:e+" "+wpforms_builder_lite.upgrade_title,icon:"fa fa-lock",content:t,boxWidth:"550px",onOpenBefore:function(){this.$btnc.after('<div class="discount-note">'+wpforms_builder_lite.upgrade_bonus+wpforms_builder_lite.upgrade_doc+"</div>"),this.$body.find(".jconfirm-content").addClass("lite-upgrade")},buttons:{confirm:{text:wpforms_builder_lite.upgrade_button,btnClass:"btn-confirm",keys:["enter"],action:function(){i.open(n,"_blank"),o.alert({title:!1,content:wpforms_builder_lite.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})}}}})}};return n}(document,window,jQuery);WPFormsBuilderEducation.init();
1
+ "use strict";var WPFormsBuilderEducation=window.WPFormsBuilderEducation||function(e,o,i){var n={init:function(){i(e).ready(n.ready)},ready:function(){n.events()},events:function(){n.clickEvents()},clickEvents:function(){i(e).on("click",".wpforms-add-fields-button, .wpforms-panel-sidebar-section, .wpforms-builder-settings-block-add, .wpforms-field-option-group-toggle",function(e){var t=i(this);t.hasClass("upgrade-modal")&&(e.preventDefault(),e.stopImmediatePropagation(),t.hasClass("wpforms-add-fields-button")?n.upgradeModal(t.text()+" "+wpforms_builder.field):n.upgradeModal(t.data("name")))})},upgradeModal:function(e){var t=wpforms_builder_lite.upgrade_message.replace(/%name%/g,e),n=encodeURI(wpforms_builder_lite.upgrade_url+"&utm_content="+e.trim());i.alert({title:e+" "+wpforms_builder_lite.upgrade_title,icon:"fa fa-lock",content:t,boxWidth:"550px",onOpenBefore:function(){this.$btnc.after('<div class="discount-note">'+wpforms_builder_lite.upgrade_bonus+wpforms_builder_lite.upgrade_doc+"</div>"),this.$body.find(".jconfirm-content").addClass("lite-upgrade")},buttons:{confirm:{text:wpforms_builder_lite.upgrade_button,btnClass:"btn-confirm",keys:["enter"],action:function(){o.open(n,"_blank"),i.alert({title:!1,content:wpforms_builder_lite.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}})}}}})}};return n}(document,window,jQuery);WPFormsBuilderEducation.init();
lite/assets/js/admin/connect.js ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* globals wpforms_admin, wpforms_connect */
2
+ /**
3
+ * Connect functionality.
4
+ *
5
+ * @since 1.5.4
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ var WPFormsConnect = window.WPFormsConnect || ( function( document, window, $ ) {
11
+
12
+ /**
13
+ * Elements reference.
14
+ *
15
+ * @since 1.5.5
16
+ *
17
+ * @type {Object}
18
+ */
19
+ var el = {
20
+ $connectBtn: $( '#wpforms-settings-connect-btn' ),
21
+ $connectKey: $( '#wpforms-settings-upgrade-license-key' )
22
+ };
23
+
24
+ /**
25
+ * Public functions and properties.
26
+ *
27
+ * @since 1.5.5
28
+ *
29
+ * @type {Object}
30
+ */
31
+ var app = {
32
+
33
+ /**
34
+ * Start the engine.
35
+ *
36
+ * @since 1.5.5
37
+ */
38
+ init: function() {
39
+ $( document ).ready( app.ready );
40
+ },
41
+
42
+ /**
43
+ * Document ready.
44
+ *
45
+ * @since 1.5.5
46
+ */
47
+ ready: function() {
48
+ app.events();
49
+ },
50
+
51
+ /**
52
+ * Register JS events.
53
+ *
54
+ * @since 1.5.5
55
+ */
56
+ events: function() {
57
+ app.connectBtnClick();
58
+ },
59
+
60
+ /**
61
+ * Register connect button event.
62
+ *
63
+ * @since 1.5.5
64
+ */
65
+ connectBtnClick: function() {
66
+ el.$connectBtn.on( 'click', function() {
67
+ app.gotoUpgradeUrl();
68
+ } );
69
+ },
70
+
71
+ /**
72
+ * Get the alert arguments in case of Pro already installed.
73
+ *
74
+ * @since 1.5.5
75
+ *
76
+ * @param {object} res Ajax query result object.
77
+ *
78
+ * @returns {object} Alert arguments.
79
+ */
80
+ proAlreadyInstalled: function( res ) {
81
+ var buttons = {
82
+ confirm: {
83
+ text: wpforms_admin.plugin_activate_btn,
84
+ btnClass: 'btn-confirm',
85
+ keys: [ 'enter' ],
86
+ action: function() {
87
+ window.location = window.location;
88
+ },
89
+ },
90
+ };
91
+
92
+ return {
93
+ title: wpforms_admin.almost_done,
94
+ content: res.data.message,
95
+ icon: 'fa fa-check-circle',
96
+ type: 'green',
97
+ buttons: buttons,
98
+ };
99
+ },
100
+
101
+ /**
102
+ * Go to upgrade url.
103
+ *
104
+ * @since 1.5.5
105
+ */
106
+ gotoUpgradeUrl: function() {
107
+ var data = {
108
+ action: 'wpforms_connect_url',
109
+ key: el.$connectKey.val(),
110
+ nonce: wpforms_admin.nonce,
111
+ };
112
+ $.post( wpforms_admin.ajax_url, data )
113
+ .done( function( res ) {
114
+ if ( res.success ) {
115
+ if ( res.data.reload ) {
116
+ $.alert( app.proAlreadyInstalled( res ) );
117
+ return;
118
+ }
119
+ window.location.href = res.data.url;
120
+ return;
121
+ }
122
+ $.alert( {
123
+ title: wpforms_admin.oops,
124
+ content: res.data.message,
125
+ icon: 'fa fa-exclamation-circle',
126
+ type: 'orange',
127
+ buttons: {
128
+ confirm: {
129
+ text: wpforms_admin.ok,
130
+ btnClass: 'btn-confirm',
131
+ keys: [ 'enter' ],
132
+ },
133
+ },
134
+ } );
135
+ } )
136
+ .fail( function( xhr ) {
137
+ app.failAlert( xhr );
138
+ } );
139
+ },
140
+
141
+ /**
142
+ * Alert in case of server error.
143
+ *
144
+ * @since 1.5.5
145
+ *
146
+ * @param {object} xhr XHR object.
147
+ */
148
+ failAlert: function( xhr ) {
149
+
150
+ $.alert( {
151
+ title: wpforms_admin.oops,
152
+ content: wpforms_admin.server_error + '<br>' + xhr.status + ' ' + xhr.statusText + ' ' + xhr.responseText,
153
+ icon: 'fa fa-exclamation-circle',
154
+ type: 'orange',
155
+ buttons: {
156
+ confirm: {
157
+ text: wpforms_admin.ok,
158
+ btnClass: 'btn-confirm',
159
+ keys: [ 'enter' ],
160
+ },
161
+ },
162
+ } );
163
+ },
164
+ };
165
+
166
+ // Provide access to public functions/properties.
167
+ return app;
168
+
169
+ }( document, window, jQuery ) );
170
+
171
+ // Initialize.
172
+ WPFormsConnect.init();
lite/assets/js/admin/connect.min.js ADDED
@@ -0,0 +1 @@
 
1
+ "use strict";var WPFormsConnect=window.WPFormsConnect||function(n,e,t){var o={$connectBtn:t("#wpforms-settings-connect-btn"),$connectKey:t("#wpforms-settings-upgrade-license-key")},r={init:function(){t(n).ready(r.ready)},ready:function(){r.events()},events:function(){r.connectBtnClick()},connectBtnClick:function(){o.$connectBtn.on("click",function(){r.gotoUpgradeUrl()})},proAlreadyInstalled:function(n){var t={confirm:{text:wpforms_admin.plugin_activate_btn,btnClass:"btn-confirm",keys:["enter"],action:function(){e.location=e.location}}};return{title:wpforms_admin.almost_done,content:n.data.message,icon:"fa fa-check-circle",type:"green",buttons:t}},gotoUpgradeUrl:function(){var n={action:"wpforms_connect_url",key:o.$connectKey.val(),nonce:wpforms_admin.nonce};t.post(wpforms_admin.ajax_url,n).done(function(n){if(n.success)return n.data.reload?void t.alert(r.proAlreadyInstalled(n)):void(e.location.href=n.data.url);t.alert({title:wpforms_admin.oops,content:n.data.message,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(n){r.failAlert(n)})},failAlert:function(n){t.alert({title:wpforms_admin.oops,content:wpforms_admin.server_error+"<br>"+n.status+" "+n.statusText+" "+n.responseText,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}};return r}(document,window,jQuery);WPFormsConnect.init();
lite/assets/js/admin/settings-education.js ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* globals wpforms_admin */
2
+ /**
3
+ * WPForms Settings Education function.
4
+ *
5
+ * @since 1.5.5
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ var WPFormsSettingsEducation = window.WPFormsSettingsEducation || ( function( document, window, $ ) {
11
+
12
+ /**
13
+ * Public functions and properties.
14
+ *
15
+ * @since 1.5.5
16
+ *
17
+ * @type {Object}
18
+ */
19
+ var app = {
20
+
21
+ /**
22
+ * Start the engine.
23
+ *
24
+ * @since 1.5.5
25
+ */
26
+ init: function() {
27
+ $( document ).ready( app.ready );
28
+ },
29
+
30
+ /**
31
+ * Document ready.
32
+ *
33
+ * @since 1.5.5
34
+ */
35
+ ready: function() {
36
+ app.events();
37
+ },
38
+
39
+ /**
40
+ * Register JS events.
41
+ *
42
+ * @since 1.5.5
43
+ */
44
+ events: function() {
45
+ app.clickEvents();
46
+ },
47
+
48
+ /**
49
+ * Registers JS click events.
50
+ *
51
+ * @since 1.5.5
52
+ */
53
+ clickEvents: function() {
54
+
55
+ $( document ).on(
56
+ 'click',
57
+ '.wpforms-settings-provider.education-modal',
58
+ function( event ) {
59
+
60
+ var $this = $( this );
61
+
62
+ event.preventDefault();
63
+ event.stopImmediatePropagation();
64
+
65
+ app.upgradeModal( $this.data( 'name' ) );
66
+ }
67
+ );
68
+ },
69
+
70
+ /**
71
+ * Upgrade modal.
72
+ *
73
+ * @since 1.5.5
74
+ *
75
+ * @param {string} feature Feature name.
76
+ */
77
+ upgradeModal: function( feature ) {
78
+
79
+ var message = wpforms_admin.upgrade_message.replace( /%name%/g, feature ),
80
+ upgradeURL = encodeURI( wpforms_admin.upgrade_url + '&utm_content=' + feature.trim() );
81
+
82
+ $.alert( {
83
+ title : feature + ' ' + wpforms_admin.upgrade_title,
84
+ icon : 'fa fa-lock',
85
+ content : message,
86
+ boxWidth: '550px',
87
+ onOpenBefore: function() {
88
+ this.$btnc.after( '<div class="discount-note">' + wpforms_admin.upgrade_bonus + wpforms_admin.upgrade_doc + '</div>' );
89
+ this.$body.find( '.jconfirm-content' ).addClass( 'lite-upgrade' );
90
+ },
91
+ buttons : {
92
+ confirm: {
93
+ text : wpforms_admin.upgrade_button,
94
+ btnClass: 'btn-confirm',
95
+ keys : [ 'enter' ],
96
+ action: function() {
97
+ window.open( upgradeURL, '_blank' );
98
+ $.alert( {
99
+ title : false,
100
+ content : wpforms_admin.upgrade_modal,
101
+ icon : 'fa fa-info-circle',
102
+ type : 'blue',
103
+ boxWidth: '565px',
104
+ buttons : {
105
+ confirm: {
106
+ text : wpforms_admin.ok,
107
+ btnClass: 'btn-confirm',
108
+ keys : [ 'enter' ],
109
+ },
110
+ },
111
+ } );
112
+ },
113
+ },
114
+ },
115
+ } );
116
+ },
117
+ };
118
+
119
+ // Provide access to public functions/properties.
120
+ return app;
121
+
122
+ }( document, window, jQuery ) );
123
+
124
+ // Initialize.
125
+ WPFormsSettingsEducation.init();
lite/assets/js/admin/settings-education.min.js ADDED
@@ -0,0 +1 @@
 
1
+ "use strict";var WPFormsSettingsEducation=window.WPFormsSettingsEducation||function(n,o,i){var e={init:function(){i(n).ready(e.ready)},ready:function(){e.events()},events:function(){e.clickEvents()},clickEvents:function(){i(n).on("click",".wpforms-settings-provider.education-modal",function(n){var t=i(this);n.preventDefault(),n.stopImmediatePropagation(),e.upgradeModal(t.data("name"))})},upgradeModal:function(n){var t=wpforms_admin.upgrade_message.replace(/%name%/g,n),e=encodeURI(wpforms_admin.upgrade_url+"&utm_content="+n.trim());i.alert({title:n+" "+wpforms_admin.upgrade_title,icon:"fa fa-lock",content:t,boxWidth:"550px",onOpenBefore:function(){this.$btnc.after('<div class="discount-note">'+wpforms_admin.upgrade_bonus+wpforms_admin.upgrade_doc+"</div>"),this.$body.find(".jconfirm-content").addClass("lite-upgrade")},buttons:{confirm:{text:wpforms_admin.upgrade_button,btnClass:"btn-confirm",keys:["enter"],action:function(){o.open(e,"_blank"),i.alert({title:!1,content:wpforms_admin.upgrade_modal,icon:"fa fa-info-circle",type:"blue",boxWidth:"565px",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}}}})}};return e}(document,window,jQuery);WPFormsSettingsEducation.init();
lite/assets/js/admin/upgrade.js DELETED
@@ -1,299 +0,0 @@
1
- /* globals wpforms_admin, wpforms_upgrade */
2
- /**
3
- * WPForms Settings functionality.
4
- *
5
- * @since 1.5.3.2
6
- */
7
-
8
- 'use strict';
9
-
10
- var WPFormsUpgrade = window.WPFormsUpgrade || ( function( document, window, $ ) {
11
-
12
- /**
13
- * Elements reference.
14
- *
15
- * @since 1.5.3.2
16
- *
17
- * @type {Object}
18
- */
19
- var el = {
20
- $licenseKey: $( '#wpforms-settings-upgrade-license-key' ),
21
- $licenseKeySpinner: $( '#wpforms-settings-upgrade-license-key ~ .wpforms-spinner' ),
22
- $licenseKeyCont: $( '#wpforms-settings-upgrade-license-key-cont' ),
23
- $upgradeBtn: $( '#wpforms-settings-upgrade-btn' ),
24
- };
25
-
26
- /**
27
- * Public functions and properties.
28
- *
29
- * @since 1.5.1
30
- *
31
- * @type {Object}
32
- */
33
- var app = {
34
-
35
- /**
36
- * Start the engine.
37
- *
38
- * @since 1.5.3.2
39
- */
40
- init: function() {
41
- $( document ).ready( app.ready );
42
- },
43
-
44
- /**
45
- * Document ready.
46
- *
47
- * @since 1.5.3.2
48
- */
49
- ready: function() {
50
- app.displayForm();
51
- app.events();
52
- },
53
-
54
- /**
55
- * Display license key form.
56
- *
57
- * @since 1.5.3.2
58
- */
59
- displayForm: function() {
60
- var key = el.$licenseKey.val();
61
-
62
- if ( key === '' ) {
63
- el.$licenseKeyCont.removeClass( 'wpforms-hide' );
64
- } else {
65
- el.$upgradeBtn.removeClass( 'wpforms-hide' );
66
- }
67
- },
68
-
69
- /**
70
- * Register JS events.
71
- *
72
- * @since 1.5.3.2
73
- */
74
- events: function() {
75
- app.licenseEvent();
76
- app.upgradeBtnClick();
77
- },
78
-
79
- /**
80
- * Register license key input event.
81
- *
82
- * @since 1.5.3.2
83
- */
84
- licenseEvent: function() {
85
- var timeout = null;
86
-
87
- el.$licenseKey.on( 'input', function() {
88
- if ( timeout !== null ) {
89
- clearTimeout( timeout );
90
- }
91
- timeout = setTimeout( function() {
92
- app.licenseVerify();
93
- }, 500 );
94
- } );
95
- },
96
-
97
- /**
98
- * Register upgrade button event.
99
- *
100
- * @since 1.5.3.2
101
- */
102
- upgradeBtnClick: function() {
103
- el.$upgradeBtn.on( 'click', function() {
104
- $.alert( app.licenseVerifySuccess() );
105
- } );
106
- },
107
-
108
- /**
109
- * Verify a license key.
110
- *
111
- * @since 1.5.3.2
112
- */
113
- licenseVerify: function() {
114
- var data = {
115
- action: 'wpforms_verify_license',
116
- nonce: wpforms_admin.nonce,
117
- license: el.$licenseKey.val(),
118
- };
119
- if ( data.license === '' ) {
120
- return;
121
- }
122
- el.$licenseKeySpinner.removeClass( 'wpforms-hide' );
123
- $.post( wpforms_admin.ajax_url, data )
124
- .done( function( res ) {
125
- var alertArgs;
126
- if ( res.success ) {
127
- alertArgs = app.licenseVerifySuccess( res );
128
- } else {
129
- alertArgs = app.licenseVerifyError( res );
130
- }
131
- $.alert( alertArgs );
132
- } )
133
- .fail( function( xhr ) {
134
- app.failAlert( xhr );
135
- } )
136
- .always( function( xhr ) {
137
- el.$licenseKeySpinner.addClass( 'wpforms-hide' );
138
- } );
139
- },
140
-
141
- /**
142
- * Get the alert arguments in case of success.
143
- *
144
- * @since 1.5.3.2
145
- *
146
- * @param {object} res Ajax query result object.
147
- *
148
- * @returns {object} Alert arguments.
149
- */
150
- licenseVerifySuccess: function( res ) {
151
- var buttons = {
152
- confirm: {
153
- text: wpforms_upgrade.upgrd_to_pro_btn_upgrade,
154
- btnClass: 'btn-confirm',
155
- keys: [ 'enter' ],
156
- action: function() {
157
- app.gotoUpgradeUrl();
158
- },
159
- },
160
- cancel: {
161
- text: wpforms_upgrade.upgrd_to_pro_btn_cancel,
162
- keys: [ 'esc' ],
163
- },
164
- };
165
- return {
166
- title: wpforms_upgrade.upgrd_to_pro_license_ok_title,
167
- content: wpforms_upgrade.upgrd_to_pro_license_ok_msg,
168
- icon: 'fa fa-check-circle',
169
- type: 'green',
170
- buttons: buttons,
171
- };
172
- },
173
-
174
- /**
175
- * Get the alert arguments in case of error.
176
- *
177
- * @since 1.5.3.2
178
- *
179
- * @param {object} res Ajax query result object.
180
- *
181
- * @returns {object} Alert arguments.
182
- */
183
- licenseVerifyError: function( res ) {
184
- return {
185
- title: wpforms_upgrade.error,
186
- content: res.data,
187
- icon: 'fa fa-exclamation-circle',
188
- type: 'orange',
189
- buttons: {
190
- confirm: {
191
- text: wpforms_admin.ok,
192
- btnClass: 'btn-confirm',
193
- keys: [ 'enter' ],
194
- },
195
- },
196
- };
197
- },
198
-
199
- /**
200
- * Get the alert arguments in case of Pro already installed.
201
- *
202
- * @since 1.5.3.2
203
- *
204
- * @param {object} res Ajax query result object.
205
- *
206
- * @returns {object} Alert arguments.
207
- */
208
- proAlreadyInstalled: function( res ) {
209
- var buttons = {
210
- confirm: {
211
- text: wpforms_upgrade.upgrd_to_pro_btn_activate,
212
- btnClass: 'btn-confirm',
213
- keys: [ 'enter' ],
214
- action: function() {
215
- window.location = window.location;
216
- },
217
- },
218
- };
219
-
220
- return {
221
- title: wpforms_upgrade.upgrd_to_pro_license_ok_title,
222
- content: res.data.message,
223
- icon: 'fa fa-check-circle',
224
- type: 'green',
225
- buttons: buttons,
226
- };
227
- },
228
-
229
- /**
230
- * Go to upgrade url.
231
- *
232
- * @since 1.5.3.2
233
- */
234
- gotoUpgradeUrl: function() {
235
- var data = {
236
- action: 'wpforms_get_upgrade_url',
237
- nonce: wpforms_admin.nonce,
238
- };
239
- $.post( wpforms_admin.ajax_url, data )
240
- .done( function( res ) {
241
- if ( res.success ) {
242
- if ( res.data.reload ) {
243
- $.alert( app.proAlreadyInstalled( res ) );
244
- return;
245
- }
246
- window.location.href = res.data.url;
247
- return;
248
- }
249
- $.alert( {
250
- title: wpforms_upgrade.error,
251
- content: res.data.message,
252
- icon: 'fa fa-exclamation-circle',
253
- type: 'orange',
254
- buttons: {
255
- confirm: {
256
- text: wpforms_admin.ok,
257
- btnClass: 'btn-confirm',
258
- keys: [ 'enter' ],
259
- },
260
- },
261
- } );
262
- } )
263
- .fail( function( xhr ) {
264
- app.failAlert( xhr );
265
- } );
266
- },
267
-
268
- /**
269
- * Alert in case of server error.
270
- *
271
- * @since 1.5.3.2
272
- *
273
- * @param {object} xhr XHR object.
274
- */
275
- failAlert: function( xhr ) {
276
- console.log( xhr );
277
- $.alert( {
278
- title: wpforms_upgrade.error,
279
- content: wpforms_upgrade.error_intro + ' ' + xhr.status + ' ' + xhr.statusText + ' ' + xhr.responseText,
280
- icon: 'fa fa-exclamation-circle',
281
- type: 'orange',
282
- buttons: {
283
- confirm: {
284
- text: wpforms_admin.ok,
285
- btnClass: 'btn-confirm',
286
- keys: [ 'enter' ],
287
- },
288
- },
289
- } );
290
- },
291
- };
292
-
293
- // Provide access to public functions/properties.
294
- return app;
295
-
296
- }( document, window, jQuery ) );
297
-
298
- // Initialize.
299
- WPFormsUpgrade.init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lite/assets/js/admin/upgrade.min.js DELETED
@@ -1 +0,0 @@
1
- "use strict";var WPFormsUpgrade=window.WPFormsUpgrade||function(e,r,t){var n={$licenseKey:t("#wpforms-settings-upgrade-license-key"),$licenseKeySpinner:t("#wpforms-settings-upgrade-license-key ~ .wpforms-spinner"),$licenseKeyCont:t("#wpforms-settings-upgrade-license-key-cont"),$upgradeBtn:t("#wpforms-settings-upgrade-btn")},o={init:function(){t(e).ready(o.ready)},ready:function(){o.displayForm(),o.events()},displayForm:function(){""===n.$licenseKey.val()?n.$licenseKeyCont.removeClass("wpforms-hide"):n.$upgradeBtn.removeClass("wpforms-hide")},events:function(){o.licenseEvent(),o.upgradeBtnClick()},licenseEvent:function(){var e=null;n.$licenseKey.on("input",function(){null!==e&&clearTimeout(e),e=setTimeout(function(){o.licenseVerify()},500)})},upgradeBtnClick:function(){n.$upgradeBtn.on("click",function(){t.alert(o.licenseVerifySuccess())})},licenseVerify:function(){var e={action:"wpforms_verify_license",nonce:wpforms_admin.nonce,license:n.$licenseKey.val()};""!==e.license&&(n.$licenseKeySpinner.removeClass("wpforms-hide"),t.post(wpforms_admin.ajax_url,e).done(function(e){var n;n=e.success?o.licenseVerifySuccess(e):o.licenseVerifyError(e),t.alert(n)}).fail(function(e){o.failAlert(e)}).always(function(e){n.$licenseKeySpinner.addClass("wpforms-hide")}))},licenseVerifySuccess:function(e){var n={confirm:{text:wpforms_upgrade.upgrd_to_pro_btn_upgrade,btnClass:"btn-confirm",keys:["enter"],action:function(){o.gotoUpgradeUrl()}},cancel:{text:wpforms_upgrade.upgrd_to_pro_btn_cancel,keys:["esc"]}};return{title:wpforms_upgrade.upgrd_to_pro_license_ok_title,content:wpforms_upgrade.upgrd_to_pro_license_ok_msg,icon:"fa fa-check-circle",type:"green",buttons:n}},licenseVerifyError:function(e){return{title:wpforms_upgrade.error,content:e.data,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}}},proAlreadyInstalled:function(e){var n={confirm:{text:wpforms_upgrade.upgrd_to_pro_btn_activate,btnClass:"btn-confirm",keys:["enter"],action:function(){r.location=r.location}}};return{title:wpforms_upgrade.upgrd_to_pro_license_ok_title,content:e.data.message,icon:"fa fa-check-circle",type:"green",buttons:n}},gotoUpgradeUrl:function(){var e={action:"wpforms_get_upgrade_url",nonce:wpforms_admin.nonce};t.post(wpforms_admin.ajax_url,e).done(function(e){if(e.success)return e.data.reload?void t.alert(o.proAlreadyInstalled(e)):void(r.location.href=e.data.url);t.alert({title:wpforms_upgrade.error,content:e.data.message,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}).fail(function(e){o.failAlert(e)})},failAlert:function(e){console.log(e),t.alert({title:wpforms_upgrade.error,content:wpforms_upgrade.error_intro+" "+e.status+" "+e.statusText+" "+e.responseText,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_admin.ok,btnClass:"btn-confirm",keys:["enter"]}}})}};return o}(document,window,jQuery);WPFormsUpgrade.init();
 
lite/wpforms-lite.php CHANGED
@@ -667,7 +667,7 @@ class WPForms_Lite {
667
  <div class="form-details-actions">
668
  <a href="#" class="form-details-actions-edit"><span class="dashicons dashicons-edit"></span> Edit This Form</a>
669
  <a href="#" class="form-details-actions-preview" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-visibility"></span> Preview Form</a>
670
- <a href="#" class="form-details-actions-export"><span class="dashicons dashicons-migrate"></span> Download Export (CSV)</a>
671
  <a href="#" class="form-details-actions-read"><span class="dashicons dashicons-marker"></span> Mark All Read</a>
672
  </div>
673
  </div>
667
  <div class="form-details-actions">
668
  <a href="#" class="form-details-actions-edit"><span class="dashicons dashicons-edit"></span> Edit This Form</a>
669
  <a href="#" class="form-details-actions-preview" target="_blank" rel="noopener noreferrer"><span class="dashicons dashicons-visibility"></span> Preview Form</a>
670
+ <a href="#" class="form-details-actions-export"><span class="dashicons dashicons-migrate"></span> Export All (CSV)</a>
671
  <a href="#" class="form-details-actions-read"><span class="dashicons dashicons-marker"></span> Mark All Read</a>
672
  </div>
673
  </div>
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: wpforms, jaredatch, smub, slaFFik
3
  Tags: contact form, contact form plugin, forms, form builder, custom form, contact button, contact me, custom contact form, form manager, form, forms builder, forms creator, captcha, recaptcha, Akismet, email form, web form, feedback form, payment form, survey form, donation form, email submit form, message form, mailchimp, mailchimp form, aweber, aweber form, paypal, paypal form, stripe, stripe form, getresponse, getresponse form, email subscription, contact form widget, user registration form, wordpress registration, wordpress login form, feedback
4
  Requires at least: 4.8
5
  Tested up to: 5.2
6
- Stable tag: 1.5.4.2
7
  Requires PHP: 5.3.3
8
  License: GNU General Public License v2.0 or later
9
 
@@ -74,32 +74,60 @@ See what one business owner has to say about WPForms' contact form:
74
 
75
  Along with contact form, you can also use WPForms to create surveys and polls.
76
 
77
- Our <a href="https://wpforms.com/addons/surveys-and-polls-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">WordPress Survey plugin addon</a> comes with smart survey fields including likert scale, star ratings, multiple choice, Net Promoter Score (NPS), and more.
78
 
79
  WPForms offer the best-in class survey reporting. You can use our interactive reports to customize the graphs, export them for your presentations, and even display the aggregate results to your users.
80
 
81
- The best part about WPForms survey reports is that it can retroactively work on any old contact form created with WPForms.
82
 
83
- You can also use the surveys & polls addon to easily create a poll on your site. Our poll feature offers real-time reports, so you can share poll results with the user immediately after they submit their vote.
 
 
84
 
85
  Just like the contact form, you can embed your surveys and polls inside any post, page, or widget area in WordPress.
86
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  = Payment Form, Donation Form, Booking Form, and More =
88
 
89
  While WPForms started out as a contact form plugin, it has evolved into a powerful forms solution that you can use to create a payment form, donation form, registration form, online booking form, and more.
90
 
91
- WPForms integrates with both PayPal and Stripe to make it easy for you to accept credit card payments online. It even comes with a signature field to collect user signature on your WordPress forms.
 
 
 
 
92
 
93
- You can do all of this while still using the same easy-to-use contact form builder that's loved by over 1 million users.
94
 
95
  >I am so impressed with this plugin. I decided to give it a shot over some of the other form plugins, and I am so glad I did. It works well, is so easy to use and customize. The support is amazing on top of it all. I got the pro version because I was so pleased. Highly recommend.<br>
96
  > Micky73 - WordPress user
97
 
 
 
 
 
 
 
 
 
 
 
98
  = Easy to Customize and Extend =
99
 
100
- You can easily customize your contact forms with our section dividers, HTML blocks, an custom CSS.
101
 
102
- We also knew that our developer friends may want to extend contact forms further. That's why WPForms come with tons of hooks and filters to create custom functionality.
103
 
104
  Since contact forms are essential for marketing, WPForms is a must have plugin for every website!
105
 
@@ -165,7 +193,8 @@ If you like this plugin, then consider checking out our other projects:
165
  * <a href="https://optinmonster.com/" rel="friend" title="OptinMonster">OptinMonster</a> - Get More Email Subscribers with the most popular conversion optimization plugin for WordPress.
166
  * <a href="https://www.monsterinsights.com/" rel="friend" title="MonsterInsights">MonsterInsights</a> - See the Stats that Matter and Grow Your Business with Confidence. Best Google Analytics Plugin for WordPress.
167
  * <a href="https://www.seedprod.com/" rel="friend" title="SeedProd">SeedProd</a> - Jumpstart your website with the #1 Coming Soon & Maintenance Mode Plugin for WordPress.
168
- * <a href="https://wordpress.org/plugins/wp-mail-smtp/">WP Mail SMTP</a> - Improve email deliverability for your contact form with the most popular SMTP plugin for WordPress.
 
169
 
170
  Visit <a href="http://www.wpbeginner.com/" rel="friend" title="WPBeginner">WPBeginner</a> to learn from our <a href="http://www.wpbeginner.com/category/wp-tutorials/" rel="friend" title="WordPress Tutorials">WordPress Tutorials</a> and find out about other <a href="http://www.wpbeginner.com/category/plugins/" rel="friend" title="Best WordPress Plugins">best WordPress plugins</a>.
171
 
@@ -201,60 +230,23 @@ Absolutely not. You can create and manage forms without any coding knowledge (10
201
  WPForms drag & drop form builder combined with our addons is the most powerful WordPress contact form plugin in the market. Here are some types of WordPress forms you can create:
202
 
203
  * Simple Contact Forms
204
- * Advanced Contact Forms
205
- * Custom Contact Forms
206
- * Multi-Page Contact Forms with Progress Bar
207
- * Dynamic Contact Forms (where fields change based on user's answers)
208
- * Request a Quote Contact Form
209
  * Job Application Contact Form
210
  * Feedback Survey Contact Form
211
  * Make a Suggestion Contact Form
212
- * Testimonials Contact Form
213
  * Change Request Forms
214
  * Online Booking Forms
215
  * Event Booking Form
216
- * Online RSVP Forms
217
- * Custom WordPress User Registration Forms (Great for membership sites)
218
- * Custom WordPress Login Forms
219
- * WordPress Post Submission Forms (Great for Guest Posts)
220
- * Credit Card Payment Forms
221
- * PayPal Payment Form
222
- * Stripe Payment Form
223
- * Make a Donation Forms
224
- * T-Shirt Order Forms
225
- * Product Purchase Forms
226
- * Lead Capture Forms
227
- * Newsletter Signup Forms
228
- * MailChimp Forms
229
- * AWeber Forms
230
- * Constant Contact Forms
231
- * GetResponse Signup Forms
232
- * Campaign Monitor Forms
233
- * Drip Forms
234
  * Video Release Forms
235
- * Partnership Agreement Forms
236
  * PTO Request Contact Form
237
- * Online Petition Form
238
- * Contact Forms that Require a Signature
239
- * Custom Signature Forms
240
  * Maintenance Request Contact Form
241
  * Scholarship Application Forms
242
  * File Download Forms
243
  * Employment Verification Forms
244
- * Employee Feedback Form
245
- * Customer Feedback Form
246
- * Generic Feedback Form
247
  * Make a Referral Contact Form
248
  * Volunteer Registration Contact Form
249
- * Membership Registration Forms
250
- * Address Book Contact Forms
251
- * Custom Survey Forms like Survey Monkey
252
- * Poll Forms
253
  * Offline Contact Form
254
- * Password-Protected Contact Form
255
- * Members Only Contact Form
256
- * Conversational Forms like Typeform
257
- * Custom Form Landing Page like Google Forms and Wufoo
258
 
259
  = Which Form Fields Does WPForms offer? =
260
 
@@ -303,7 +295,7 @@ Here is a list of our Payment Fields that will help you create a order form, don
303
 
304
  = Can I integrate WPForms with my CRM or Email Marketing Service? =
305
 
306
- Yes, WPForms offers seamless integration with over 1,000+ popular marketing and CRM software.
307
 
308
  You can easily send data from your contact form and other WordPress forms to your favorite CRM, email newsletter, and other marketing platforms.
309
 
@@ -347,7 +339,9 @@ Using our Zapier integration, you can easily connect WPForms with over 1000+ mar
347
  * Acuity Scheduling
348
  * Quickbooks Online
349
 
350
- WPForms was voted Zapier's 8th fastest growing app in the world.
 
 
351
 
352
  = Can I create a Payment Form with WPForms =
353
 
@@ -407,6 +401,16 @@ Syed Balkhi
407
 
408
  == Changelog ==
409
 
 
 
 
 
 
 
 
 
 
 
410
  = 1.5.4.2 =
411
  - Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`.
412
  - Fixed: About Us page behaviour when WP Mail SMTP Pro is installed.
@@ -512,4 +516,4 @@ Syed Balkhi
512
  - Fixed: reCAPTCHA compatibility when form is inside OptinMonster popup.
513
  - Fixed: Gutenberg block returning error if no forms have been created.
514
 
515
- [See changelog for all versions](https://plugins.svn.wordpress.org/wpforms-lite/trunk/changelog.txt).
3
  Tags: contact form, contact form plugin, forms, form builder, custom form, contact button, contact me, custom contact form, form manager, form, forms builder, forms creator, captcha, recaptcha, Akismet, email form, web form, feedback form, payment form, survey form, donation form, email submit form, message form, mailchimp, mailchimp form, aweber, aweber form, paypal, paypal form, stripe, stripe form, getresponse, getresponse form, email subscription, contact form widget, user registration form, wordpress registration, wordpress login form, feedback
4
  Requires at least: 4.8
5
  Tested up to: 5.2
6
+ Stable tag: 1.5.5
7
  Requires PHP: 5.3.3
8
  License: GNU General Public License v2.0 or later
9
 
74
 
75
  Along with contact form, you can also use WPForms to create surveys and polls.
76
 
77
+ Our <a href="https://wpforms.com/addons/surveys-and-polls-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">WordPress Survey plugin addon</a> comes with smart survey fields including likert scale, star ratings, multiple choice, Net Promoter Score (NPS), and more, so you can create custom survey forms like Survey Monkey (without the high costs).
78
 
79
  WPForms offer the best-in class survey reporting. You can use our interactive reports to customize the graphs, export them for your presentations, and even display the aggregate results to your users.
80
 
81
+ The best part about WPForms survey reports is that it can retroactively work on any old contact form or feedback survey contact form created with WPForms.
82
 
83
+ Thousands of businesses love WPForms surveys for creating employee feedback form, customer feedback form, online petition form, and more.
84
+
85
+ You can also use the surveys & polls addon to easily create a poll on your site. To save you time when creating a user poll, we have added a built-in poll forms template. Our poll feature offers real-time reports, so you can share poll results with the user immediately after they submit their vote.
86
 
87
  Just like the contact form, you can embed your surveys and polls inside any post, page, or widget area in WordPress.
88
 
89
+ = Membership and Default WordPress Forms =
90
+
91
+ Aside from building simple contact forms which every WordPress site needs, WPForms also helps you create better default WordPress forms.
92
+
93
+ For example, you can use WPForms to create custom WordPress login forms and custom WordPress user registration forms which are great for <a href="https://www.wpbeginner.com/wp-tutorials/ultimate-guide-to-creating-a-wordpress-membership-site/">membership sites</a>.
94
+
95
+ For membership sites, you can also use WPForms to create a password-protected contact form or even a members only contact form which is restricited to logged-in users only.
96
+
97
+ Even if you're not using a WordPress membership plugin, you can use WPForms to create membership registration forms, online RSVP forms, and other address book contact forms.
98
+
99
+ Bloggers and publishers can use our WordPress post submission forms to accept guest posts, testimonials contact form to collect testiomnials, and partnership agreement forms to grow their business.
100
+
101
  = Payment Form, Donation Form, Booking Form, and More =
102
 
103
  While WPForms started out as a contact form plugin, it has evolved into a powerful forms solution that you can use to create a payment form, donation form, registration form, online booking form, and more.
104
 
105
+ WPForms integrates with both PayPal and Stripe, so you can easily create a credit card payment form to accept payments on your website. If you're using SSL, then you can use our Stripe Payment form to accept credit card payments. Alternatively you can use our PayPal payment form to make a donation form and accept payments online.
106
+
107
+ Aside from simple order forms, business owners also use WPForms to create custom product purchase forms, t-shit order forms, online booking forms, and more.
108
+
109
+ We understand that sometimes you may need to create a contact form that require a signature. WPForms comes with a signature field to collect user signature on your WordPress forms or even create custom signature forms.
110
 
111
+ You can do all of this while still using the same easy-to-use contact form builder that's loved by over 2 million users.
112
 
113
  >I am so impressed with this plugin. I decided to give it a shot over some of the other form plugins, and I am so glad I did. It works well, is so easy to use and customize. The support is amazing on top of it all. I got the pro version because I was so pleased. Highly recommend.<br>
114
  > Micky73 - WordPress user
115
 
116
+ = Forms that are Optimized for Conversion and Results =
117
+
118
+ With our Form Pages addon, you can create distraction-free custom form landing pages like Google Forms and Wufoo right inside WordPress, so you can increase conversions without the high costs (<a href="https://wpforms.com/addons/form-pages-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">See Form Pages Demo</a>).
119
+
120
+ To improve form completion rate, we created Conversational Forms&reg; which helps you make your generic feedback form and other custom contact forms feel more human by adding an interactive form layout. Our conversational forms are similar to Typeform without the high subscription costs (<a href="https://wpforms.com/addons/conversational-forms-addon/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">See Conversaional Forms Demo</a>).
121
+
122
+ WPForms also has other conversion optimization features such as our smart form logic that lets you create dynamic contact forms where fields change based on user's answer, multi-page contact forms with progress bar, and other advanced contact forms.
123
+
124
+ WPForms form analytics integration with MonsterInsights allow you to easily track your lead capture forms, newsletter signup forms, request a quote contact form, and other important forms on your site.
125
+
126
  = Easy to Customize and Extend =
127
 
128
+ You can easily customize your contact forms with our section dividers, HTML blocks, and custom CSS.
129
 
130
+ We also knew that our developer friends may want to extend simple contact forms further. That's why WPForms come with tons of hooks and filters to create custom functionality.
131
 
132
  Since contact forms are essential for marketing, WPForms is a must have plugin for every website!
133
 
193
  * <a href="https://optinmonster.com/" rel="friend" title="OptinMonster">OptinMonster</a> - Get More Email Subscribers with the most popular conversion optimization plugin for WordPress.
194
  * <a href="https://www.monsterinsights.com/" rel="friend" title="MonsterInsights">MonsterInsights</a> - See the Stats that Matter and Grow Your Business with Confidence. Best Google Analytics Plugin for WordPress.
195
  * <a href="https://www.seedprod.com/" rel="friend" title="SeedProd">SeedProd</a> - Jumpstart your website with the #1 Coming Soon & Maintenance Mode Plugin for WordPress.
196
+ * <a href="https://wpmailsmtp.com">WP Mail SMTP</a> - Improve email deliverability for your contact form with the most popular SMTP plugin for WordPress.
197
+ * <a href="https://rafflepress.com/">RafflePress</a> - Best WordPress giveaway and contest plugin.
198
 
199
  Visit <a href="http://www.wpbeginner.com/" rel="friend" title="WPBeginner">WPBeginner</a> to learn from our <a href="http://www.wpbeginner.com/category/wp-tutorials/" rel="friend" title="WordPress Tutorials">WordPress Tutorials</a> and find out about other <a href="http://www.wpbeginner.com/category/plugins/" rel="friend" title="Best WordPress Plugins">best WordPress plugins</a>.
200
 
230
  WPForms drag & drop form builder combined with our addons is the most powerful WordPress contact form plugin in the market. Here are some types of WordPress forms you can create:
231
 
232
  * Simple Contact Forms
 
 
 
 
 
233
  * Job Application Contact Form
234
  * Feedback Survey Contact Form
235
  * Make a Suggestion Contact Form
 
236
  * Change Request Forms
237
  * Online Booking Forms
238
  * Event Booking Form
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  * Video Release Forms
 
240
  * PTO Request Contact Form
 
 
 
241
  * Maintenance Request Contact Form
242
  * Scholarship Application Forms
243
  * File Download Forms
244
  * Employment Verification Forms
 
 
 
245
  * Make a Referral Contact Form
246
  * Volunteer Registration Contact Form
 
 
 
 
247
  * Offline Contact Form
248
+
249
+ To see a full list, visit our <a href="https://wpforms.com/demo/?utm_source=wprepo&utm_medium=link&utm_campaign=liteversion" rel="friend">Form Template Gallery</a> which has over 150+ pre-made contact form templates.
 
 
250
 
251
  = Which Form Fields Does WPForms offer? =
252
 
295
 
296
  = Can I integrate WPForms with my CRM or Email Marketing Service? =
297
 
298
+ Yes, WPForms offers seamless integration with over 1,000+ popular <a href="https://www.wpbeginner.com/showcase/best-email-marketing-services/">email marketing</a> and <a href="https://www.wpbeginner.com/showcase/best-crm-software-for-small-businesses-compared/">CRM software</a>.
299
 
300
  You can easily send data from your contact form and other WordPress forms to your favorite CRM, email newsletter, and other marketing platforms.
301
 
339
  * Acuity Scheduling
340
  * Quickbooks Online
341
 
342
+ See all <a href="https://zapier.com/apps/wpforms/integrations">WPForms Zapier Integrations</a>.
343
+
344
+ Note: WPForms was voted Zapier's 8th fastest growing app in the world.
345
 
346
  = Can I create a Payment Form with WPForms =
347
 
401
 
402
  == Changelog ==
403
 
404
+ = 1.5.5 =
405
+ - Added: WPForms details inside Site Health Info reports (Tools > Site Health > Info).
406
+ - Added: Filter `wpforms_emails_summaries_is_disabled` to easily disable Email Summaries functionality.
407
+ - Added: New smart tag: `{field_html_id="42"}` - that will postprocess field value and display its HTML representation.
408
+ - Changed: Improve `wpforms_get_ip()` IP detection and related `{user_ip}` smart-tag value.
409
+ - Fixed: Giving access to WPForms for Editors (and other roles) should give access to dashboard widget as well.
410
+ - Fixed: Add 'attr' property to 'input_container' for radio/checkbox-based fields.
411
+ - Fixed: Various typos.
412
+ - Fixed: WP Mail SMTP plugin description on About us page.
413
+
414
  = 1.5.4.2 =
415
  - Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`.
416
  - Fixed: About Us page behaviour when WP Mail SMTP Pro is installed.
516
  - Fixed: reCAPTCHA compatibility when form is inside OptinMonster popup.
517
  - Fixed: Gutenberg block returning error if no forms have been created.
518
 
519
+ [See changelog for all versions](https://plugins.svn.wordpress.org/wpforms-lite/trunk/changelog.txt).
src/Admin/Loader.php CHANGED
@@ -37,10 +37,14 @@ class Loader {
37
  public function __construct() {
38
 
39
  $core_class_names = array(
 
40
  'DashboardWidget',
41
  'Challenge',
42
  'Builder\Education',
 
43
  'Entries\PrintPreview',
 
 
44
  );
45
 
46
  $class_names = \apply_filters( 'wpforms_admin_classes_available', $core_class_names );
37
  public function __construct() {
38
 
39
  $core_class_names = array(
40
+ 'Connect',
41
  'DashboardWidget',
42
  'Challenge',
43
  'Builder\Education',
44
+ 'Settings\Education',
45
  'Entries\PrintPreview',
46
+ 'Entries\DefaultScreen',
47
+ 'Entries\Export\Export',
48
  );
49
 
50
  $class_names = \apply_filters( 'wpforms_admin_classes_available', $core_class_names );
src/Emails/Summaries.php CHANGED
@@ -21,7 +21,7 @@ class Summaries {
21
 
22
  $this->hooks();
23
 
24
- $summaries_disabled = $this->is_summaries_disabled();
25
 
26
  if ( $summaries_disabled && \wp_next_scheduled( 'wpforms_email_summaries_cron' ) ) {
27
  \wp_clear_scheduled_hook( 'wpforms_email_summaries_cron' );
@@ -57,7 +57,7 @@ class Summaries {
57
 
58
  \add_filter( 'wpforms_settings_defaults', array( $this, 'disable_summaries_setting' ) );
59
 
60
- if ( ! $this->is_summaries_disabled() ) {
61
  \add_action( 'init', array( $this, 'preview' ) );
62
  \add_filter( 'cron_schedules', array( $this, 'add_weekly_cron_schedule' ) );
63
  \add_action( 'wpforms_email_summaries_cron', array( $this, 'cron' ) );
@@ -71,9 +71,9 @@ class Summaries {
71
  *
72
  * @return bool
73
  */
74
- protected function is_summaries_disabled() {
75
 
76
- return (bool) \wpforms_setting( 'email-summaries-disable' );
77
  }
78
 
79
  /**
@@ -87,6 +87,10 @@ class Summaries {
87
  */
88
  public function disable_summaries_setting( $settings ) {
89
 
 
 
 
 
90
  $url = \add_query_arg(
91
  array(
92
  'wpforms_email_template' => 'summary',
@@ -97,7 +101,7 @@ class Summaries {
97
 
98
  $desc = \esc_html__( 'Disable Email Summaries weekly delivery.', 'wpforms-lite' );
99
 
100
- if ( ! $this->is_summaries_disabled() ) {
101
  $desc .= '<br><a href="' . $url . '" target="_blank">' . \esc_html__( 'View Email Summary Example', 'wpforms-lite' ) . '</a>';
102
  }
103
 
21
 
22
  $this->hooks();
23
 
24
+ $summaries_disabled = $this->is_disabled();
25
 
26
  if ( $summaries_disabled && \wp_next_scheduled( 'wpforms_email_summaries_cron' ) ) {
27
  \wp_clear_scheduled_hook( 'wpforms_email_summaries_cron' );
57
 
58
  \add_filter( 'wpforms_settings_defaults', array( $this, 'disable_summaries_setting' ) );
59
 
60
+ if ( ! $this->is_disabled() ) {
61
  \add_action( 'init', array( $this, 'preview' ) );
62
  \add_filter( 'cron_schedules', array( $this, 'add_weekly_cron_schedule' ) );
63
  \add_action( 'wpforms_email_summaries_cron', array( $this, 'cron' ) );
71
  *
72
  * @return bool
73
  */
74
+ protected function is_disabled() {
75
 
76
+ return (bool) apply_filters( 'wpforms_emails_summaries_is_disabled', (bool) \wpforms_setting( 'email-summaries-disable' ) );
77
  }
78
 
79
  /**
87
  */
88
  public function disable_summaries_setting( $settings ) {
89
 
90
+ if ( (bool) apply_filters( 'wpforms_emails_summaries_is_disabled', false ) ) {
91
+ return $settings;
92
+ }
93
+
94
  $url = \add_query_arg(
95
  array(
96
  'wpforms_email_template' => 'summary',
101
 
102
  $desc = \esc_html__( 'Disable Email Summaries weekly delivery.', 'wpforms-lite' );
103
 
104
+ if ( ! $this->is_disabled() ) {
105
  $desc .= '<br><a href="' . $url . '" target="_blank">' . \esc_html__( 'View Email Summary Example', 'wpforms-lite' ) . '</a>';
106
  }
107
 
src/Integrations/Gutenberg/FormSelector.php CHANGED
@@ -104,7 +104,7 @@ class FormSelector implements IntegrationInterface {
104
  'show_title' => \esc_html__( 'Show Title', 'wpforms-lite' ),
105
  'show_description' => \esc_html__( 'Show Description', 'wpforms-lite' ),
106
  'panel_notice_head' => \esc_html__( 'Heads up!', 'wpforms-lite' ),
107
- 'panel_notice_text' => \esc_html__( 'Dont forget to test your form.', 'wpforms-lite' ),
108
  'panel_notice_link' => \esc_html__( 'Check out our complete guide!', 'wpforms-lite' ),
109
  );
110
 
104
  'show_title' => \esc_html__( 'Show Title', 'wpforms-lite' ),
105
  'show_description' => \esc_html__( 'Show Description', 'wpforms-lite' ),
106
  'panel_notice_head' => \esc_html__( 'Heads up!', 'wpforms-lite' ),
107
+ 'panel_notice_text' => \esc_html__( 'Do not forget to test your form.', 'wpforms-lite' ),
108
  'panel_notice_link' => \esc_html__( 'Check out our complete guide!', 'wpforms-lite' ),
109
  );
110
 
src/Integrations/Loader.php CHANGED
@@ -38,6 +38,7 @@ class Loader {
38
 
39
  $core_integrations = array(
40
  new Gutenberg\FormSelector(),
 
41
  new WPMailSMTP\Notifications(),
42
  );
43
 
38
 
39
  $core_integrations = array(
40
  new Gutenberg\FormSelector(),
41
+ new SiteHealth\SiteHealth(),
42
  new WPMailSMTP\Notifications(),
43
  );
44
 
src/Integrations/SiteHealth/SiteHealth.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPForms\Integrations\SiteHealth;
4
+
5
+ use WPForms\Integrations\IntegrationInterface;
6
+
7
+ /**
8
+ * Site Health WPForms Info.
9
+ *
10
+ * @since 1.5.5
11
+ * @author WPForms
12
+ * @package WPForms\Integrations\SiteHealth
13
+ * @license GPL-2.0+
14
+ * @copyright Copyright (c) 2019, WPForms LLC
15
+ */
16
+ class SiteHealth implements IntegrationInterface {
17
+
18
+ /**
19
+ * Indicates if current integration is allowed to load.
20
+ *
21
+ * @since 1.5.5
22
+ *
23
+ * @return bool
24
+ */
25
+ public function allow_load() {
26
+
27
+ global $wp_version;
28
+
29
+ return version_compare( $wp_version, '5.2', '>=' );
30
+ }
31
+
32
+ /**
33
+ * Loads an integration.
34
+ *
35
+ * @since 1.5.5
36
+ */
37
+ public function load() {
38
+
39
+ $this->hooks();
40
+ }
41
+
42
+ /**
43
+ * Integration hooks.
44
+ *
45
+ * @since 1.5.5
46
+ */
47
+ protected function hooks() {
48
+
49
+ \add_filter( 'debug_information', array( $this, 'add_info_section' ) );
50
+ }
51
+
52
+ /**
53
+ * Add WPForms section to .
54
+ *
55
+ * @since 1.5.5
56
+ *
57
+ * @param array $debug_info Array of all information.
58
+ *
59
+ * @return array Array with added WPForms info section.
60
+ */
61
+ public function add_info_section( $debug_info ) {
62
+
63
+ $wpforms = array(
64
+ 'label' => 'WPForms',
65
+ 'fields' => array(
66
+ 'version' => array(
67
+ 'label' => esc_html__( 'Version', 'wpforms-lite' ),
68
+ 'value' => WPFORMS_VERSION,
69
+ ),
70
+ ),
71
+ );
72
+
73
+ // License key type.
74
+ $wpforms['fields']['license'] = array(
75
+ 'label' => esc_html__( 'License key type', 'wpforms-lite' ),
76
+ 'value' => wpforms_setting( 'type', '', 'wpforms_license' ),
77
+ );
78
+
79
+ // Install date.
80
+ $activated = get_option( 'wpforms_activated', array() );
81
+ if ( ! empty( $activated['lite'] ) ) {
82
+ $date = $activated['lite'] + ( get_option( 'gmt_offset' ) * 3600 );
83
+
84
+ $wpforms['fields']['lite'] = array(
85
+ 'label' => esc_html__( 'Lite install date', 'wpforms-lite' ),
86
+ 'value' => date_i18n( esc_html__( 'M j, Y @ g:ia' ), $date ),
87
+ );
88
+ }
89
+ if ( ! empty( $activated['pro'] ) ) {
90
+ $date = $activated['pro'] + ( get_option( 'gmt_offset' ) * 3600 );
91
+
92
+ $wpforms['fields']['pro'] = array(
93
+ 'label' => esc_html__( 'Pro install date', 'wpforms-lite' ),
94
+ 'value' => date_i18n( esc_html__( 'M j, Y @ g:ia' ), $date ),
95
+ );
96
+ }
97
+
98
+ // DB tables.
99
+ global $wpdb;
100
+ $results = $wpdb->get_results( "SHOW TABLES LIKE '" . $wpdb->prefix . "wpforms_%'", 'ARRAY_N' ); // phpcs:ignore
101
+ $results = wp_list_pluck( $results, 0 );
102
+ $db_tables = empty( $results ) ? esc_html__( 'Not found', 'wpforms-lite' ) : implode( ', ', $results );
103
+
104
+ $wpforms['fields']['db_tables'] = array(
105
+ 'label' => esc_html__( 'DB tables', 'wpforms-lite' ),
106
+ 'value' => $db_tables,
107
+ );
108
+
109
+ // Total forms.
110
+ $wpforms['fields']['total_forms'] = array(
111
+ 'label' => esc_html__( 'Total forms', 'wpforms-lite' ),
112
+ 'value' => wp_count_posts( 'wpforms' )->publish,
113
+ );
114
+
115
+ // Total entries.
116
+ if ( wpforms()->pro ) {
117
+ $wpforms['fields']['total_entries'] = array(
118
+ 'label' => esc_html__( 'Total entries', 'wpforms-lite' ),
119
+ 'value' => wpforms()->entry->get_entries( array(), true ),
120
+ );
121
+ } else {
122
+ $forms = \wpforms()->form->get( '', array( 'fields' => 'ids' ) );
123
+
124
+ if ( empty( $forms ) || ! \is_array( $forms ) ) {
125
+ $forms = array();
126
+ }
127
+
128
+ $count = 0;
129
+
130
+ foreach ( $forms as $form_id ) {
131
+ $count += (int) \get_post_meta( $form_id, 'wpforms_entries_count', true );
132
+ }
133
+
134
+ $wpforms['fields']['total_entries'] = array(
135
+ 'label' => esc_html__( 'Total submissions (since v1.5.0)', 'wpforms-lite' ),
136
+ 'value' => $count,
137
+ );
138
+ }
139
+
140
+ $debug_info[] = $wpforms;
141
+
142
+ return $debug_info;
143
+ }
144
+ }
src/Lite/Admin/Builder/Education.php CHANGED
@@ -36,6 +36,8 @@ class Education {
36
  return;
37
  }
38
 
 
 
39
  \add_filter( 'wpforms_lite_builder_strings', array( $this, 'js_strings' ) );
40
 
41
  \add_action( 'wpforms_builder_enqueues_before', array( $this, 'enqueues' ) );
@@ -318,7 +320,33 @@ class Education {
318
  return $fields;
319
  }
320
 
321
- /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  * Display settings panels.
323
  *
324
  * @since 1.5.1
@@ -394,38 +422,7 @@ class Education {
394
  */
395
  public function providers() {
396
 
397
- $providers = array(
398
- array(
399
- 'name' => 'AWeber',
400
- 'slug' => 'aweber',
401
- 'img' => 'addon-icon-aweber.png',
402
- ),
403
- array(
404
- 'name' => 'Campaign Monitor',
405
- 'slug' => 'campaign-monitor',
406
- 'img' => 'addon-icon-campaign-monitor.png',
407
- ),
408
- array(
409
- 'name' => 'Drip',
410
- 'slug' => 'drip',
411
- 'img' => 'addon-icon-drip.png',
412
- ),
413
- array(
414
- 'name' => 'GetResponse',
415
- 'slug' => 'getresponse',
416
- 'img' => 'addon-icon-getresponse.png',
417
- ),
418
- array(
419
- 'name' => 'MailChimp',
420
- 'slug' => 'mailchimp',
421
- 'img' => 'addon-icon-mailchimp.png',
422
- ),
423
- array(
424
- 'name' => 'Zapier',
425
- 'slug' => 'zapier',
426
- 'img' => 'addon-icon-zapier.png',
427
- ),
428
- );
429
 
430
  foreach ( $providers as $provider ) {
431
 
36
  return;
37
  }
38
 
39
+ \add_action( 'wpforms_field_options_after_advanced-options', array( $this, 'field_conditional_logic' ), 10, 2 );
40
+
41
  \add_filter( 'wpforms_lite_builder_strings', array( $this, 'js_strings' ) );
42
 
43
  \add_action( 'wpforms_builder_enqueues_before', array( $this, 'enqueues' ) );
320
  return $fields;
321
  }
322
 
323
+ /**
324
+ * Displays conditional logic settings section for fields inside the form builder.
325
+ *
326
+ * @since 1.5.5
327
+ *
328
+ * @param array $field Field data.
329
+ * @param object $instance Builder instance.
330
+ */
331
+ public function field_conditional_logic( $field, $instance ) {
332
+
333
+ // Certain fields don't support conditional logic.
334
+ if ( in_array( $field['type'], array( 'pagebreak', 'divider', 'hidden' ), true ) ) {
335
+ return;
336
+ }
337
+ ?>
338
+
339
+ <div class="wpforms-field-option-group">
340
+
341
+ <a href="#" class="wpforms-field-option-group-toggle upgrade-modal" data-name="Conditional Logic">
342
+ <?php esc_html_e( 'Conditionals', 'wpforms-lite' ); ?> <i class="fa fa-angle-right"></i>
343
+ </a>
344
+
345
+ </div>
346
+ <?php
347
+ }
348
+
349
+ /**
350
  * Display settings panels.
351
  *
352
  * @since 1.5.1
422
  */
423
  public function providers() {
424
 
425
+ $providers = wpforms_get_providers_all();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
426
 
427
  foreach ( $providers as $provider ) {
428
 
src/Lite/Admin/Connect.php ADDED
@@ -0,0 +1,301 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPForms\Lite\Admin;
4
+
5
+ /**
6
+ * WPForms Connect.
7
+ *
8
+ * WPForms Connect is our service that makes it easy for non-techy users to
9
+ * upgrade to WPForms Pro without having to manually install WPForms Pro plugin.
10
+ *
11
+ * @package WPForms\Admin
12
+ * @author WPForms
13
+ * @since 1.5.5
14
+ * @license GPL-2.0+
15
+ * @copyright Copyright (c) 2019, WPForms LLC
16
+ */
17
+ class Connect {
18
+
19
+ /**
20
+ * Constructor.
21
+ *
22
+ * @since 1.5.5
23
+ */
24
+ public function __construct() {
25
+
26
+ $this->hooks();
27
+ }
28
+
29
+ /**
30
+ * Hooks.
31
+ *
32
+ * @since 1.5.5
33
+ */
34
+ public function hooks() {
35
+
36
+ \add_action( 'wpforms_settings_enqueue', array( $this, 'settings_enqueues' ) );
37
+
38
+ \add_action( 'wp_ajax_wpforms_connect_url', array( $this, 'generate_url' ) );
39
+
40
+ \add_action( 'wp_ajax_nopriv_wpforms_connect_process', array( $this, 'process' ) );
41
+ }
42
+
43
+ /**
44
+ * Settings page enqueues.
45
+ *
46
+ * @since 1.5.5
47
+ */
48
+ public function settings_enqueues() {
49
+
50
+ $min = \wpforms_get_min_suffix();
51
+
52
+ \wp_enqueue_script(
53
+ 'wpforms-connect',
54
+ \WPFORMS_PLUGIN_URL . "lite/assets/js/admin/connect{$min}.js",
55
+ array( 'jquery' ),
56
+ \WPFORMS_VERSION,
57
+ true
58
+ );
59
+ }
60
+
61
+ /**
62
+ * Generates and returns WPForms Connect URL.
63
+ *
64
+ * @since 1.5.5
65
+ */
66
+ public function generate_url() {
67
+
68
+ $this->init_error_handler();
69
+
70
+ try {
71
+
72
+ // Run a security check.
73
+ \check_ajax_referer( 'wpforms-admin', 'nonce' );
74
+
75
+ // Check for permissions.
76
+ if ( ! \current_user_can( 'install_plugins' ) ) {
77
+ \wp_send_json_error(
78
+ array(
79
+ 'message' => \esc_html__( 'Sorry, you do not have permission to install plugins.', 'wpforms-lite' )
80
+ )
81
+ );
82
+ }
83
+
84
+ $key = ! empty( $_POST['key'] ) ? \sanitize_text_field( \wp_unslash( $_POST['key'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
85
+
86
+ if ( empty( $key ) ) {
87
+ \wp_send_json_error(
88
+ array(
89
+ 'message' => \esc_html__( 'Please enter your license key to connect.', 'wpforms-lite' )
90
+ )
91
+ );
92
+ }
93
+
94
+ if ( wpforms()->pro ) {
95
+ \wp_send_json_error(
96
+ array( 'message' => \esc_html__( 'Only the Lite version can upgrade.', 'wpforms-lite' )
97
+ )
98
+ );
99
+ }
100
+
101
+ // Verify pro version is not installed.
102
+ $active = \activate_plugin( 'wpforms/wpforms.php', false, false, true );
103
+
104
+ if ( ! \is_wp_error( $active ) ) {
105
+
106
+ // Deactivate Lite.
107
+ \deactivate_plugins( \plugin_basename( WPFORMS_PLUGIN_FILE ) );
108
+
109
+ \wp_send_json_success(
110
+ array(
111
+ 'message' => \esc_html__( 'WPForms Pro was already installed and has not been activated.', 'wpforms-lite' ),
112
+ 'reload' => true,
113
+ )
114
+ );
115
+ }
116
+
117
+ // Generate URL.
118
+ $oth = hash( 'sha512', \wp_rand() );
119
+
120
+ \update_option( 'wpforms_connect_token', $oth );
121
+ \update_option( 'wpforms_connect', $key );
122
+
123
+ $version = WPFORMS_VERSION;
124
+ $endpoint = \admin_url( 'admin-ajax.php' );
125
+ $redirect = \admin_url( 'admin.php?page=wpforms-settings' );
126
+ $url = \add_query_arg(
127
+ array(
128
+ 'key' => $key,
129
+ 'oth' => $oth,
130
+ 'endpoint' => $endpoint,
131
+ 'version' => $version,
132
+ 'siteurl' => \admin_url(),
133
+ 'homeurl' => \home_url(),
134
+ 'redirect' => rawurldecode( base64_encode( $redirect ) ), // phpcs:ignore
135
+ 'v' => 2,
136
+ ),
137
+ 'https://upgrade.wpforms.com'
138
+ );
139
+
140
+ \wp_send_json_success(
141
+ array(
142
+ 'url' => $url,
143
+ 'back_url' => \add_query_arg(
144
+ array(
145
+ 'action' => 'wpforms_connect',
146
+ 'oth' => $oth,
147
+ ),
148
+ $endpoint
149
+ ),
150
+ )
151
+ );
152
+
153
+ } catch ( \Exception $e ) {
154
+
155
+ \wp_send_json_error(
156
+ array( 'error' => $e->getMessage() . ' in file ' . $e->getFile() . ', line ' . $e->getLine() )
157
+ );
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Process WPForms Connect.
163
+ *
164
+ * @since 1.5.5
165
+ */
166
+ public function process() {
167
+
168
+ $this->init_error_handler();
169
+
170
+ try {
171
+
172
+ $error = esc_html__( 'Could not install upgrade. Please download from wpforms.com and install manually.', 'wpforms-lite' );
173
+
174
+ // Verify params present (oth & download link).
175
+ $post_oth = ! empty( $_REQUEST['oth'] ) ? \sanitize_text_field( \wp_unslash( $_REQUEST['oth'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
176
+ $post_url = ! empty( $_REQUEST['file'] ) ? \esc_url_raw( \wp_unslash( $_REQUEST['file'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
177
+
178
+ if ( empty( $post_oth ) || empty( $post_url ) ) {
179
+ \wp_send_json_error( $error );
180
+ }
181
+
182
+ // Verify oth.
183
+ $oth = \get_option( 'wpforms_connect_token' );
184
+
185
+ if ( empty( $oth ) || ! hash_equals( $oth, $post_oth ) ) {
186
+ \wp_send_json_error( $error );
187
+ }
188
+
189
+ // Delete so cannot replay.
190
+ \delete_option( 'wpforms_connect_token' );
191
+
192
+ // Set the current screen to avoid undefined notices.
193
+ \set_current_screen( 'wpforms_page_wpforms-settings' );
194
+
195
+ // Prepare variables.
196
+ $url = \esc_url_raw(
197
+ \add_query_arg(
198
+ array(
199
+ 'page' => 'wpforms-settings',
200
+ ),
201
+ \admin_url( 'admin.php' )
202
+ )
203
+ );
204
+
205
+ // Verify pro not activated.
206
+ if ( wpforms()->pro ) {
207
+ \wp_send_json_success( \esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
208
+ }
209
+
210
+ // Verify pro not installed.
211
+ $active = \activate_plugin( 'wpforms/wpforms.php', $url, false, true );
212
+
213
+ if ( ! \is_wp_error( $active ) ) {
214
+ \deactivate_plugins( plugin_basename( WPFORMS_PLUGIN_FILE ) );
215
+ \wp_send_json_success( esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
216
+ }
217
+
218
+ $creds = \request_filesystem_credentials( $url, '', false, false, null );
219
+
220
+ // Check for file system permissions.
221
+ $perm_error = \esc_html__( 'Could not install upgrade. Please check for file system permissions and try again. Also you can download plugin from wpforms.com and install manually.', 'wpforms-lite' );
222
+
223
+ if ( false === $creds || ! \WP_Filesystem( $creds ) ) {
224
+ \wp_send_json_error( $perm_error );
225
+ }
226
+
227
+ // We do not need any extra credentials if we have gotten this far, so let's install the plugin.
228
+ require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
229
+
230
+ // Do not allow WordPress to search/download translations, as this will break JS output.
231
+ \remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
232
+
233
+ // Create the plugin upgrader with our custom skin.
234
+ $installer = new \Plugin_Upgrader( new ConnectSkin() );
235
+
236
+ // Error check.
237
+ if ( ! method_exists( $installer, 'install' ) ) {
238
+ \wp_send_json_error( $error );
239
+ }
240
+
241
+ // Check license key.
242
+ $key = \get_option( 'wpforms_connect', false );
243
+
244
+ if ( empty( $key ) ) {
245
+ \wp_send_json_error(
246
+ new WP_Error(
247
+ '403',
248
+ \esc_html__( 'No key provided.', 'wpforms-lite' )
249
+ )
250
+ );
251
+ }
252
+
253
+ $installer->install( $post_url ); // phpcs:ignore
254
+
255
+ // Flush the cache and return the newly installed plugin basename.
256
+ \wp_cache_flush();
257
+
258
+ $plugin_basename = $installer->plugin_info();
259
+
260
+ if ( $plugin_basename ) {
261
+
262
+ // Deactivate the lite version first.
263
+ \deactivate_plugins( \plugin_basename( WPFORMS_PLUGIN_FILE ) );
264
+
265
+ // Activate the plugin silently.
266
+ $activated = \activate_plugin( $plugin_basename, '', false, true );
267
+
268
+ if ( ! \is_wp_error( $activated ) ) {
269
+ \add_option( 'wpforms_install', 1 );
270
+ \wp_send_json_success( \esc_html__( 'Plugin installed & activated.', 'wpforms-lite' ) );
271
+ } else {
272
+ // Reactivate the lite plugin if pro activation failed.
273
+ \activate_plugin( \plugin_basename( WPFORMS_PLUGIN_FILE ), '', false, true );
274
+ \wp_send_json_error( \esc_html__( 'Pro version installed but needs to be activated from the Plugins page inside your WordPress admin.', 'wpforms-lite' ) );
275
+ }
276
+ }
277
+
278
+ \wp_send_json_error( $error );
279
+
280
+ } catch ( \Exception $e ) {
281
+
282
+ \wp_send_json_error(
283
+ array( 'error' => $e->getMessage() . ' in file ' . $e->getFile() . ', line ' . $e->getLine() )
284
+ );
285
+ }
286
+ }
287
+
288
+ /**
289
+ * Converting errors to exceptions.
290
+ *
291
+ * @since 1.5.5
292
+ */
293
+ public function init_error_handler() {
294
+
295
+ set_error_handler( // phpcs:ignore
296
+ function ( $errno, $errstr, $errfile, $errline, array $errcontex ) {
297
+ throw new \Exception( $errstr );
298
+ }
299
+ );
300
+ }
301
+ }
includes/class-upgrader-skin.php → src/Lite/Admin/ConnectSkin.php RENAMED
@@ -1,46 +1,43 @@
1
  <?php
2
 
 
 
3
  /**
4
- * Skin class.
5
  *
6
- * @since 1.5.4
 
7
  *
8
- * @package WPForms
9
- * @subpackage Upgrader Skin
10
- * @author WPForms
 
 
11
  */
12
 
13
- // Exit if accessed directly.
14
- if ( ! defined( 'ABSPATH' ) ) {
15
- exit;
16
- }
17
-
18
- /**
19
- * Skin class.
20
- *
21
- * @since 1.5.4
22
- */
23
- class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
24
 
25
  /**
26
  * Primary class constructor.
27
  *
28
- * @since 1.5.4
29
  *
30
  * @param array $args Empty array of args (we will use defaults).
31
  */
32
  public function __construct( $args = array() ) {
 
33
  parent::__construct();
34
  }
35
 
36
  /**
37
  * Set the upgrader object and store it as a property in the parent class.
38
  *
39
- * @since 1.5.4
40
  *
41
  * @param object $upgrader The upgrader object (passed by reference).
42
  */
43
  public function set_upgrader( &$upgrader ) {
 
44
  if ( is_object( $upgrader ) ) {
45
  $this->upgrader =& $upgrader;
46
  }
@@ -49,11 +46,12 @@ class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
49
  /**
50
  * Set the upgrader result and store it as a property in the parent class.
51
  *
52
- * @since 1.5.4
53
  *
54
  * @param object $result The result of the install process.
55
  */
56
  public function set_result( $result ) {
 
57
  $this->result = $result;
58
  }
59
 
@@ -61,14 +59,14 @@ class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
61
  * Empty out the header of its HTML content and only check to see if it has
62
  * been performed or not.
63
  *
64
- * @since 1.5.4
65
  */
66
  public function header() {}
67
 
68
  /**
69
  * Empty out the footer of its HTML contents.
70
  *
71
- * @since 1.5.4
72
  */
73
  public function footer() {}
74
 
@@ -76,13 +74,18 @@ class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
76
  * Instead of outputting HTML for errors, json_encode the errors and send them
77
  * back to the Ajax script for processing.
78
  *
79
- * @since 1.5.4
80
  *
81
  * @param array $errors Array of errors with the install process.
82
  */
83
  public function error( $errors ) {
 
84
  if ( ! empty( $errors ) ) {
85
- echo wp_json_encode( array( 'error' => esc_html__( 'There was an error installing the addon. Please try again.', 'wpforms-lite' ) ) );
 
 
 
 
86
  die;
87
  }
88
  }
@@ -91,10 +94,9 @@ class WPForms_Upgrader_Skin extends WP_Upgrader_Skin {
91
  * Empty out the feedback method to prevent outputting HTML strings as the install
92
  * is progressing.
93
  *
94
- * @since 1.5.4
95
  *
96
  * @param string $string The feedback string.
97
  */
98
  public function feedback( $string ) {}
99
-
100
  }
1
  <?php
2
 
3
+ namespace WPForms\Lite\Admin;
4
+
5
  /**
6
+ * WPForms Connect Skin.
7
  *
8
+ * WPForms Connect is our service that makes it easy for non-techy users to
9
+ * upgrade to WPForms Pro without having to manually install WPForms Pro plugin.
10
  *
11
+ * @package WPForms\Admin
12
+ * @author WPForms
13
+ * @since 1.5.5
14
+ * @license GPL-2.0+
15
+ * @copyright Copyright (c) 2019, WPForms LLC
16
  */
17
 
18
+ class ConnectSkin extends \WP_Upgrader_Skin {
 
 
 
 
 
 
 
 
 
 
19
 
20
  /**
21
  * Primary class constructor.
22
  *
23
+ * @since 1.5.5
24
  *
25
  * @param array $args Empty array of args (we will use defaults).
26
  */
27
  public function __construct( $args = array() ) {
28
+
29
  parent::__construct();
30
  }
31
 
32
  /**
33
  * Set the upgrader object and store it as a property in the parent class.
34
  *
35
+ * @since 1.5.5
36
  *
37
  * @param object $upgrader The upgrader object (passed by reference).
38
  */
39
  public function set_upgrader( &$upgrader ) {
40
+
41
  if ( is_object( $upgrader ) ) {
42
  $this->upgrader =& $upgrader;
43
  }
46
  /**
47
  * Set the upgrader result and store it as a property in the parent class.
48
  *
49
+ * @since 1.5.5
50
  *
51
  * @param object $result The result of the install process.
52
  */
53
  public function set_result( $result ) {
54
+
55
  $this->result = $result;
56
  }
57
 
59
  * Empty out the header of its HTML content and only check to see if it has
60
  * been performed or not.
61
  *
62
+ * @since 1.5.5
63
  */
64
  public function header() {}
65
 
66
  /**
67
  * Empty out the footer of its HTML contents.
68
  *
69
+ * @since 1.5.5
70
  */
71
  public function footer() {}
72
 
74
  * Instead of outputting HTML for errors, json_encode the errors and send them
75
  * back to the Ajax script for processing.
76
  *
77
+ * @since 1.5.5
78
  *
79
  * @param array $errors Array of errors with the install process.
80
  */
81
  public function error( $errors ) {
82
+
83
  if ( ! empty( $errors ) ) {
84
+ echo \wp_json_encode(
85
+ array(
86
+ 'error' => \esc_html__( 'There was an error installing WPForms Pro. Please try again.', 'wpforms-lite' ),
87
+ )
88
+ );
89
  die;
90
  }
91
  }
94
  * Empty out the feedback method to prevent outputting HTML strings as the install
95
  * is progressing.
96
  *
97
+ * @since 1.5.5
98
  *
99
  * @param string $string The feedback string.
100
  */
101
  public function feedback( $string ) {}
 
102
  }
src/Lite/Admin/DashboardWidget.php CHANGED
@@ -5,7 +5,7 @@ namespace WPForms\Lite\Admin;
5
  /**
6
  * Dashboard Widget shows a chart and the form entries stats in WP Dashboard.
7
  *
8
- * @package WPForms\Admin
9
  * @author WPForms
10
  * @since 1.5.0
11
  * @license GPL-2.0+
@@ -16,6 +16,8 @@ class DashboardWidget {
16
  /**
17
  * Widget settings.
18
  *
 
 
19
  * @var array
20
  */
21
  public $settings;
@@ -27,6 +29,15 @@ class DashboardWidget {
27
  */
28
  public function __construct() {
29
 
 
 
 
 
 
 
 
 
 
30
  // This widget should be displayed for certain high-level users only.
31
  if ( ! wpforms_current_user_can() ) {
32
  return;
5
  /**
6
  * Dashboard Widget shows a chart and the form entries stats in WP Dashboard.
7
  *
8
+ * @package WPForms\Lite\Admin
9
  * @author WPForms
10
  * @since 1.5.0
11
  * @license GPL-2.0+
16
  /**
17
  * Widget settings.
18
  *
19
+ * @since 1.5.0
20
+ *
21
  * @var array
22
  */
23
  public $settings;
29
  */
30
  public function __construct() {
31
 
32
+ add_action( 'admin_init', array( $this, 'init' ) );
33
+ }
34
+ /**
35
+ * Init class.
36
+ *
37
+ * @since 1.5.5
38
+ */
39
+ public function init() {
40
+
41
  // This widget should be displayed for certain high-level users only.
42
  if ( ! wpforms_current_user_can() ) {
43
  return;
src/Lite/Admin/Settings/Education.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPForms\Lite\Admin\Settings;
4
+
5
+ /**
6
+ * Settings changes and enhancements to educate Lite users on what is
7
+ * available in WPForms Pro.
8
+ *
9
+ * @package WPForms\Admin\Settings
10
+ * @author WPForms
11
+ * @since 1.5.5
12
+ * @license GPL-2.0+
13
+ * @copyright Copyright (c) 2019, WPForms LLC
14
+ */
15
+ class Education {
16
+
17
+ /**
18
+ * Constructor.
19
+ *
20
+ * @since 1.5.1
21
+ */
22
+ public function __construct() {
23
+
24
+ $this->hooks();
25
+ }
26
+
27
+ /**
28
+ * Hooks.
29
+ *
30
+ * @since 1.5.1
31
+ */
32
+ public function hooks() {
33
+
34
+ // Only proceed for the Settings > Integrations tab.
35
+ if ( ! \wpforms_is_admin_page( 'settings' ) ) {
36
+ return;
37
+ }
38
+
39
+ // Integrations related hooks.
40
+ if ( \wpforms_is_admin_page( 'settings', 'integrations' ) ) {
41
+ \add_filter( 'wpforms_admin_strings', array( $this, 'js_strings' ) );
42
+ \add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
43
+ \add_action( 'wpforms_settings_providers', array( $this, 'providers' ), 10000, 1 );
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Localize needed strings.
49
+ *
50
+ * @since 1.5.5
51
+ *
52
+ * @param array $strings JS strings.
53
+ *
54
+ * @return array
55
+ */
56
+ public function js_strings( $strings ) {
57
+
58
+ $strings['upgrade_title'] = \esc_html__( 'is a PRO Feature', 'wpforms-lite' );
59
+ $strings['upgrade_message'] = '<p>' . \esc_html__( 'We\'re sorry, the %name% is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features.', 'wpforms-lite' ) . '</p>';
60
+ $strings['upgrade_bonus'] = '<p>' .
61
+ \wp_kses(
62
+ __( '<strong>Bonus:</strong> WPForms Lite users get <span>50% off</span> regular price, automatically applied at checkout.', 'wpforms-lite' ),
63
+ array(
64
+ 'strong' => array(),
65
+ 'span' => array(),
66
+ )
67
+ ) .
68
+ '</p>';
69
+ $strings['upgrade_doc'] = '<a href="https://wpforms.com/docs/upgrade-wpforms-lite-paid-license/?utm_source=WordPress&amp;utm_medium=link&amp;utm_campaign=liteplugin" target="_blank" rel="noopener noreferrer" class="already-purchased">' . \esc_html__( 'Already purchased?', 'wpforms-lite' ) . '</a>';
70
+ $strings['upgrade_button'] = \esc_html__( 'Upgrade to PRO', 'wpforms-lite' );
71
+ $strings['upgrade_url'] = \esc_url( \wpforms_admin_upgrade_link( 'settings-modal' ) );
72
+ $strings['upgrade_modal'] = \wpforms_get_upgrade_modal_text();
73
+
74
+ return $strings;
75
+ }
76
+
77
+ /**
78
+ * Load enqueues.
79
+ *
80
+ * @since 1.5.5
81
+ */
82
+ public function enqueues() {
83
+
84
+ $min = \wpforms_get_min_suffix();
85
+
86
+ \wp_enqueue_script(
87
+ 'wpforms-settings-education',
88
+ \WPFORMS_PLUGIN_URL . "lite/assets/js/admin/settings-education{$min}.js",
89
+ array( 'jquery', 'jquery-confirm' ),
90
+ \WPFORMS_VERSION,
91
+ false
92
+ );
93
+ }
94
+
95
+ /**
96
+ * Display providers.
97
+ *
98
+ * @since 1.5.5
99
+ */
100
+ public function providers() {
101
+
102
+ $providers = wpforms_get_providers_all();
103
+
104
+ foreach ( $providers as $provider ) {
105
+
106
+ /* translators: %s - addon name*/
107
+ $modal_name = sprintf( \__( '%s addon', 'wpforms' ), $provider['name'] );
108
+
109
+ /* translators: %s - addon name*/
110
+ $descr = sprintf( \__( 'Integrate %s with WPForms', 'wpforms' ), $provider['name'] );
111
+
112
+ printf(
113
+ '<div id="wpforms-integration-%1$s" class="wpforms-settings-provider wpforms-clear focus-out education-modal" data-name="%2$s" data-action="upgrade" data-url="%3$s">
114
+ <div class="wpforms-settings-provider-header wpforms-clear">
115
+ <div class="wpforms-settings-provider-logo ">
116
+ <i class="fa fa-chevron-right"></i>
117
+ %4$s
118
+ </div>
119
+ <div class="wpforms-settings-provider-info">
120
+ <h3>%5$s</h3>
121
+ <p>%6$s</p>
122
+ </div>
123
+ </div>
124
+ </div>',
125
+ \esc_attr( $provider['slug'] ),
126
+ \esc_attr( $modal_name ),
127
+ isset( $provider['url'] ) ? \esc_attr( $provider['url'] ) : '',
128
+ '<img src="' . \esc_attr( WPFORMS_PLUGIN_URL ) . 'assets/images/' . \esc_attr( $provider['img'] ) . '">',
129
+ \esc_html( $provider['name'] ),
130
+ \esc_html( $descr )
131
+ );
132
+ }
133
+ }
134
+ }
src/WPForms.php CHANGED
@@ -210,8 +210,6 @@ namespace WPForms {
210
  require_once WPFORMS_PLUGIN_DIR . 'includes/class-conditional-logic-core.php';
211
  require_once WPFORMS_PLUGIN_DIR . 'includes/emails/class-emails.php';
212
  require_once WPFORMS_PLUGIN_DIR . 'includes/integrations.php';
213
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-license.php';
214
- require_once WPFORMS_PLUGIN_DIR . 'includes/class-updater.php';
215
 
216
  // Admin/Dashboard only includes, also in ajax.
217
  if ( is_admin() ) {
@@ -287,7 +285,6 @@ namespace WPForms {
287
  $this->process = new \WPForms_Process();
288
  $this->smart_tags = new \WPForms_Smart_Tags();
289
  $this->logs = new \WPForms_Logging();
290
- $this->license = new \WPForms_License();
291
 
292
  if ( is_admin() ) {
293
  if ( ! wpforms_setting( 'hide-announcements', false ) ) {
@@ -301,29 +298,6 @@ namespace WPForms {
301
 
302
  // Hook now that all of the WPForms stuff is loaded.
303
  do_action( 'wpforms_loaded' );
304
-
305
- $this->updater();
306
- }
307
-
308
- /**
309
- * Load plugin updater.
310
- *
311
- * @since 1.5.4
312
- */
313
- public function updater() {
314
-
315
- if ( ! is_admin() ) {
316
- return;
317
- }
318
-
319
- $key = $this->license->get();
320
-
321
- if ( ! $key ) {
322
- return;
323
- }
324
-
325
- // Fire a hook for Addons to register their updater since we know the key is present.
326
- do_action( 'wpforms_updater', $key );
327
  }
328
  }
329
  }
210
  require_once WPFORMS_PLUGIN_DIR . 'includes/class-conditional-logic-core.php';
211
  require_once WPFORMS_PLUGIN_DIR . 'includes/emails/class-emails.php';
212
  require_once WPFORMS_PLUGIN_DIR . 'includes/integrations.php';
 
 
213
 
214
  // Admin/Dashboard only includes, also in ajax.
215
  if ( is_admin() ) {
285
  $this->process = new \WPForms_Process();
286
  $this->smart_tags = new \WPForms_Smart_Tags();
287
  $this->logs = new \WPForms_Logging();
 
288
 
289
  if ( is_admin() ) {
290
  if ( ! wpforms_setting( 'hide-announcements', false ) ) {
298
 
299
  // Hook now that all of the WPForms stuff is loaded.
300
  do_action( 'wpforms_loaded' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301
  }
302
  }
303
  }
vendor/composer/autoload_files.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_files.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
10
+ );
vendor/composer/autoload_namespaces.php CHANGED
@@ -6,4 +6,5 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'Goodby\\CSV' => array($vendorDir . '/goodby/csv/src'),
10
  );
vendor/composer/autoload_psr4.php CHANGED
@@ -8,5 +8,6 @@ $baseDir = dirname($vendorDir);
8
  return array(
9
  'WPForms\\' => array($baseDir . '/src'),
10
  'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'),
 
11
  'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
12
  );
8
  return array(
9
  'WPForms\\' => array($baseDir . '/src'),
10
  'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'),
11
+ 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
12
  'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
13
  );
vendor/composer/autoload_real.php CHANGED
@@ -47,6 +47,24 @@ class ComposerAutoloaderInitfd7672430854241c2e9f5a2c8316f3fb
47
 
48
  $loader->register(true);
49
 
 
 
 
 
 
 
 
 
 
50
  return $loader;
51
  }
52
  }
 
 
 
 
 
 
 
 
 
47
 
48
  $loader->register(true);
49
 
50
+ if ($useStaticLoader) {
51
+ $includeFiles = Composer\Autoload\ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$files;
52
+ } else {
53
+ $includeFiles = require __DIR__ . '/autoload_files.php';
54
+ }
55
+ foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequirefd7672430854241c2e9f5a2c8316f3fb($fileIdentifier, $file);
57
+ }
58
+
59
  return $loader;
60
  }
61
  }
62
+
63
+ function composerRequirefd7672430854241c2e9f5a2c8316f3fb($fileIdentifier, $file)
64
+ {
65
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
+ require $file;
67
+
68
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
69
+ }
70
+ }
vendor/composer/autoload_static.php CHANGED
@@ -6,6 +6,10 @@ namespace Composer\Autoload;
6
 
7
  class ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb
8
  {
 
 
 
 
9
  public static $prefixLengthsPsr4 = array (
10
  'W' =>
11
  array (
@@ -17,6 +21,7 @@ class ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb
17
  ),
18
  'S' =>
19
  array (
 
20
  'Symfony\\Component\\CssSelector\\' => 30,
21
  ),
22
  );
@@ -30,17 +35,32 @@ class ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb
30
  array (
31
  0 => __DIR__ . '/..' . '/tijsverkoyen/css-to-inline-styles/src',
32
  ),
 
 
 
 
33
  'Symfony\\Component\\CssSelector\\' =>
34
  array (
35
  0 => __DIR__ . '/..' . '/symfony/css-selector',
36
  ),
37
  );
38
 
 
 
 
 
 
 
 
 
 
 
39
  public static function getInitializer(ClassLoader $loader)
40
  {
41
  return \Closure::bind(function () use ($loader) {
42
  $loader->prefixLengthsPsr4 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixLengthsPsr4;
43
  $loader->prefixDirsPsr4 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixDirsPsr4;
 
44
 
45
  }, null, ClassLoader::class);
46
  }
6
 
7
  class ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb
8
  {
9
+ public static $files = array (
10
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
11
+ );
12
+
13
  public static $prefixLengthsPsr4 = array (
14
  'W' =>
15
  array (
21
  ),
22
  'S' =>
23
  array (
24
+ 'Symfony\\Polyfill\\Mbstring\\' => 26,
25
  'Symfony\\Component\\CssSelector\\' => 30,
26
  ),
27
  );
35
  array (
36
  0 => __DIR__ . '/..' . '/tijsverkoyen/css-to-inline-styles/src',
37
  ),
38
+ 'Symfony\\Polyfill\\Mbstring\\' =>
39
+ array (
40
+ 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
41
+ ),
42
  'Symfony\\Component\\CssSelector\\' =>
43
  array (
44
  0 => __DIR__ . '/..' . '/symfony/css-selector',
45
  ),
46
  );
47
 
48
+ public static $prefixesPsr0 = array (
49
+ 'G' =>
50
+ array (
51
+ 'Goodby\\CSV' =>
52
+ array (
53
+ 0 => __DIR__ . '/..' . '/goodby/csv/src',
54
+ ),
55
+ ),
56
+ );
57
+
58
  public static function getInitializer(ClassLoader $loader)
59
  {
60
  return \Closure::bind(function () use ($loader) {
61
  $loader->prefixLengthsPsr4 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixLengthsPsr4;
62
  $loader->prefixDirsPsr4 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixDirsPsr4;
63
+ $loader->prefixesPsr0 = ComposerStaticInitfd7672430854241c2e9f5a2c8316f3fb::$prefixesPsr0;
64
 
65
  }, null, ClassLoader::class);
66
  }
vendor/composer/installed.json CHANGED
@@ -1,4 +1,63 @@
1
  [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  {
3
  "name": "symfony/css-selector",
4
  "version": "v2.8.50",
@@ -54,6 +113,67 @@
54
  "description": "Symfony CssSelector Component",
55
  "homepage": "https://symfony.com"
56
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  {
58
  "name": "tijsverkoyen/css-to-inline-styles",
59
  "version": "2.2.1",
1
  [
2
+ {
3
+ "name": "goodby/csv",
4
+ "version": "1.3.0",
5
+ "version_normalized": "1.3.0.0",
6
+ "source": {
7
+ "type": "git",
8
+ "url": "https://github.com/goodby/csv.git",
9
+ "reference": "e71217b8d6110f3d1ac3784ef9b8a2383c3398b9"
10
+ },
11
+ "dist": {
12
+ "type": "zip",
13
+ "url": "https://api.github.com/repos/goodby/csv/zipball/e71217b8d6110f3d1ac3784ef9b8a2383c3398b9",
14
+ "reference": "e71217b8d6110f3d1ac3784ef9b8a2383c3398b9",
15
+ "shasum": ""
16
+ },
17
+ "require": {
18
+ "ext-mbstring": "*",
19
+ "php": ">=5.3.2"
20
+ },
21
+ "require-dev": {
22
+ "mikey179/vfsstream": ">=1.1.0",
23
+ "mockery/mockery": ">=0.7.2",
24
+ "phpunit/phpunit": "3.7.*",
25
+ "suin/php-expose": ">=1.0"
26
+ },
27
+ "time": "2015-06-29T10:28:19+00:00",
28
+ "type": "library",
29
+ "installation-source": "dist",
30
+ "autoload": {
31
+ "psr-0": {
32
+ "Goodby\\CSV": "src/"
33
+ }
34
+ },
35
+ "notification-url": "https://packagist.org/downloads/",
36
+ "license": [
37
+ "MIT"
38
+ ],
39
+ "authors": [
40
+ {
41
+ "name": "suin",
42
+ "email": "suinyeze@gmail.com",
43
+ "homepage": "https://www.facebook.com/suinyeze",
44
+ "role": "Developer, Renaming Specialist"
45
+ },
46
+ {
47
+ "name": "reoring",
48
+ "email": "mori.reo@gmail.com",
49
+ "homepage": "https://www.facebook.com/reoring",
50
+ "role": "Developer"
51
+ }
52
+ ],
53
+ "description": "CSV import/export library",
54
+ "homepage": "https://github.com/goodby/csv",
55
+ "keywords": [
56
+ "csv",
57
+ "export",
58
+ "import"
59
+ ]
60
+ },
61
  {
62
  "name": "symfony/css-selector",
63
  "version": "v2.8.50",
113
  "description": "Symfony CssSelector Component",
114
  "homepage": "https://symfony.com"
115
  },
116
+ {
117
+ "name": "symfony/polyfill-mbstring",
118
+ "version": "v1.11.0",
119
+ "version_normalized": "1.11.0.0",
120
+ "source": {
121
+ "type": "git",
122
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
123
+ "reference": "fe5e94c604826c35a32fa832f35bd036b6799609"
124
+ },
125
+ "dist": {
126
+ "type": "zip",
127
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609",
128
+ "reference": "fe5e94c604826c35a32fa832f35bd036b6799609",
129
+ "shasum": ""
130
+ },
131
+ "require": {
132
+ "php": ">=5.3.3"
133
+ },
134
+ "suggest": {
135
+ "ext-mbstring": "For best performance"
136
+ },
137
+ "time": "2019-02-06T07:57:58+00:00",
138
+ "type": "library",
139
+ "extra": {
140
+ "branch-alias": {
141
+ "dev-master": "1.11-dev"
142
+ }
143
+ },
144
+ "installation-source": "dist",
145
+ "autoload": {
146
+ "psr-4": {
147
+ "Symfony\\Polyfill\\Mbstring\\": ""
148
+ },
149
+ "files": [
150
+ "bootstrap.php"
151
+ ]
152
+ },
153
+ "notification-url": "https://packagist.org/downloads/",
154
+ "license": [
155
+ "MIT"
156
+ ],
157
+ "authors": [
158
+ {
159
+ "name": "Nicolas Grekas",
160
+ "email": "p@tchwork.com"
161
+ },
162
+ {
163
+ "name": "Symfony Community",
164
+ "homepage": "https://symfony.com/contributors"
165
+ }
166
+ ],
167
+ "description": "Symfony polyfill for the Mbstring extension",
168
+ "homepage": "https://symfony.com",
169
+ "keywords": [
170
+ "compatibility",
171
+ "mbstring",
172
+ "polyfill",
173
+ "portable",
174
+ "shim"
175
+ ]
176
+ },
177
  {
178
  "name": "tijsverkoyen/css-to-inline-styles",
179
  "version": "2.2.1",
vendor/goodby/csv/.gitignore ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ .phpmake
2
+ /vendor
3
+ /composer.phar
4
+ /composer.lock
5
+ /metrics
vendor/goodby/csv/.travis.yml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: php
2
+ php:
3
+ - 5.3
4
+ - 5.4
5
+ - 5.5
6
+ - 5.6
7
+
8
+ before_script:
9
+ - ./scripts/bundle-devtools.sh .
10
+ - export GOODBY_CSV_TEST_DB_HOST=127.0.0.1
11
+ - export GOODBY_CSV_TEST_DB_USER=root
12
+ - export GOODBY_CSV_TEST_DB_PASS=""
13
+ - mysql -e 'create database goodby_csv_test'
14
+ script: ./vendor/bin/phpunit --coverage-text --configuration phpunit.xml.dist
vendor/goodby/csv/LICENSE ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ Copyright (c) <year> <copyright holders>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8
+
vendor/goodby/csv/README.md ADDED
@@ -0,0 +1,327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Goodby, CSV
2
+
3
+ [![Build Status](https://secure.travis-ci.org/goodby/csv.png?branch=master)](https://travis-ci.org/goodby/csv)
4
+
5
+ ## What is "Goodby CSV"?
6
+
7
+ Goodby CSV is a highly memory efficient, flexible and extendable open-source CSV import/export library.
8
+
9
+ ```php
10
+ use Goodby\CSV\Import\Standard\Lexer;
11
+ use Goodby\CSV\Import\Standard\Interpreter;
12
+ use Goodby\CSV\Import\Standard\LexerConfig;
13
+
14
+ $lexer = new Lexer(new LexerConfig());
15
+ $interpreter = new Interpreter();
16
+ $interpreter->addObserver(function(array $row) {
17
+ // do something here.
18
+ // for example, insert $row to database.
19
+ });
20
+ $lexer->parse('data.csv', $interpreter);
21
+ ```
22
+
23
+
24
+ ### Features
25
+
26
+ #### 1. Memory Management Free
27
+
28
+ This library was designed for low memory usage. It will not accumulate all the rows in the memory. The importer reads a CSV file and executes a callback function line by line.
29
+
30
+ #### 2. Multibyte support
31
+
32
+ This library supports mulitbyte input/output: for example, SJIS-win, EUC-JP and UTF-8.
33
+
34
+ #### 3. Ready to Use for Enterprise Applications
35
+
36
+ Goodby CSV is fully unit-tested. The library is stable and ready to be used in large projects like enterprise applications.
37
+
38
+ ## Requirements
39
+
40
+ * PHP 5.3.2 or later
41
+ * mbstring
42
+
43
+ ## Installation
44
+
45
+ Install composer in your project:
46
+
47
+ ```bash
48
+ curl -s http://getcomposer.org/installer | php
49
+ ```
50
+
51
+ Create a `composer.json` file in your project root:
52
+
53
+ ```json
54
+ {
55
+ "require": {
56
+ "goodby/csv": "*"
57
+ }
58
+ }
59
+ ```
60
+
61
+ Install via composer:
62
+
63
+ ```bash
64
+ php composer.phar install
65
+ ```
66
+
67
+ ## Documentation
68
+
69
+ ### Configuration
70
+
71
+ Import configuration:
72
+
73
+ ```php
74
+ use Goodby\CSV\Import\Standard\LexerConfig;
75
+
76
+ $config = new LexerConfig();
77
+ $config
78
+ ->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
79
+ ->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
80
+ ->setEscape("\\") // Customize escape character. Default value is backslash(\)
81
+ ->setToCharset('UTF-8') // Customize target encoding. Default value is null, no converting.
82
+ ->setFromCharset('SJIS-win') // Customize CSV file encoding. Default value is null.
83
+ ;
84
+ ```
85
+
86
+ Export configuration:
87
+
88
+ ```php
89
+ use Goodby\CSV\Export\Standard\ExporterConfig;
90
+
91
+ $config = new ExporterConfig();
92
+ $config
93
+ ->setDelimiter("\t") // Customize delimiter. Default value is comma(,)
94
+ ->setEnclosure("'") // Customize enclosure. Default value is double quotation(")
95
+ ->setEscape("\\") // Customize escape character. Default value is backslash(\)
96
+ ->setToCharset('SJIS-win') // Customize file encoding. Default value is null, no converting.
97
+ ->setFromCharset('UTF-8') // Customize source encoding. Default value is null.
98
+ ->setFileMode(CsvFileObject::FILE_MODE_WRITE) // Customize file mode and choose either write or append. Default value is write ('w'). See fopen() php docs
99
+ ;
100
+ ```
101
+
102
+ ### Unstrict Row Consistency Mode
103
+
104
+ By default, Goodby CSV throws `StrictViolationException` when it finds a row with a different column count to other columns. In the case you want to import such a CSV, you can call `Interpreter::unstrict()` to disable row consistency check at import.
105
+
106
+ rough.csv:
107
+
108
+ ```csv
109
+ foo,bar,baz
110
+ foo,bar
111
+ foo
112
+ foo,bar,baz
113
+ ```
114
+
115
+ ```php
116
+ use Goodby\CSV\Import\Standard\Interpreter;
117
+ use Goodby\CSV\Import\Standard\Lexer;
118
+ use Goodby\CSV\Import\Standard\LexerConfig;
119
+
120
+ $interpreter = new Interpreter();
121
+ $interpreter->unstrict(); // Ignore row column count consistency
122
+
123
+ $lexer = new Lexer(new LexerConfig());
124
+ $lexer->parse('rough.csv', $interpreter);
125
+ ```
126
+
127
+ ## Examples
128
+
129
+ ### Import to Database via PDO
130
+
131
+ user.csv:
132
+
133
+ ```csv
134
+ 1,alice,alice@example.com
135
+ 2,bob,bob@example.com
136
+ 3,carol,carol@eample.com
137
+ ```
138
+
139
+ ```php
140
+ use Goodby\CSV\Import\Standard\Lexer;
141
+ use Goodby\CSV\Import\Standard\Interpreter;
142
+ use Goodby\CSV\Import\Standard\LexerConfig;
143
+
144
+ $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
145
+ $pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
146
+
147
+ $config = new LexerConfig();
148
+ $lexer = new Lexer($config);
149
+
150
+ $interpreter = new Interpreter();
151
+
152
+ $interpreter->addObserver(function(array $columns) use ($pdo) {
153
+ $stmt = $pdo->prepare('INSERT INTO user (id, name, email) VALUES (?, ?, ?)');
154
+ $stmt->execute($columns);
155
+ });
156
+
157
+ $lexer->parse('user.csv', $interpreter);
158
+ ```
159
+
160
+ ### Import from TSV (tab separated values) to array
161
+
162
+ temperature.tsv:
163
+
164
+ ```csv
165
+ 9 Tokyo
166
+ 27 Singapore
167
+ -5 Seoul
168
+ 7 Shanghai
169
+ ```
170
+
171
+ ```php
172
+ use Goodby\CSV\Import\Standard\Lexer;
173
+ use Goodby\CSV\Import\Standard\Interpreter;
174
+ use Goodby\CSV\Import\Standard\LexerConfig;
175
+
176
+ $temperature = array();
177
+
178
+ $config = new LexerConfig();
179
+ $config->setDelimiter("\t");
180
+ $lexer = new Lexer($config);
181
+
182
+ $interpreter = new Interpreter();
183
+ $interpreter->addObserver(function(array $row) use (&$temperature) {
184
+ $temperature[] = array(
185
+ 'temperature' => $row[0],
186
+ 'city' => $row[1],
187
+ );
188
+ });
189
+
190
+ $lexer->parse('temperature.tsv', $interpreter);
191
+
192
+ print_r($temperature);
193
+ ```
194
+
195
+ ### Export from array
196
+
197
+ ```php
198
+ use Goodby\CSV\Export\Standard\Exporter;
199
+ use Goodby\CSV\Export\Standard\ExporterConfig;
200
+
201
+ $config = new ExporterConfig();
202
+ $exporter = new Exporter($config);
203
+
204
+ $exporter->export('php://output', array(
205
+ array('1', 'alice', 'alice@example.com'),
206
+ array('2', 'bob', 'bob@example.com'),
207
+ array('3', 'carol', 'carol@example.com'),
208
+ ));
209
+ ```
210
+
211
+
212
+ ### Export from database via PDO
213
+
214
+ ```php
215
+ use Goodby\CSV\Export\Standard\Exporter;
216
+ use Goodby\CSV\Export\Standard\ExporterConfig;
217
+ use Goodby\CSV\Export\Standard\CsvFileObject;
218
+ use Goodby\CSV\Export\Standard\Collection\PdoCollection;
219
+
220
+ $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
221
+
222
+ $pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
223
+ $pdo->query("INSERT INTO user VALUES(1, 'alice', 'alice@example.com')");
224
+ $pdo->query("INSERT INTO user VALUES(2, 'bob', 'bob@example.com')");
225
+ $pdo->query("INSERT INTO user VALUES(3, 'carol', 'carol@example.com')");
226
+
227
+ $config = new ExporterConfig();
228
+ $exporter = new Exporter($config);
229
+
230
+ $stmt = $pdo->prepare("SELECT * FROM user");
231
+ $stmt->execute();
232
+
233
+ $exporter->export('php://output', new PdoCollection($stmt));
234
+ ```
235
+
236
+ ### Export with CallbackCollection
237
+ ```php
238
+ use Goodby\CSV\Export\Standard\Exporter;
239
+ use Goodby\CSV\Export\Standard\ExporterConfig;
240
+
241
+ use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
242
+
243
+ $data = array();
244
+ $data[] = array('user', 'name1');
245
+ $data[] = array('user', 'name2');
246
+ $data[] = array('user', 'name3');
247
+
248
+ $collection = new CallbackCollection($data, function($row) {
249
+ // apply custom format to the row
250
+ $row[1] = $row[1] . '!';
251
+
252
+ return $row;
253
+ });
254
+
255
+ $config = new ExporterConfig();
256
+ $exporter = new Exporter($config);
257
+
258
+ $exporter->export('php://stdout', $collection);
259
+ ```
260
+
261
+ ### Export in Symfony2 action
262
+
263
+ ```php
264
+ namespace AcmeBundle\ExampleBundle\Controller;
265
+
266
+ use Symfony\Bundle\FrameworkBundle\Controller\Controller;
267
+ use Symfony\Component\HttpFoundation\StreamedResponse;
268
+
269
+ class DefaultController extends Controller
270
+ {
271
+ public function csvExportAction()
272
+ {
273
+ $conn = $this->get('database_connection');
274
+
275
+ $stmt = $conn->prepare('SELECT * FROM somewhere');
276
+ $stmt->execute();
277
+
278
+ $response = new StreamedResponse();
279
+ $response->setStatusCode(200);
280
+ $response->headers->set('Content-Type', 'text/csv');
281
+ $response->setCallback(function() use($stmt) {
282
+ $config = new ExporterConfig();
283
+ $exporter = new Exporter($config);
284
+
285
+ $exporter->export('php://output', new PdoCollection($stmt->getIterator()));
286
+ });
287
+ $response->send();
288
+
289
+ return $response;
290
+ }
291
+ }
292
+ ```
293
+
294
+ ## License
295
+
296
+ Csv is open-sourced software licensed under the MIT License - see the LICENSE file for details
297
+
298
+
299
+ ## Contributing
300
+
301
+ We works under test driven development.
302
+
303
+ Checkout master source code from github:
304
+
305
+ ```bash
306
+ hub clone goodby/csv
307
+ ```
308
+
309
+ Install components via composer:
310
+
311
+ ```
312
+ # If you don't have composer.phar
313
+ ./scripts/bundle-devtools.sh .
314
+
315
+ # If you have composer.phar
316
+ composer.phar install --dev
317
+ ```
318
+
319
+ Run phpunit:
320
+
321
+ ```bash
322
+ ./vendor/bin/phpunit
323
+ ```
324
+
325
+ ## Acknowledgement
326
+
327
+ Credits are found within composer.json file.
vendor/goodby/csv/composer.json ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "goodby/csv",
3
+ "description": "CSV import/export library",
4
+ "keywords": ["csv", "import", "export"],
5
+ "homepage": "https://github.com/goodby/csv",
6
+ "license": "MIT",
7
+ "authors": [
8
+ {
9
+ "name": "reoring",
10
+ "email": "mori.reo@gmail.com",
11
+ "homepage": "https://www.facebook.com/reoring",
12
+ "role": "Developer"
13
+ },
14
+ {
15
+ "name": "suin",
16
+ "email": "suinyeze@gmail.com",
17
+ "homepage": "https://www.facebook.com/suinyeze",
18
+ "role": "Developer, Renaming Specialist"
19
+ }
20
+ ],
21
+ "require": {
22
+ "php": ">=5.3.2",
23
+ "ext-mbstring": "*"
24
+ },
25
+ "require-dev": {
26
+ "phpunit/phpunit": "3.7.*",
27
+ "mockery/mockery": ">=0.7.2",
28
+ "suin/php-expose": ">=1.0",
29
+ "mikey179/vfsStream": ">=1.1.0"
30
+ },
31
+ "autoload": {
32
+ "psr-0": {
33
+ "Goodby\\CSV": "src/"
34
+ }
35
+ }
36
+ }
vendor/goodby/csv/example/export_from_database_via_pdo.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once __DIR__.'/../vendor/autoload.php'; // load composer
4
+
5
+ use Goodby\CSV\Export\Standard\Exporter;
6
+ use Goodby\CSV\Export\Standard\ExporterConfig;
7
+
8
+ use Goodby\CSV\Export\Standard\Collection\PdoCollection;
9
+
10
+ $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
11
+
12
+ $pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
13
+ $pdo->query("INSERT INTO user VALUES(1, 'alice', 'alice@example.com')");
14
+ $pdo->query("INSERT INTO user VALUES(2, 'bob', 'bob@example.com')");
15
+ $pdo->query("INSERT INTO user VALUES(3, 'carol', 'carol@example.com')");
16
+
17
+ $config = new ExporterConfig();
18
+ $exporter = new Exporter($config);
19
+
20
+ $stmt = $pdo->prepare("SELECT * FROM user");
21
+ $stmt->execute();
22
+
23
+ $exporter->export('php://output', new PdoCollection($stmt));
24
+
vendor/goodby/csv/example/import_from_database_via_pdo.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once __DIR__.'/../vendor/autoload.php'; // load composer
4
+
5
+ use Goodby\CSV\Import\Standard\Lexer;
6
+ use Goodby\CSV\Import\Standard\Interpreter;
7
+ use Goodby\CSV\Import\Standard\LexerConfig;
8
+
9
+ $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
10
+ $pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
11
+
12
+ $config = new LexerConfig();
13
+ $lexer = new Lexer($config);
14
+
15
+ $interpreter = new Interpreter();
16
+
17
+ $interpreter->addObserver(function(array $columns) use ($pdo) {
18
+ $checkStmt = $pdo->prepare('SELECT count(*) FROM user WHERE id = ?');
19
+ $checkStmt->execute(array(($columns[0])));
20
+
21
+ $count = $checkStmt->fetchAll()[0][0];
22
+
23
+ if ($count === 0) {
24
+ $stmt = $pdo->prepare('INSERT INTO user (id, name, email) VALUES (?, ?, ?)');
25
+ $stmt->execute($columns);
26
+ }
27
+ });
28
+
29
+ $lexer->parse('user.csv', $interpreter);
vendor/goodby/csv/example/insert-or-update-user-for-mysql.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once __DIR__.'/../vendor/autoload.php'; // load composer
4
+
5
+ use Goodby\CSV\Import\Standard\Lexer;
6
+ use Goodby\CSV\Import\Standard\Interpreter;
7
+ use Goodby\CSV\Import\Standard\LexerConfig;
8
+
9
+ $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
10
+ $pdo->query('CREATE TABLE IF NOT EXISTS user2 (id INT, `name` VARCHAR(255), email VARCHAR(255), PRIMARY KEY (`id`))');
11
+
12
+ $config = new LexerConfig();
13
+ $lexer = new Lexer($config);
14
+
15
+ $interpreter = new Interpreter();
16
+
17
+ $interpreter->addObserver(function(array $columns) use ($pdo) {
18
+ $stmt = $pdo->prepare('REPLACE user2 (id, name, email) VALUES (?, ?, ?)');
19
+ $stmt->execute($columns);
20
+ });
21
+
22
+ $lexer->parse('user.csv', $interpreter);
vendor/goodby/csv/example/sample.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once __DIR__.'/../vendor/autoload.php'; // load composer
4
+
5
+ use Goodby\CSV\Import\Standard\Lexer;
6
+ use Goodby\CSV\Import\Standard\Interpreter;
7
+ use Goodby\CSV\Import\Standard\LexerConfig;
8
+ use Goodby\CSV\Export\Standard\Exporter;
9
+ use Goodby\CSV\Export\Standard\ExporterConfig;
10
+
11
+ $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root', array(
12
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
13
+ ));
14
+ $pdo->query('CREATE TABLE IF NOT EXISTS user (id INT, `name` VARCHAR(255), email VARCHAR(255))');
15
+
16
+ // Importing
17
+ $config = new LexerConfig();
18
+ $lexer = new Lexer($config);
19
+ $interpreter = new Interpreter();
20
+ $interpreter->addObserver(function(array $columns) use ($pdo) {
21
+ $stmt = $pdo->prepare('INSERT INTO user (id, name, email) VALUES (?, ?, ?)');
22
+ $stmt->execute($columns);
23
+ });
24
+ $lexer->parse('user.csv', $interpreter);
25
+
26
+ // Exporting
27
+ $config = new ExporterConfig();
28
+ $exporter = new Exporter($config);
29
+ $exporter->export('php://output', array(
30
+ array('1', 'alice', 'alice@example.com'),
31
+ array('2', 'bob', 'bob@example.com'),
32
+ array('3', 'carol', 'carol@example.com'),
33
+ ));
34
+
vendor/goodby/csv/example/temperature.tsv ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ 9 Tokyo
2
+ 27 Singapore
3
+ -5 Seoul
4
+ 7 Shanghai
vendor/goodby/csv/example/tsv-sample.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once __DIR__.'/../vendor/autoload.php'; // load composer
4
+
5
+ use Goodby\CSV\Import\Standard\Lexer;
6
+ use Goodby\CSV\Import\Standard\Interpreter;
7
+ use Goodby\CSV\Import\Standard\LexerConfig;
8
+
9
+ // the result comes into this variable
10
+ $temperature = array();
11
+
12
+ // set up lexer
13
+ $config = new LexerConfig();
14
+ $config->setDelimiter("\t");
15
+ $config->setFlags(\SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY | \SplFileObject::READ_CSV);
16
+ $lexer = new Lexer($config);
17
+
18
+ // set up interpreter
19
+ $interpreter = new Interpreter();
20
+ $interpreter->addObserver(function(array $row) use (&$temperature) {
21
+ $temperature[] = array(
22
+ 'temperature' => $row[0],
23
+ 'city' => $row[1],
24
+ );
25
+ });
26
+
27
+ // parse
28
+ $lexer->parse('temperature.tsv', $interpreter);
29
+
30
+ var_dump($temperature);
vendor/goodby/csv/example/user.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ 1,alice,alice@example.com
2
+ 2,bob,bob@example.com
3
+ 3,carol,carol@eample.com
vendor/goodby/csv/phpunit-bootstrap.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // For composer
3
+ require_once 'vendor/autoload.php';
4
+
5
+ /**
6
+ * You can overwrite GOODBY_CSV_TEST_DB_* by `export` command.
7
+ * @see http://manpages.ubuntu.com/manpages/hardy/man5/exports.5.html
8
+ *
9
+ * Example:
10
+ *
11
+ * ```
12
+ * export GOODBY_CSV_TEST_DB_USER=alice
13
+ * export GOODBY_CSV_TEST_DB_PASS=passwd
14
+ * phpunit
15
+ * ```
16
+ */
17
+ if ( isset($_SERVER['GOODBY_CSV_TEST_DB_HOST']) === false ) {
18
+ $_SERVER['GOODBY_CSV_TEST_DB_HOST'] = $_SERVER['GOODBY_CSV_TEST_DB_HOST_DEFAULT'];
19
+ }
20
+ if ( isset($_SERVER['GOODBY_CSV_TEST_DB_NAME']) === false ) {
21
+ $_SERVER['GOODBY_CSV_TEST_DB_NAME'] = $_SERVER['GOODBY_CSV_TEST_DB_NAME_DEFAULT'];
22
+ }
23
+ if ( isset($_SERVER['GOODBY_CSV_TEST_DB_USER']) === false ) {
24
+ $_SERVER['GOODBY_CSV_TEST_DB_USER'] = $_SERVER['GOODBY_CSV_TEST_DB_USER_DEFAULT'];
25
+ }
26
+ if ( isset($_SERVER['GOODBY_CSV_TEST_DB_PASS']) === false ) {
27
+ $_SERVER['GOODBY_CSV_TEST_DB_PASS'] = $_SERVER['GOODBY_CSV_TEST_DB_PASS_DEFAULT'];
28
+ }
vendor/goodby/csv/phpunit.xml.dist ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit
3
+ bootstrap="phpunit-bootstrap.php"
4
+ processIsolation="false"
5
+ verbose="true"
6
+ strict="false"
7
+ colors="true">
8
+ <testsuites>
9
+ <testsuite name="PHPUnit">
10
+ <directory>src/*/*/*/Tests</directory>
11
+ </testsuite>
12
+ </testsuites>
13
+
14
+ <php>
15
+ <includePath>./../html/install/src</includePath>
16
+ <!-- Don't change GOODBY_CSV_TEST_DB_*_DEFAULT here. See phpunit-bootstrap.php. -->
17
+ <server name="GOODBY_CSV_TEST_DB_HOST_DEFAULT" value="localhost"/>
18
+ <server name="GOODBY_CSV_TEST_DB_NAME_DEFAULT" value="goodby_csv_test"/>
19
+ <server name="GOODBY_CSV_TEST_DB_USER_DEFAULT" value="root"/>
20
+ <server name="GOODBY_CSV_TEST_DB_PASS_DEFAULT" value="root"/>
21
+ </php>
22
+
23
+ <logging>
24
+ <log
25
+ type="coverage-html"
26
+ target="metrics/coverage"
27
+ charset="UTF-8"
28
+ yui="true"
29
+ highlight="false"
30
+ lowUpperBound="35"
31
+ highLowerBound="70"/>
32
+ <!-- <log type="coverage-text" target="php://stdout" lowUpperBound="35" highLowerBound="70" /> -->
33
+ </logging>
34
+
35
+ <filter>
36
+ <whitelist>
37
+ <directory suffix=".php">src</directory>
38
+ <!-- <file>/path/to/file</file> -->
39
+ <exclude>
40
+ <!-- <file>/path/to/file</file> -->
41
+ <directory suffix="Interface.php">src</directory>
42
+ <directory>src/*/*/*/Tests</directory>
43
+ </exclude>
44
+ </whitelist>
45
+ </filter>
46
+ <listeners>
47
+ <listener class="\Mockery\Adapter\Phpunit\TestListener"
48
+ file="vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListener.php"/>
49
+ </listeners>
50
+ </phpunit>
vendor/goodby/csv/scripts/bundle-devtools.sh ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #/usr/bin/env bash
2
+
3
+ function print_help {
4
+ echo "$(basename $0) [path/to/dir/to/install]"
5
+ }
6
+
7
+ set -eux
8
+
9
+ if [ $# -eq 0 ]
10
+ then
11
+ print_help
12
+ exit 1
13
+ fi
14
+
15
+ INSTALL_DIR=$1
16
+
17
+ if [ ! -d "$INSTALL_DIR" ]
18
+ then
19
+ echo "No such directory: $INSTALL_DIR"
20
+ exit 1
21
+ fi
22
+
23
+ cd $INSTALL_DIR
24
+
25
+ if [ -f composer.phar ]
26
+ then
27
+ rm -f composer.phar
28
+ fi
29
+
30
+ COMPOSER="$INSTALL_DIR/composer.phar"
31
+
32
+ wget http://getcomposer.org/composer.phar
33
+
34
+ chmod +x composer.phar
35
+
36
+ ./composer.phar install --dev
vendor/goodby/csv/src/Goodby/CSV/Export/Protocol/Exception/IOException.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Protocol\Exception;
4
+
5
+ /**
6
+ * Throws if it is unable to write CSV file
7
+ */
8
+ class IOException extends \RuntimeException
9
+ {
10
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Protocol/ExporterInterface.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Protocol;
4
+
5
+ use Traversable;
6
+ use Goodby\CSV\Export\Protocol\Exception\IOException;
7
+
8
+ /**
9
+ * Interface of the Exporter
10
+ */
11
+ interface ExporterInterface
12
+ {
13
+ /**
14
+ * Export data as CSV file
15
+ *
16
+ * @param string $filename
17
+ * @param array|Traversable $rows
18
+ * @throws IOException
19
+ * @return void
20
+ */
21
+ public function export($filename, $rows);
22
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Collection/CallbackCollection.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Standard\Collection;
4
+
5
+ use Iterator;
6
+ use IteratorAggregate;
7
+
8
+ class CallbackCollection implements Iterator
9
+ {
10
+ private $callable;
11
+ private $data;
12
+
13
+ public function __construct($data, $callable)
14
+ {
15
+ $this->callable = $callable;
16
+
17
+ if (!is_callable($callable)) {
18
+ throw new \InvalidArgumentException('the second argument must be callable');
19
+ }
20
+
21
+ if (is_array($data)) {
22
+ $ao = new \ArrayObject($data);
23
+ $this->data = $ao->getIterator();
24
+ } elseif ($data instanceof Iterator) {
25
+ $this->data = $data;
26
+ } elseif ($data instanceof IteratorAggregate) {
27
+ $this->data = $data->getIterator();
28
+ } else {
29
+ throw new \InvalidArgumentException('data must be an array or an Iterator/IteratorAggregate');
30
+ }
31
+ }
32
+
33
+ /**
34
+ * (PHP 5 &gt;= 5.0.0)<br/>
35
+ * Return the current element
36
+ * @link http://php.net/manual/en/iterator.current.php
37
+ * @return mixed Can return any type.
38
+ */
39
+ public function current()
40
+ {
41
+ return call_user_func($this->callable, $this->data->current());
42
+ }
43
+
44
+ /**
45
+ * (PHP 5 &gt;= 5.0.0)<br/>
46
+ * Move forward to next element
47
+ * @link http://php.net/manual/en/iterator.next.php
48
+ * @return void Any returned value is ignored.
49
+ */
50
+ public function next()
51
+ {
52
+ $this->data->next();
53
+ }
54
+
55
+ /**
56
+ * (PHP 5 &gt;= 5.0.0)<br/>
57
+ * Return the key of the current element
58
+ * @link http://php.net/manual/en/iterator.key.php
59
+ * @return mixed scalar on success, or null on failure.
60
+ */
61
+ public function key()
62
+ {
63
+ return $this->data->key();
64
+ }
65
+
66
+ /**
67
+ * (PHP 5 &gt;= 5.0.0)<br/>
68
+ * Checks if current position is valid
69
+ * @link http://php.net/manual/en/iterator.valid.php
70
+ * @return boolean The return value will be casted to boolean and then evaluated.
71
+ * Returns true on success or false on failure.
72
+ */
73
+ public function valid()
74
+ {
75
+ return $this->data->valid();
76
+ }
77
+
78
+ /**
79
+ * (PHP 5 &gt;= 5.0.0)<br/>
80
+ * Rewind the Iterator to the first element
81
+ * @link http://php.net/manual/en/iterator.rewind.php
82
+ * @return void Any returned value is ignored.
83
+ */
84
+ public function rewind()
85
+ {
86
+ $this->data->rewind();
87
+ }
88
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Collection/PdoCollection.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Standard\Collection;
4
+
5
+ use Iterator;
6
+ use PDO;
7
+
8
+ class PdoCollection implements Iterator
9
+ {
10
+ /**
11
+ * @var \PDOStatement
12
+ */
13
+ private $stmt;
14
+
15
+ private $rowCount;
16
+
17
+ private $current = 0;
18
+
19
+ public function __construct(\PDOStatement $stmt)
20
+ {
21
+ $this->stmt = $stmt;
22
+
23
+ $this->rowCount = $this->stmt->rowCount();
24
+ }
25
+
26
+ /**
27
+ * (PHP 5 &gt;= 5.0.0)<br/>
28
+ * Return the current element
29
+ * @link http://php.net/manual/en/iterator.current.php
30
+ * @return mixed Can return any type.
31
+ */
32
+ public function current()
33
+ {
34
+ return $this->stmt->fetch(PDO::FETCH_ASSOC);
35
+ }
36
+
37
+ /**
38
+ * (PHP 5 &gt;= 5.0.0)<br/>
39
+ * Move forward to next element
40
+ * @link http://php.net/manual/en/iterator.next.php
41
+ * @return void Any returned value is ignored.
42
+ */
43
+ public function next()
44
+ {
45
+ $this->current++;
46
+ }
47
+
48
+ /**
49
+ * (PHP 5 &gt;= 5.0.0)<br/>
50
+ * Return the key of the current element
51
+ * @link http://php.net/manual/en/iterator.key.php
52
+ * @return mixed scalar on success, or null on failure.
53
+ */
54
+ public function key()
55
+ {
56
+ $this->current;
57
+ }
58
+
59
+ /**
60
+ * (PHP 5 &gt;= 5.0.0)<br/>
61
+ * Checks if current position is valid
62
+ * @link http://php.net/manual/en/iterator.valid.php
63
+ * @return boolean The return value will be casted to boolean and then evaluated.
64
+ * Returns true on success or false on failure.
65
+ */
66
+ public function valid()
67
+ {
68
+ return ($this->rowCount > $this->current);
69
+ }
70
+
71
+ /**
72
+ * (PHP 5 &gt;= 5.0.0)<br/>
73
+ * Rewind the Iterator to the first element
74
+ * @link http://php.net/manual/en/iterator.rewind.php
75
+ * @return void Any returned value is ignored.
76
+ */
77
+ public function rewind()
78
+ {
79
+ $this->stmt->execute();
80
+ $this->current = 0;
81
+ }
82
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/CsvFileObject.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Standard;
4
+
5
+ use SplFileObject;
6
+
7
+ class CsvFileObject extends SplFileObject
8
+ {
9
+ const FILE_MODE_WRITE = 'w';
10
+ const FILE_MODE_APPEND = 'a';
11
+
12
+ /**
13
+ * newline character
14
+ * @var string
15
+ */
16
+ private $newline = "\n";
17
+
18
+ /**
19
+ * CSV filter
20
+ * @var callable
21
+ */
22
+ private $csvFilter;
23
+
24
+ /**
25
+ * @param string $newline
26
+ * @return void
27
+ */
28
+ public function setNewline($newline)
29
+ {
30
+ $this->newline = $newline;
31
+ }
32
+
33
+ /**
34
+ * Set csv filter
35
+ * @param callable $filter
36
+ */
37
+ public function setCsvFilter($filter)
38
+ {
39
+ $this->csvFilter = $filter;
40
+ }
41
+
42
+ /**
43
+ * Write a field array as a CSV line
44
+ * @param array $fields
45
+ * @param string $delimiter
46
+ * @param string $enclosure
47
+ * @param useless $escape THIS PARAM IS UNSED, BUT REQUIRED EXISTS, see https://bugs.php.net/bug.php?id=68479 and https://github.com/goodby/csv/issues/56
48
+ * @return int|void
49
+ */
50
+ public function fputcsv($fields, $delimiter = null, $enclosure = null, $escape = null)
51
+ {
52
+ // Temporary output a line to memory to get line as string
53
+ $fp = fopen('php://temp', 'w+');
54
+ $arguments = func_get_args();
55
+ array_unshift($arguments, $fp);
56
+ call_user_func_array('fputcsv', $arguments);
57
+ rewind($fp);
58
+
59
+ $line = '';
60
+
61
+ while ( feof($fp) === false ) {
62
+ $line .= fgets($fp);
63
+ }
64
+
65
+ fclose($fp);
66
+
67
+ /**
68
+ * Because the php_fputcsv() implementation in PHP´s source code
69
+ * has a hardcoded "\n", this method replaces the last LF code
70
+ * with what the client code wishes.
71
+ */
72
+ $line = rtrim($line, "\n"). $this->newline;
73
+
74
+ // if the enclosure was '' | false
75
+ if (empty($enclosure)) {
76
+ $line = str_replace("\0", '', $line);
77
+ }
78
+
79
+ if ( is_callable($this->csvFilter) ) {
80
+ $line = call_user_func($this->csvFilter, $line);
81
+ }
82
+
83
+ return $this->fwrite($line);
84
+ }
85
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Exception/StrictViolationException.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Standard\Exception;
4
+
5
+ class StrictViolationException extends \RuntimeException
6
+ {
7
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/Exporter.php ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Standard;
4
+
5
+ use Goodby\CSV\Export\Protocol\ExporterInterface;
6
+ use Goodby\CSV\Export\Protocol\Exception\IOException;
7
+ use Goodby\CSV\Export\Standard\Exception\StrictViolationException;
8
+
9
+ /**
10
+ * Standard exporter class
11
+ */
12
+ class Exporter implements ExporterInterface
13
+ {
14
+ /**
15
+ * @var ExporterConfig
16
+ */
17
+ private $config;
18
+
19
+ /**
20
+ * @var int
21
+ */
22
+ private $rowConsistency = null;
23
+
24
+ /**
25
+ * @var bool
26
+ */
27
+ private $strict = true;
28
+
29
+ /**
30
+ * Return new Exporter object
31
+ * @param ExporterConfig $config
32
+ */
33
+ public function __construct(ExporterConfig $config)
34
+ {
35
+ $this->config = $config;
36
+ }
37
+
38
+ /**
39
+ * Disable strict mode
40
+ */
41
+ public function unstrict()
42
+ {
43
+ $this->strict = false;
44
+ }
45
+
46
+ /**
47
+ * {@inherit}
48
+ * @throws StrictViolationException
49
+ */
50
+ public function export($filename, $rows)
51
+ {
52
+ $delimiter = $this->config->getDelimiter();
53
+ $enclosure = $this->config->getEnclosure();
54
+ $enclosure = empty($enclosure) ? "\0" : $enclosure;
55
+ $newline = $this->config->getNewline();
56
+ $fromCharset = $this->config->getFromCharset();
57
+ $toCharset = $this->config->getToCharset();
58
+ $fileMode = $this->config->getFileMode();
59
+ $columnHeaders = $this->config->getColumnHeaders();
60
+
61
+ try {
62
+ $csv = new CsvFileObject($filename, $fileMode);
63
+ } catch ( \Exception $e ) {
64
+ throw new IOException($e->getMessage(), null, $e);
65
+ }
66
+
67
+ $csv->setNewline($newline);
68
+
69
+ if ( $toCharset ) {
70
+ $csv->setCsvFilter(function($line) use($toCharset, $fromCharset) {
71
+ return mb_convert_encoding($line, $toCharset, $fromCharset);
72
+ });
73
+ }
74
+
75
+ if (count($columnHeaders) > 0) {
76
+ $this->checkRowConsistency($columnHeaders);
77
+ $csv->fputcsv($columnHeaders, $delimiter, $enclosure);
78
+ }
79
+
80
+ foreach ( $rows as $row ) {
81
+ $this->checkRowConsistency($row);
82
+ $csv->fputcsv($row, $delimiter, $enclosure);
83
+ }
84
+ $csv->fflush();
85
+ }
86
+
87
+ /**
88
+ * Check if the column count is consistent with comparing other rows
89
+ * @param array|\Countable $row
90
+ * @throws Exception\StrictViolationException
91
+ */
92
+ private function checkRowConsistency($row)
93
+ {
94
+ if ( $this->strict === false ) {
95
+ return;
96
+ }
97
+
98
+ $current = count($row);
99
+
100
+ if ( $this->rowConsistency === null ) {
101
+ $this->rowConsistency = $current;
102
+ }
103
+
104
+ if ( $current !== $this->rowConsistency ) {
105
+ throw new StrictViolationException();
106
+ }
107
+
108
+ $this->rowConsistency = $current;
109
+ }
110
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Standard/ExporterConfig.php ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Standard;
4
+
5
+ /**
6
+ * Config for Exporter object
7
+ */
8
+ class ExporterConfig
9
+ {
10
+ /**
11
+ * Delimiter
12
+ * @var string
13
+ */
14
+ private $delimiter = ',';
15
+
16
+ /**
17
+ * Enclosure
18
+ * @var string
19
+ */
20
+ private $enclosure = '"';
21
+
22
+ /**
23
+ * Escape
24
+ * @var string
25
+ */
26
+ private $escape = '\\';
27
+
28
+ /**
29
+ * Newline code
30
+ * @var string
31
+ */
32
+ private $newline = "\r\n";
33
+
34
+ /**
35
+ * From charset
36
+ * @var string
37
+ */
38
+ private $fromCharset = 'auto';
39
+
40
+ /**
41
+ * To charset
42
+ * @var string
43
+ */
44
+ private $toCharset = null;
45
+
46
+ /**
47
+ * File mode
48
+ * @var string
49
+ */
50
+ private $fileMode = CsvFileObject::FILE_MODE_WRITE;
51
+
52
+ /**
53
+ * The column headers.
54
+ * @var array
55
+ */
56
+ private $columnHeaders = array();
57
+
58
+ /**
59
+ * Set delimiter
60
+ * @param string $delimiter
61
+ * @return ExporterConfig
62
+ */
63
+ public function setDelimiter($delimiter)
64
+ {
65
+ $this->delimiter = $delimiter;
66
+ return $this;
67
+ }
68
+
69
+ /**
70
+ * Return delimiter
71
+ * @return string
72
+ */
73
+ public function getDelimiter()
74
+ {
75
+ return $this->delimiter;
76
+ }
77
+
78
+ /**
79
+ * Set enclosure
80
+ * @param string $enclosure
81
+ * @return ExporterConfig
82
+ */
83
+ public function setEnclosure($enclosure)
84
+ {
85
+ $this->enclosure = $enclosure;
86
+ return $this;
87
+ }
88
+
89
+ /**
90
+ * Return enclosure
91
+ * @return string
92
+ */
93
+ public function getEnclosure()
94
+ {
95
+ return $this->enclosure;
96
+ }
97
+
98
+ /**
99
+ * Set escape
100
+ * @param string $escape
101
+ * @return ExporterConfig
102
+ */
103
+ public function setEscape($escape)
104
+ {
105
+ $this->escape = $escape;
106
+ return $this;
107
+ }
108
+
109
+ /**
110
+ * Return escape
111
+ * @return string
112
+ */
113
+ public function getEscape()
114
+ {
115
+ return $this->escape;
116
+ }
117
+
118
+ /**
119
+ * Set newline
120
+ * @param string $newline
121
+ * @return ExporterConfig
122
+ */
123
+ public function setNewline($newline)
124
+ {
125
+ $this->newline = $newline;
126
+ return $this;
127
+ }
128
+
129
+ /**
130
+ * Return newline
131
+ * @return string
132
+ */
133
+ public function getNewline()
134
+ {
135
+ return $this->newline;
136
+ }
137
+
138
+ /**
139
+ * Set from-character set
140
+ * @param string $fromCharset
141
+ * @return ExporterConfig
142
+ */
143
+ public function setFromCharset($fromCharset)
144
+ {
145
+ $this->fromCharset = $fromCharset;
146
+ return $this;
147
+ }
148
+
149
+ /**
150
+ * Return from-character set
151
+ * @return string
152
+ */
153
+ public function getFromCharset()
154
+ {
155
+ return $this->fromCharset;
156
+ }
157
+
158
+ /**
159
+ * Set to-character set
160
+ * @param string $toCharset
161
+ * @return ExporterConfig
162
+ */
163
+ public function setToCharset($toCharset)
164
+ {
165
+ $this->toCharset = $toCharset;
166
+ return $this;
167
+ }
168
+
169
+ /**
170
+ * Return to-character set
171
+ * @return string
172
+ */
173
+ public function getToCharset()
174
+ {
175
+ return $this->toCharset;
176
+ }
177
+
178
+ /**
179
+ * Set file mode
180
+ * @param string $fileMode
181
+ * @return ExporterConfig
182
+ */
183
+ public function setFileMode($fileMode)
184
+ {
185
+ $this->fileMode = $fileMode;
186
+ return $this;
187
+ }
188
+
189
+ /**
190
+ * Return file mode
191
+ * @return string
192
+ */
193
+ public function getFileMode()
194
+ {
195
+ return $this->fileMode;
196
+ }
197
+
198
+ /**
199
+ * Set the column headers.
200
+ * @param array $columnHeaders
201
+ * @return ExporterConfig
202
+ */
203
+ public function setColumnHeaders(array $columnHeaders)
204
+ {
205
+ $this->columnHeaders = $columnHeaders;
206
+
207
+ return $this;
208
+ }
209
+
210
+ /**
211
+ * Get the column headers.
212
+ * @return array
213
+ */
214
+ public function getColumnHeaders()
215
+ {
216
+ return $this->columnHeaders;
217
+ }
218
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Protocol/ExporterInterfaceTest.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Tests\Protocol;
4
+
5
+ use Goodby\CSV\Export\Protocol\Exception\IOException;
6
+
7
+ class ExporterInterfaceTest extends \PHPUnit_Framework_TestCase
8
+ {
9
+ public function testExport()
10
+ {
11
+ $exporter = $this->getMock('Goodby\CSV\Export\Protocol\ExporterInterface');
12
+ $exporter->expects($this->once())->method('export');
13
+
14
+ $exporter->export('filename', array(
15
+ array('ID', 'name', 'email'),
16
+ array('1', 'alice', 'alice@example.com'),
17
+ array('2', 'bob', 'bob@example.com'),
18
+ ));
19
+ }
20
+
21
+ /**
22
+ * @expectedException \Goodby\CSV\Export\Protocol\Exception\IOException
23
+ */
24
+ public function testExportsThrowsIOException()
25
+ {
26
+ $exporter = $this->getMock('Goodby\CSV\Export\Protocol\ExporterInterface');
27
+
28
+ $exporter
29
+ ->expects($this->once())
30
+ ->method('export')
31
+ ->will($this->throwException(new IOException('Unable to write')));
32
+
33
+ $exporter->export('/path/to/file.csv', array(
34
+ array('ID', 'name', 'email'),
35
+ array('1', 'alice', 'alice@example.com'),
36
+ array('2', 'bob', 'bob@example.com'),
37
+ ));
38
+ }
39
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/Collection/PdoCollectionTest.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Tests\Standard\Join\Collection;
4
+
5
+ use Goodby\CSV\Export\Standard\Collection\PdoCollection;
6
+ use Goodby\CSV\TestHelper\DbManager;
7
+
8
+ use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
9
+
10
+ class PdoCollectionTest extends \PHPUnit_Framework_TestCase
11
+ {
12
+ /**
13
+ * @var \Goodby\CSV\TestHelper\DbManager
14
+ */
15
+ private $manager = null;
16
+
17
+ public function setUp()
18
+ {
19
+ $this->manager = new DbManager();
20
+
21
+ $pdo = $this->manager->getPdo();
22
+
23
+ $stmt = $pdo->prepare("CREATE TABLE collection_test ( id INT, name VARCHAR(32) )");
24
+ $stmt->execute();
25
+
26
+ $pdo->prepare("INSERT INTO collection_test VALUES(1, 'name')")->execute();
27
+ $pdo->prepare("INSERT INTO collection_test VALUES(2, 'name')")->execute();
28
+ $pdo->prepare("INSERT INTO collection_test VALUES(3, 'name')")->execute();
29
+ }
30
+
31
+ public function tearDown()
32
+ {
33
+ unset($this->manager);
34
+ }
35
+
36
+ public function testUsage()
37
+ {
38
+ $pdo = $this->manager->getPdo();
39
+
40
+ $stmt = $pdo->prepare("SELECT * FROM collection_test");
41
+ $stmt->execute();
42
+
43
+ $pdoCollection = new PdoCollection($stmt);
44
+
45
+ foreach ($pdoCollection as $line) {
46
+ $this->assertEquals("name", $line["name"]);
47
+ }
48
+ }
49
+
50
+ public function testUsageWithCallbackCollection()
51
+ {
52
+ $pdo = $this->manager->getPdo();
53
+
54
+ $stmt = $pdo->prepare("SELECT * FROM collection_test");
55
+ $stmt->execute();
56
+
57
+ $pdoCollection = new PdoCollection($stmt);
58
+
59
+ $callbackCollection = new CallbackCollection($pdoCollection, function($row) {
60
+ $row['test'] = 'test';
61
+ return $row;
62
+ });
63
+
64
+ foreach ($callbackCollection as $line) {
65
+ $this->assertEquals('test', $line['test']);
66
+ }
67
+ }
68
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/ExporterTest.php ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Tests\Standard\Join;
4
+
5
+ use Goodby\CSV\Export\Standard\Exporter;
6
+ use Goodby\CSV\Export\Standard\ExporterConfig;
7
+ use Goodby\CSV\Export\Standard\Exception\StrictViolationException;
8
+ use Goodby\CSV\Export\Protocol\Exception\IOException;
9
+
10
+ use org\bovigo\vfs\vfsStreamDirectory;
11
+ use org\bovigo\vfs\vfsStream;
12
+
13
+ class ExporterTest extends \PHPUnit_Framework_TestCase
14
+ {
15
+ /**
16
+ * @var vfsStreamDirectory
17
+ */
18
+ private $root;
19
+
20
+ /**
21
+ * set up test environment
22
+ */
23
+ public function setUp()
24
+ {
25
+ $this->root = vfsStream::setup('output');
26
+ }
27
+
28
+ public function testExport()
29
+ {
30
+ $config = new ExporterConfig();
31
+ $exporter = new Exporter($config);
32
+
33
+ $this->assertFileNotExists('vfs://output/data.csv');
34
+ $exporter->export('vfs://output/data.csv', array(
35
+ array('ID', 'name', 'email'),
36
+ array('1', 'alice', 'alice@example.com'),
37
+ array('2', 'bob', 'bob@example.com'),
38
+ ));
39
+
40
+ $this->assertFileExists('vfs://output/data.csv');
41
+ $expectedContents = "ID,name,email\r\n";
42
+ $expectedContents .= "1,alice,alice@example.com\r\n";
43
+ $expectedContents .= "2,bob,bob@example.com\r\n";
44
+ $this->assertSame($expectedContents, file_get_contents('vfs://output/data.csv'));
45
+ }
46
+
47
+ public function test_export_with_carriage_return()
48
+ {
49
+ $config = new ExporterConfig();
50
+ $config->setNewline("\r");
51
+ $exporter = new Exporter($config);
52
+ $exporter->unstrict();
53
+
54
+ $this->assertFileNotExists('vfs://output/data.csv');
55
+ $exporter->export('vfs://output/data.csv', array(
56
+ array('aaa', 'bbb', 'ccc', 'dddd'),
57
+ array('123', '456', '789'),
58
+ array('"aaa"', '"bbb"', '', ''),
59
+ ));
60
+
61
+ $this->assertFileExists('vfs://output/data.csv');
62
+ $expectedContents = "aaa,bbb,ccc,dddd\r";
63
+ $expectedContents .= "123,456,789\r";
64
+ $expectedContents .= '"""aaa""","""bbb""",,'."\r";
65
+ $this->assertSame($expectedContents, file_get_contents('vfs://output/data.csv'));
66
+ }
67
+
68
+ public function testUnstrict()
69
+ {
70
+ $config = new ExporterConfig();
71
+ $exporter = new Exporter($config);
72
+ $this->assertAttributeSame(true, 'strict', $exporter);
73
+ $exporter->unstrict();
74
+ $this->assertAttributeSame(false, 'strict', $exporter);
75
+ }
76
+
77
+ /**
78
+ * @expectedException \Goodby\CSV\Export\Standard\Exception\StrictViolationException
79
+ */
80
+ public function testStrict()
81
+ {
82
+ $config = new ExporterConfig();
83
+ $exporter = new Exporter($config);
84
+
85
+ $exporter->export('vfs://output/data.csv', array(
86
+ array('a', 'b', 'c'),
87
+ array('a', 'b', 'c'),
88
+ array('a', 'b'),
89
+ ));
90
+ }
91
+
92
+ /**
93
+ * @requires PHP 5.4
94
+ */
95
+ public function test_throwing_IOException_when_failed_to_write_file()
96
+ {
97
+ $noWritableCsv = 'vfs://output/no-writable.csv';
98
+ touch($noWritableCsv);
99
+ chmod($noWritableCsv, 0444);
100
+
101
+ $this->assertFalse(is_writable($noWritableCsv));
102
+
103
+ $config = new ExporterConfig();
104
+ $exporter = new Exporter($config);
105
+
106
+ $e = null;
107
+
108
+ try {
109
+ $exporter->export($noWritableCsv, array(
110
+ array('a', 'b', 'c'),
111
+ ));
112
+ } catch ( IOException $e ) {
113
+
114
+ }
115
+
116
+ $this->assertTrue($e instanceof IOException);
117
+ $this->assertContains('failed to open', $e->getMessage());
118
+ }
119
+
120
+ public function test_encoding()
121
+ {
122
+ $csv = 'vfs://output/euc.csv';
123
+ $this->assertFileNotExists($csv);
124
+
125
+ $config = new ExporterConfig();
126
+ $config->setToCharset('EUC-JP');
127
+ $config->setNewline("\n");
128
+ $exporter = new Exporter($config);
129
+
130
+ $exporter->export($csv, array(
131
+ array('あ', 'い', 'う', 'え', 'お'),
132
+ ));
133
+
134
+ $this->assertFileEquals(__DIR__.'/csv_files/euc-jp.csv', $csv);
135
+ }
136
+
137
+ public function test_without_encoding()
138
+ {
139
+ $csv = 'vfs://output/utf-8.csv';
140
+ $this->assertFileNotExists($csv);
141
+
142
+ $config = new ExporterConfig();
143
+ $config->setNewline("\n");
144
+ $exporter = new Exporter($config);
145
+
146
+ $exporter->export($csv, array(
147
+ array('✔', '✔', '✔'),
148
+ array('★', '★', '★'),
149
+ ));
150
+
151
+ $this->assertFileEquals(__DIR__.'/csv_files/utf-8.csv', $csv);
152
+ }
153
+
154
+ public function test_unseekable_wrapper_and_custom_newline_code()
155
+ {
156
+ $config = new ExporterConfig();
157
+ $config->setNewline("\r\n");
158
+ $exporter = new Exporter($config);
159
+
160
+ ob_start();
161
+ $exporter->export('php://output', array(
162
+ array('a', 'b', 'c'),
163
+ array('1', '2', '3'),
164
+ ));
165
+ $output = ob_get_clean();
166
+
167
+ $expectedCount = "a,b,c\r\n1,2,3\r\n";
168
+ $this->assertSame($expectedCount, $output);
169
+ }
170
+
171
+ public function test_multiple_line_columns()
172
+ {
173
+ $csv = 'vfs://output/multiple-lines.csv';
174
+ $this->assertFileNotExists($csv);
175
+
176
+ $config = new ExporterConfig();
177
+ $config->setNewline("\r\n");
178
+ $exporter = new Exporter($config);
179
+
180
+ $exporter->export($csv, array(
181
+ array("line1\r\nline2\r\nline3", "single-line"),
182
+ array("line1\r\nline2\r\nline3", "single-line"),
183
+ array("line1\r\nline2\r\nline3", "single-line"),
184
+ ));
185
+
186
+ $this->assertFileEquals(__DIR__.'/csv_files/multiple-lines.csv', $csv);
187
+ }
188
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/UsageTest.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Tests\Standard\Join;
4
+
5
+ use Goodby\CSV\Export\Standard\Exporter;
6
+ use Goodby\CSV\Export\Standard\ExporterConfig;
7
+
8
+ use Goodby\CSV\Export\Standard\Collection\PdoCollection;
9
+
10
+ use Goodby\CSV\TestHelper\DbManager;
11
+
12
+ use org\bovigo\vfs\vfsStream;
13
+ use org\bovigo\vfs\vfsStreamDirectory;
14
+ use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
15
+
16
+ class UsageTest extends \PHPUnit_Framework_TestCase
17
+ {
18
+ /**
19
+ * @var \Goodby\CSV\TestHelper\DbManager
20
+ */
21
+ private $manager = null;
22
+
23
+ /**
24
+ * @var vfsStreamDirectory
25
+ */
26
+ private $root;
27
+
28
+ public function setUp()
29
+ {
30
+ $this->root = vfsStream::setup('output');
31
+
32
+ $this->manager = new DbManager();
33
+
34
+ $pdo = $this->manager->getPdo();
35
+
36
+ $stmt = $pdo->prepare("CREATE TABLE collection_test ( id INT, name VARCHAR(32) )");
37
+ $stmt->execute();
38
+
39
+ $pdo->prepare("INSERT INTO collection_test VALUES(1, 'name')")->execute();
40
+ $pdo->prepare("INSERT INTO collection_test VALUES(2, 'name')")->execute();
41
+ $pdo->prepare("INSERT INTO collection_test VALUES(3, 'name')")->execute();
42
+ }
43
+
44
+ public function tearDown()
45
+ {
46
+ unset($this->manager);
47
+ }
48
+
49
+ public function testUsage()
50
+ {
51
+ $pdo = $this->manager->getPdo();
52
+
53
+ $stmt = $pdo->prepare("SELECT * FROM collection_test");
54
+ $stmt->execute();
55
+
56
+ $this->assertFileNotExists('vfs://output/data.csv');
57
+
58
+ $collection = new PdoCollection($stmt);
59
+
60
+ $config = new ExporterConfig();
61
+ $exporter = new Exporter($config);
62
+ $exporter->export('vfs://output/data.csv', $collection);
63
+
64
+ $expectedContents = "1,name\r\n";
65
+ $expectedContents .= "2,name\r\n";
66
+ $expectedContents .= "3,name\r\n";
67
+
68
+ $this->assertSame($expectedContents, file_get_contents('vfs://output/data.csv'));
69
+ }
70
+
71
+ public function testUsageWithCallbackCollection()
72
+ {
73
+ $this->assertFileNotExists('vfs://output/data.csv');
74
+
75
+ $data = array();
76
+ $data[] = array(1, 'name1');
77
+ $data[] = array(2, 'name2');
78
+ $data[] = array(3, 'name3');
79
+
80
+ $collection = new CallbackCollection($data, function($row) {
81
+ $row[1] = $row[1] . '!';
82
+ return $row;
83
+ });
84
+
85
+ $config = new ExporterConfig();
86
+ $exporter = new Exporter($config);
87
+ $exporter->export('vfs://output/data.csv', $collection);
88
+
89
+ $expectedContents = "1,name1!\r\n";
90
+ $expectedContents .= "2,name2!\r\n";
91
+ $expectedContents .= "3,name3!\r\n";
92
+
93
+ $this->assertSame($expectedContents, file_get_contents('vfs://output/data.csv'));
94
+ }
95
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/euc-jp.csv ADDED
@@ -0,0 +1 @@
 
1
+ ��,��,��,��,��
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/multiple-lines.csv ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ "line1
2
+ line2
3
+ line3",single-line
4
+ "line1
5
+ line2
6
+ line3",single-line
7
+ "line1
8
+ line2
9
+ line3",single-line
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Join/csv_files/utf-8.csv ADDED
@@ -0,0 +1,2 @@
 
 
1
+ ✔,✔,✔
2
+ ★,★,★
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/Collection/CallbackCollectionTest.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Tests\Standard\Unit\Collection;
4
+
5
+ use Goodby\CSV\Export\Standard\Collection\CallbackCollection;
6
+ use Goodby\CSV\Export\Tests\Standard\Unit\Collection\SampleAggIterator;
7
+
8
+ class CallbackCollectionTest extends \PHPUnit_Framework_TestCase
9
+ {
10
+ public function testSample()
11
+ {
12
+ $data = array();
13
+ $data[] = array('user', 'name1');
14
+ $data[] = array('user', 'name2');
15
+ $data[] = array('user', 'name3');
16
+
17
+ $collection = new CallbackCollection($data, function($mixed) {
18
+ return $mixed;
19
+ });
20
+
21
+ $index = 1;
22
+ foreach ($collection as $each) {
23
+ $this->assertEquals($each[0], 'user');
24
+ $this->assertEquals($each[1], 'name' . $index);
25
+ $index++;
26
+ }
27
+ }
28
+
29
+ public function testIteratorAggregate()
30
+ {
31
+
32
+ $data = array();
33
+ $data[] = array('user', 'name1');
34
+ $data[] = array('user', 'name2');
35
+ $data[] = array('user', 'name3');
36
+
37
+ $iterator = new SampleAggIterator($data);
38
+
39
+ $collection = new CallbackCollection($iterator, function($mixed) {
40
+ return $mixed;
41
+ });
42
+
43
+ $index = 1;
44
+ foreach ($collection as $each) {
45
+ $this->assertEquals($each[0], 'user');
46
+ $this->assertEquals($each[1], 'name' . $index);
47
+ $index++;
48
+ }
49
+ }
50
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/Collection/SampleAggIterator.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Tests\Standard\Unit\Collection;
4
+ use \ArrayIterator;
5
+
6
+ class SampleAggIterator implements \IteratorAggregate
7
+ {
8
+ protected $data;
9
+
10
+ public function __construct($data)
11
+ {
12
+ $this->data = $data;
13
+ }
14
+
15
+ public function getIterator()
16
+ {
17
+ return new ArrayIterator($this->data);
18
+ }
19
+ }
vendor/goodby/csv/src/Goodby/CSV/Export/Tests/Standard/Unit/ExporterConfigTest.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Export\Tests\Standard\Unit;
4
+
5
+ use Goodby\CSV\Export\Standard\ExporterConfig;
6
+
7
+ class ExporterConfigTest extends \PHPUnit_Framework_TestCase
8
+ {
9
+ public function testDelimiter()
10
+ {
11
+ $config = new ExporterConfig();
12
+ $this->assertSame(',', $config->getDelimiter());
13
+ $this->assertSame('del', $config->setDelimiter('del')->getDelimiter());
14
+ }
15
+
16
+ public function testEnclosure()
17
+ {
18
+ $config = new ExporterConfig();
19
+ $this->assertSame('"', $config->getEnclosure());
20
+ $this->assertSame('enc', $config->setEnclosure('enc')->getEnclosure());
21
+ }
22
+
23
+ public function testEscape()
24
+ {
25
+ $config = new ExporterConfig();
26
+ $this->assertSame('\\', $config->getEscape());
27
+ $this->assertSame('esc', $config->setEscape('esc')->getEscape());
28
+ }
29
+
30
+ public function testNewline()
31
+ {
32
+ $config = new ExporterConfig();
33
+ $this->assertSame("\r\n", $config->getNewline());
34
+ $this->assertSame("\r", $config->setNewline("\r")->getNewline());
35
+ }
36
+
37
+ public function testFromCharset()
38
+ {
39
+ $config = new ExporterConfig();
40
+ $this->assertSame('auto', $config->getFromCharset());
41
+ $this->assertSame('UTF-8', $config->setFromCharset('UTF-8')->getFromCharset());
42
+ }
43
+
44
+ public function testToCharset()
45
+ {
46
+ $config = new ExporterConfig();
47
+ $this->assertSame(null, $config->getToCharset());
48
+ $this->assertSame('UTF-8', $config->setToCharset('UTF-8')->getToCharset());
49
+ }
50
+
51
+ public function testColumnHeaders()
52
+ {
53
+ $columnHeaders = array(
54
+ 'Header 1',
55
+ 'Header 2',
56
+ 'Header 3',
57
+ );
58
+
59
+ $config = new ExporterConfig();
60
+ $this->assertSame(array(), $config->getColumnHeaders());
61
+ $this->assertSame($columnHeaders, $config->setColumnHeaders($columnHeaders)->getColumnHeaders());
62
+ }
63
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/Exception/CsvFileNotFoundException.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Protocol\Exception;
4
+
5
+ /**
6
+ * Throws if csv file not found
7
+ */
8
+ class CsvFileNotFoundException extends \RuntimeException
9
+ {
10
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/Exception/InvalidLexicalException.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Protocol\Exception;
4
+
5
+ /**
6
+ * Invalid lexical Exception
7
+ */
8
+ class InvalidLexicalException extends \RuntimeException
9
+ {
10
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/InterpreterInterface.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Protocol;
4
+
5
+ /**
6
+ * Interface of the Interpreter
7
+ */
8
+ interface InterpreterInterface
9
+ {
10
+ /**
11
+ * @param $line
12
+ * @return void
13
+ */
14
+ public function interpret($line);
15
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Protocol/LexerInterface.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Protocol;
4
+
5
+ use Goodby\CSV\Import\Protocol\Exception\CsvFileNotFoundException;
6
+
7
+ /**
8
+ * Interface of Lexer
9
+ */
10
+ interface LexerInterface
11
+ {
12
+ /**
13
+ * Parse csv file
14
+ * @param string $filename
15
+ * @param InterpreterInterface $interpreter
16
+ * @return boolean
17
+ * @throws CsvFileNotFoundException
18
+ */
19
+ public function parse($filename, InterpreterInterface $interpreter);
20
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Exception/StrictViolationException.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Standard\Exception;
4
+
5
+ class StrictViolationException extends \RuntimeException
6
+ {
7
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Interpreter.php ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Standard;
4
+
5
+ use Goodby\CSV\Import\Protocol\InterpreterInterface;
6
+ use Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException;
7
+ use Goodby\CSV\Import\Standard\Exception\StrictViolationException;
8
+
9
+ /**
10
+ * standard interpreter
11
+ */
12
+ class Interpreter implements InterpreterInterface
13
+ {
14
+ /**
15
+ * @var array
16
+ */
17
+ private $observers = array();
18
+
19
+ /**
20
+ * @var int
21
+ */
22
+ private $rowConsistency = null;
23
+
24
+ /**
25
+ * @var bool
26
+ */
27
+ private $strict = true;
28
+
29
+ /**
30
+ * interpret line
31
+ *
32
+ * @param $line
33
+ * @return void
34
+ * @throws \Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException
35
+ */
36
+ public function interpret($line)
37
+ {
38
+ $this->checkRowConsistency($line);
39
+
40
+ if (!is_array($line)) {
41
+ throw new InvalidLexicalException('line is must be array');
42
+ }
43
+
44
+ $this->notify($line);
45
+ }
46
+
47
+ public function unstrict()
48
+ {
49
+ $this->strict = false;
50
+ }
51
+
52
+ /**
53
+ * add observer
54
+ *
55
+ * @param callable $observer
56
+ */
57
+ public function addObserver($observer)
58
+ {
59
+ $this->checkCallable($observer);
60
+
61
+ $this->observers[] = $observer;
62
+ }
63
+
64
+ /**
65
+ * notify to observers
66
+ *
67
+ * @param $line
68
+ */
69
+ private function notify($line)
70
+ {
71
+ $observers = $this->observers;
72
+
73
+ foreach ($observers as $observer) {
74
+ $this->delegate($observer, $line);
75
+ }
76
+ }
77
+
78
+ /**
79
+ * delegate to observer
80
+ *
81
+ * @param $observer
82
+ * @param $line
83
+ */
84
+ private function delegate($observer, $line)
85
+ {
86
+ call_user_func($observer, $line);
87
+ }
88
+
89
+ /**
90
+ * check observer is callable
91
+ *
92
+ * @param $observer
93
+ * @throws \InvalidArgumentException
94
+ */
95
+ private function checkCallable($observer)
96
+ {
97
+ if (!is_callable($observer)) {
98
+ throw new \InvalidArgumentException('observer must be callable');
99
+ }
100
+ }
101
+
102
+ private function checkRowConsistency($line)
103
+ {
104
+ if (!$this->strict) {
105
+ return;
106
+ }
107
+
108
+ $current = count($line);
109
+
110
+ if ($this->rowConsistency === null) {
111
+ $this->rowConsistency = $current;
112
+ }
113
+
114
+ if ($current !== $this->rowConsistency) {
115
+ throw new StrictViolationException(sprintf('Column size should be %u, but %u columns given', $this->rowConsistency, $current));
116
+ }
117
+
118
+ $this->rowConsistency = $current;
119
+ }
120
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Lexer.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Standard;
4
+
5
+ use Goodby\CSV\Import\Protocol\LexerInterface;
6
+ use Goodby\CSV\Import\Protocol\InterpreterInterface;
7
+ use Goodby\CSV\Import\Standard\StreamFilter\ConvertMbstringEncoding;
8
+ use SplFileObject;
9
+
10
+ class Lexer implements LexerInterface
11
+ {
12
+ /**
13
+ * @var LexerConfig
14
+ */
15
+ private $config;
16
+
17
+ /**
18
+ * Return new Lexer object
19
+ * @param LexerConfig $config
20
+ */
21
+ public function __construct(LexerConfig $config = null)
22
+ {
23
+ if (!$config) {
24
+ $config = new LexerConfig();
25
+ }
26
+
27
+ $this->config = $config;
28
+ ConvertMbstringEncoding::register();
29
+ }
30
+
31
+ /**
32
+ * {@inherit}
33
+ */
34
+ public function parse($filename, InterpreterInterface $interpreter)
35
+ {
36
+ ini_set('auto_detect_line_endings', true); // For mac's office excel csv
37
+
38
+ $delimiter = $this->config->getDelimiter();
39
+ $enclosure = $this->config->getEnclosure();
40
+ $escape = $this->config->getEscape();
41
+ $fromCharset = $this->config->getFromCharset();
42
+ $toCharset = $this->config->getToCharset();
43
+ $flags = $this->config->getFlags();
44
+ $ignoreHeader = $this->config->getIgnoreHeaderLine();
45
+
46
+ if ( $fromCharset === null ) {
47
+ $url = $filename;
48
+ } else {
49
+ $url = ConvertMbstringEncoding::getFilterURL($filename, $fromCharset, $toCharset);
50
+ }
51
+
52
+ $csv = new SplFileObject($url);
53
+ $csv->setCsvControl($delimiter, $enclosure, $escape);
54
+ $csv->setFlags($flags);
55
+
56
+ $originalLocale = setlocale(LC_ALL, '0'); // Backup current locale
57
+ setlocale(LC_ALL, 'en_US.UTF-8');
58
+
59
+ foreach ( $csv as $lineNumber => $line ) {
60
+ if ($ignoreHeader && $lineNumber == 0 || (count($line) === 1 && trim($line[0]) === '')) {
61
+ continue;
62
+ }
63
+ $interpreter->interpret($line);
64
+ }
65
+
66
+ parse_str(str_replace(';', '&', $originalLocale), $locale_array);
67
+ setlocale(LC_ALL, $locale_array); // Reset locale
68
+ }
69
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/LexerConfig.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Standard;
4
+
5
+ use SplFileObject;
6
+
7
+ /**
8
+ * Config for Lexer object
9
+ */
10
+ class LexerConfig
11
+ {
12
+ /**
13
+ * @var string
14
+ */
15
+ private $delimiter = ',';
16
+
17
+ /**
18
+ * @var string
19
+ */
20
+ private $enclosure = '"';
21
+
22
+ /**
23
+ * @var string
24
+ */
25
+ private $escape = '\\';
26
+
27
+ /**
28
+ * @var string
29
+ */
30
+ private $fromCharset;
31
+
32
+ /**
33
+ * @var string
34
+ */
35
+ private $toCharset;
36
+
37
+ /**
38
+ * @var integer
39
+ */
40
+ private $flags = SplFileObject::READ_CSV;
41
+
42
+ /**
43
+ * @var bool
44
+ */
45
+ private $ignoreHeaderLine = false;
46
+
47
+ /**
48
+ * Set delimiter
49
+ * @param string $delimiter
50
+ * @return LexerConfig
51
+ */
52
+ public function setDelimiter($delimiter)
53
+ {
54
+ $this->delimiter = $delimiter;
55
+ return $this;
56
+ }
57
+
58
+ /**
59
+ * Return delimiter
60
+ * @return string
61
+ */
62
+ public function getDelimiter()
63
+ {
64
+ return $this->delimiter;
65
+ }
66
+
67
+ /**
68
+ * Set enclosure
69
+ * @param string $enclosure
70
+ * @return LexerConfig
71
+ */
72
+ public function setEnclosure($enclosure)
73
+ {
74
+ $this->enclosure = $enclosure;
75
+ return $this;
76
+ }
77
+
78
+ /**
79
+ * Return enclosure
80
+ * @return string
81
+ */
82
+ public function getEnclosure()
83
+ {
84
+ return $this->enclosure;
85
+ }
86
+
87
+ /**
88
+ * Set escape
89
+ * @param string $escape
90
+ * @return LexerConfig
91
+ */
92
+ public function setEscape($escape)
93
+ {
94
+ $this->escape = $escape;
95
+ return $this;
96
+ }
97
+
98
+ /**
99
+ * Return escape
100
+ * @return string
101
+ */
102
+ public function getEscape()
103
+ {
104
+ return $this->escape;
105
+ }
106
+
107
+ /**
108
+ * Set from-character set
109
+ * @param string $fromCharset
110
+ * @return LexerConfig
111
+ */
112
+ public function setFromCharset($fromCharset)
113
+ {
114
+ $this->fromCharset = $fromCharset;
115
+ return $this;
116
+ }
117
+
118
+ /**
119
+ * Return from-character set
120
+ * @return string
121
+ */
122
+ public function getFromCharset()
123
+ {
124
+ return $this->fromCharset;
125
+ }
126
+
127
+ /**
128
+ * Set to-character set
129
+ * @param string $toCharset
130
+ * @return LexerConfig
131
+ */
132
+ public function setToCharset($toCharset)
133
+ {
134
+ $this->toCharset = $toCharset;
135
+ return $this;
136
+ }
137
+
138
+ /**
139
+ * Return to-character set
140
+ * @return string
141
+ */
142
+ public function getToCharset()
143
+ {
144
+ return $this->toCharset;
145
+ }
146
+
147
+ /**
148
+ * Set flags
149
+ * @param integer $flags Bit mask of the flags to set. See SplFileObject constants for the available flags.
150
+ * @return LexerConfig
151
+ * @see http://php.net/manual/en/class.splfileobject.php#splfileobject.constants
152
+ */
153
+ public function setFlags($flags)
154
+ {
155
+ $this->flags = $flags;
156
+ return $this;
157
+ }
158
+
159
+ /**
160
+ * Return flags
161
+ * @return integer
162
+ */
163
+ public function getFlags()
164
+ {
165
+ return $this->flags;
166
+ }
167
+
168
+ /**
169
+ * @param $ignoreHeaderLine
170
+ * @return $this
171
+ */
172
+ public function setIgnoreHeaderLine($ignoreHeaderLine)
173
+ {
174
+ $this->ignoreHeaderLine = $ignoreHeaderLine;
175
+ return $this;
176
+ }
177
+
178
+ /**
179
+ * @return boolean
180
+ */
181
+ public function getIgnoreHeaderLine()
182
+ {
183
+ return $this->ignoreHeaderLine;
184
+ }
185
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Observer/PdoObserver.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Standard\Observer;
4
+
5
+ class PdoObserver
6
+ {
7
+ private $table;
8
+ private $columns;
9
+
10
+ private $dsn;
11
+ private $options = null;
12
+
13
+ private $pdo = null;
14
+
15
+ public function __construct($table, $columns, $dsn, $options)
16
+ {
17
+ $this->table = $table;
18
+ $this->columns = $columns;
19
+
20
+ $this->dsn = $dsn;
21
+ $this->options = $options;
22
+ }
23
+
24
+ public function notify($line)
25
+ {
26
+ if ($this->pdo === null) {
27
+ $this->pdo = new \PDO($this->dsn, $this->options['user'], $this->options['password']);
28
+ }
29
+
30
+ $this->execute($line);
31
+ }
32
+
33
+ private function execute($line)
34
+ {
35
+ $line = array_map(function($value) {
36
+ $number = filter_var($value, FILTER_VALIDATE_INT);
37
+
38
+ if ($number !== false) {
39
+ return $number;
40
+ }
41
+
42
+ if (is_string($value)) {
43
+ if (strtolower($value) === 'null') {
44
+ return 'NULL';
45
+ }
46
+
47
+ if (strtolower($value) === 'true') {
48
+ return 1;
49
+ }
50
+
51
+ if (strtolower($value) === 'false') {
52
+ return 0;
53
+ }
54
+
55
+ return $value;
56
+ }
57
+
58
+ throw new \InvalidArgumentException('value is invalid: ' . var_export($value, 1));
59
+ }, $line);
60
+
61
+ $prepare = array_map(function() {
62
+ return '?';
63
+ }, $line);
64
+
65
+ $sql = 'INSERT INTO ' . $this->table . '(' . join(', ', $this->columns) . ')' .
66
+ ' VALUES(' . join(',', $prepare) . ')';
67
+
68
+ $stmt = $this->pdo->prepare($sql);
69
+ $stmt->execute($line);
70
+ }
71
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/Observer/SqlObserver.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Standard\Observer;
4
+
5
+ class SqlObserver
6
+ {
7
+ private $table;
8
+ private $columns;
9
+ private $path;
10
+
11
+ private $file = null;
12
+
13
+ public function __construct($table, $columns, $path)
14
+ {
15
+ $this->table = $table;
16
+ $this->columns = $columns;
17
+ $this->path = $path;
18
+ }
19
+
20
+ public function notify($line)
21
+ {
22
+ $sql = $this->buildSql($line);
23
+
24
+ if ($this->file === null) {
25
+ $this->file = new \SplFileObject($this->path, 'a');
26
+ }
27
+
28
+ $this->file->fwrite($sql);
29
+ }
30
+
31
+ private function buildSql($line)
32
+ {
33
+ $line = array_map(function($value) {
34
+ $number = filter_var($value, FILTER_VALIDATE_INT);
35
+
36
+ if ($number !== false) {
37
+ return $number;
38
+ }
39
+
40
+ if (is_string($value)) {
41
+ if (strtolower($value) === 'null') {
42
+ return 'NULL';
43
+ }
44
+
45
+ if (strtolower($value) === 'true') {
46
+ return 'true';
47
+ }
48
+
49
+ if (strtolower($value) === 'false') {
50
+ return 'false';
51
+ }
52
+
53
+ return '"' . addslashes($value) . '"';
54
+ }
55
+
56
+ throw new \InvalidArgumentException('value is invalid: ' . var_export($value, 1));
57
+ }, $line);
58
+
59
+ return 'INSERT INTO ' . $this->table . '(' . join(', ', $this->columns) . ')' .
60
+ ' VALUES(' . join(', ', $line) . ');';
61
+ }
62
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Standard/StreamFilter/ConvertMbstringEncoding.php ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Standard\StreamFilter;
4
+
5
+ use php_user_filter;
6
+ use RuntimeException;
7
+
8
+ class ConvertMbstringEncoding extends php_user_filter
9
+ {
10
+ /**
11
+ * @var string
12
+ */
13
+ const FILTER_NAMESPACE = 'convert.mbstring.encoding.';
14
+
15
+ /**
16
+ * @var bool
17
+ */
18
+ private static $hasBeenRegistered = false;
19
+
20
+ /**
21
+ * @var string
22
+ */
23
+ private $fromCharset;
24
+
25
+ /**
26
+ * @var string
27
+ */
28
+ private $toCharset;
29
+
30
+ /**
31
+ * Return filter name
32
+ * @return string
33
+ */
34
+ public static function getFilterName()
35
+ {
36
+ return self::FILTER_NAMESPACE.'*';
37
+ }
38
+
39
+ /**
40
+ * Register this class as a stream filter
41
+ * @throws \RuntimeException
42
+ */
43
+ public static function register()
44
+ {
45
+ if ( self::$hasBeenRegistered === true ) {
46
+ return;
47
+ }
48
+
49
+ if ( stream_filter_register(self::getFilterName(), __CLASS__) === false ) {
50
+ throw new RuntimeException('Failed to register stream filter: '.self::getFilterName());
51
+ }
52
+
53
+ self::$hasBeenRegistered = true;
54
+ }
55
+
56
+ /**
57
+ * Return filter URL
58
+ * @param string $filename
59
+ * @param string $fromCharset
60
+ * @param string $toCharset
61
+ * @return string
62
+ */
63
+ public static function getFilterURL($filename, $fromCharset, $toCharset = null)
64
+ {
65
+ if ( $toCharset === null ) {
66
+ return sprintf('php://filter/convert.mbstring.encoding.%s/resource=%s', $fromCharset, $filename);
67
+ } else {
68
+ return sprintf('php://filter/convert.mbstring.encoding.%s:%s/resource=%s', $fromCharset, $toCharset, $filename);
69
+ }
70
+ }
71
+
72
+ /**
73
+ * @return bool
74
+ */
75
+ public function onCreate()
76
+ {
77
+ if ( strpos($this->filtername, self::FILTER_NAMESPACE) !== 0 ) {
78
+ return false;
79
+ }
80
+
81
+ $parameterString = substr($this->filtername, strlen(self::FILTER_NAMESPACE));
82
+
83
+ if ( ! preg_match('/^(?P<from>[-\w]+)(:(?P<to>[-\w]+))?$/', $parameterString, $matches) ) {
84
+ return false;
85
+ }
86
+
87
+ $this->fromCharset = isset($matches['from']) ? $matches['from'] : 'auto';
88
+ $this->toCharset = isset($matches['to']) ? $matches['to'] : mb_internal_encoding();
89
+
90
+ return true;
91
+ }
92
+
93
+ /**
94
+ * @param string $in
95
+ * @param string $out
96
+ * @param string $consumed
97
+ * @param $closing
98
+ * @return int
99
+ */
100
+ public function filter($in, $out, &$consumed, $closing)
101
+ {
102
+ while ( $bucket = stream_bucket_make_writeable($in) ) {
103
+ $bucket->data = mb_convert_encoding($bucket->data, $this->toCharset, $this->fromCharset);
104
+ $consumed += $bucket->datalen;
105
+ stream_bucket_append($out, $bucket);
106
+ }
107
+
108
+ return PSFS_PASS_ON;
109
+ }
110
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Protocol/InterpreterTest.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Protocol;
4
+
5
+ use Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException;
6
+
7
+ /**
8
+ * unit test for Interface of the Interpreter
9
+ */
10
+ class InterpreterTest extends \PHPUnit_Framework_TestCase
11
+ {
12
+ public function testInterpreterInterface()
13
+ {
14
+ $line = array();
15
+
16
+ $interpreter = $this->getMock('\Goodby\CSV\Import\Protocol\InterpreterInterface');
17
+
18
+ $interpreter->expects($this->once())
19
+ ->method('interpret')
20
+ ->with($this->identicalTo($line))
21
+ ;
22
+
23
+ $interpreter->interpret($line);
24
+ }
25
+
26
+ /**
27
+ * @expectedException \Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException
28
+ */
29
+ public function testInterpreterInterfaceWillThrownInvalidLexicalException()
30
+ {
31
+ $interpreter = $this->getMock('\Goodby\CSV\Import\Protocol\InterpreterInterface');
32
+
33
+ $interpreter->expects($this->once())
34
+ ->method('interpret')
35
+ ->will($this->throwException(new InvalidLexicalException()))
36
+ ;
37
+
38
+ $line = "INVALID LEXICAL";
39
+
40
+ $interpreter->interpret($line);
41
+ }
42
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Protocol/LexerTest.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Protocol;
4
+
5
+ use Mockery as m;
6
+
7
+ /**
8
+ * unit test for CSV Lexer
9
+ */
10
+ class LexerTest extends \PHPUnit_Framework_TestCase
11
+ {
12
+ public function testInterface()
13
+ {
14
+ $lexer = m::mock('\Goodby\CSV\Import\Protocol\LexerInterface');
15
+ $interpreter = m::mock('\Goodby\CSV\Import\Protocol\InterpreterInterface');
16
+
17
+ $path = 'dummy.csv';
18
+
19
+ $lexer->shouldReceive('parse')->with($path, $interpreter);
20
+
21
+ $lexer->parse($path, $interpreter);
22
+ }
23
+
24
+ /**
25
+ * @expectedException \Goodby\CSV\Import\Protocol\Exception\CsvFileNotFoundException
26
+ */
27
+ public function testCsvFileNotFound()
28
+ {
29
+ $lexer = m::mock('\Goodby\CSV\Import\Protocol\LexerInterface');
30
+ $interpreter = m::mock('\Goodby\CSV\Import\Protocol\InterpreterInterface');
31
+
32
+ $path = 'invalid_dummy.csv';
33
+
34
+ $lexer->shouldReceive('parse')
35
+ ->with($path, $interpreter)
36
+ ->andThrow('Goodby\CSV\Import\Protocol\Exception\CsvFileNotFoundException')
37
+ ;
38
+
39
+ $lexer->parse($path, $interpreter);
40
+ }
41
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/CSVFiles.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Standard\Join;
4
+
5
+ class CSVFiles
6
+ {
7
+ public static function getShiftJisCsv()
8
+ {
9
+ return __DIR__.'/csv_files/sjis.csv';
10
+ }
11
+
12
+ public static function getMacExcelCsv()
13
+ {
14
+ return __DIR__.'/csv_files/mac-excel.csv';
15
+ }
16
+
17
+ public static function getMacExcelLines()
18
+ {
19
+ return array(
20
+ array('a', 'b', 'c'),
21
+ array('d', 'e', 'f'),
22
+ );
23
+ }
24
+
25
+ public static function getTabSeparatedCsv()
26
+ {
27
+ return __DIR__.'/csv_files/tab-separated.csv';
28
+ }
29
+
30
+ public static function getTabSeparatedLines()
31
+ {
32
+ return array(
33
+ array('value1', 'value2', 'value3'),
34
+ array('value4', 'value5', 'value6'),
35
+ );
36
+ }
37
+
38
+ public static function getColonSeparatedCsv()
39
+ {
40
+ return __DIR__.'/csv_files/colon-separated.csv';
41
+ }
42
+
43
+ public static function getColonSeparatedLines()
44
+ {
45
+ return array(
46
+ array('value1', 'value2', 'value3'),
47
+ array('value4', 'value5', 'value6'),
48
+ );
49
+ }
50
+
51
+ public static function getUtf8Csv()
52
+ {
53
+ return __DIR__.'/csv_files/utf-8.csv';
54
+ }
55
+
56
+ public static function getUtf8Lines()
57
+ {
58
+ return array(
59
+ array('✔', '✔', '✔', '✔'),
60
+ array('★', '★', '★', '★'),
61
+ array('유', '니', '코', '드'),
62
+ );
63
+ }
64
+
65
+ public static function getIssue5CSV()
66
+ {
67
+ return __DIR__.'/csv_files/issue-5.csv';
68
+ }
69
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/LexerTest.php ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Standard\Join;
4
+
5
+ use Mockery as m;
6
+ use Goodby\CSV\Import\Standard\Lexer;
7
+ use Goodby\CSV\Import\Standard\Interpreter;
8
+ use Goodby\CSV\Import\Standard\LexerConfig;
9
+
10
+ class LexerTest extends \PHPUnit_Framework_TestCase
11
+ {
12
+ public function test_shift_jis_CSV()
13
+ {
14
+ $shiftJisCsv = CSVFiles::getShiftJisCsv();
15
+ $lines = array(
16
+ array('あ', 'い', 'う', 'え', 'お'),
17
+ array('日本語', '日本語', '日本語', '日本語', '日本語'),
18
+ array('ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ'),
19
+ array('"quoted"', "a'quote'", 'a, b and c', '', ''),
20
+ );
21
+
22
+ $interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
23
+ $interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
24
+ $interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
25
+ $interpreter->expects($this->at(2))->method('interpret')->with($lines[2]);
26
+ $interpreter->expects($this->at(3))->method('interpret')->with($lines[3]);
27
+
28
+ $config = new LexerConfig();
29
+ $config->setToCharset('UTF-8')->setFromCharset('SJIS-win');
30
+ $lexer = new Lexer($config);
31
+ $lexer->parse($shiftJisCsv, $interpreter);
32
+ }
33
+
34
+ public function test_mac_excel_csv()
35
+ {
36
+ $csv = CSVFiles::getMacExcelCsv();
37
+ $lines = CSVFiles::getMacExcelLines();
38
+
39
+ $interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
40
+ $interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
41
+ $interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
42
+
43
+ $config = new LexerConfig();
44
+ $lexer = new Lexer($config);
45
+ $lexer->parse($csv, $interpreter);
46
+ }
47
+
48
+ public function test_tab_separated_csv()
49
+ {
50
+ $csv = CSVFiles::getTabSeparatedCsv();
51
+ $lines = CSVFiles::getTabSeparatedLines();
52
+
53
+ $interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
54
+ $interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
55
+ $interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
56
+
57
+ $config = new LexerConfig();
58
+ $config->setDelimiter("\t");
59
+ $lexer = new Lexer($config);
60
+ $lexer->parse($csv, $interpreter);
61
+ }
62
+
63
+ public function test_colon_separated_csv()
64
+ {
65
+ $csv = CSVFiles::getColonSeparatedCsv();
66
+ $lines = CSVFiles::getColonSeparatedLines();
67
+
68
+ $interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
69
+ $interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
70
+ $interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
71
+
72
+ $config = new LexerConfig();
73
+ $config->setDelimiter(':');
74
+ $lexer = new Lexer($config);
75
+ $lexer->parse($csv, $interpreter);
76
+ }
77
+
78
+ public function test_utf8_csv()
79
+ {
80
+ $csv = CSVFiles::getUtf8Csv();
81
+ $lines = CSVFiles::getUtf8Lines();
82
+
83
+ $interpreter = $this->getMock('Goodby\CSV\Import\Standard\Interpreter', array('interpret'));
84
+ $interpreter->expects($this->at(0))->method('interpret')->with($lines[0]);
85
+ $interpreter->expects($this->at(1))->method('interpret')->with($lines[1]);
86
+
87
+ $config = new LexerConfig();
88
+ $lexer = new Lexer($config);
89
+ $lexer->parse($csv, $interpreter);
90
+ }
91
+
92
+ /**
93
+ * When import CSV file with data in Japanese (2 bytes character),
94
+ * data imported to database with error encoding
95
+ * @link https://github.com/goodby/csv/issues/5
96
+ */
97
+ public function test_issue_5()
98
+ {
99
+ $csvFilename = CSVFiles::getIssue5CSV();
100
+
101
+ $csvContents = array();
102
+
103
+ $config = new LexerConfig();
104
+ $config
105
+ ->setToCharset('UTF-8')
106
+ ->setFromCharset('UTF-8');
107
+ $lexer = new Lexer($config);
108
+ $interpreter = new Interpreter();
109
+ $interpreter->addObserver(function(array $columns) use (&$csvContents) {
110
+ $csvContents[] = $columns;
111
+ });
112
+
113
+ $lexer->parse($csvFilename, $interpreter);
114
+
115
+ $this->assertSame(array(
116
+ array("ID", "NAME", "MAKER"),
117
+ array("1", "スティック型クリーナ", "alice_updated@example.com"),
118
+ array("2", "bob", "bob@example.com"),
119
+ array("14", "スティック型クリーナ", "tho@eample.com"),
120
+ array("16", "スティック型", "carot@eample.com"),
121
+ ), $csvContents);
122
+ }
123
+
124
+ public function test_ignore_header()
125
+ {
126
+ $csvFilename = CSVFiles::getIssue5CSV();
127
+
128
+ $config = new LexerConfig();
129
+ $config
130
+ ->setIgnoreHeaderLine(true)
131
+ ->setToCharset('UTF-8')
132
+ ->setFromCharset('UTF-8');
133
+
134
+ $lexer = new Lexer($config);
135
+
136
+ $interpreter = new Interpreter();
137
+ $interpreter->addObserver(function(array $columns) use (&$csvContents) {
138
+ $csvContents[] = $columns;
139
+ });
140
+
141
+ $lexer->parse($csvFilename, $interpreter);
142
+ $this->assertSame(array(
143
+ array("1", "スティック型クリーナ", "alice_updated@example.com"),
144
+ array("2", "bob", "bob@example.com"),
145
+ array("14", "スティック型クリーナ", "tho@eample.com"),
146
+ array("16", "スティック型", "carot@eample.com"),
147
+ ), $csvContents);
148
+ }
149
+
150
+ public function test_instantiation_without_config()
151
+ {
152
+ $lexer = new Lexer();
153
+
154
+ $this->assertInstanceOf('Goodby\CSV\Import\Standard\Lexer', $lexer);
155
+ }
156
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/Observer/PdoObserverTest.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Standard\Join\Observer;
4
+
5
+ use Mockery as m;
6
+
7
+ use Goodby\CSV\Import\Standard\Interpreter;
8
+ use Goodby\CSV\Import\Standard\Observer\PdoObserver;
9
+
10
+ use Goodby\CSV\TestHelper\DbManager;
11
+
12
+ /**
13
+ * unit test for pdo observer
14
+ */
15
+ class PdoObserverTest extends \PHPUnit_Framework_TestCase
16
+ {
17
+ /**
18
+ * @var \Goodby\CSV\TestHelper\DbManager
19
+ */
20
+ private $manager = null;
21
+
22
+ public function setUp()
23
+ {
24
+ $this->manager = new DbManager();
25
+
26
+ $pdo = $this->manager->getPdo();
27
+
28
+ $stmt = $pdo->prepare("CREATE TABLE test (id INT, name VARCHAR(32), age INT, flag TINYINT, flag2 TINYINT, status VARCHAR(32), contents TEXT)");
29
+ $stmt->execute();
30
+ }
31
+
32
+ public function tearDown()
33
+ {
34
+ unset($this->manager);
35
+ }
36
+
37
+ public function testUsage()
38
+ {
39
+ $interpreter = new Interpreter();
40
+
41
+ $table = 'test';
42
+
43
+ $dsn = $this->manager->getDsn();
44
+ $options = array('user' => $this->manager->getUser(), 'password' => $this->manager->getPassword());
45
+
46
+ $sqlObserver = new PdoObserver($table, array('id', 'name', 'age', 'flag', 'flag2', 'status', 'contents'), $dsn, $options);
47
+
48
+ $interpreter->addObserver(array($sqlObserver, 'notify'));
49
+
50
+ $interpreter->interpret(array('123', 'test', '28', 'true', 'false', 'null', 'test"test'));
51
+
52
+ $pdo = $this->manager->getPdo();
53
+
54
+ $stmt = $pdo->prepare("SELECT * FROM " . $table);
55
+ $stmt->execute();
56
+
57
+ $result = $stmt->fetch();
58
+
59
+ $this->assertEquals(123, $result[0]);
60
+ $this->assertEquals('test', $result[1]);
61
+ $this->assertEquals(28, $result[2]);
62
+ $this->assertEquals(1, $result[3]);
63
+ $this->assertEquals(0, $result[4]);
64
+ $this->assertEquals('NULL', $result[5]);
65
+ $this->assertEquals('test"test', $result[6]);
66
+ }
67
+
68
+ /**
69
+ * @expectedException \InvalidArgumentException
70
+ * @expectedExceptionMessage value is invalid: array
71
+ */
72
+ public function testInvalidLine()
73
+ {
74
+ $interpreter = new Interpreter();
75
+
76
+ $table = 'test';
77
+
78
+ $options = array('user' => $this->manager->getUser(), 'password' => $this->manager->getPassword());
79
+
80
+ $sqlObserver = new PdoObserver($table, array('id', 'name'), $this->manager->getDsn(), $options);
81
+
82
+ $interpreter->addObserver(array($sqlObserver, 'notify'));
83
+
84
+ $interpreter->interpret(array('123', array('test', 'test')));
85
+ }
86
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/colon-separated.csv ADDED
@@ -0,0 +1,2 @@
 
 
1
+ value1:value2:value3
2
+ value4:value5:value6
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/issue-5.csv ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ ID,NAME,MAKER
2
+ 1,スティック型クリーナ,alice_updated@example.com
3
+ 2,bob,bob@example.com
4
+ 14,スティック型クリーナ,tho@eample.com
5
+ 16,スティック型,carot@eample.com
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/mac-excel.csv ADDED
@@ -0,0 +1 @@
 
1
+ a,b,c
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/sjis.csv ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ ��,��,��,��,��
2
+ ���{��,���{��,���{��,���{��,���{��
3
+ ��,��,��,��,��
4
+ """quoted""",a'quote',"a, b and c",,
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/tab-separated.csv ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ value1 value2 value3
2
+ value4 value5 value6
3
+
4
+
5
+
6
+
7
+
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Join/csv_files/utf-8.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ ✔,✔,✔,✔
2
+ ★,★,★,★
3
+ 유,니,코,드
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/SandboxDirectoryManager.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Standard;
4
+
5
+ /**
6
+ * Managing sandbox directory to use when joining with the file system for tests
7
+ */
8
+ class SandboxDirectoryManager
9
+ {
10
+ /**
11
+ * Return sandbox directory
12
+ * @return string
13
+ */
14
+ public static function getSandboxDirectory()
15
+ {
16
+ return sys_get_temp_dir().'/goodby/csv';
17
+ }
18
+
19
+ /**
20
+ * Reset sandbox directory
21
+ */
22
+ public static function resetSandboxDirectory()
23
+ {
24
+ $sandboxDir = self::getSandboxDirectory();
25
+
26
+ if ( file_exists($sandboxDir) ) {
27
+ exec(sprintf('rm -rf %s', $sandboxDir));
28
+ }
29
+
30
+ if ( file_exists($sandboxDir) ) {
31
+ throw new \RuntimeException(
32
+ sprintf('Cannot continue test: sandbox directory already exists: %s', $sandboxDir)
33
+ );
34
+ }
35
+
36
+ mkdir($sandboxDir, 0777, true);
37
+
38
+ if ( file_exists($sandboxDir) === false ) {
39
+ throw new \RuntimeException(
40
+ sprintf('Cannot continue test: sandbox directory does not exist: %s', $sandboxDir)
41
+ );
42
+ }
43
+ }
44
+ }
45
+
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/InterpreterTest.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Standard\Unit;
4
+
5
+ use Mockery as m;
6
+
7
+ use Goodby\CSV\Import\Standard\Interpreter;
8
+
9
+ /**
10
+ * unit test for Standard Implementation of the Interpreter
11
+ *
12
+ */
13
+ class InterpreterTest extends \PHPUnit_Framework_TestCase
14
+ {
15
+ private $expectedLine;
16
+
17
+ public function setUp()
18
+ {
19
+ $this->expectedLine = null;
20
+ }
21
+
22
+ /**
23
+ * @requires PHP 5.4
24
+ */
25
+ public function testStandardInterpreterWithClosure()
26
+ {
27
+ $this->expectedLine = array('test', 'test', 'test');
28
+
29
+ $interpreter = new Interpreter();
30
+ $interpreter->addObserver(function($line) {
31
+ $this->assertEquals($this->expectedLine, $line);
32
+ });
33
+
34
+ $interpreter->interpret($this->expectedLine);
35
+ }
36
+
37
+ public function testStandardInterpreterWithObject()
38
+ {
39
+ $this->expectedLine = array('test', 'test', 'test');
40
+
41
+ $object = m::mock('stdClass');
42
+ $object->shouldReceive('callback')->with($this->expectedLine)->once();
43
+
44
+ $interpreter = new Interpreter();
45
+ $interpreter->addObserver(array($object, 'callback'));
46
+
47
+ $interpreter->interpret($this->expectedLine);
48
+ }
49
+
50
+ /**
51
+ * @expectedException \Goodby\CSV\Import\Standard\Exception\StrictViolationException
52
+ */
53
+ public function testInconsistentColumns()
54
+ {
55
+ $lines[] = array('test', 'test', 'test');
56
+ $lines[] = array('test', 'test');
57
+
58
+ $interpreter = new Interpreter();
59
+
60
+ foreach ($lines as $line) {
61
+ $interpreter->interpret($line);
62
+ }
63
+ }
64
+
65
+ /**
66
+ * @expectedException \Goodby\CSV\Import\Standard\Exception\StrictViolationException
67
+ */
68
+ public function testInconsistentColumnsLowToHigh()
69
+ {
70
+ $lines[] = array('test', 'test');
71
+ $lines[] = array('test', 'test', 'test');
72
+
73
+ $interpreter = new Interpreter();
74
+
75
+ foreach ($lines as $line) {
76
+ $interpreter->interpret($line);
77
+ }
78
+ }
79
+
80
+ public function testConsistentColumns()
81
+ {
82
+ $lines[] = array('test', 'test', 'test');
83
+ $lines[] = array('test', 'test', 'test');
84
+
85
+ $interpreter = new Interpreter();
86
+
87
+ foreach ($lines as $line) {
88
+ $interpreter->interpret($line);
89
+ }
90
+ }
91
+
92
+ /**
93
+ * use un-strict won't throw exception with inconsistent columns
94
+ *
95
+ */
96
+ public function testInconsistentColumnsWithUnStrict()
97
+ {
98
+ $lines[] = array('test', 'test', 'test');
99
+ $lines[] = array('test', 'test');
100
+
101
+ $interpreter = new Interpreter();
102
+ $interpreter->unstrict();
103
+
104
+ foreach ($lines as $line) {
105
+ $interpreter->interpret($line);
106
+ }
107
+ }
108
+
109
+ /**
110
+ * @expectedException \Goodby\CSV\Import\Protocol\Exception\InvalidLexicalException
111
+ */
112
+ public function testStandardInterpreterWithInvalidLexical()
113
+ {
114
+ $this->expectedLine = '';
115
+
116
+ $interpreter = new Interpreter();
117
+
118
+ $interpreter->interpret($this->expectedLine);
119
+ }
120
+
121
+ /**
122
+ * @expectedException \InvalidArgumentException
123
+ */
124
+ public function testInvalidCallable()
125
+ {
126
+ $interpreter = new Interpreter();
127
+
128
+ $interpreter->addObserver('dummy');
129
+
130
+ $interpreter->interpret($this->expectedLine);
131
+ }
132
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/LexerConfigTest.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Standard\Unit;
4
+
5
+ use SplFileObject;
6
+ use Goodby\CSV\Import\Standard\LexerConfig;
7
+
8
+ class LexerConfigTest extends \PHPUnit_Framework_TestCase
9
+ {
10
+ public function testDelimiter()
11
+ {
12
+ $config = new LexerConfig();
13
+ $this->assertSame(',', $config->getDelimiter());
14
+ $config->setDelimiter('del');
15
+ $this->assertSame('del', $config->getDelimiter());
16
+ }
17
+
18
+ public function testEnclosure()
19
+ {
20
+ $config = new LexerConfig();
21
+ $this->assertSame('"', $config->getEnclosure());
22
+ $this->assertSame('enc', $config->setEnclosure('enc')->getEnclosure());
23
+ }
24
+
25
+ public function testEscape()
26
+ {
27
+ $config = new LexerConfig();
28
+ $this->assertSame('\\', $config->getEscape());
29
+ $this->assertSame('esc', $config->setEscape('esc')->getEscape());
30
+ }
31
+
32
+ public function testFromCharset()
33
+ {
34
+ $config = new LexerConfig();
35
+ $this->assertSame(null, $config->getFromCharset());
36
+ $this->assertSame('UTF-8', $config->setFromCharset('UTF-8')->getFromCharset());
37
+ }
38
+
39
+ public function testToCharset()
40
+ {
41
+ $config = new LexerConfig();
42
+ $this->assertSame(null, $config->getToCharset());
43
+ $this->assertSame('UTF-8', $config->setToCharset('UTF-8')->getToCharset());
44
+ }
45
+
46
+ public function testFlags()
47
+ {
48
+ $config = new LexerConfig();
49
+ $this->assertSame(SplFileObject::READ_CSV, $config->getFlags());
50
+ $config->setFlags(SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::READ_CSV);
51
+ $flags = (SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::READ_CSV);
52
+ $this->assertSame($flags, $config->getFlags());
53
+ }
54
+
55
+ public function testIgnoreHeaderLine()
56
+ {
57
+ $config = new LexerConfig();
58
+ $this->assertSame(false, $config->getIgnoreHeaderLine());
59
+ $this->assertSame(true, $config->setIgnoreHeaderLine(true)->getIgnoreHeaderLine());
60
+ }
61
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/Observer/SqlObserverTest.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Standard\Unit\Observer;
4
+
5
+ use Mockery as m;
6
+
7
+ use Goodby\CSV\Import\Standard\Interpreter;
8
+ use Goodby\CSV\Import\Standard\Observer\SqlObserver;
9
+
10
+ /**
11
+ * unit test for sql observer
12
+ */
13
+ class SqlObserverTest extends \PHPUnit_Framework_TestCase
14
+ {
15
+ public function testUsage()
16
+ {
17
+ $interpreter = new Interpreter();
18
+
19
+ $tempDir = sys_get_temp_dir();
20
+
21
+ $path = $tempDir . DIRECTORY_SEPARATOR . 'test.sql';
22
+
23
+ if (file_exists($path)) {
24
+ unlink($path);
25
+ }
26
+
27
+ $sqlObserver = new SqlObserver('test', array('id', 'name', 'age', 'flag', 'flag2', 'status', 'contents'), $path);
28
+
29
+ $interpreter->addObserver(array($sqlObserver, 'notify'));
30
+
31
+ $interpreter->interpret(array('123', 'test', '28', 'true', 'false', 'null', 'test"test'));
32
+
33
+ $expectedSql = 'INSERT INTO test(id, name, age, flag, flag2, status, contents) VALUES(123, "test", 28, true, false, NULL, "test\"test");';
34
+
35
+ $this->assertEquals($expectedSql, file_get_contents($path));
36
+ }
37
+
38
+ /**
39
+ * @expectedException \InvalidArgumentException
40
+ */
41
+ public function testInvalidLine()
42
+ {
43
+ $interpreter = new Interpreter();
44
+
45
+ $sqlObserver = new SqlObserver('test', array('id', 'name'), 'dummy');
46
+
47
+ $interpreter->addObserver(array($sqlObserver, 'notify'));
48
+
49
+ $interpreter->interpret(array('123', array('test')));
50
+ }
51
+ }
vendor/goodby/csv/src/Goodby/CSV/Import/Tests/Standard/Unit/StreamFilter/ConvertMbstringEncodingTest.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\Import\Tests\Standard\Unit\StreamFilter;
4
+
5
+ use Expose\Expose as e;
6
+ use Goodby\CSV\Import\Standard\StreamFilter\ConvertMbstringEncoding;
7
+
8
+ class ConvertMbstringEncodingTest extends \PHPUnit_Framework_TestCase
9
+ {
10
+ private $internalEncodingBackup;
11
+
12
+ public function setUp()
13
+ {
14
+ $this->internalEncodingBackup = mb_internal_encoding();
15
+ }
16
+
17
+ public function tearDown()
18
+ {
19
+ mb_internal_encoding($this->internalEncodingBackup);
20
+ }
21
+
22
+ public function testGetFilterName()
23
+ {
24
+ $this->assertSame('convert.mbstring.encoding.*', ConvertMbstringEncoding::getFilterName());
25
+ }
26
+
27
+ public function testOneParameter()
28
+ {
29
+ $filterString = 'convert.mbstring.encoding.EUC-JP';
30
+ mb_internal_encoding('UTF-7');
31
+ $filter = new ConvertMbstringEncoding();
32
+ $filter->filtername = $filterString;
33
+ $filter->onCreate();
34
+ $this->assertAttributeSame('EUC-JP', 'fromCharset', $filter);
35
+ $this->assertAttributeSame('UTF-7', 'toCharset', $filter);
36
+ }
37
+
38
+ public function testTwoParameters()
39
+ {
40
+ $filterString = 'convert.mbstring.encoding.SJIS-win:UTF-8';
41
+ mb_internal_encoding('UTF-7');
42
+ $filter = new ConvertMbstringEncoding();
43
+ $filter->filtername = $filterString;
44
+ $filter->onCreate();
45
+ $this->assertAttributeSame('SJIS-win', 'fromCharset', $filter);
46
+ $this->assertAttributeSame('UTF-8', 'toCharset', $filter);
47
+ }
48
+
49
+ public function test_when_invalid_parameter_given_it_returns_false()
50
+ {
51
+ $filterString = 'convert.mbstring.encoding.@#$#!%^^';
52
+ $filter = new ConvertMbstringEncoding();
53
+ $filter->filtername = $filterString;
54
+ $this->assertFalse($filter->onCreate());
55
+ }
56
+
57
+ public function test_register_filter()
58
+ {
59
+ ConvertMbstringEncoding::register();
60
+ $filterName = ConvertMbstringEncoding::getFilterName();
61
+ $registeredFilters = stream_get_filters();
62
+ $this->assertTrue(in_array($filterName, $registeredFilters));
63
+ }
64
+ }
vendor/goodby/csv/src/Goodby/CSV/TestHelper/DbManager.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Goodby\CSV\TestHelper;
4
+
5
+ class DbManager
6
+ {
7
+ private $pdo;
8
+
9
+ private $host;
10
+ private $db;
11
+ private $user;
12
+ private $pass;
13
+
14
+ public function __construct()
15
+ {
16
+ $this->host = $_SERVER['GOODBY_CSV_TEST_DB_HOST'];
17
+ $this->db = $_SERVER['GOODBY_CSV_TEST_DB_NAME_DEFAULT'];
18
+ $this->user = $_SERVER['GOODBY_CSV_TEST_DB_USER'];
19
+ $this->pass = $_SERVER['GOODBY_CSV_TEST_DB_PASS'];
20
+
21
+ $dsn = 'mysql:host=' . $this->host;
22
+
23
+ $this->pdo = new \PDO($dsn, $this->user, $this->pass);
24
+ $stmt = $this->pdo->prepare("CREATE DATABASE " . $this->db);
25
+
26
+ $stmt->execute();
27
+ }
28
+
29
+ public function __destruct()
30
+ {
31
+ $stmt = $this->pdo->prepare("DROP DATABASE " . $this->db);
32
+ $stmt->execute();
33
+ }
34
+
35
+ public function getPdo()
36
+ {
37
+ return new \PDO($this->getDsn(), $this->user, $this->pass);
38
+ }
39
+
40
+ public function getDsn()
41
+ {
42
+ return 'mysql:dbname=' . $this->db . ';host=' . $this->host;
43
+ }
44
+
45
+ public function getUser()
46
+ {
47
+ return $this->user;
48
+ }
49
+
50
+ public function getPassword()
51
+ {
52
+ return $this->pass;
53
+ }
54
+ }
vendor/symfony/polyfill-mbstring/LICENSE ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2015-2019 Fabien Potencier
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is furnished
8
+ to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
vendor/symfony/polyfill-mbstring/Mbstring.php ADDED
@@ -0,0 +1,800 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Symfony\Polyfill\Mbstring;
13
+
14
+ /**
15
+ * Partial mbstring implementation in PHP, iconv based, UTF-8 centric.
16
+ *
17
+ * Implemented:
18
+ * - mb_chr - Returns a specific character from its Unicode code point
19
+ * - mb_convert_encoding - Convert character encoding
20
+ * - mb_convert_variables - Convert character code in variable(s)
21
+ * - mb_decode_mimeheader - Decode string in MIME header field
22
+ * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED
23
+ * - mb_decode_numericentity - Decode HTML numeric string reference to character
24
+ * - mb_encode_numericentity - Encode character to HTML numeric string reference
25
+ * - mb_convert_case - Perform case folding on a string
26
+ * - mb_detect_encoding - Detect character encoding
27
+ * - mb_get_info - Get internal settings of mbstring
28
+ * - mb_http_input - Detect HTTP input character encoding
29
+ * - mb_http_output - Set/Get HTTP output character encoding
30
+ * - mb_internal_encoding - Set/Get internal character encoding
31
+ * - mb_list_encodings - Returns an array of all supported encodings
32
+ * - mb_ord - Returns the Unicode code point of a character
33
+ * - mb_output_handler - Callback function converts character encoding in output buffer
34
+ * - mb_scrub - Replaces ill-formed byte sequences with substitute characters
35
+ * - mb_strlen - Get string length
36
+ * - mb_strpos - Find position of first occurrence of string in a string
37
+ * - mb_strrpos - Find position of last occurrence of a string in a string
38
+ * - mb_strtolower - Make a string lowercase
39
+ * - mb_strtoupper - Make a string uppercase
40
+ * - mb_substitute_character - Set/Get substitution character
41
+ * - mb_substr - Get part of string
42
+ * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive
43
+ * - mb_stristr - Finds first occurrence of a string within another, case insensitive
44
+ * - mb_strrchr - Finds the last occurrence of a character in a string within another
45
+ * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive
46
+ * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive
47
+ * - mb_strstr - Finds first occurrence of a string within another
48
+ * - mb_strwidth - Return width of string
49
+ * - mb_substr_count - Count the number of substring occurrences
50
+ *
51
+ * Not implemented:
52
+ * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more)
53
+ * - mb_ereg_* - Regular expression with multibyte support
54
+ * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable
55
+ * - mb_preferred_mime_name - Get MIME charset string
56
+ * - mb_regex_encoding - Returns current encoding for multibyte regex as string
57
+ * - mb_regex_set_options - Set/Get the default options for mbregex functions
58
+ * - mb_send_mail - Send encoded mail
59
+ * - mb_split - Split multibyte string using regular expression
60
+ * - mb_strcut - Get part of string
61
+ * - mb_strimwidth - Get truncated string with specified width
62
+ *
63
+ * @author Nicolas Grekas <p@tchwork.com>
64
+ *
65
+ * @internal
66
+ */
67
+ final class Mbstring
68
+ {
69
+ const MB_CASE_FOLD = PHP_INT_MAX;
70
+
71
+ private static $encodingList = array('ASCII', 'UTF-8');
72
+ private static $language = 'neutral';
73
+ private static $internalEncoding = 'UTF-8';
74
+ private static $caseFold = array(
75
+ array('µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"),
76
+ array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'),
77
+ );
78
+
79
+ public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
80
+ {
81
+ if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) {
82
+ $fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
83
+ } else {
84
+ $fromEncoding = self::getEncoding($fromEncoding);
85
+ }
86
+
87
+ $toEncoding = self::getEncoding($toEncoding);
88
+
89
+ if ('BASE64' === $fromEncoding) {
90
+ $s = base64_decode($s);
91
+ $fromEncoding = $toEncoding;
92
+ }
93
+
94
+ if ('BASE64' === $toEncoding) {
95
+ return base64_encode($s);
96
+ }
97
+
98
+ if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
99
+ if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
100
+ $fromEncoding = 'Windows-1252';
101
+ }
102
+ if ('UTF-8' !== $fromEncoding) {
103
+ $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);
104
+ }
105
+
106
+ return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s);
107
+ }
108
+
109
+ if ('HTML-ENTITIES' === $fromEncoding) {
110
+ $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8');
111
+ $fromEncoding = 'UTF-8';
112
+ }
113
+
114
+ return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
115
+ }
116
+
117
+ public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null)
118
+ {
119
+ $vars = array(&$a, &$b, &$c, &$d, &$e, &$f);
120
+
121
+ $ok = true;
122
+ array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {
123
+ if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {
124
+ $ok = false;
125
+ }
126
+ });
127
+
128
+ return $ok ? $fromEncoding : false;
129
+ }
130
+
131
+ public static function mb_decode_mimeheader($s)
132
+ {
133
+ return iconv_mime_decode($s, 2, self::$internalEncoding);
134
+ }
135
+
136
+ public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
137
+ {
138
+ trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING);
139
+ }
140
+
141
+ public static function mb_decode_numericentity($s, $convmap, $encoding = null)
142
+ {
143
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
144
+ trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
145
+
146
+ return null;
147
+ }
148
+
149
+ if (!\is_array($convmap) || !$convmap) {
150
+ return false;
151
+ }
152
+
153
+ if (null !== $encoding && !\is_scalar($encoding)) {
154
+ trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
155
+
156
+ return ''; // Instead of null (cf. mb_encode_numericentity).
157
+ }
158
+
159
+ $s = (string) $s;
160
+ if ('' === $s) {
161
+ return '';
162
+ }
163
+
164
+ $encoding = self::getEncoding($encoding);
165
+
166
+ if ('UTF-8' === $encoding) {
167
+ $encoding = null;
168
+ if (!preg_match('//u', $s)) {
169
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
170
+ }
171
+ } else {
172
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
173
+ }
174
+
175
+ $cnt = floor(\count($convmap) / 4) * 4;
176
+
177
+ for ($i = 0; $i < $cnt; $i += 4) {
178
+ // collector_decode_htmlnumericentity ignores $convmap[$i + 3]
179
+ $convmap[$i] += $convmap[$i + 2];
180
+ $convmap[$i + 1] += $convmap[$i + 2];
181
+ }
182
+
183
+ $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {
184
+ $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];
185
+ for ($i = 0; $i < $cnt; $i += 4) {
186
+ if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {
187
+ return Mbstring::mb_chr($c - $convmap[$i + 2]);
188
+ }
189
+ }
190
+
191
+ return $m[0];
192
+ }, $s);
193
+
194
+ if (null === $encoding) {
195
+ return $s;
196
+ }
197
+
198
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
199
+ }
200
+
201
+ public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
202
+ {
203
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
204
+ trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
205
+
206
+ return null;
207
+ }
208
+
209
+ if (!\is_array($convmap) || !$convmap) {
210
+ return false;
211
+ }
212
+
213
+ if (null !== $encoding && !\is_scalar($encoding)) {
214
+ trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
215
+
216
+ return null; // Instead of '' (cf. mb_decode_numericentity).
217
+ }
218
+
219
+ if (null !== $is_hex && !\is_scalar($is_hex)) {
220
+ trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING);
221
+
222
+ return null;
223
+ }
224
+
225
+ $s = (string) $s;
226
+ if ('' === $s) {
227
+ return '';
228
+ }
229
+
230
+ $encoding = self::getEncoding($encoding);
231
+
232
+ if ('UTF-8' === $encoding) {
233
+ $encoding = null;
234
+ if (!preg_match('//u', $s)) {
235
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
236
+ }
237
+ } else {
238
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
239
+ }
240
+
241
+ static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
242
+
243
+ $cnt = floor(\count($convmap) / 4) * 4;
244
+ $i = 0;
245
+ $len = \strlen($s);
246
+ $result = '';
247
+
248
+ while ($i < $len) {
249
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
250
+ $uchr = substr($s, $i, $ulen);
251
+ $i += $ulen;
252
+ $c = self::mb_ord($uchr);
253
+
254
+ for ($j = 0; $j < $cnt; $j += 4) {
255
+ if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {
256
+ $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];
257
+ $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';';
258
+ continue 2;
259
+ }
260
+ }
261
+ $result .= $uchr;
262
+ }
263
+
264
+ if (null === $encoding) {
265
+ return $result;
266
+ }
267
+
268
+ return iconv('UTF-8', $encoding.'//IGNORE', $result);
269
+ }
270
+
271
+ public static function mb_convert_case($s, $mode, $encoding = null)
272
+ {
273
+ $s = (string) $s;
274
+ if ('' === $s) {
275
+ return '';
276
+ }
277
+
278
+ $encoding = self::getEncoding($encoding);
279
+
280
+ if ('UTF-8' === $encoding) {
281
+ $encoding = null;
282
+ if (!preg_match('//u', $s)) {
283
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
284
+ }
285
+ } else {
286
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
287
+ }
288
+
289
+ if (MB_CASE_TITLE == $mode) {
290
+ static $titleRegexp = null;
291
+ if (null === $titleRegexp) {
292
+ $titleRegexp = self::getData('titleCaseRegexp');
293
+ }
294
+ $s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s);
295
+ } else {
296
+ if (MB_CASE_UPPER == $mode) {
297
+ static $upper = null;
298
+ if (null === $upper) {
299
+ $upper = self::getData('upperCase');
300
+ }
301
+ $map = $upper;
302
+ } else {
303
+ if (self::MB_CASE_FOLD === $mode) {
304
+ $s = str_replace(self::$caseFold[0], self::$caseFold[1], $s);
305
+ }
306
+
307
+ static $lower = null;
308
+ if (null === $lower) {
309
+ $lower = self::getData('lowerCase');
310
+ }
311
+ $map = $lower;
312
+ }
313
+
314
+ static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
315
+
316
+ $i = 0;
317
+ $len = \strlen($s);
318
+
319
+ while ($i < $len) {
320
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
321
+ $uchr = substr($s, $i, $ulen);
322
+ $i += $ulen;
323
+
324
+ if (isset($map[$uchr])) {
325
+ $uchr = $map[$uchr];
326
+ $nlen = \strlen($uchr);
327
+
328
+ if ($nlen == $ulen) {
329
+ $nlen = $i;
330
+ do {
331
+ $s[--$nlen] = $uchr[--$ulen];
332
+ } while ($ulen);
333
+ } else {
334
+ $s = substr_replace($s, $uchr, $i - $ulen, $ulen);
335
+ $len += $nlen - $ulen;
336
+ $i += $nlen - $ulen;
337
+ }
338
+ }
339
+ }
340
+ }
341
+
342
+ if (null === $encoding) {
343
+ return $s;
344
+ }
345
+
346
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
347
+ }
348
+
349
+ public static function mb_internal_encoding($encoding = null)
350
+ {
351
+ if (null === $encoding) {
352
+ return self::$internalEncoding;
353
+ }
354
+
355
+ $encoding = self::getEncoding($encoding);
356
+
357
+ if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) {
358
+ self::$internalEncoding = $encoding;
359
+
360
+ return true;
361
+ }
362
+
363
+ return false;
364
+ }
365
+
366
+ public static function mb_language($lang = null)
367
+ {
368
+ if (null === $lang) {
369
+ return self::$language;
370
+ }
371
+
372
+ switch ($lang = strtolower($lang)) {
373
+ case 'uni':
374
+ case 'neutral':
375
+ self::$language = $lang;
376
+
377
+ return true;
378
+ }
379
+
380
+ return false;
381
+ }
382
+
383
+ public static function mb_list_encodings()
384
+ {
385
+ return array('UTF-8');
386
+ }
387
+
388
+ public static function mb_encoding_aliases($encoding)
389
+ {
390
+ switch (strtoupper($encoding)) {
391
+ case 'UTF8':
392
+ case 'UTF-8':
393
+ return array('utf8');
394
+ }
395
+
396
+ return false;
397
+ }
398
+
399
+ public static function mb_check_encoding($var = null, $encoding = null)
400
+ {
401
+ if (null === $encoding) {
402
+ if (null === $var) {
403
+ return false;
404
+ }
405
+ $encoding = self::$internalEncoding;
406
+ }
407
+
408
+ return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var);
409
+ }
410
+
411
+ public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
412
+ {
413
+ if (null === $encodingList) {
414
+ $encodingList = self::$encodingList;
415
+ } else {
416
+ if (!\is_array($encodingList)) {
417
+ $encodingList = array_map('trim', explode(',', $encodingList));
418
+ }
419
+ $encodingList = array_map('strtoupper', $encodingList);
420
+ }
421
+
422
+ foreach ($encodingList as $enc) {
423
+ switch ($enc) {
424
+ case 'ASCII':
425
+ if (!preg_match('/[\x80-\xFF]/', $str)) {
426
+ return $enc;
427
+ }
428
+ break;
429
+
430
+ case 'UTF8':
431
+ case 'UTF-8':
432
+ if (preg_match('//u', $str)) {
433
+ return 'UTF-8';
434
+ }
435
+ break;
436
+
437
+ default:
438
+ if (0 === strncmp($enc, 'ISO-8859-', 9)) {
439
+ return $enc;
440
+ }
441
+ }
442
+ }
443
+
444
+ return false;
445
+ }
446
+
447
+ public static function mb_detect_order($encodingList = null)
448
+ {
449
+ if (null === $encodingList) {
450
+ return self::$encodingList;
451
+ }
452
+
453
+ if (!\is_array($encodingList)) {
454
+ $encodingList = array_map('trim', explode(',', $encodingList));
455
+ }
456
+ $encodingList = array_map('strtoupper', $encodingList);
457
+
458
+ foreach ($encodingList as $enc) {
459
+ switch ($enc) {
460
+ default:
461
+ if (strncmp($enc, 'ISO-8859-', 9)) {
462
+ return false;
463
+ }
464
+ // no break
465
+ case 'ASCII':
466
+ case 'UTF8':
467
+ case 'UTF-8':
468
+ }
469
+ }
470
+
471
+ self::$encodingList = $encodingList;
472
+
473
+ return true;
474
+ }
475
+
476
+ public static function mb_strlen($s, $encoding = null)
477
+ {
478
+ $encoding = self::getEncoding($encoding);
479
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
480
+ return \strlen($s);
481
+ }
482
+
483
+ return @iconv_strlen($s, $encoding);
484
+ }
485
+
486
+ public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
487
+ {
488
+ $encoding = self::getEncoding($encoding);
489
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
490
+ return strpos($haystack, $needle, $offset);
491
+ }
492
+
493
+ $needle = (string) $needle;
494
+ if ('' === $needle) {
495
+ trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING);
496
+
497
+ return false;
498
+ }
499
+
500
+ return iconv_strpos($haystack, $needle, $offset, $encoding);
501
+ }
502
+
503
+ public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
504
+ {
505
+ $encoding = self::getEncoding($encoding);
506
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
507
+ return strrpos($haystack, $needle, $offset);
508
+ }
509
+
510
+ if ($offset != (int) $offset) {
511
+ $offset = 0;
512
+ } elseif ($offset = (int) $offset) {
513
+ if ($offset < 0) {
514
+ $haystack = self::mb_substr($haystack, 0, $offset, $encoding);
515
+ $offset = 0;
516
+ } else {
517
+ $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
518
+ }
519
+ }
520
+
521
+ $pos = iconv_strrpos($haystack, $needle, $encoding);
522
+
523
+ return false !== $pos ? $offset + $pos : false;
524
+ }
525
+
526
+ public static function mb_strtolower($s, $encoding = null)
527
+ {
528
+ return self::mb_convert_case($s, MB_CASE_LOWER, $encoding);
529
+ }
530
+
531
+ public static function mb_strtoupper($s, $encoding = null)
532
+ {
533
+ return self::mb_convert_case($s, MB_CASE_UPPER, $encoding);
534
+ }
535
+
536
+ public static function mb_substitute_character($c = null)
537
+ {
538
+ if (0 === strcasecmp($c, 'none')) {
539
+ return true;
540
+ }
541
+
542
+ return null !== $c ? false : 'none';
543
+ }
544
+
545
+ public static function mb_substr($s, $start, $length = null, $encoding = null)
546
+ {
547
+ $encoding = self::getEncoding($encoding);
548
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
549
+ return substr($s, $start, null === $length ? 2147483647 : $length);
550
+ }
551
+
552
+ if ($start < 0) {
553
+ $start = iconv_strlen($s, $encoding) + $start;
554
+ if ($start < 0) {
555
+ $start = 0;
556
+ }
557
+ }
558
+
559
+ if (null === $length) {
560
+ $length = 2147483647;
561
+ } elseif ($length < 0) {
562
+ $length = iconv_strlen($s, $encoding) + $length - $start;
563
+ if ($length < 0) {
564
+ return '';
565
+ }
566
+ }
567
+
568
+ return (string) iconv_substr($s, $start, $length, $encoding);
569
+ }
570
+
571
+ public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
572
+ {
573
+ $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
574
+ $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
575
+
576
+ return self::mb_strpos($haystack, $needle, $offset, $encoding);
577
+ }
578
+
579
+ public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)
580
+ {
581
+ $pos = self::mb_stripos($haystack, $needle, 0, $encoding);
582
+
583
+ return self::getSubpart($pos, $part, $haystack, $encoding);
584
+ }
585
+
586
+ public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)
587
+ {
588
+ $encoding = self::getEncoding($encoding);
589
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
590
+ return strrchr($haystack, $needle, $part);
591
+ }
592
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
593
+ $pos = iconv_strrpos($haystack, $needle, $encoding);
594
+
595
+ return self::getSubpart($pos, $part, $haystack, $encoding);
596
+ }
597
+
598
+ public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)
599
+ {
600
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
601
+ $pos = self::mb_strripos($haystack, $needle, $encoding);
602
+
603
+ return self::getSubpart($pos, $part, $haystack, $encoding);
604
+ }
605
+
606
+ public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)
607
+ {
608
+ $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
609
+ $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
610
+
611
+ return self::mb_strrpos($haystack, $needle, $offset, $encoding);
612
+ }
613
+
614
+ public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)
615
+ {
616
+ $pos = strpos($haystack, $needle);
617
+ if (false === $pos) {
618
+ return false;
619
+ }
620
+ if ($part) {
621
+ return substr($haystack, 0, $pos);
622
+ }
623
+
624
+ return substr($haystack, $pos);
625
+ }
626
+
627
+ public static function mb_get_info($type = 'all')
628
+ {
629
+ $info = array(
630
+ 'internal_encoding' => self::$internalEncoding,
631
+ 'http_output' => 'pass',
632
+ 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)',
633
+ 'func_overload' => 0,
634
+ 'func_overload_list' => 'no overload',
635
+ 'mail_charset' => 'UTF-8',
636
+ 'mail_header_encoding' => 'BASE64',
637
+ 'mail_body_encoding' => 'BASE64',
638
+ 'illegal_chars' => 0,
639
+ 'encoding_translation' => 'Off',
640
+ 'language' => self::$language,
641
+ 'detect_order' => self::$encodingList,
642
+ 'substitute_character' => 'none',
643
+ 'strict_detection' => 'Off',
644
+ );
645
+
646
+ if ('all' === $type) {
647
+ return $info;
648
+ }
649
+ if (isset($info[$type])) {
650
+ return $info[$type];
651
+ }
652
+
653
+ return false;
654
+ }
655
+
656
+ public static function mb_http_input($type = '')
657
+ {
658
+ return false;
659
+ }
660
+
661
+ public static function mb_http_output($encoding = null)
662
+ {
663
+ return null !== $encoding ? 'pass' === $encoding : 'pass';
664
+ }
665
+
666
+ public static function mb_strwidth($s, $encoding = null)
667
+ {
668
+ $encoding = self::getEncoding($encoding);
669
+
670
+ if ('UTF-8' !== $encoding) {
671
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
672
+ }
673
+
674
+ $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
675
+
676
+ return ($wide << 1) + iconv_strlen($s, 'UTF-8');
677
+ }
678
+
679
+ public static function mb_substr_count($haystack, $needle, $encoding = null)
680
+ {
681
+ return substr_count($haystack, $needle);
682
+ }
683
+
684
+ public static function mb_output_handler($contents, $status)
685
+ {
686
+ return $contents;
687
+ }
688
+
689
+ public static function mb_chr($code, $encoding = null)
690
+ {
691
+ if (0x80 > $code %= 0x200000) {
692
+ $s = \chr($code);
693
+ } elseif (0x800 > $code) {
694
+ $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
695
+ } elseif (0x10000 > $code) {
696
+ $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
697
+ } else {
698
+ $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
699
+ }
700
+
701
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
702
+ $s = mb_convert_encoding($s, $encoding, 'UTF-8');
703
+ }
704
+
705
+ return $s;
706
+ }
707
+
708
+ public static function mb_ord($s, $encoding = null)
709
+ {
710
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
711
+ $s = mb_convert_encoding($s, 'UTF-8', $encoding);
712
+ }
713
+
714
+ if (1 === \strlen($s)) {
715
+ return \ord($s);
716
+ }
717
+
718
+ $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;
719
+ if (0xF0 <= $code) {
720
+ return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;
721
+ }
722
+ if (0xE0 <= $code) {
723
+ return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;
724
+ }
725
+ if (0xC0 <= $code) {
726
+ return (($code - 0xC0) << 6) + $s[2] - 0x80;
727
+ }
728
+
729
+ return $code;
730
+ }
731
+
732
+ private static function getSubpart($pos, $part, $haystack, $encoding)
733
+ {
734
+ if (false === $pos) {
735
+ return false;
736
+ }
737
+ if ($part) {
738
+ return self::mb_substr($haystack, 0, $pos, $encoding);
739
+ }
740
+
741
+ return self::mb_substr($haystack, $pos, null, $encoding);
742
+ }
743
+
744
+ private static function html_encoding_callback(array $m)
745
+ {
746
+ $i = 1;
747
+ $entities = '';
748
+ $m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8'));
749
+
750
+ while (isset($m[$i])) {
751
+ if (0x80 > $m[$i]) {
752
+ $entities .= \chr($m[$i++]);
753
+ continue;
754
+ }
755
+ if (0xF0 <= $m[$i]) {
756
+ $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
757
+ } elseif (0xE0 <= $m[$i]) {
758
+ $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
759
+ } else {
760
+ $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
761
+ }
762
+
763
+ $entities .= '&#'.$c.';';
764
+ }
765
+
766
+ return $entities;
767
+ }
768
+
769
+ private static function title_case(array $s)
770
+ {
771
+ return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8');
772
+ }
773
+
774
+ private static function getData($file)
775
+ {
776
+ if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
777
+ return require $file;
778
+ }
779
+
780
+ return false;
781
+ }
782
+
783
+ private static function getEncoding($encoding)
784
+ {
785
+ if (null === $encoding) {
786
+ return self::$internalEncoding;
787
+ }
788
+
789
+ $encoding = strtoupper($encoding);
790
+
791
+ if ('8BIT' === $encoding || 'BINARY' === $encoding) {
792
+ return 'CP850';
793
+ }
794
+ if ('UTF8' === $encoding) {
795
+ return 'UTF-8';
796
+ }
797
+
798
+ return $encoding;
799
+ }
800
+ }
vendor/symfony/polyfill-mbstring/README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Symfony Polyfill / Mbstring
2
+ ===========================
3
+
4
+ This component provides a partial, native PHP implementation for the
5
+ [Mbstring](http://php.net/mbstring) extension.
6
+
7
+ More information can be found in the
8
+ [main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
9
+
10
+ License
11
+ =======
12
+
13
+ This library is released under the [MIT license](LICENSE).
vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php ADDED
@@ -0,0 +1,1096 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ return array(
4
+ 'A' => 'a',
5
+ 'B' => 'b',
6
+ 'C' => 'c',
7
+ 'D' => 'd',
8
+ 'E' => 'e',
9
+ 'F' => 'f',
10
+ 'G' => 'g',
11
+ 'H' => 'h',
12
+ 'I' => 'i',
13
+ 'J' => 'j',
14
+ 'K' => 'k',
15
+ 'L' => 'l',
16
+ 'M' => 'm',
17
+ 'N' => 'n',
18
+ 'O' => 'o',
19
+ 'P' => 'p',
20
+ 'Q' => 'q',
21
+ 'R' => 'r',
22
+ 'S' => 's',
23
+ 'T' => 't',
24
+ 'U' => 'u',
25
+ 'V' => 'v',
26
+ 'W' => 'w',
27
+ 'X' => 'x',
28
+ 'Y' => 'y',
29
+ 'Z' => 'z',
30
+ 'À' => 'à',
31
+ 'Á' => 'á',
32
+ 'Â' => 'â',
33
+ 'Ã' => 'ã',
34
+ 'Ä' => 'ä',
35
+ 'Å' => 'å',
36
+ 'Æ' => 'æ',
37
+ 'Ç' => 'ç',
38
+ 'È' => 'è',
39
+ 'É' => 'é',
40
+ 'Ê' => 'ê',
41
+ 'Ë' => 'ë',
42
+ 'Ì' => 'ì',
43
+ 'Í' => 'í',
44
+ 'Î' => 'î',
45
+ 'Ï' => 'ï',
46
+ 'Ð' => 'ð',
47
+ 'Ñ' => 'ñ',
48
+ 'Ò' => 'ò',
49
+ 'Ó' => 'ó',
50
+ 'Ô' => 'ô',
51
+ 'Õ' => 'õ',
52
+ 'Ö' => 'ö',
53
+ 'Ø' => 'ø',
54
+ 'Ù' => 'ù',
55
+ 'Ú' => 'ú',
56
+ 'Û' => 'û',
57
+ 'Ü' => 'ü',
58
+ 'Ý' => 'ý',
59
+ 'Þ' => 'þ',
60
+ 'Ā' => 'ā',
61
+ 'Ă' => 'ă',
62
+ 'Ą' => 'ą',
63
+ 'Ć' => 'ć',
64
+ 'Ĉ' => 'ĉ',
65
+ 'Ċ' => 'ċ',
66
+ 'Č' => 'č',
67
+ 'Ď' => 'ď',
68
+ 'Đ' => 'đ',
69
+ 'Ē' => 'ē',
70
+ 'Ĕ' => 'ĕ',
71
+ 'Ė' => 'ė',
72
+ 'Ę' => 'ę',
73
+ 'Ě' => 'ě',
74
+ 'Ĝ' => 'ĝ',
75
+ 'Ğ' => 'ğ',
76
+ 'Ġ' => 'ġ',
77
+ 'Ģ' => 'ģ',
78
+ 'Ĥ' => 'ĥ',
79
+ 'Ħ' => 'ħ',
80
+ 'Ĩ' => 'ĩ',
81
+ 'Ī' => 'ī',
82
+ 'Ĭ' => 'ĭ',
83
+ 'Į' => 'į',
84
+ 'İ' => 'i',
85
+ 'IJ' => 'ij',
86
+ 'Ĵ' => 'ĵ',
87
+ 'Ķ' => 'ķ',
88
+ 'Ĺ' => 'ĺ',
89
+ 'Ļ' => 'ļ',
90
+ 'Ľ' => 'ľ',
91
+ 'Ŀ' => 'ŀ',
92
+ 'Ł' => 'ł',
93
+ 'Ń' => 'ń',
94
+ 'Ņ' => 'ņ',
95
+ 'Ň' => 'ň',
96
+ 'Ŋ' => 'ŋ',
97
+ 'Ō' => 'ō',
98
+ 'Ŏ' => 'ŏ',
99
+ 'Ő' => 'ő',
100
+ 'Œ' => 'œ',
101
+ 'Ŕ' => 'ŕ',
102
+ 'Ŗ' => 'ŗ',
103
+ 'Ř' => 'ř',
104
+ 'Ś' => 'ś',
105
+ 'Ŝ' => 'ŝ',
106
+ 'Ş' => 'ş',
107
+ 'Š' => 'š',
108
+ 'Ţ' => 'ţ',
109
+ 'Ť' => 'ť',
110
+ 'Ŧ' => 'ŧ',
111
+ 'Ũ' => 'ũ',
112
+ 'Ū' => 'ū',
113
+ 'Ŭ' => 'ŭ',
114
+ 'Ů' => 'ů',
115
+ 'Ű' => 'ű',
116
+ 'Ų' => 'ų',
117
+ 'Ŵ' => 'ŵ',
118
+ 'Ŷ' => 'ŷ',
119
+ 'Ÿ' => 'ÿ',
120
+ 'Ź' => 'ź',
121
+ 'Ż' => 'ż',
122
+ 'Ž' => 'ž',
123
+ 'Ɓ' => 'ɓ',
124
+ 'Ƃ' => 'ƃ',
125
+ 'Ƅ' => 'ƅ',
126
+ 'Ɔ' => 'ɔ',
127
+ 'Ƈ' => 'ƈ',
128
+ 'Ɖ' => 'ɖ',
129
+ 'Ɗ' => 'ɗ',
130
+ 'Ƌ' => 'ƌ',
131
+ 'Ǝ' => 'ǝ',
132
+ 'Ə' => 'ə',
133
+ 'Ɛ' => 'ɛ',
134
+ 'Ƒ' => 'ƒ',
135
+ 'Ɠ' => 'ɠ',
136
+ 'Ɣ' => 'ɣ',
137
+ 'Ɩ' => 'ɩ',
138
+ 'Ɨ' => 'ɨ',
139
+ 'Ƙ' => 'ƙ',
140
+ 'Ɯ' => 'ɯ',
141
+ 'Ɲ' => 'ɲ',
142
+ 'Ɵ' => 'ɵ',
143
+ 'Ơ' => 'ơ',
144
+ 'Ƣ' => 'ƣ',
145
+ 'Ƥ' => 'ƥ',
146
+ 'Ʀ' => 'ʀ',
147
+ 'Ƨ' => 'ƨ',
148
+ 'Ʃ' => 'ʃ',
149
+ 'Ƭ' => 'ƭ',
150
+ 'Ʈ' => 'ʈ',
151
+ 'Ư' => 'ư',
152
+ 'Ʊ' => 'ʊ',
153
+ 'Ʋ' => 'ʋ',
154
+ 'Ƴ' => 'ƴ',
155
+ 'Ƶ' => 'ƶ',
156
+ 'Ʒ' => 'ʒ',
157
+ 'Ƹ' => 'ƹ',
158
+ 'Ƽ' => 'ƽ',
159
+ 'DŽ' => 'dž',
160
+ 'Dž' => 'dž',
161
+ 'LJ' => 'lj',
162
+ 'Lj' => 'lj',
163
+ 'NJ' => 'nj',
164
+ 'Nj' => 'nj',
165
+ 'Ǎ' => 'ǎ',
166
+ 'Ǐ' => 'ǐ',
167
+ 'Ǒ' => 'ǒ',
168
+ 'Ǔ' => 'ǔ',
169
+ 'Ǖ' => 'ǖ',
170
+ 'Ǘ' => 'ǘ',
171
+ 'Ǚ' => 'ǚ',
172
+ 'Ǜ' => 'ǜ',
173
+ 'Ǟ' => 'ǟ',
174
+ 'Ǡ' => 'ǡ',
175
+ 'Ǣ' => 'ǣ',
176
+ 'Ǥ' => 'ǥ',
177
+ 'Ǧ' => 'ǧ',
178
+ 'Ǩ' => 'ǩ',
179
+ 'Ǫ' => 'ǫ',
180
+ 'Ǭ' => 'ǭ',
181
+ 'Ǯ' => 'ǯ',
182
+ 'DZ' => 'dz',
183
+ 'Dz' => 'dz',
184
+ 'Ǵ' => 'ǵ',
185
+ 'Ƕ' => 'ƕ',
186
+ 'Ƿ' => 'ƿ',
187
+ 'Ǹ' => 'ǹ',
188
+ 'Ǻ' => 'ǻ',
189
+ 'Ǽ' => 'ǽ',
190
+ 'Ǿ' => 'ǿ',
191
+ 'Ȁ' => 'ȁ',
192
+ 'Ȃ' => 'ȃ',
193
+ 'Ȅ' => 'ȅ',
194
+ 'Ȇ' => 'ȇ',
195
+ 'Ȉ' => 'ȉ',
196
+ 'Ȋ' => 'ȋ',
197
+ 'Ȍ' => 'ȍ',
198
+ 'Ȏ' => 'ȏ',
199
+ 'Ȑ' => 'ȑ',
200
+ 'Ȓ' => 'ȓ',
201
+ 'Ȕ' => 'ȕ',
202
+ 'Ȗ' => 'ȗ',
203
+ 'Ș' => 'ș',
204
+ 'Ț' => 'ț',
205
+ 'Ȝ' => 'ȝ',
206
+ 'Ȟ' => 'ȟ',
207
+ 'Ƞ' => 'ƞ',
208
+ 'Ȣ' => 'ȣ',
209
+ 'Ȥ' => 'ȥ',
210
+ 'Ȧ' => 'ȧ',
211
+ 'Ȩ' => 'ȩ',
212
+ 'Ȫ' => 'ȫ',
213
+ 'Ȭ' => 'ȭ',
214
+ 'Ȯ' => 'ȯ',
215
+ 'Ȱ' => 'ȱ',
216
+ 'Ȳ' => 'ȳ',
217
+ 'Ⱥ' => 'ⱥ',
218
+ 'Ȼ' => 'ȼ',
219
+ 'Ƚ' => 'ƚ',
220
+ 'Ⱦ' => 'ⱦ',
221
+ 'Ɂ' => 'ɂ',
222
+ 'Ƀ' => 'ƀ',
223
+ 'Ʉ' => 'ʉ',
224
+ 'Ʌ' => 'ʌ',
225
+ 'Ɇ' => 'ɇ',
226
+ 'Ɉ' => 'ɉ',
227
+ 'Ɋ' => 'ɋ',
228
+ 'Ɍ' => 'ɍ',
229
+ 'Ɏ' => 'ɏ',
230
+ 'Ͱ' => 'ͱ',
231
+ 'Ͳ' => 'ͳ',
232
+ 'Ͷ' => 'ͷ',
233
+ 'Ϳ' => 'ϳ',
234
+ 'Ά' => 'ά',
235
+ 'Έ' => 'έ',
236
+ 'Ή' => 'ή',
237
+ 'Ί' => 'ί',
238
+ 'Ό' => 'ό',
239
+ 'Ύ' => 'ύ',
240
+ 'Ώ' => 'ώ',
241
+ 'Α' => 'α',
242
+ 'Β' => 'β',
243
+ 'Γ' => 'γ',
244
+ 'Δ' => 'δ',
245
+ 'Ε' => 'ε',
246
+ 'Ζ' => 'ζ',
247
+ 'Η' => 'η',
248
+ 'Θ' => 'θ',
249
+ 'Ι' => 'ι',
250
+ 'Κ' => 'κ',
251
+ 'Λ' => 'λ',
252
+ 'Μ' => 'μ',
253
+ 'Ν' => 'ν',
254
+ 'Ξ' => 'ξ',
255
+ 'Ο' => 'ο',
256
+ 'Π' => 'π',
257
+ 'Ρ' => 'ρ',
258
+ 'Σ' => 'σ',
259
+ 'Τ' => 'τ',
260
+ 'Υ' => 'υ',
261
+ 'Φ' => 'φ',
262
+ 'Χ' => 'χ',
263
+ 'Ψ' => 'ψ',
264
+ 'Ω' => 'ω',
265
+ 'Ϊ' => 'ϊ',
266
+ 'Ϋ' => 'ϋ',
267
+ 'Ϗ' => 'ϗ',
268
+ 'Ϙ' => 'ϙ',
269
+ 'Ϛ' => 'ϛ',
270
+ 'Ϝ' => 'ϝ',
271
+ 'Ϟ' => 'ϟ',
272
+ 'Ϡ' => 'ϡ',
273
+ 'Ϣ' => 'ϣ',
274
+ 'Ϥ' => 'ϥ',
275
+ 'Ϧ' => 'ϧ',
276
+ 'Ϩ' => 'ϩ',
277
+ 'Ϫ' => 'ϫ',
278
+ 'Ϭ' => 'ϭ',
279
+ 'Ϯ' => 'ϯ',
280
+ 'ϴ' => 'θ',
281
+ 'Ϸ' => 'ϸ',
282
+ 'Ϲ' => 'ϲ',
283
+ 'Ϻ' => 'ϻ',
284
+ 'Ͻ' => 'ͻ',
285
+ 'Ͼ' => 'ͼ',
286
+ 'Ͽ' => 'ͽ',
287
+ 'Ѐ' => 'ѐ',
288
+ 'Ё' => 'ё',
289
+ 'Ђ' => 'ђ',
290
+ 'Ѓ' => 'ѓ',
291
+ 'Є' => 'є',
292
+ 'Ѕ' => 'ѕ',
293
+ 'І' => 'і',
294
+ 'Ї' => 'ї',
295
+ 'Ј' => 'ј',
296
+ 'Љ' => 'љ',
297
+ 'Њ' => 'њ',
298
+ 'Ћ' => 'ћ',
299
+ 'Ќ' => 'ќ',
300
+ 'Ѝ' => 'ѝ',
301
+ 'Ў' => 'ў',
302
+ 'Џ' => 'џ',
303
+ 'А' => 'а',
304
+ 'Б' => 'б',
305
+ 'В' => 'в',
306
+ 'Г' => 'г',
307
+ 'Д' => 'д',
308
+ 'Е' => 'е',
309
+ 'Ж' => 'ж',
310
+ 'З' => 'з',
311
+ 'И' => 'и',
312
+ 'Й' => 'й',
313
+ 'К' => 'к',
314
+ 'Л' => 'л',
315
+ 'М' => 'м',
316
+ 'Н' => 'н',
317
+ 'О' => 'о',
318
+ 'П' => 'п',
319
+ 'Р' => 'р',
320
+ 'С' => 'с',
321
+ 'Т' => 'т',
322
+ 'У' => 'у',
323
+ 'Ф' => 'ф',
324
+ 'Х' => 'х',
325
+ 'Ц' => 'ц',
326
+ 'Ч' => 'ч',
327
+ 'Ш' => 'ш',
328
+ 'Щ' => 'щ',
329
+ 'Ъ' => 'ъ',
330
+ 'Ы' => 'ы',
331
+ 'Ь' => 'ь',
332
+ 'Э' => 'э',
333
+ 'Ю' => 'ю',
334
+ 'Я' => 'я',
335
+ 'Ѡ' => 'ѡ',
336
+ 'Ѣ' => 'ѣ',
337
+ 'Ѥ' => 'ѥ',
338
+ 'Ѧ' => 'ѧ',
339
+ 'Ѩ' => 'ѩ',
340
+ 'Ѫ' => 'ѫ',
341
+ 'Ѭ' => 'ѭ',
342
+ 'Ѯ' => 'ѯ',
343
+ 'Ѱ' => 'ѱ',
344
+ 'Ѳ' => 'ѳ',
345
+ 'Ѵ' => 'ѵ',
346
+ 'Ѷ' => 'ѷ',
347
+ 'Ѹ' => 'ѹ',
348
+ 'Ѻ' => 'ѻ',
349
+ 'Ѽ' => 'ѽ',
350
+ 'Ѿ' => 'ѿ',
351
+ 'Ҁ' => 'ҁ',
352
+ 'Ҋ' => 'ҋ',
353
+ 'Ҍ' => 'ҍ',
354
+ 'Ҏ' => 'ҏ',
355
+ 'Ґ' => 'ґ',
356
+ 'Ғ' => 'ғ',
357
+ 'Ҕ' => 'ҕ',
358
+ 'Җ' => 'җ',
359
+ 'Ҙ' => 'ҙ',
360
+ 'Қ' => 'қ',
361
+ 'Ҝ' => 'ҝ',
362
+ 'Ҟ' => 'ҟ',
363
+ 'Ҡ' => 'ҡ',
364
+ 'Ң' => 'ң',
365
+ 'Ҥ' => 'ҥ',
366
+ 'Ҧ' => 'ҧ',
367
+ 'Ҩ' => 'ҩ',
368
+ 'Ҫ' => 'ҫ',
369
+ 'Ҭ' => 'ҭ',
370
+ 'Ү' => 'ү',
371
+ 'Ұ' => 'ұ',
372
+ 'Ҳ' => 'ҳ',
373
+ 'Ҵ' => 'ҵ',
374
+ 'Ҷ' => 'ҷ',
375
+ 'Ҹ' => 'ҹ',
376
+ 'Һ' => 'һ',
377
+ 'Ҽ' => 'ҽ',
378
+ 'Ҿ' => 'ҿ',
379
+ 'Ӏ' => 'ӏ',
380
+ 'Ӂ' => 'ӂ',
381
+ 'Ӄ' => 'ӄ',
382
+ 'Ӆ' => 'ӆ',
383
+ 'Ӈ' => 'ӈ',
384
+ 'Ӊ' => 'ӊ',
385
+ 'Ӌ' => 'ӌ',
386
+ 'Ӎ' => 'ӎ',
387
+ 'Ӑ' => 'ӑ',
388
+ 'Ӓ' => 'ӓ',
389
+ 'Ӕ' => 'ӕ',
390
+ 'Ӗ' => 'ӗ',
391
+ 'Ә' => 'ә',
392
+ 'Ӛ' => 'ӛ',
393
+ 'Ӝ' => 'ӝ',
394
+ 'Ӟ' => 'ӟ',
395
+ 'Ӡ' => 'ӡ',
396
+ 'Ӣ' => 'ӣ',
397
+ 'Ӥ' => 'ӥ',
398
+ 'Ӧ' => 'ӧ',
399
+ 'Ө' => 'ө',
400
+ 'Ӫ' => 'ӫ',
401
+ 'Ӭ' => 'ӭ',
402
+ 'Ӯ' => 'ӯ',
403
+ 'Ӱ' => 'ӱ',
404
+ 'Ӳ' => 'ӳ',
405
+ 'Ӵ' => 'ӵ',
406
+ 'Ӷ' => 'ӷ',
407
+ 'Ӹ' => 'ӹ',
408
+ 'Ӻ' => 'ӻ',
409
+ 'Ӽ' => 'ӽ',
410
+ 'Ӿ' => 'ӿ',
411
+ 'Ԁ' => 'ԁ',
412
+ 'Ԃ' => 'ԃ',
413
+ 'Ԅ' => 'ԅ',
414
+ 'Ԇ' => 'ԇ',
415
+ 'Ԉ' => 'ԉ',
416
+ 'Ԋ' => 'ԋ',
417
+ 'Ԍ' => 'ԍ',
418
+ 'Ԏ' => 'ԏ',
419
+ 'Ԑ' => 'ԑ',
420
+ 'Ԓ' => 'ԓ',
421
+ 'Ԕ' => 'ԕ',
422
+ 'Ԗ' => 'ԗ',
423
+ 'Ԙ' => 'ԙ',
424
+ 'Ԛ' => 'ԛ',
425
+ 'Ԝ' => 'ԝ',
426
+ 'Ԟ' => 'ԟ',
427
+ 'Ԡ' => 'ԡ',
428
+ 'Ԣ' => 'ԣ',
429
+ 'Ԥ' => 'ԥ',
430
+ 'Ԧ' => 'ԧ',
431
+ 'Ԩ' => 'ԩ',
432
+ 'Ԫ' => 'ԫ',
433
+ 'Ԭ' => 'ԭ',
434
+ 'Ԯ' => 'ԯ',
435
+ 'Ա' => 'ա',
436
+ 'Բ' => 'բ',
437
+ 'Գ' => 'գ',
438
+ 'Դ' => 'դ',
439
+ 'Ե' => 'ե',
440
+ 'Զ' => 'զ',
441
+ 'Է' => 'է',
442
+ 'Ը' => 'ը',
443
+ 'Թ' => 'թ',
444
+ 'Ժ' => 'ժ',
445
+ 'Ի' => 'ի',
446
+ 'Լ' => 'լ',
447
+ 'Խ' => 'խ',
448
+ 'Ծ' => 'ծ',
449
+ 'Կ' => 'կ',
450
+ 'Հ' => 'հ',
451
+ 'Ձ' => 'ձ',
452
+ 'Ղ' => 'ղ',
453
+ 'Ճ' => 'ճ',
454
+ 'Մ' => 'մ',
455
+ 'Յ' => 'յ',
456
+ 'Ն' => 'ն',
457
+ 'Շ' => 'շ',
458
+ 'Ո' => 'ո',
459
+ 'Չ' => 'չ',
460
+ 'Պ' => 'պ',
461
+ 'Ջ' => 'ջ',
462
+ 'Ռ' => 'ռ',
463
+ 'Ս' => 'ս',
464
+ 'Վ' => 'վ',
465
+ 'Տ' => 'տ',
466
+ 'Ր' => 'ր',
467
+ 'Ց' => 'ց',
468
+ 'Ւ' => 'ւ',
469
+ 'Փ' => 'փ',
470
+ 'Ք' => 'ք',
471
+ 'Օ' => 'օ',
472
+ 'Ֆ' => 'ֆ',
473
+ 'Ⴀ' => 'ⴀ',
474
+ 'Ⴁ' => 'ⴁ',
475
+ 'Ⴂ' => 'ⴂ',
476
+ 'Ⴃ' => 'ⴃ',
477
+ 'Ⴄ' => 'ⴄ',
478
+ 'Ⴅ' => 'ⴅ',
479
+ 'Ⴆ' => 'ⴆ',
480
+ 'Ⴇ' => 'ⴇ',
481
+ 'Ⴈ' => 'ⴈ',
482
+ 'Ⴉ' => 'ⴉ',
483
+ 'Ⴊ' => 'ⴊ',
484
+ 'Ⴋ' => 'ⴋ',
485
+ 'Ⴌ' => 'ⴌ',
486
+ 'Ⴍ' => 'ⴍ',
487
+ 'Ⴎ' => 'ⴎ',
488
+ 'Ⴏ' => 'ⴏ',
489
+ 'Ⴐ' => 'ⴐ',
490
+ 'Ⴑ' => 'ⴑ',
491
+ 'Ⴒ' => 'ⴒ',
492
+ 'Ⴓ' => 'ⴓ',
493
+ 'Ⴔ' => 'ⴔ',
494
+ 'Ⴕ' => 'ⴕ',
495
+ 'Ⴖ' => 'ⴖ',
496
+ 'Ⴗ' => 'ⴗ',
497
+ 'Ⴘ' => 'ⴘ',
498
+ 'Ⴙ' => 'ⴙ',
499
+ 'Ⴚ' => 'ⴚ',
500
+ 'Ⴛ' => 'ⴛ',
501
+ 'Ⴜ' => 'ⴜ',
502
+ 'Ⴝ' => 'ⴝ',
503
+ 'Ⴞ' => 'ⴞ',
504
+ 'Ⴟ' => 'ⴟ',
505
+ 'Ⴠ' => 'ⴠ',
506
+ 'Ⴡ' => 'ⴡ',
507
+ 'Ⴢ' => 'ⴢ',
508
+ 'Ⴣ' => 'ⴣ',
509
+ 'Ⴤ' =