diff --git a/apps/maarch_entreprise/test_elastic.php b/apps/maarch_entreprise/test_elastic.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb80a07dd1c720feeb564ca388f0f9daa90d6317
--- /dev/null
+++ b/apps/maarch_entreprise/test_elastic.php
@@ -0,0 +1,34 @@
+<?php
+
+require 'apps/maarch_entreprise/tools/elasticsearch-php/vendor/autoload.php';
+
+use Elasticsearch\ClientBuilder;
+
+$hosts = [
+    '192.168.21.15:9200',         // IP + Port
+    // '192.168.1.2',              // Just IP
+    // 'mydomain.server.com:9201', // Domain + Port
+    // 'mydomain2.server.com',     // Just Domain
+    // 'https://localhost',        // SSL to localhost
+    // 'https://192.168.1.3:9200'  // SSL to IP + Port
+];
+$clientBuilder = ClientBuilder::create();   // Instantiate a new ClientBuilder
+$clientBuilder->setHosts($hosts);           // Set the hosts
+$client = $clientBuilder->build();          // Build the client object
+
+//$client = ClientBuilder::create()->build();
+
+echo '<pre>';
+print_r($client);
+echo '</pre>';
+exit;
+
+
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id'
+];
+
+$response = $client->get($params);
+print_r($response);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/.php_cs b/apps/maarch_entreprise/tools/elasticsearch-php/.php_cs
new file mode 100644
index 0000000000000000000000000000000000000000..e01869ce0560c124320b23c5e9633a64bd5fcad0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/.php_cs
@@ -0,0 +1,22 @@
+<?php
+
+function php_cs() {
+    $finder = Symfony\CS\Finder\DefaultFinder::create()
+        ->exclude('benchmarks')
+        ->exclude('docs')
+        ->exclude('util')
+        ->exclude('.github')
+        ->exclude('util')
+        ->exclude('travis')
+        ->exclude('util/cache')
+        ->exclude('util/elasticsearch')
+        ->exclude('vendor')
+        ->in(__DIR__);
+
+    return Symfony\CS\Config\Config::create()
+        ->setUsingCache(true)
+        ->level(Symfony\CS\FixerInterface::PSR2_LEVEL)
+        ->finder($finder);
+}
+
+return php_cs();
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/.travis.yml b/apps/maarch_entreprise/tools/elasticsearch-php/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..420bd07b63cd52cd3dbbcbd960daf46e77b0e89e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/.travis.yml
@@ -0,0 +1,58 @@
+language: php
+
+jdk:
+  - oraclejdk8
+
+addons:
+  apt:
+    packages:
+      - oracle-java8-installer
+
+branches:
+  except:
+    - 0.4
+
+sudo: true
+
+php:
+  - 7.0
+  - 7.1
+  - hhvm
+
+matrix:
+  fast_finish: true
+  include:
+    - php: 7.1
+      env: ES_VERSION="5.0" TEST_BUILD_REF="origin/5.0"
+    - php: 7.1
+      env: ES_VERSION="5.1" TEST_BUILD_REF="origin/5.1"
+    - php: 7.1
+      env: ES_VERSION="5.2" TEST_BUILD_REF="origin/5.2"
+  allow_failures:
+    - php: hhvm
+
+env:
+  global:
+    - ES_VERSION="5.x"
+    - TEST_BUILD_REF="origin/5.x"
+    - ES_TEST_HOST=http://localhost:9200
+    - JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre"
+
+before_install:
+  - sudo update-java-alternatives -s java-8-oracle
+  - ./travis/download_and_run_es.sh
+
+install:
+  - composer install --prefer-source
+
+before_script:
+  - if [ $TRAVIS_PHP_VERSION = '7.0' ]; then PHPUNIT_FLAGS="--coverage-clover ./build/logs/clover.xml"; fi
+  - php util/RestSpecRunner.php
+  - php util/EnsureClusterAlive.php
+
+script:
+  - vendor/bin/phpunit $PHPUNIT_FLAGS
+  - vendor/bin/phpunit -c phpunit-integration.xml --group sync $PHPUNIT_FLAGS
+
+after_script:
+  - if [ $TRAVIS_PHP_VERSION = '7.0' ]; then php vendor/bin/coveralls; fi
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/BREAKING_CHANGES.md b/apps/maarch_entreprise/tools/elasticsearch-php/BREAKING_CHANGES.md
new file mode 100644
index 0000000000000000000000000000000000000000..cba9966ebdd0caaa4788ddd5a4b117164ff18ef9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/BREAKING_CHANGES.md
@@ -0,0 +1,23 @@
+# 5.0
+
+## Breaking changes
+
+- Indices/Analyze Endpoint: `filters` and `char_filters` URI parameters have renamed to `filter` and `char_filter` respectively
+- SearchExists endpoint has been removed ([use `size=0` and `terminate_after=1` instead](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_50_search_changes.html#_search_exists_api_removed))
+- Warmers have been removed because they are [no longer useful](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_50_index_apis.html#_warmers)
+- Indices/Optimize Endpoint has been removed ([use `_forcemerge` instead](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_50_rest_api_changes.html#_literal__optimize_literal_endpoint_removed))
+- MoreLikeThis (MLT) endpoint has been removed
+- DeleteByQuery endpoint has been removed.
+- Tasks/List and Tasks/Get are now separate endpoints (see: [[e0cc5f9]](http://github.com/elasticsearch/elasticsearch-php/commit/752d5a2))
+- Client requires PHP 5.6.6 or higher
+
+## Deprecations
+
+- Percolator endpoints are deprecated and will be removed in Elasticsearch 6.0
+
+## Internal BWC Breaks
+
+- Namespace injection has changed slightly.  If you use custom namespaces, you'll need to update your code (see: Add better ability to inject namespaces [[b1a27b7]](http://github.com/elasticsearch/elasticsearch-php/commit/b1a27b7))
+- Endpoints no longer use the Transport directly.  If you use custom endpoints, you'll need to do some minor
+refactoring (see: Refactor to remove Transport dependence in endpoints [[ecd454c]](http://github.com/elasticsearch/elasticsearch-php/commit/ecd454c))
+- To facilitate testing and other features, the `ConnectionInterface` has expanded to obtain some more methods ([[getPath()]](http://github.com/elasticsearch/elasticsearch-php/commit/8bcf1a8), [[getUserPass()]](http://github.com/elasticsearch/elasticsearch-php/commit/586fbdb), [[getHost()]](http://github.com/elasticsearch/elasticsearch-php/commit/445fdea))
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/CHANGELOG.md b/apps/maarch_entreprise/tools/elasticsearch-php/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..e265b7d6509606d9c5fba027715a6cb0909756e6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/CHANGELOG.md
@@ -0,0 +1,192 @@
+## Release 5.1.0
+
+- Catch additional exceptions in the ping function for those who use multiple nodes in their connection pool. [[ffe0510]](http://github.com/elasticsearch/elasticsearch-php/commit/ffe0510)
+- Use `array_diff` to Check Endpoint Parameters (#514) [[46f7f36]](http://github.com/elasticsearch/elasticsearch-php/commit/46f7f36)
+- Re-Add the DeleteByQuery Functionality (#513) [[b262dca]](http://github.com/elasticsearch/elasticsearch-php/commit/b262dca)
+- Add 'full_id' to Cat/Nodes endpoint [[f32cc54]](http://github.com/elasticsearch/elasticsearch-php/commit/f32cc54)
+- add ClientBuilder->setConnectionParams() (#507) [[3923432]](http://github.com/elasticsearch/elasticsearch-php/commit/3923432)
+- Add new (undocumented) PHP-7 JSON error codes, better unknown handling [[0a7fd55]](http://github.com/elasticsearch/elasticsearch-php/commit/0a7fd55)
+- Add ext-json version constraint, update some docs [[ca2791a]](http://github.com/elasticsearch/elasticsearch-php/commit/ca2791a)
+- Add catch-all in exception handling [[eb4117c]](http://github.com/elasticsearch/elasticsearch-php/commit/eb4117c)
+- Revert "Simplify error parsing now that we don't support <2.0 errors" [[fd38538]](http://github.com/elasticsearch/elasticsearch-php/commit/fd38538)
+
+### Testing
+
+- [TEST] Make sure property_exists calls only ocurr on objects [[30baa0d]](http://github.com/elasticsearch/elasticsearch-php/commit/30baa0d)
+- [TEST] Tweak travis to install better ext-json [[3409a81]](http://github.com/elasticsearch/elasticsearch-php/commit/3409a81)
+- [TEST] Mute rollover test temporarily [[2316d33]](http://github.com/elasticsearch/elasticsearch-php/commit/2316d33)
+- [TEST] Add support for warning header checks [[ac1b053]](http://github.com/elasticsearch/elasticsearch-php/commit/ac1b053)
+
+### Documentation
+
+- [DOCS] Removed unwanted ) and added proper formatting (#497) [[8187fdd]](http://github.com/elasticsearch/elasticsearch-php/commit/8187fdd)
+- [DOCS] Update index-operations.asciidoc (#496) [[a4dd09f]](http://github.com/elasticsearch/elasticsearch-php/commit/a4dd09f)
+- [DOCS] Update version in monolog configuration. (#489)  [[90fbd53]](http://github.com/elasticsearch/elasticsearch-php/commit/90fbd53)
+- [DOCS] Update php-version-requirement.asciidoc (#491) [[4951439]](http://github.com/elasticsearch/elasticsearch-php/commit/4951439)
+- [DOCS] "password" param should be "password" [[8ee2bc9]](http://github.com/elasticsearch/elasticsearch-php/commit/8ee2bc9)
+- More asciidoc tweaks [[451f985]](http://github.com/elasticsearch/elasticsearch-php/commit/451f985)
+- Asciidoc != markdown [[8a816c1]](http://github.com/elasticsearch/elasticsearch-php/commit/8a816c1)
+- [Docs] More 5.0 readme tweaks [[a60dd09]](http://github.com/elasticsearch/elasticsearch-php/commit/a60dd09)
+- [DOCS] 5.0 doc updates, readme, breaking changes [[6fb6421]](http://github.com/elasticsearch/elasticsearch-php/commit/6fb6421)
+
+
+## Release 5.0.0
+
+Woo!
+
+### New Endpoints
+- Add Cat/Tasks endpoint [[42856dc]](http://github.com/elasticsearch/elasticsearch-php/commit/42856dc)
+- Add Reindex endpoint [[d2484c7]](http://github.com/elasticsearch/elasticsearch-php/commit/d2484c7)
+- Add Indices/Shrink endpoint [[b6b97a4]](http://github.com/elasticsearch/elasticsearch-php/commit/b6b97a4)
+- Add Indices/Rollover endpoint [[1ba8299]](http://github.com/elasticsearch/elasticsearch-php/commit/1ba8299)
+
+### Removals/BWC Breaks/Deprecations
+
+- Indices/Optimize endpoint has been removed in 5.0 [[4f0b9da]](http://github.com/elasticsearch/elasticsearch-php/commit/4f0b9da)
+- Warmers have been removed in 5.0 [[ef24d5d]](http://github.com/elasticsearch/elasticsearch-php/commit/ef24d5d)
+- Deprecate various Percolate endpoints [[959eee5]](http://github.com/elasticsearch/elasticsearch-php/commit/959eee5)
+- Remove old `percolate` parameter on docblocks [[f64345d]](http://github.com/elasticsearch/elasticsearch-php/commit/f64345d)
+- SearchExists Endpoint removed in 5.0 [[6dfc6a0]](http://github.com/elasticsearch/elasticsearch-php/commit/6dfc6a0)
+- [Internal BWC Break] Add better ability to inject namespaces [[b1a27b7]](http://github.com/elasticsearch/elasticsearch-php/commit/b1a27b7)
+- [Internal BWC Break] Refactor to remove Transport dependence in endpoints [[ecd454c]](http://github.com/elasticsearch/elasticsearch-php/commit/ecd454c)
+- [BWC Break] Remove MLT endpoint [[38c05da]](http://github.com/elasticsearch/elasticsearch-php/commit/38c05da)
+- [BWC Break] Remove DeleteByQuery endpoint [[9f3776a]](http://github.com/elasticsearch/elasticsearch-php/commit/9f3776a)
+- [BWC Break] Rename internal TermVector -> TermVectors, remove old public TermVector [[cbe8619]](http://github.com/elasticsearch/elasticsearch-php/commit/cbe8619)
+- [BWC] Add getPath() method to ConnectionInterface [[8bcf1a8]](http://github.com/elasticsearch/elasticsearch-php/commit/8bcf1a8)
+- [BWC] Add getUserPass() method to ConnectionInterface [[586fbdb]](http://github.com/elasticsearch/elasticsearch-php/commit/586fbdb)
+- [BWC] Add getHost() method to ConnectionInterface [[445fdea]](http://github.com/elasticsearch/elasticsearch-php/commit/445fdea)
+- Tasks/List and Tasks/Get are now separate endpoints [[e0cc5f9]](http://github.com/elasticsearch/elasticsearch-php/commit/752d5a2)
+
+### Updated/Added whitelist params
+
+- Add Ingest namespace and endpoints [[7b87954]](http://github.com/elasticsearch/elasticsearch-php/commit/7b87954)
+- Add `pipeline` parameter to Bulk endpoint whitelist [[3fa1c51]](http://github.com/elasticsearch/elasticsearch-php/commit/3fa1c51)
+- Add `pipeline` to Index endpoint [[db5d794]](http://github.com/elasticsearch/elasticsearch-php/commit/db5d794)
+- Add `include_defaults` param to Indices/GetSettings whitelist [[496071c]](http://github.com/elasticsearch/elasticsearch-php/commit/496071c)
+- Add `preserve_existing` param to Indices/PutSettings whitelist [[69389fc]](http://github.com/elasticsearch/elasticsearch-php/commit/69389fc)
+- Add Cluster/AllocationExplain endpoint [[f9c297c]](http://github.com/elasticsearch/elasticsearch-php/commit/f9c297c)
+- Add Ingest namespace and endpoints [[66c851f]](http://github.com/elasticsearch/elasticsearch-php/commit/66c851f)
+- Add missing params to Analyze endpoint: `char_filter`, `format`, `attributes`, `explain` [[8a0a932]](http://github.com/elasticsearch/elasticsearch-php/commit/8a0a932)
+- `filters` is now `filter` in Analyze endpoint [[94dbb15]](http://github.com/elasticsearch/elasticsearch-php/commit/94dbb15)
+- Add `size` param to Cat/Threadpool whitelist [[bece0e5]](http://github.com/elasticsearch/elasticsearch-php/commit/bece0e5)
+- Add `task_id` to Tasks/Get whitelist [[6a315e0]](http://github.com/elasticsearch/elasticsearch-php/commit/6a315e0)
+- Add `docvalue_fields` to Search whitelist, remove `fields` [[63ff8c5]](http://github.com/elasticsearch/elasticsearch-php/commit/63ff8c5)
+- Add `format` to Cat/Aliases whitelist [[68630a0]](http://github.com/elasticsearch/elasticsearch-php/commit/68630a0)
+- Add 'thread_pool_patterns' parameter to Cat\Threadpool endpoint [[c0820dc]](http://github.com/elasticsearch/elasticsearch-php/commit/c0820dc)
+- Add 's' sort param to all Cat endpoints [[87f23a1]](http://github.com/elasticsearch/elasticsearch-php/commit/87f23a1)
+- Add '_source' to Update whitelist [[d33be49]](http://github.com/elasticsearch/elasticsearch-php/commit/d33be49)
+- Add 'ignore_unavailable' to Snapshot/Status whitelist [[f90c2dd]](http://github.com/elasticsearch/elasticsearch-php/commit/f90c2dd)
+- Add 'ignore_unavailable' to Snapshot/Get whitelist [[93c4f22]](http://github.com/elasticsearch/elasticsearch-php/commit/93c4f22)
+- Add 'stored_fields' to Mget whitelist [[054ebed]](http://github.com/elasticsearch/elasticsearch-php/commit/054ebed)
+- Add 'wait_for_no_relocating_shards' to Cluster/Health whitelist [[8448f99]](http://github.com/elasticsearch/elasticsearch-php/commit/8448f99)
+- Add 'health' to Cat/Indices whitelist [[06a3bf5]](http://github.com/elasticsearch/elasticsearch-php/commit/06a3bf5)
+- Add '_source_include', '_source_exclude', 'pipeline' params to Bulk whitelist [[3ca12f4]](http://github.com/elasticsearch/elasticsearch-php/commit/3ca12f4)
+- Add 'stored_fields' to Get Endpoint [[c57a5a4]](http://github.com/elasticsearch/elasticsearch-php/commit/c57a5a4)
+- Add '_source' to Bulk endpoint whitelist [[35b7087]](http://github.com/elasticsearch/elasticsearch-php/commit/35b7087)
+
+### Documentation
+
+- [DOCS] Usage example for creating ClientBuilder fixed (#406) [[6a868ea]](http://github.com/elasticsearch/elasticsearch-php/commit/6a868ea)
+- [Docs] Fix typo. (#409) [[b013ab0]](http://github.com/elasticsearch/elasticsearch-php/commit/b013ab0)
+- Docs: Fixed broken link. [[17a4ed7]](http://github.com/elasticsearch/elasticsearch-php/commit/17a4ed7)
+- [DOCS] Rebuild auto-generated docs [[2904d7a]](http://github.com/elasticsearch/elasticsearch-php/commit/2904d7a)
+- Add script to generate docs [[4ce648c]](http://github.com/elasticsearch/elasticsearch-php/commit/4ce648c)
+- Update Readme with 5.0 branching information [[ddb8ecd]](http://github.com/elasticsearch/elasticsearch-php/commit/ddb8ecd)
+- [DOCS] Update URL/Email in class-level doc blocks [[8238cb3]](http://github.com/elasticsearch/elasticsearch-php/commit/8238cb3)
+- [DOCS] Update copyright year in licenses [[fcc4ad6]](http://github.com/elasticsearch/elasticsearch-php/commit/fcc4ad6)
+- [DOCS] Add Breaking Changes list for 5.0 [[65953ac]](http://github.com/elasticsearch/elasticsearch-php/commit/65953ac)
+- [DOCS] add getSource method to the readme (#465) [[90cbdfb]](http://github.com/elasticsearch/elasticsearch-php/commit/90cbdfb)
+- [DOCS] Replace deprecated filtered query with boolean [[3b81615]](http://github.com/elasticsearch/elasticsearch-php/commit/3b81615)
+- [DOCS] Add Plastic Laravel integration to community page [[e4530a7]](http://github.com/elasticsearch/elasticsearch-php/commit/e4530a7)
+- [DOCS] Fix return type in docblock for all Exists* endpoints [[498c003]](http://github.com/elasticsearch/elasticsearch-php/commit/498c003)
+- Add autogenerated reference documentation [[bd64d52]](http://github.com/elasticsearch/elasticsearch-php/commit/bd64d52)
+- [DOCS] Regenerate reference docs [[030d96e]](http://github.com/elasticsearch/elasticsearch-php/commit/030d96e)
+
+### Cleanup
+
+- Remove benchmark autoload [[74b5ad9]](http://github.com/elasticsearch/elasticsearch-php/commit/74b5ad9)
+- Remove old rest-spec parser [[07754c4]](http://github.com/elasticsearch/elasticsearch-php/commit/07754c4)
+- Remove unused benchmarks [[20a75b1]](http://github.com/elasticsearch/elasticsearch-php/commit/20a75b1)
+- Automated PSR-2 style cleanup [[fbe6f92]](http://github.com/elasticsearch/elasticsearch-php/commit/fbe6f92)
+- Tweak script for new cli format [[4adbe94]](http://github.com/elasticsearch/elasticsearch-php/commit/4adbe94)
+- Fix Indices/Flush after autogeneration [[d56e2c4]](http://github.com/elasticsearch/elasticsearch-php/commit/d56e2c4)
+- Tweak SpecParser template [[8341c4c]](http://github.com/elasticsearch/elasticsearch-php/commit/8341c4c)
+- Added output folder from SpecParser to gitignore [[cfd49ee]](http://github.com/elasticsearch/elasticsearch-php/commit/cfd49ee)
+- Updated ParseSpec to be able to run from console and use new api path [[e0cc5f9]](http://github.com/elasticsearch/elasticsearch-php/commit/d44a323)
+
+### Bugfixes and Misc.
+
+- Split Create out to its own internal endpoint for simplicity [[9eb573a]](http://github.com/elasticsearch/elasticsearch-php/commit/9eb573a)
+- Cat/Snapshots 'repository' param is not in-fact required, despite spec [[6c77f62]](http://github.com/elasticsearch/elasticsearch-php/commit/6c77f62)
+- Fix error handler when no structured error is present [[f380a69]](http://github.com/elasticsearch/elasticsearch-php/commit/f380a69)
+- add JSON_PRESERVE_ZERO_FRACTION for Json_encode (#481) [[2ab3971]](http://github.com/elasticsearch/elasticsearch-php/commit/2ab3971)
+- Simplify error parsing now that we don't support <2.0 errors [[a6d896b]](http://github.com/elasticsearch/elasticsearch-php/commit/a6d896b)
+- Added support for PHP 7.1 (#474) [[864d4d3]](http://github.com/elasticsearch/elasticsearch-php/commit/864d4d3)
+- Type exists URI has changed to index/_mapping/type [[dd63eaa]](http://github.com/elasticsearch/elasticsearch-php/commit/dd63eaa)
+- Index creation only accepts PUT verbs now [[9c620c2]](http://github.com/elasticsearch/elasticsearch-php/commit/9c620c2)
+- Update SearchResponseIterator to remove old-style scan/scroll flow [[72f3b15]](http://github.com/elasticsearch/elasticsearch-php/commit/72f3b15)
+- Add "extended" host configuration syntax [[a0ddad1]](http://github.com/elasticsearch/elasticsearch-php/commit/a0ddad1)
+- Allow ConnectionFactory to be override (#456) [[cc2a5fe]](http://github.com/elasticsearch/elasticsearch-php/commit/cc2a5fe)
+- Special-case unwrapping for async methods that use Exist* endpoints [[347e5c5]](http://github.com/elasticsearch/elasticsearch-php/commit/347e5c5)
+- composer: bump min version to PHP 5.6 (#451) [[6648646]](http://github.com/elasticsearch/elasticsearch-php/commit/6648646)
+- Allow to get multiple pipelines without id (#453) [[c7f737b]](http://github.com/elasticsearch/elasticsearch-php/commit/c7f737b)
+- Split, refactor and fix some tests (#447) [[68e819b]](http://github.com/elasticsearch/elasticsearch-php/commit/68e819b)
+- Tests cleaned up a little [[afc9af0]](http://github.com/elasticsearch/elasticsearch-php/commit/afc9af0)
+- Fix doc output on github [[62d6132]](http://github.com/elasticsearch/elasticsearch-php/commit/62d6132)
+- (pr/445) Move resultOrFuture from endpoint to transport [[80bfeea]](http://github.com/elasticsearch/elasticsearch-php/commit/80bfeea)
+- Manually convert true/false to "true"/"false" before http_build_query() [[bef93cb]](http://github.com/elasticsearch/elasticsearch-php/commit/bef93cb)
+- getApiPath function returns path without trailing slash [[8bcfaf0]](http://github.com/elasticsearch/elasticsearch-php/commit/8bcfaf0)
+- Use valid SPDX license identifier [[963e635]](http://github.com/elasticsearch/elasticsearch-php/commit/963e635)
+- Fix bug when Create is called with an stdClass body [[adcaa2c]](http://github.com/elasticsearch/elasticsearch-php/commit/adcaa2c)
+- Fix comment tag [[3b8e918]](http://github.com/elasticsearch/elasticsearch-php/commit/3b8e918)
+- Add .github templates [[104a7ea]](http://github.com/elasticsearch/elasticsearch-php/commit/104a7ea)
+
+### Testing
+
+Lots of work re-working the REST Yaml test framework, getting travis to play nicely with Java8, and misc
+tweaks over time.  The test framework is in much better shape, largely thanks to help from community member @joelwurtz!
+
+- [TEST] Add 5.x to test matrix [[77b548d]](http://github.com/elasticsearch/elasticsearch-php/commit/77b548d)
+- [TEST] Fixup server startup [[18ea943]](http://github.com/elasticsearch/elasticsearch-php/commit/18ea943)
+- [TEST] Add ignore to custom param since ES now validates extraneous uri params [[61f62d8]](http://github.com/elasticsearch/elasticsearch-php/commit/61f62d8)
+- [TEST] Regex to detect "stashed" values is not useful, throws false-positives [[7ff9b20]](http://github.com/elasticsearch/elasticsearch-php/commit/7ff9b20)
+- [TEST] (Fix) Better context to true/false failures [[a9ee47d]](http://github.com/elasticsearch/elasticsearch-php/commit/a9ee47d)
+- [TEST] Better context to true/false failures [[9df055b]](http://github.com/elasticsearch/elasticsearch-php/commit/9df055b)
+- [TEST] Add 'indices.shrink/10_basic.yaml' to temp blacklist [[aa93f39]](http://github.com/elasticsearch/elasticsearch-php/commit/aa93f39)
+- [TEST] Only run sync tests on Travis [[2f7b863]](http://github.com/elasticsearch/elasticsearch-php/commit/2f7b863)
+- [TEST] Update travis config to use ES 5.0 branch [[cbad348]](http://github.com/elasticsearch/elasticsearch-php/commit/cbad348)
+- [TEST] Add back accidentally deleted annotations [[c7f8c06]](http://github.com/elasticsearch/elasticsearch-php/commit/c7f8c06)
+- [TEST] Better snapshot/repo clearing [[cc3a40d]](http://github.com/elasticsearch/elasticsearch-php/commit/cc3a40d)
+- [TEST] output tweaks for better debugging, add temporary blacklist for fatal parsing files [[cb1956b]](http://github.com/elasticsearch/elasticsearch-php/commit/cb1956b)
+- [TEST] Tweak verbosity of tests [[e0cc5f9]](http://github.com/elasticsearch/elasticsearch-php/commit/e0cc5f9)
+- [TEST] No need to test below PHP 5.6 on master [[7aad25a]](http://github.com/elasticsearch/elasticsearch-php/commit/7aad25a)
+- [TEST] Allow hhvm to fail [[fe6993d]](http://github.com/elasticsearch/elasticsearch-php/commit/fe6993d)
+- [TEST] Remove ES host/port so it starts in "dev" mode [[c91242d]](http://github.com/elasticsearch/elasticsearch-php/commit/c91242d)
+- [TEST] Bump travis file descriptors [[b24fc85]](http://github.com/elasticsearch/elasticsearch-php/commit/b24fc85)
+- [TEST] Bump travis file descriptors [[5cd7c37]](http://github.com/elasticsearch/elasticsearch-php/commit/5cd7c37)
+- [TEST] Bump travis file descriptors [[65f2eb9]](http://github.com/elasticsearch/elasticsearch-php/commit/65f2eb9)
+- [TEST] (Nuclear option) more Java8 JRE tweaks [[00ce1df]](http://github.com/elasticsearch/elasticsearch-php/commit/00ce1df)
+- [TEST] (Hundred and one time's a charm) more Java8 JRE tweaks [[c38e5fe]](http://github.com/elasticsearch/elasticsearch-php/commit/c38e5fe)
+- [TEST] (Hundredth time's a charm) more Java8 JRE tweaks [[2cef10d]](http://github.com/elasticsearch/elasticsearch-php/commit/2cef10d)
+- [TEST] (And yet) more Java8 JRE tweaks [[ecb44ab]](http://github.com/elasticsearch/elasticsearch-php/commit/ecb44ab)
+- [TEST] (Yet) more Java8 JRE tweaks [[afc6b8a]](http://github.com/elasticsearch/elasticsearch-php/commit/afc6b8a)
+- [TEST] More Java8 JRE tweaks [[0567579]](http://github.com/elasticsearch/elasticsearch-php/commit/0567579)
+- [TEST] More Java8 JRE tweaks [[9869977]](http://github.com/elasticsearch/elasticsearch-php/commit/9869977)
+- [TEST] Print java version for debug [[9dec069]](http://github.com/elasticsearch/elasticsearch-php/commit/9dec069)
+- [TEST] Manually configure Java8 JRE [[1fd3612]](http://github.com/elasticsearch/elasticsearch-php/commit/1fd3612)
+- Revert "[TEST] Use Java 8 for tests" [[6fc4c5c]](http://github.com/elasticsearch/elasticsearch-php/commit/6fc4c5c)
+- [TEST] Use Java 8 for tests [[2d59159]](http://github.com/elasticsearch/elasticsearch-php/commit/2d59159)
+- [TEST] Replace stash before finding nested variables in match [[2dae755]](http://github.com/elasticsearch/elasticsearch-php/commit/2dae755)
+- [TEST] Convert `tasks.list` to `tasks.get` because `list` is a reserved word [[e0956a5]](http://github.com/elasticsearch/elasticsearch-php/commit/e0956a5)
+- [TEST] Small tweak to timestamp regex [[d5e50c1]](http://github.com/elasticsearch/elasticsearch-php/commit/d5e50c1)
+- [TEST] return second level of exception message if possible, for further testing [[a76cbf2]](http://github.com/elasticsearch/elasticsearch-php/commit/a76cbf2)
+- [TEST] Master tests only track ES-master (5.0 alpha) now [[76e621c]](http://github.com/elasticsearch/elasticsearch-php/commit/76e621c)
+- [TEST] Fix jq syntax for numeric branches (e.g. `2.2`) [[eb48dab]](http://github.com/elasticsearch/elasticsearch-php/commit/eb48dab)
+- [TEST] Automate snapshot retrieval [[c08b08b]](http://github.com/elasticsearch/elasticsearch-php/commit/c08b08b)
+- [TEST] Update snapshot download script for 2.2 [[350cd6e]](http://github.com/elasticsearch/elasticsearch-php/commit/350cd6e)
+- [TEST] Update travis matrix [[04bcf81]](http://github.com/elasticsearch/elasticsearch-php/commit/04bcf81)
+- [TEST] Invoke phpunit dependency instead of travis phpunit.phar [[f9e0d99]](http://github.com/elasticsearch/elasticsearch-php/commit/f9e0d99)
+- Revert "[TEST] fix object notation" [[b966328]](http://github.com/elasticsearch/elasticsearch-php/commit/b966328)
+- Make test fail on Yaml parse error [[f1b3adb]](http://github.com/elasticsearch/elasticsearch-php/commit/f1b3adb)
+- Only show log when test fails [[f2acb43]](http://github.com/elasticsearch/elasticsearch-php/commit/f2acb43)
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/LICENSE b/apps/maarch_entreprise/tools/elasticsearch-php/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..0f773ccb4379a25b7446cdd206858ce430adc480
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/LICENSE
@@ -0,0 +1,635 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+
+                      GNU LESSER GENERAL PUBLIC LICENSE
+                           Version 2.1, February 1999
+
+     Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+    [This is the first released version of the Lesser GPL.  It also counts
+     as the successor of the GNU Library Public License, version 2, hence
+     the version number 2.1.]
+
+                                Preamble
+
+      The licenses for most software are designed to take away your
+    freedom to share and change it.  By contrast, the GNU General Public
+    Licenses are intended to guarantee your freedom to share and change
+    free software--to make sure the software is free for all its users.
+
+      This license, the Lesser General Public License, applies to some
+    specially designated software packages--typically libraries--of the
+    Free Software Foundation and other authors who decide to use it.  You
+    can use it too, but we suggest you first think carefully about whether
+    this license or the ordinary General Public License is the better
+    strategy to use in any particular case, based on the explanations below.
+
+      When we speak of free software, we are referring to freedom of use,
+    not price.  Our General Public Licenses are designed to make sure that
+    you have the freedom to distribute copies of free software (and charge
+    for this service if you wish); that you receive source code or can get
+    it if you want it; that you can change the software and use pieces of
+    it in new free programs; and that you are informed that you can do
+    these things.
+
+      To protect your rights, we need to make restrictions that forbid
+    distributors to deny you these rights or to ask you to surrender these
+    rights.  These restrictions translate to certain responsibilities for
+    you if you distribute copies of the library or if you modify it.
+
+      For example, if you distribute copies of the library, whether gratis
+    or for a fee, you must give the recipients all the rights that we gave
+    you.  You must make sure that they, too, receive or can get the source
+    code.  If you link other code with the library, you must provide
+    complete object files to the recipients, so that they can relink them
+    with the library after making changes to the library and recompiling
+    it.  And you must show them these terms so they know their rights.
+
+      We protect your rights with a two-step method: (1) we copyright the
+    library, and (2) we offer you this license, which gives you legal
+    permission to copy, distribute and/or modify the library.
+
+      To protect each distributor, we want to make it very clear that
+    there is no warranty for the free library.  Also, if the library is
+    modified by someone else and passed on, the recipients should know
+    that what they have is not the original version, so that the original
+    author's reputation will not be affected by problems that might be
+    introduced by others.
+    
+      Finally, software patents pose a constant threat to the existence of
+    any free program.  We wish to make sure that a company cannot
+    effectively restrict the users of a free program by obtaining a
+    restrictive license from a patent holder.  Therefore, we insist that
+    any patent license obtained for a version of the library must be
+    consistent with the full freedom of use specified in this license.
+
+      Most GNU software, including some libraries, is covered by the
+    ordinary GNU General Public License.  This license, the GNU Lesser
+    General Public License, applies to certain designated libraries, and
+    is quite different from the ordinary General Public License.  We use
+    this license for certain libraries in order to permit linking those
+    libraries into non-free programs.
+
+      When a program is linked with a library, whether statically or using
+    a shared library, the combination of the two is legally speaking a
+    combined work, a derivative of the original library.  The ordinary
+    General Public License therefore permits such linking only if the
+    entire combination fits its criteria of freedom.  The Lesser General
+    Public License permits more lax criteria for linking other code with
+    the library.
+
+      We call this license the "Lesser" General Public License because it
+    does Less to protect the user's freedom than the ordinary General
+    Public License.  It also provides other free software developers Less
+    of an advantage over competing non-free programs.  These disadvantages
+    are the reason we use the ordinary General Public License for many
+    libraries.  However, the Lesser license provides advantages in certain
+    special circumstances.
+
+      For example, on rare occasions, there may be a special need to
+    encourage the widest possible use of a certain library, so that it becomes
+    a de-facto standard.  To achieve this, non-free programs must be
+    allowed to use the library.  A more frequent case is that a free
+    library does the same job as widely used non-free libraries.  In this
+    case, there is little to gain by limiting the free library to free
+    software only, so we use the Lesser General Public License.
+
+      In other cases, permission to use a particular library in non-free
+    programs enables a greater number of people to use a large body of
+    free software.  For example, permission to use the GNU C Library in
+    non-free programs enables many more people to use the whole GNU
+    operating system, as well as its variant, the GNU/Linux operating
+    system.
+
+      Although the Lesser General Public License is Less protective of the
+    users' freedom, it does ensure that the user of a program that is
+    linked with the Library has the freedom and the wherewithal to run
+    that program using a modified version of the Library.
+
+      The precise terms and conditions for copying, distribution and
+    modification follow.  Pay close attention to the difference between a
+    "work based on the library" and a "work that uses the library".  The
+    former contains code derived from the library, whereas the latter must
+    be combined with the library in order to run.
+    
+                      GNU LESSER GENERAL PUBLIC LICENSE
+       TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+      0. This License Agreement applies to any software library or other
+    program which contains a notice placed by the copyright holder or
+    other authorized party saying it may be distributed under the terms of
+    this Lesser General Public License (also called "this License").
+    Each licensee is addressed as "you".
+
+      A "library" means a collection of software functions and/or data
+    prepared so as to be conveniently linked with application programs
+    (which use some of those functions and data) to form executables.
+
+      The "Library", below, refers to any such software library or work
+    which has been distributed under these terms.  A "work based on the
+    Library" means either the Library or any derivative work under
+    copyright law: that is to say, a work containing the Library or a
+    portion of it, either verbatim or with modifications and/or translated
+    straightforwardly into another language.  (Hereinafter, translation is
+    included without limitation in the term "modification".)
+
+      "Source code" for a work means the preferred form of the work for
+    making modifications to it.  For a library, complete source code means
+    all the source code for all modules it contains, plus any associated
+    interface definition files, plus the scripts used to control compilation
+    and installation of the library.
+
+      Activities other than copying, distribution and modification are not
+    covered by this License; they are outside its scope.  The act of
+    running a program using the Library is not restricted, and output from
+    such a program is covered only if its contents constitute a work based
+    on the Library (independent of the use of the Library in a tool for
+    writing it).  Whether that is true depends on what the Library does
+    and what the program that uses the Library does.
+
+      1. You may copy and distribute verbatim copies of the Library's
+    complete source code as you receive it, in any medium, provided that
+    you conspicuously and appropriately publish on each copy an
+    appropriate copyright notice and disclaimer of warranty; keep intact
+    all the notices that refer to this License and to the absence of any
+    warranty; and distribute a copy of this License along with the
+    Library.
+
+      You may charge a fee for the physical act of transferring a copy,
+    and you may at your option offer warranty protection in exchange for a
+    fee.
+    
+      2. You may modify your copy or copies of the Library or any portion
+    of it, thus forming a work based on the Library, and copy and
+    distribute such modifications or work under the terms of Section 1
+    above, provided that you also meet all of these conditions:
+
+        a) The modified work must itself be a software library.
+
+        b) You must cause the files modified to carry prominent notices
+        stating that you changed the files and the date of any change.
+
+        c) You must cause the whole of the work to be licensed at no
+        charge to all third parties under the terms of this License.
+
+        d) If a facility in the modified Library refers to a function or a
+        table of data to be supplied by an application program that uses
+        the facility, other than as an argument passed when the facility
+        is invoked, then you must make a good faith effort to ensure that,
+        in the event an application does not supply such function or
+        table, the facility still operates, and performs whatever part of
+        its purpose remains meaningful.
+
+        (For example, a function in a library to compute square roots has
+        a purpose that is entirely well-defined independent of the
+        application.  Therefore, Subsection 2d requires that any
+        application-supplied function or table used by this function must
+        be optional: if the application does not supply it, the square
+        root function must still compute square roots.)
+
+    These requirements apply to the modified work as a whole.  If
+    identifiable sections of that work are not derived from the Library,
+    and can be reasonably considered independent and separate works in
+    themselves, then this License, and its terms, do not apply to those
+    sections when you distribute them as separate works.  But when you
+    distribute the same sections as part of a whole which is a work based
+    on the Library, the distribution of the whole must be on the terms of
+    this License, whose permissions for other licensees extend to the
+    entire whole, and thus to each and every part regardless of who wrote
+    it.
+
+    Thus, it is not the intent of this section to claim rights or contest
+    your rights to work written entirely by you; rather, the intent is to
+    exercise the right to control the distribution of derivative or
+    collective works based on the Library.
+
+    In addition, mere aggregation of another work not based on the Library
+    with the Library (or with a work based on the Library) on a volume of
+    a storage or distribution medium does not bring the other work under
+    the scope of this License.
+
+      3. You may opt to apply the terms of the ordinary GNU General Public
+    License instead of this License to a given copy of the Library.  To do
+    this, you must alter all the notices that refer to this License, so
+    that they refer to the ordinary GNU General Public License, version 2,
+    instead of to this License.  (If a newer version than version 2 of the
+    ordinary GNU General Public License has appeared, then you can specify
+    that version instead if you wish.)  Do not make any other change in
+    these notices.
+    
+      Once this change is made in a given copy, it is irreversible for
+    that copy, so the ordinary GNU General Public License applies to all
+    subsequent copies and derivative works made from that copy.
+
+      This option is useful when you wish to copy part of the code of
+    the Library into a program that is not a library.
+
+      4. You may copy and distribute the Library (or a portion or
+    derivative of it, under Section 2) in object code or executable form
+    under the terms of Sections 1 and 2 above provided that you accompany
+    it with the complete corresponding machine-readable source code, which
+    must be distributed under the terms of Sections 1 and 2 above on a
+    medium customarily used for software interchange.
+
+      If distribution of object code is made by offering access to copy
+    from a designated place, then offering equivalent access to copy the
+    source code from the same place satisfies the requirement to
+    distribute the source code, even though third parties are not
+    compelled to copy the source along with the object code.
+
+      5. A program that contains no derivative of any portion of the
+    Library, but is designed to work with the Library by being compiled or
+    linked with it, is called a "work that uses the Library".  Such a
+    work, in isolation, is not a derivative work of the Library, and
+    therefore falls outside the scope of this License.
+
+      However, linking a "work that uses the Library" with the Library
+    creates an executable that is a derivative of the Library (because it
+    contains portions of the Library), rather than a "work that uses the
+    library".  The executable is therefore covered by this License.
+    Section 6 states terms for distribution of such executables.
+
+      When a "work that uses the Library" uses material from a header file
+    that is part of the Library, the object code for the work may be a
+    derivative work of the Library even though the source code is not.
+    Whether this is true is especially significant if the work can be
+    linked without the Library, or if the work is itself a library.  The
+    threshold for this to be true is not precisely defined by law.
+
+      If such an object file uses only numerical parameters, data
+    structure layouts and accessors, and small macros and small inline
+    functions (ten lines or less in length), then the use of the object
+    file is unrestricted, regardless of whether it is legally a derivative
+    work.  (Executables containing this object code plus portions of the
+    Library will still fall under Section 6.)
+
+      Otherwise, if the work is a derivative of the Library, you may
+    distribute the object code for the work under the terms of Section 6.
+    Any executables containing that work also fall under Section 6,
+    whether or not they are linked directly with the Library itself.
+    
+      6. As an exception to the Sections above, you may also combine or
+    link a "work that uses the Library" with the Library to produce a
+    work containing portions of the Library, and distribute that work
+    under terms of your choice, provided that the terms permit
+    modification of the work for the customer's own use and reverse
+    engineering for debugging such modifications.
+
+      You must give prominent notice with each copy of the work that the
+    Library is used in it and that the Library and its use are covered by
+    this License.  You must supply a copy of this License.  If the work
+    during execution displays copyright notices, you must include the
+    copyright notice for the Library among them, as well as a reference
+    directing the user to the copy of this License.  Also, you must do one
+    of these things:
+
+        a) Accompany the work with the complete corresponding
+        machine-readable source code for the Library including whatever
+        changes were used in the work (which must be distributed under
+        Sections 1 and 2 above); and, if the work is an executable linked
+        with the Library, with the complete machine-readable "work that
+        uses the Library", as object code and/or source code, so that the
+        user can modify the Library and then relink to produce a modified
+        executable containing the modified Library.  (It is understood
+        that the user who changes the contents of definitions files in the
+        Library will not necessarily be able to recompile the application
+        to use the modified definitions.)
+
+        b) Use a suitable shared library mechanism for linking with the
+        Library.  A suitable mechanism is one that (1) uses at run time a
+        copy of the library already present on the user's computer system,
+        rather than copying library functions into the executable, and (2)
+        will operate properly with a modified version of the library, if
+        the user installs one, as long as the modified version is
+        interface-compatible with the version that the work was made with.
+
+        c) Accompany the work with a written offer, valid for at
+        least three years, to give the same user the materials
+        specified in Subsection 6a, above, for a charge no more
+        than the cost of performing this distribution.
+
+        d) If distribution of the work is made by offering access to copy
+        from a designated place, offer equivalent access to copy the above
+        specified materials from the same place.
+
+        e) Verify that the user has already received a copy of these
+        materials or that you have already sent this user a copy.
+
+      For an executable, the required form of the "work that uses the
+    Library" must include any data and utility programs needed for
+    reproducing the executable from it.  However, as a special exception,
+    the materials to be distributed need not include anything that is
+    normally distributed (in either source or binary form) with the major
+    components (compiler, kernel, and so on) of the operating system on
+    which the executable runs, unless that component itself accompanies
+    the executable.
+
+      It may happen that this requirement contradicts the license
+    restrictions of other proprietary libraries that do not normally
+    accompany the operating system.  Such a contradiction means you cannot
+    use both them and the Library together in an executable that you
+    distribute.
+    
+      7. You may place library facilities that are a work based on the
+    Library side-by-side in a single library together with other library
+    facilities not covered by this License, and distribute such a combined
+    library, provided that the separate distribution of the work based on
+    the Library and of the other library facilities is otherwise
+    permitted, and provided that you do these two things:
+
+        a) Accompany the combined library with a copy of the same work
+        based on the Library, uncombined with any other library
+        facilities.  This must be distributed under the terms of the
+        Sections above.
+
+        b) Give prominent notice with the combined library of the fact
+        that part of it is a work based on the Library, and explaining
+        where to find the accompanying uncombined form of the same work.
+
+      8. You may not copy, modify, sublicense, link with, or distribute
+    the Library except as expressly provided under this License.  Any
+    attempt otherwise to copy, modify, sublicense, link with, or
+    distribute the Library is void, and will automatically terminate your
+    rights under this License.  However, parties who have received copies,
+    or rights, from you under this License will not have their licenses
+    terminated so long as such parties remain in full compliance.
+
+      9. You are not required to accept this License, since you have not
+    signed it.  However, nothing else grants you permission to modify or
+    distribute the Library or its derivative works.  These actions are
+    prohibited by law if you do not accept this License.  Therefore, by
+    modifying or distributing the Library (or any work based on the
+    Library), you indicate your acceptance of this License to do so, and
+    all its terms and conditions for copying, distributing or modifying
+    the Library or works based on it.
+
+      10. Each time you redistribute the Library (or any work based on the
+    Library), the recipient automatically receives a license from the
+    original licensor to copy, distribute, link with or modify the Library
+    subject to these terms and conditions.  You may not impose any further
+    restrictions on the recipients' exercise of the rights granted herein.
+    You are not responsible for enforcing compliance by third parties with
+    this License.
+    
+      11. If, as a consequence of a court judgment or allegation of patent
+    infringement or for any other reason (not limited to patent issues),
+    conditions are imposed on you (whether by court order, agreement or
+    otherwise) that contradict the conditions of this License, they do not
+    excuse you from the conditions of this License.  If you cannot
+    distribute so as to satisfy simultaneously your obligations under this
+    License and any other pertinent obligations, then as a consequence you
+    may not distribute the Library at all.  For example, if a patent
+    license would not permit royalty-free redistribution of the Library by
+    all those who receive copies directly or indirectly through you, then
+    the only way you could satisfy both it and this License would be to
+    refrain entirely from distribution of the Library.
+
+    If any portion of this section is held invalid or unenforceable under any
+    particular circumstance, the balance of the section is intended to apply,
+    and the section as a whole is intended to apply in other circumstances.
+
+    It is not the purpose of this section to induce you to infringe any
+    patents or other property right claims or to contest validity of any
+    such claims; this section has the sole purpose of protecting the
+    integrity of the free software distribution system which is
+    implemented by public license practices.  Many people have made
+    generous contributions to the wide range of software distributed
+    through that system in reliance on consistent application of that
+    system; it is up to the author/donor to decide if he or she is willing
+    to distribute software through any other system and a licensee cannot
+    impose that choice.
+
+    This section is intended to make thoroughly clear what is believed to
+    be a consequence of the rest of this License.
+
+      12. If the distribution and/or use of the Library is restricted in
+    certain countries either by patents or by copyrighted interfaces, the
+    original copyright holder who places the Library under this License may add
+    an explicit geographical distribution limitation excluding those countries,
+    so that distribution is permitted only in or among countries not thus
+    excluded.  In such case, this License incorporates the limitation as if
+    written in the body of this License.
+
+      13. The Free Software Foundation may publish revised and/or new
+    versions of the Lesser General Public License from time to time.
+    Such new versions will be similar in spirit to the present version,
+    but may differ in detail to address new problems or concerns.
+
+    Each version is given a distinguishing version number.  If the Library
+    specifies a version number of this License which applies to it and
+    "any later version", you have the option of following the terms and
+    conditions either of that version or of any later version published by
+    the Free Software Foundation.  If the Library does not specify a
+    license version number, you may choose any version ever published by
+    the Free Software Foundation.
+    
+      14. If you wish to incorporate parts of the Library into other free
+    programs whose distribution conditions are incompatible with these,
+    write to the author to ask for permission.  For software which is
+    copyrighted by the Free Software Foundation, write to the Free
+    Software Foundation; we sometimes make exceptions for this.  Our
+    decision will be guided by the two goals of preserving the free status
+    of all derivatives of our free software and of promoting the sharing
+    and reuse of software generally.
+
+                                NO WARRANTY
+
+      15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+    WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+    EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+    OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+    KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+    PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+    LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+    THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+      16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+    WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+    AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+    FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+    CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+    LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+    RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+    FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+    SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+    DAMAGES.
+
+                         END OF TERMS AND CONDITIONS
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/NOTICE b/apps/maarch_entreprise/tools/elasticsearch-php/NOTICE
new file mode 100644
index 0000000000000000000000000000000000000000..3897fb59481d697d0d4cc7d3576eb586a67474cb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/NOTICE
@@ -0,0 +1,32 @@
+Apache v2.0 Notice:
+    Copyright 2013-2014 Elasticsearch
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+LGPL v2.1 Notice:
+    Copyright (C) 2013-2014  Elasticsearch
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/README.md b/apps/maarch_entreprise/tools/elasticsearch-php/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..700bd9d12c90a24a1dc0039daa49025e2c4b4d34
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/README.md
@@ -0,0 +1,377 @@
+elasticsearch-php
+=================
+
+[![Build Status](https://img.shields.io/travis/elastic/elasticsearch-php.svg?style=flat-square)](https://travis-ci.org/elastic/elasticsearch-php)
+
+
+Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in PHP; because of this it tries to be opinion-free and very extendable.
+
+To maintain consistency across all the low-level clients (Ruby, Python, etc), clients accept simple associative arrays as parameters.  All parameters, from the URI to the document body, are defined in the associative array.
+
+
+Features
+--------
+
+ - One-to-one mapping with REST API and other language clients
+ - Configurable, automatic discovery of cluster nodes
+ - Persistent, Keep-Alive connections (within the lifetime of the script)
+ - Load balancing (with pluggable selection strategy) across all available nodes. Defaults to round-robin
+ - Pluggable connection pools to offer different connection strategies
+ - Generalized, pluggable architecture - most components can be replaced with your own custom class if specialized behavior is required
+ - Option to use asyncronous future, which enables parallel execution of curl requests to multiple nodes
+
+Version Matrix
+--------------
+
+| Elasticsearch Version | Elasticsearch-PHP Branch |
+| --------------------- | ------------------------ |
+| >= 5.0                | 5.0               |
+| >= 2.0, < 5.0         | 1.0 or 2.0               |
+| >= 1.0, < 2.0         | 1.0 or 2.0               |
+| <= 0.90.x             | 0.4                      |
+
+ - If you are using Elasticsearch 5.0+ , use Elasticsearch-PHP 5.0 branch.
+ - If you are using Elasticsearch 1.x or 2.x, prefer using the Elasticsearch-PHP 2.0 branch.  The 1.0 branch is compatible however.
+ - If you are using a version older than 1.0, you must install the `0.4` Elasticsearch-PHP branch. Since ES 0.90.x and below is now EOL, the corresponding `0.4` branch will not receive any more development or bugfixes.  Please upgrade.
+ - You should never use Elasticsearch-PHP Master branch, as it tracks Elasticearch master and may contain incomplete features or breaks in backwards compat.  Only use ES-PHP master if you are developing against ES master for some reason.
+
+Documentation
+--------------
+[Full documentation can be found here.](http://www.elasticsearch.org/guide/en/elasticsearch/client/php-api/5.0/index.html)  Docs are stored within the repo under /docs/, so if you see a typo or problem, please submit a PR to fix it!
+
+Installation via Composer
+-------------------------
+The recommended method to install _Elasticsearch-PHP_ is through [Composer](http://getcomposer.org).
+
+1. Add ``elasticsearch/elasticsearch`` as a dependency in your project's ``composer.json`` file (change version to suit your version of Elasticsearch):
+
+    ```json
+        {
+            "require": {
+                "elasticsearch/elasticsearch": "~5.0"
+            }
+        }
+    ```
+
+2. Download and install Composer:
+
+    ```bash
+        curl -s http://getcomposer.org/installer | php
+    ```
+
+3. Install your dependencies:
+
+    ```bash
+        php composer.phar install --no-dev
+    ```
+
+4. Require Composer's autoloader
+
+    Composer also prepares an autoload file that's capable of autoloading all of the classes in any of the libraries that it downloads. To use it, just add the following line to your code's bootstrap process:
+
+    ```php
+        <?php
+
+        use Elasticsearch\ClientBuilder;
+
+        require 'vendor/autoload.php';
+
+        $client = ClientBuilder::create()->build();
+    ```
+You can find out more on how to install Composer, configure autoloading, and other best-practices for defining dependencies at [getcomposer.org](http://getcomposer.org).
+
+You'll notice that the installation command specified `--no-dev`.  This prevents Composer from installing the various testing and development dependencies.  For average users, there is no need to install the test suite (which also includes the complete source code of Elasticsearch).  If you wish to contribute to development, just omit the `--no-dev` flag to be able to run tests.
+
+PHP Version Requirement
+----
+Version 5.0 of this library requires at least PHP version 5.6.6 to function.  In addition, it requires the native JSON
+extension to be version 1.3.7 or higher.
+
+| PHP Version | Elasticsearch-PHP Branch |
+| ----------- | ------------------------ |
+| >= 5.6.6    | 5.0              |
+| >= 5.4.0    | 2.0                      |
+| >= 5.3.9    | 0.4, 1.0                 |
+
+
+Quickstart
+----
+
+
+### Index a document
+
+In elasticsearch-php, almost everything is configured by associative arrays.  The REST endpoint, document and optional parameters - everything is an associative array.
+
+To index a document, we need to specify four pieces of information: index, type, id and a document body. This is done by
+constructing an associative array of key:value pairs.  The request body is itself an associative array with key:value pairs
+corresponding to the data in your document:
+
+```php
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id',
+    'body' => ['testField' => 'abc']
+];
+
+$response = $client->index($params);
+print_r($response);
+```
+
+The response that you get back indicates the document was created in the index that you specified.  The response is an
+associative array containing a decoded version of the JSON that Elasticsearch returns:
+
+```php
+Array
+(
+    [_index] => my_index
+    [_type] => my_type
+    [_id] => my_id
+    [_version] => 1
+    [created] => 1
+)
+
+```
+
+### Get a document
+
+Let's get the document that we just indexed.  This will simply return the document:
+
+```php
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id'
+];
+
+$response = $client->get($params);
+print_r($response);
+```
+
+The response contains some metadata (index, type, etc) as well as a `_source` field...this is the original document
+that you sent to Elasticsearch.
+
+```php
+Array
+(
+    [_index] => my_index
+    [_type] => my_type
+    [_id] => my_id
+    [_version] => 1
+    [found] => 1
+    [_source] => Array
+        (
+            [testField] => abc
+        )
+
+)
+```
+
+If you want to retrieve the `_source` field directly, there is the `getSource` method:
+
+```php
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id'
+];
+
+$source = $client->getSource($params);
+doSomething($source);
+```
+
+### Search for a document
+
+Searching is a hallmark of Elasticsearch, so let's perform a search.  We are going to use the Match query as a demonstration:
+
+```php
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => [
+        'query' => [
+            'match' => [
+                'testField' => 'abc'
+            ]
+        ]
+    ]
+];
+
+$response = $client->search($params);
+print_r($response);
+```
+
+The response is a little different from the previous responses.  We see some metadata (`took`, `timed_out`, etc) and
+an array named `hits`.  This represents your search results.  Inside of `hits` is another array named `hits`, which contains
+individual search results:
+
+```php
+Array
+(
+    [took] => 1
+    [timed_out] =>
+    [_shards] => Array
+        (
+            [total] => 5
+            [successful] => 5
+            [failed] => 0
+        )
+
+    [hits] => Array
+        (
+            [total] => 1
+            [max_score] => 0.30685282
+            [hits] => Array
+                (
+                    [0] => Array
+                        (
+                            [_index] => my_index
+                            [_type] => my_type
+                            [_id] => my_id
+                            [_score] => 0.30685282
+                            [_source] => Array
+                                (
+                                    [testField] => abc
+                                )
+                        )
+                )
+        )
+)
+```
+
+### Delete a document
+
+Alright, let's go ahead and delete the document that we added previously:
+
+```php
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id'
+];
+
+$response = $client->delete($params);
+print_r($response);
+```
+
+You'll notice this is identical syntax to the `get` syntax.  The only difference is the operation: `delete` instead of
+`get`.  The response will confirm the document was deleted:
+
+```php
+Array
+(
+    [found] => 1
+    [_index] => my_index
+    [_type] => my_type
+    [_id] => my_id
+    [_version] => 2
+)
+```
+
+
+### Delete an index
+
+Due to the dynamic nature of Elasticsearch, the first document we added automatically built an index with some default settings.  Let's delete that index because we want to specify our own settings later:
+
+```php
+$deleteParams = [
+    'index' => 'my_index'
+];
+$response = $client->indices()->delete($deleteParams);
+print_r($response);
+```
+
+The response:
+
+
+```php
+Array
+(
+    [acknowledged] => 1
+)
+```
+
+### Create an index
+
+Now that we are starting fresh (no data or index), let's add a new index with some custom settings:
+
+```php
+$params = [
+    'index' => 'my_index',
+    'body' => [
+        'settings' => [
+            'number_of_shards' => 2,
+            'number_of_replicas' => 0
+        ]
+    ]
+];
+
+$response = $client->indices()->create($params);
+print_r($response);
+```
+
+Elasticsearch will now create that index with your chosen settings, and return an acknowledgement:
+
+```php
+Array
+(
+    [acknowledged] => 1
+)
+```
+
+
+
+Wrap up
+=======
+
+That was just a crash-course overview of the client and it's syntax.  If you are familiar with elasticsearch, you'll notice that the methods are named just like REST endpoints.
+
+You'll also notice that the client is configured in a manner that facilitates easy discovery via the IDE.  All core actions are available under the `$client` object (indexing, searching, getting, etc).  Index and cluster management are located under the `$client->indices()` and `$client->cluster()` objects, respectively.
+
+Check out the rest of the [Documentation](http://www.elasticsearch.org/guide/en/elasticsearch/client/php-api/current/index.html) to see how the entire client works.
+
+
+Available Licenses
+-------
+
+Starting with version 1.3.1, Elasticsearch-PHP is available under two licenses: Apache v2.0 and LGPL v2.1.  Versions
+prior to 1.3.1 are still licensed with only Apache v2.0.
+
+The user may choose which license they wish to use.  Since there is no discriminating executable or distribution bundle
+to differentiate licensing, the user should document their license choice externally, in case the library is re-distributed.
+If no explicit choice is made, assumption is that redistribution obeys rules of both licenses.
+
+### Contributions
+All contributions to the library are to be so that they can be licensed under both licenses.
+
+Apache v2.0 License:
+>Copyright 2013-2016 Elasticsearch
+>
+>Licensed under the Apache License, Version 2.0 (the "License");
+>you may not use this file except in compliance with the License.
+>You may obtain a copy of the License at
+>
+>    http://www.apache.org/licenses/LICENSE-2.0
+>
+>Unless required by applicable law or agreed to in writing, software
+>distributed under the License is distributed on an "AS IS" BASIS,
+>WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+>See the License for the specific language governing permissions and
+>limitations under the License.
+
+LGPL v2.1 Notice:
+>Copyright (C) 2013-2016 Elasticsearch
+>
+>This library is free software; you can redistribute it and/or
+>modify it under the terms of the GNU Lesser General Public
+>License as published by the Free Software Foundation; either
+>version 2.1 of the License, or (at your option) any later version.
+>
+>This library is distributed in the hope that it will be useful,
+>but WITHOUT ANY WARRANTY; without even the implied warranty of
+>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+>Lesser General Public License for more details.
+>
+>You should have received a copy of the GNU Lesser General Public
+>License along with this library; if not, write to the Free Software
+>Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/composer.json b/apps/maarch_entreprise/tools/elasticsearch-php/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..7b1a8502187370df52b431b83b50c5c03fa57196
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/composer.json
@@ -0,0 +1,41 @@
+{
+  "name": "elasticsearch/elasticsearch",
+  "description": "PHP Client for Elasticsearch",
+  "keywords": ["search","client", "elasticsearch"],
+  "type": "library",
+  "license": "Apache-2.0",
+  "authors": [
+    {
+      "name": "Zachary Tong"
+    }
+  ],
+  "require": {
+    "php": "^7.0",
+    "ext-json": ">=1.3.7",
+    "psr/log": "~1.0",
+    "guzzlehttp/ringphp" : "~1.0"
+  },
+  "require-dev": {
+    "phpunit/phpunit": "^4.7|^5.4",
+    "mockery/mockery": "0.9.4",
+    "symfony/yaml": "^2.8",
+    "symfony/finder": "^2.8",
+    "cpliakas/git-wrapper": "~1.0",
+    "sami/sami": "~3.2",
+    "doctrine/inflector": "^1.1"
+  },
+  "suggest": {
+    "ext-curl": "*",
+    "monolog/monolog": "Allows for client-level logging and tracing"
+  },
+  "autoload": {
+    "psr-4": {
+      "Elasticsearch\\": "src/Elasticsearch/"
+    }
+  },
+  "autoload-dev": {
+    "psr-4": {
+      "Elasticsearch\\Tests\\":      "tests/Elasticsearch/Tests/"
+    }
+  }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/composer.lock b/apps/maarch_entreprise/tools/elasticsearch-php/composer.lock
new file mode 100644
index 0000000000000000000000000000000000000000..3831a4d68ce656b3e0b5b52327a8a36342ec27d5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/composer.lock
@@ -0,0 +1,2360 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "f7006a2828136e37b92c88ef2d41cdf6",
+    "packages": [
+        {
+            "name": "guzzlehttp/ringphp",
+            "version": "1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/RingPHP.git",
+                "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/dbbb91d7f6c191e5e405e900e3102ac7f261bc0b",
+                "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/streams": "~3.0",
+                "php": ">=5.4.0",
+                "react/promise": "~2.0"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "phpunit/phpunit": "~4.0"
+            },
+            "suggest": {
+                "ext-curl": "Guzzle will use specific adapters if cURL is present"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Ring\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.",
+            "time": "2015-05-20T03:37:09+00:00"
+        },
+        {
+            "name": "guzzlehttp/streams",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/streams.git",
+                "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+                "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Stream\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Provides a simple abstraction over streams of data",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "Guzzle",
+                "stream"
+            ],
+            "time": "2014-10-12T19:18:40+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2016-10-10T12:19:37+00:00"
+        },
+        {
+            "name": "react/promise",
+            "version": "v2.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/promise.git",
+                "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/promise/zipball/2760f3898b7e931aa71153852dcd48a75c9b95db",
+                "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com"
+                }
+            ],
+            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+            "keywords": [
+                "promise",
+                "promises"
+            ],
+            "time": "2016-12-22T14:09:01+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "blackfire/php-sdk",
+            "version": "v1.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/blackfireio/php-sdk.git",
+                "reference": "193220138dd197c1a2b77f7c3abfbb054d3bf796"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/blackfireio/php-sdk/zipball/193220138dd197c1a2b77f7c3abfbb054d3bf796",
+                "reference": "193220138dd197c1a2b77f7c3abfbb054d3bf796",
+                "shasum": ""
+            },
+            "require": {
+                "composer/ca-bundle": "^1.0",
+                "php": ">=5.2.0"
+            },
+            "suggest": {
+                "ext-blackfire": "The C version of the Blackfire probe",
+                "ext-xhprof": "XHProf is required as a fallback"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.5.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/autostart.php"
+                ],
+                "psr-4": {
+                    "Blackfire\\": "src/Blackfire"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Blackfire.io",
+                    "email": "support@blackfire.io"
+                }
+            ],
+            "description": "Blackfire.io PHP SDK",
+            "keywords": [
+                "performance",
+                "profiler",
+                "uprofiler",
+                "xhprof"
+            ],
+            "time": "2016-12-06T15:49:36+00:00"
+        },
+        {
+            "name": "composer/ca-bundle",
+            "version": "1.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/ca-bundle.git",
+                "reference": "a795611394b3c05164fd0eb291b492b39339cba4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/a795611394b3c05164fd0eb291b492b39339cba4",
+                "reference": "a795611394b3c05164fd0eb291b492b39339cba4",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "php": "^5.3.2 || ^7.0"
+            },
+            "require-dev": {
+                "psr/log": "^1.0",
+                "symfony/process": "^2.5 || ^3.0"
+            },
+            "suggest": {
+                "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\CaBundle\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "keywords": [
+                "cabundle",
+                "cacert",
+                "certificate",
+                "ssl",
+                "tls"
+            ],
+            "time": "2016-11-02T18:11:27+00:00"
+        },
+        {
+            "name": "cpliakas/git-wrapper",
+            "version": "1.7.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cpliakas/git-wrapper.git",
+                "reference": "1a2f1131ec9ebe04a0b729b141396fa55f992d44"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cpliakas/git-wrapper/zipball/1a2f1131ec9ebe04a0b729b141396fa55f992d44",
+                "reference": "1a2f1131ec9ebe04a0b729b141396fa55f992d44",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "symfony/event-dispatcher": "~2.3|~3.0",
+                "symfony/process": "~2.3|~3.0"
+            },
+            "require-dev": {
+                "pdepend/pdepend": "~1.0",
+                "phploc/phploc": "~2.0",
+                "phpmd/phpmd": "~1.0",
+                "phpunit/phpunit": "~3.0",
+                "psr/log": "~1.0",
+                "scrutinizer/ocular": "~1.0",
+                "sebastian/phpcpd": "~2.0",
+                "symfony/filesystem": "~2.0"
+            },
+            "suggest": {
+                "monolog/monolog": "Enables logging of executed git commands"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "GitWrapper": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Chris Pliakas",
+                    "email": "opensource@chrispliakas.com"
+                }
+            ],
+            "description": "A PHP wrapper around the Git command line utility.",
+            "homepage": "https://github.com/cpliakas/git-wrapper",
+            "keywords": [
+                "git"
+            ],
+            "time": "2016-04-19T16:12:33+00:00"
+        },
+        {
+            "name": "doctrine/inflector",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/inflector.git",
+                "reference": "90b2128806bfde671b6952ab8bea493942c1fdae"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae",
+                "reference": "90b2128806bfde671b6952ab8bea493942c1fdae",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Doctrine\\Common\\Inflector\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "Common String Manipulations with regard to casing and singular/plural rules.",
+            "homepage": "http://www.doctrine-project.org",
+            "keywords": [
+                "inflection",
+                "pluralize",
+                "singularize",
+                "string"
+            ],
+            "time": "2015-11-06T14:35:42+00:00"
+        },
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3,<8.0-DEV"
+            },
+            "require-dev": {
+                "athletic/athletic": "~0.1.8",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~2.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://github.com/doctrine/instantiator",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "time": "2015-06-14T21:17:01+00:00"
+        },
+        {
+            "name": "hamcrest/hamcrest-php",
+            "version": "v1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hamcrest/hamcrest-php.git",
+                "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c",
+                "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "replace": {
+                "cordoval/hamcrest-php": "*",
+                "davedevelopment/hamcrest-php": "*",
+                "kodova/hamcrest-php": "*"
+            },
+            "require-dev": {
+                "phpunit/php-file-iterator": "1.3.3",
+                "satooshi/php-coveralls": "dev-master"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "hamcrest"
+                ],
+                "files": [
+                    "hamcrest/Hamcrest.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD"
+            ],
+            "description": "This is the PHP port of Hamcrest Matchers",
+            "keywords": [
+                "test"
+            ],
+            "time": "2015-05-11T14:41:42+00:00"
+        },
+        {
+            "name": "michelf/php-markdown",
+            "version": "1.7.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/michelf/php-markdown.git",
+                "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/michelf/php-markdown/zipball/1f51cc520948f66cd2af8cbc45a5ee175e774220",
+                "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-lib": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Michelf": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Michel Fortin",
+                    "email": "michel.fortin@michelf.ca",
+                    "homepage": "https://michelf.ca/",
+                    "role": "Developer"
+                },
+                {
+                    "name": "John Gruber",
+                    "homepage": "https://daringfireball.net/"
+                }
+            ],
+            "description": "PHP Markdown",
+            "homepage": "https://michelf.ca/projects/php-markdown/",
+            "keywords": [
+                "markdown"
+            ],
+            "time": "2016-10-29T18:58:20+00:00"
+        },
+        {
+            "name": "mockery/mockery",
+            "version": "0.9.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/padraic/mockery.git",
+                "reference": "70bba85e4aabc9449626651f48b9018ede04f86b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/padraic/mockery/zipball/70bba85e4aabc9449626651f48b9018ede04f86b",
+                "reference": "70bba85e4aabc9449626651f48b9018ede04f86b",
+                "shasum": ""
+            },
+            "require": {
+                "hamcrest/hamcrest-php": "~1.1",
+                "lib-pcre": ">=7.0",
+                "php": ">=5.3.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.9.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Mockery": "library/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Pádraic Brady",
+                    "email": "padraic.brady@gmail.com",
+                    "homepage": "http://blog.astrumfutura.com"
+                },
+                {
+                    "name": "Dave Marshall",
+                    "email": "dave.marshall@atstsolutions.co.uk",
+                    "homepage": "http://davedevelopment.co.uk"
+                }
+            ],
+            "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.",
+            "homepage": "http://github.com/padraic/mockery",
+            "keywords": [
+                "BDD",
+                "TDD",
+                "library",
+                "mock",
+                "mock objects",
+                "mockery",
+                "stub",
+                "test",
+                "test double",
+                "testing"
+            ],
+            "time": "2015-04-02T19:54:00+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5a5a9fc8025a08d8919be87d6884d5a92520cefe",
+                "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "doctrine/collections": "1.*",
+                "phpunit/phpunit": "~4.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "homepage": "https://github.com/myclabs/DeepCopy",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "time": "2017-01-26T22:05:40+00:00"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v1.4.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51",
+                "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "lib/bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "time": "2015-09-19T14:15:08+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "2.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
+                "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "suggest": {
+                "dflydev/markdown": "~1.0",
+                "erusev/parsedown": "~1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "phpDocumentor": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "mike.vanriel@naenius.com"
+                }
+            ],
+            "time": "2015-02-03T12:10:50+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "v1.6.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "6c52c2722f8460122f96f86346600e1077ce22cb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb",
+                "reference": "6c52c2722f8460122f96f86346600e1077ce22cb",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.3|^7.0",
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
+                "sebastian/comparator": "^1.1",
+                "sebastian/recursion-context": "^1.0|^2.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^2.0",
+                "phpunit/phpunit": "^4.8 || ^5.6.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Prophecy\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2016-11-21T14:58:47+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "4.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "c19cfc7cbb0e9338d8c469c7eedecc2a428b0971"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c19cfc7cbb0e9338d8c469c7eedecc2a428b0971",
+                "reference": "c19cfc7cbb0e9338d8c469c7eedecc2a428b0971",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-file-iterator": "~1.3",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-token-stream": "^1.4.2",
+                "sebastian/code-unit-reverse-lookup": "~1.0",
+                "sebastian/environment": "^1.3.2 || ^2.0",
+                "sebastian/version": "~1.0|~2.0"
+            },
+            "require-dev": {
+                "ext-xdebug": ">=2.1.4",
+                "phpunit/phpunit": "^5.4"
+            },
+            "suggest": {
+                "ext-dom": "*",
+                "ext-xdebug": ">=2.4.0",
+                "ext-xmlwriter": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "time": "2017-01-20T15:06:43+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
+                "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "time": "2016-10-03T07:40:28+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2015-06-21T13:50:34+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
+                "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4|~5"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2016-05-12T18:03:57+00:00"
+        },
+        {
+            "name": "phpunit/php-token-stream",
+            "version": "1.4.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b",
+                "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "keywords": [
+                "tokenizer"
+            ],
+            "time": "2016-11-15T14:06:22+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "5.7.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "69f832b87c731d5cacad7f91948778fe98335fdd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/69f832b87c731d5cacad7f91948778fe98335fdd",
+                "reference": "69f832b87c731d5cacad7f91948778fe98335fdd",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "myclabs/deep-copy": "~1.3",
+                "php": "^5.6 || ^7.0",
+                "phpspec/prophecy": "^1.6.2",
+                "phpunit/php-code-coverage": "^4.0.4",
+                "phpunit/php-file-iterator": "~1.4",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "^1.0.6",
+                "phpunit/phpunit-mock-objects": "^3.2",
+                "sebastian/comparator": "~1.2.2",
+                "sebastian/diff": "~1.2",
+                "sebastian/environment": "^1.3.4 || ^2.0",
+                "sebastian/exporter": "~2.0",
+                "sebastian/global-state": "^1.0 || ^2.0",
+                "sebastian/object-enumerator": "~2.0",
+                "sebastian/resource-operations": "~1.0",
+                "sebastian/version": "~1.0|~2.0",
+                "symfony/yaml": "~2.1|~3.0"
+            },
+            "conflict": {
+                "phpdocumentor/reflection-docblock": "3.0.2"
+            },
+            "require-dev": {
+                "ext-pdo": "*"
+            },
+            "suggest": {
+                "ext-xdebug": "*",
+                "phpunit/php-invoker": "~1.1"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.7.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "time": "2017-01-28T06:14:33+00:00"
+        },
+        {
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "3.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3ab72b65b39b491e0c011e2e09bb2206c2aa8e24",
+                "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-text-template": "^1.2",
+                "sebastian/exporter": "^1.2 || ^2.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.4"
+            },
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "keywords": [
+                "mock",
+                "xunit"
+            ],
+            "time": "2016-12-08T20:27:08+00:00"
+        },
+        {
+            "name": "pimple/pimple",
+            "version": "v3.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/silexphp/Pimple.git",
+                "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a",
+                "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Pimple": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Pimple, a simple Dependency Injection Container",
+            "homepage": "http://pimple.sensiolabs.org",
+            "keywords": [
+                "container",
+                "dependency injection"
+            ],
+            "time": "2015-09-11T15:10:35+00:00"
+        },
+        {
+            "name": "sami/sami",
+            "version": "v3.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/FriendsOfPHP/Sami.git",
+                "reference": "f76c8f6dd0c7c27156f193cbc666dd4b36f68d0d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/FriendsOfPHP/Sami/zipball/f76c8f6dd0c7c27156f193cbc666dd4b36f68d0d",
+                "reference": "f76c8f6dd0c7c27156f193cbc666dd4b36f68d0d",
+                "shasum": ""
+            },
+            "require": {
+                "blackfire/php-sdk": "^1.5.6",
+                "michelf/php-markdown": "~1.3",
+                "nikic/php-parser": "~1.0",
+                "php": ">=5.3.9",
+                "phpdocumentor/reflection-docblock": "~2.0",
+                "pimple/pimple": "~3.0",
+                "symfony/console": "~2.1",
+                "symfony/filesystem": "~2.1",
+                "symfony/finder": "~2.1",
+                "symfony/process": "~2.1",
+                "symfony/yaml": "~2.1",
+                "twig/twig": "~1.20|~2.0"
+            },
+            "bin": [
+                "sami.php"
+            ],
+            "type": "application",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Sami\\": "Sami/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Sami, an API documentation generator",
+            "homepage": "http://sami.sensiolabs.org",
+            "keywords": [
+                "phpdoc"
+            ],
+            "time": "2016-06-07T16:36:49+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe",
+                "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "time": "2016-02-13T06:45:14+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "1.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.2",
+                "sebastian/exporter": "~1.2 || ~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "time": "2017-01-29T09:50:25+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "1.4.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
+                "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2015-12-08T07:14:41+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2016-11-26T07:53:53+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "time": "2016-11-19T08:54:04+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "time": "2015-10-12T03:26:01+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "96f8a3f257b69e8128ad74d3a7fd464bcbaa3b35"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/96f8a3f257b69e8128ad74d3a7fd464bcbaa3b35",
+                "reference": "96f8a3f257b69e8128ad74d3a7fd464bcbaa3b35",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "time": "2016-11-19T07:35:10+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-11-19T07:33:16+00:00"
+        },
+        {
+            "name": "sebastian/resource-operations",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "time": "2015-07-28T20:34:47+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2016-10-03T07:35:21+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v2.8.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "2e18b8903d9c498ba02e1dfa73f64d4894bb6912"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/2e18b8903d9c498ba02e1dfa73f64d4894bb6912",
+                "reference": "2e18b8903d9c498ba02e1dfa73f64d4894bb6912",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9",
+                "symfony/debug": "~2.7,>=2.7.2|~3.0.0",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/event-dispatcher": "~2.1|~3.0.0",
+                "symfony/process": "~2.1|~3.0.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-01-08T20:43:03+00:00"
+        },
+        {
+            "name": "symfony/debug",
+            "version": "v3.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/debug.git",
+                "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/697c527acd9ea1b2d3efac34d9806bf255278b0a",
+                "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9",
+                "psr/log": "~1.0"
+            },
+            "conflict": {
+                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+            },
+            "require-dev": {
+                "symfony/class-loader": "~2.8|~3.0",
+                "symfony/http-kernel": "~2.8|~3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Debug\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Debug Component",
+            "homepage": "https://symfony.com",
+            "time": "2016-07-30T07:22:48+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v3.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "9137eb3a3328e413212826d63eeeb0217836e2b6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9137eb3a3328e413212826d63eeeb0217836e2b6",
+                "reference": "9137eb3a3328e413212826d63eeeb0217836e2b6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.9"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "~2.8|~3.0",
+                "symfony/dependency-injection": "~2.8|~3.0",
+                "symfony/expression-language": "~2.8|~3.0",
+                "symfony/stopwatch": "~2.8|~3.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-01-02T20:32:22+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v2.8.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "5b77d49ab76e5b12743b359ef4b4a712e6f5360d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/5b77d49ab76e5b12743b359ef4b4a712e6f5360d",
+                "reference": "5b77d49ab76e5b12743b359ef4b4a712e6f5360d",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-01-08T20:43:03+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v2.8.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "355fccac526522dc5fca8ecf0e62749a149f3b8b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/355fccac526522dc5fca8ecf0e62749a149f3b8b",
+                "reference": "355fccac526522dc5fca8ecf0e62749a149f3b8b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-01-02T20:30:24+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4",
+                "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2016-11-14T01:06:16+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v2.8.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "ebb3c2abe0940a703f08e0cbe373f62d97d40231"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/ebb3c2abe0940a703f08e0cbe373f62d97d40231",
+                "reference": "ebb3c2abe0940a703f08e0cbe373f62d97d40231",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Process Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-01-02T20:30:24+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v2.8.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "dbe61fed9cd4a44c5b1d14e5e7b1a8640cfb2bf2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/dbe61fed9cd4a44c5b1d14e5e7b1a8640cfb2bf2",
+                "reference": "dbe61fed9cd4a44c5b1d14e5e7b1a8640cfb2bf2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2017-01-03T13:49:52+00:00"
+        },
+        {
+            "name": "twig/twig",
+            "version": "v2.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/twigphp/Twig.git",
+                "reference": "9062992538bc5855a683c6737257bfa18d25a4b8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/9062992538bc5855a683c6737257bfa18d25a4b8",
+                "reference": "9062992538bc5855a683c6737257bfa18d25a4b8",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "require-dev": {
+                "symfony/debug": "~2.7",
+                "symfony/phpunit-bridge": "~3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Twig_": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Armin Ronacher",
+                    "email": "armin.ronacher@active-4.com",
+                    "role": "Project Founder"
+                },
+                {
+                    "name": "Twig Team",
+                    "homepage": "http://twig.sensiolabs.org/contributors",
+                    "role": "Contributors"
+                }
+            ],
+            "description": "Twig, the flexible, fast, and secure template language for PHP",
+            "homepage": "http://twig.sensiolabs.org",
+            "keywords": [
+                "templating"
+            ],
+            "time": "2017-01-11T19:39:01+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": "^7.0",
+        "ext-json": ">=1.3.7"
+    },
+    "platform-dev": []
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/breaking-changes.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/breaking-changes.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..637ecd40cd2d7ce21edc147fa3116775f264958c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/breaking-changes.asciidoc
@@ -0,0 +1,21 @@
+== Breaking changes from 2.x
+
+- Indices/Analyze Endpoint: `filters` and `char_filters` URI parameters have renamed to `filter` and `char_filter` respectively
+- SearchExists endpoint has been removed (use `size=0` and `terminate_after=1` instead)
+- Warmers have been removed because they are no longer useful
+- Indices/Optimize Endpoint has been removed (use `_forcemerge` instead)
+- MoreLikeThis (MLT) endpoint has been removed
+- DeleteByQuery endpoint has been removed.
+- Tasks/List and Tasks/Get are now separate endpoints (see: link:http://github.com/elasticsearch/elasticsearch-php/commit/752d5a2[e0cc5f9])
+- Client requires PHP 5.6.6 or higher
+
+=== Deprecations
+
+- Percolator endpoints are deprecated and will be removed in Elasticsearch 6.0
+
+=== Internal BWC Breaks
+
+- Namespace injection has changed slightly.  If you use custom namespaces, you'll need to update your code (see: Add better ability to inject namespaces link:http://github.com/elasticsearch/elasticsearch-php/commit/b1a27b7[b1a27b7])
+- Endpoints no longer use the Transport directly.  If you use custom endpoints, you'll need to do some minor
+refactoring (see: Refactor to remove Transport dependence in endpoints link:http://github.com/elasticsearch/elasticsearch-php/commit/ecd454c[ecd454c])
+- To facilitate testing and other features, the `ConnectionInterface` has expanded to obtain some more methods (link:http://github.com/elasticsearch/elasticsearch-php/commit/8bcf1a8[getPath()], link:http://github.com/elasticsearch/elasticsearch-php/commit/586fbdb[getUserPass()], link:http://github.com/elasticsearch/elasticsearch-php/commit/445fdea[getHost()])
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Client.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Client.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..6704ef25aede92877ba17afa9e58bcbf73d2a047
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Client.asciidoc
@@ -0,0 +1,1174 @@
+
+
+[[Elasticsearch_Client]]
+=== Elasticsearch\Client
+
+
+
+Class Client
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_Clientinfo_info,`info()`>>
+* <<Elasticsearch_Clientping_ping,`ping()`>>
+* <<Elasticsearch_Clientget_get,`get()`>>
+* <<Elasticsearch_ClientgetSource_getSource,`getSource()`>>
+* <<Elasticsearch_Clientdelete_delete,`delete()`>>
+* <<Elasticsearch_Clientcount_count,`count()`>>
+* <<Elasticsearch_ClientcountPercolate_countPercolate,`countPercolate()`>>
+* <<Elasticsearch_Clientpercolate_percolate,`percolate()`>>
+* <<Elasticsearch_Clientmpercolate_mpercolate,`mpercolate()`>>
+* <<Elasticsearch_Clienttermvectors_termvectors,`termvectors()`>>
+* <<Elasticsearch_Clientmtermvectors_mtermvectors,`mtermvectors()`>>
+* <<Elasticsearch_Clientexists_exists,`exists()`>>
+* <<Elasticsearch_Clientmget_mget,`mget()`>>
+* <<Elasticsearch_Clientmsearch_msearch,`msearch()`>>
+* <<Elasticsearch_Clientcreate_create,`create()`>>
+* <<Elasticsearch_Clientbulk_bulk,`bulk()`>>
+* <<Elasticsearch_Clientindex_index,`index()`>>
+* <<Elasticsearch_Clientreindex_reindex,`reindex()`>>
+* <<Elasticsearch_Clientsuggest_suggest,`suggest()`>>
+* <<Elasticsearch_Clientexplain_explain,`explain()`>>
+* <<Elasticsearch_Clientsearch_search,`search()`>>
+* <<Elasticsearch_ClientsearchShards_searchShards,`searchShards()`>>
+* <<Elasticsearch_ClientsearchTemplate_searchTemplate,`searchTemplate()`>>
+* <<Elasticsearch_Clientscroll_scroll,`scroll()`>>
+* <<Elasticsearch_ClientclearScroll_clearScroll,`clearScroll()`>>
+* <<Elasticsearch_Clientupdate_update,`update()`>>
+* <<Elasticsearch_ClientgetScript_getScript,`getScript()`>>
+* <<Elasticsearch_ClientdeleteScript_deleteScript,`deleteScript()`>>
+* <<Elasticsearch_ClientputScript_putScript,`putScript()`>>
+* <<Elasticsearch_ClientgetTemplate_getTemplate,`getTemplate()`>>
+* <<Elasticsearch_ClientdeleteTemplate_deleteTemplate,`deleteTemplate()`>>
+* <<Elasticsearch_ClientputTemplate_putTemplate,`putTemplate()`>>
+* <<Elasticsearch_ClientfieldStats_fieldStats,`fieldStats()`>>
+* <<Elasticsearch_ClientrenderSearchTemplate_renderSearchTemplate,`renderSearchTemplate()`>>
+* <<Elasticsearch_Clientindices_indices,`indices()`>>
+* <<Elasticsearch_Clientcluster_cluster,`cluster()`>>
+* <<Elasticsearch_Clientnodes_nodes,`nodes()`>>
+* <<Elasticsearch_Clientsnapshot_snapshot,`snapshot()`>>
+* <<Elasticsearch_Clientcat_cat,`cat()`>>
+* <<Elasticsearch_Clientingest_ingest,`ingest()`>>
+* <<Elasticsearch_Clienttasks_tasks,`tasks()`>>
+* <<Elasticsearch_Client-call-_call,`__call()`>>
+* <<Elasticsearch_ClientextractArgument_extractArgument,`extractArgument()`>>
+
+
+
+
+[[Elasticsearch_Clientinfo_info]]
+.`info()`
+****
+[source,php]
+----
+/*
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->info($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientping_ping]]
+.`ping()`
+****
+[source,php]
+----
+/*
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->ping($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientget_get]]
+.`get()`
+****
+[source,php]
+----
+/*
+$params['id']              = (string) The document ID (Required)
+       ['index']           = (string) The name of the index (Required)
+       ['type']            = (string) The type of the document (use `_all` to fetch the first document matching the ID across all types) (Required)
+       ['ignore_missing']  = ??
+       ['fields']          = (list) A comma-separated list of fields to return in the response
+       ['parent']          = (string) The ID of the parent document
+       ['preference']      = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['realtime']        = (boolean) Specify whether to perform the operation in realtime or search mode
+       ['refresh']         = (boolean) Refresh the shard containing the document before performing the operation
+       ['routing']         = (string) Specific routing value
+       ['_source']         = (list) True or false to return the _source field or not, or a list of fields to return
+       ['_source_exclude'] = (list) A list of fields to exclude from the returned _source field
+       ['_source_include'] = (list) A list of fields to extract and return from the _source field
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->get($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientgetSource_getSource]]
+.`getSource()`
+****
+[source,php]
+----
+/*
+$params['id']             = (string) The document ID (Required)
+       ['index']          = (string) The name of the index (Required)
+       ['type']           = (string) The type of the document (use `_all` to fetch the first document matching the ID across all types) (Required)
+       ['ignore_missing'] = ??
+       ['parent']         = (string) The ID of the parent document
+       ['preference']     = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['realtime']       = (boolean) Specify whether to perform the operation in realtime or search mode
+       ['refresh']        = (boolean) Refresh the shard containing the document before performing the operation
+       ['routing']        = (string) Specific routing value
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->getSource($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientdelete_delete]]
+.`delete()`
+****
+[source,php]
+----
+/*
+$params['id']           = (string) The document ID (Required)
+       ['index']        = (string) The name of the index (Required)
+       ['type']         = (string) The type of the document (Required)
+       ['consistency']  = (enum) Specific write consistency setting for the operation
+       ['parent']       = (string) ID of parent document
+       ['refresh']      = (boolean) Refresh the index after performing the operation
+       ['replication']  = (enum) Specific replication type
+       ['routing']      = (string) Specific routing value
+       ['timeout']      = (time) Explicit operation timeout
+       ['version_type'] = (enum) Specific version type
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->delete($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientcount_count]]
+.`count()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of indices to restrict the results
+       ['type']               = (list) A comma-separated list of types to restrict the results
+       ['min_score']          = (number) Include only documents with a specific `_score` value in the result
+       ['preference']         = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['routing']            = (string) Specific routing value
+       ['source']             = (string) The URL-encoded query definition (instead of using the request body)
+       ['body']               = (array) A query to restrict the results (optional)
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->count($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientcountPercolate_countPercolate]]
+.`countPercolate()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of indices to restrict the results
+       ['type']               = (list) A comma-separated list of types to restrict the results
+       ['id']                 = (string) ID of document
+       ['ignore_unavailable'] = (boolean) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['preference']         = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['routing']            = (string) Specific routing value
+       ['allow_no_indices']   = (boolean) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['body']               = (array) A query to restrict the results (optional)
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['percolate_index']    = (string) The index to count percolate the document into. Defaults to index.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->countPercolate($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientpercolate_percolate]]
+.`percolate()`
+****
+[source,php]
+----
+/*
+$params['index']        = (string) The name of the index with a registered percolator query (Required)
+       ['type']         = (string) The document type (Required)
+       ['prefer_local'] = (boolean) With `true`, specify that a local shard should be used if available, with `false`, use a random shard (default: true)
+       ['body']         = (array) The document (`doc`) to percolate against registered queries; optionally also a `query` to limit the percolation to specific registered queries
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->percolate($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientmpercolate_mpercolate]]
+.`mpercolate()`
+****
+[source,php]
+----
+/*
+$params['index']              = (string) Default index for items which don't provide one
+       ['type']               = (string) Default document type for items which don't provide one
+       ['ignore_unavailable'] = (boolean) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (boolean) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->mpercolate($params);
+----
+****
+
+
+
+[[Elasticsearch_Clienttermvectors_termvectors]]
+.`termvectors()`
+****
+[source,php]
+----
+/*
+$params['index']            = (string) Default index for items which don't provide one
+       ['type']             = (string) Default document type for items which don't provide one
+       ['term_statistics']  = (boolean) Specifies if total term frequency and document frequency should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['field_statistics'] = (boolean) Specifies if document count, sum of document frequencies and sum of total term frequencies should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['fields']           = (list) A comma-separated list of fields to return. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['offsets']          = (boolean) Specifies if term offsets should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['positions']        = (boolean) Specifies if term positions should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['payloads']         = (boolean) Specifies if term payloads should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->termvectors($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientmtermvectors_mtermvectors]]
+.`mtermvectors()`
+****
+[source,php]
+----
+/*
+$params['index']            = (string) Default index for items which don't provide one
+       ['type']             = (string) Default document type for items which don't provide one
+       ['ids']              = (list) A comma-separated list of documents ids. You must define ids as parameter or set \"ids\" or \"docs\" in the request body
+       ['term_statistics']  = (boolean) Specifies if total term frequency and document frequency should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['field_statistics'] = (boolean) Specifies if document count, sum of document frequencies and sum of total term frequencies should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['fields']           = (list) A comma-separated list of fields to return. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['offsets']          = (boolean) Specifies if term offsets should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['positions']        = (boolean) Specifies if term positions should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+       ['payloads']         = (boolean) Specifies if term payloads should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->mtermvectors($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientexists_exists]]
+.`exists()`
+****
+[source,php]
+----
+/*
+$params['id']         = (string) The document ID (Required)
+       ['index']      = (string) The name of the index (Required)
+       ['type']       = (string) The type of the document (use `_all` to fetch the first document matching the ID across all types) (Required)
+       ['parent']     = (string) The ID of the parent document
+       ['preference'] = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['realtime']   = (boolean) Specify whether to perform the operation in realtime or search mode
+       ['refresh']    = (boolean) Refresh the shard containing the document before performing the operation
+       ['routing']    = (string) Specific routing value
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->exists($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientmget_mget]]
+.`mget()`
+****
+[source,php]
+----
+/*
+$params['index']           = (string) The name of the index
+       ['type']            = (string) The type of the document
+       ['fields']          = (list) A comma-separated list of fields to return in the response
+       ['parent']          = (string) The ID of the parent document
+       ['preference']      = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['realtime']        = (boolean) Specify whether to perform the operation in realtime or search mode
+       ['refresh']         = (boolean) Refresh the shard containing the document before performing the operation
+       ['routing']         = (string) Specific routing value
+       ['body']            = (array) Document identifiers; can be either `docs` (containing full document information) or `ids` (when index and type is provided in the URL.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->mget($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientmsearch_msearch]]
+.`msearch()`
+****
+[source,php]
+----
+/*
+$params['index']       = (list) A comma-separated list of index names to use as default
+       ['type']        = (list) A comma-separated list of document types to use as default
+       ['search_type'] = (enum) Search operation type
+       ['body']        = (array|string) The request definitions (metadata-search request definition pairs), separated by newlines
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->msearch($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientcreate_create]]
+.`create()`
+****
+[source,php]
+----
+/*
+$params['index']        = (string) The name of the index (Required)
+       ['type']         = (string) The type of the document (Required)
+       ['id']           = (string) Specific document ID (when the POST method is used)
+       ['consistency']  = (enum) Explicit write consistency setting for the operation
+       ['parent']       = (string) ID of the parent document
+       ['refresh']      = (boolean) Refresh the index after performing the operation
+       ['replication']  = (enum) Specific replication type
+       ['routing']      = (string) Specific routing value
+       ['timeout']      = (time) Explicit operation timeout
+       ['timestamp']    = (time) Explicit timestamp for the document
+       ['ttl']          = (duration) Expiration time for the document
+       ['version']      = (number) Explicit version number for concurrency control
+       ['version_type'] = (enum) Specific version type
+       ['body']         = (array) The document
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->create($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientbulk_bulk]]
+.`bulk()`
+****
+[source,php]
+----
+/*
+$params['index']       = (string) Default index for items which don't provide one
+       ['type']        = (string) Default document type for items which don't provide one
+       ['consistency'] = (enum) Explicit write consistency setting for the operation
+       ['refresh']     = (boolean) Refresh the index after performing the operation
+       ['replication'] = (enum) Explicitly set the replication type
+       ['fields']      = (list) Default comma-separated list of fields to return in the response for updates
+       ['body']        = (array) The document
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->bulk($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientindex_index]]
+.`index()`
+****
+[source,php]
+----
+/*
+$params['index']        = (string) The name of the index (Required)
+       ['type']         = (string) The type of the document (Required)
+       ['id']           = (string) Specific document ID (when the POST method is used)
+       ['consistency']  = (enum) Explicit write consistency setting for the operation
+       ['op_type']      = (enum) Explicit operation type
+       ['parent']       = (string) ID of the parent document
+       ['refresh']      = (boolean) Refresh the index after performing the operation
+       ['replication']  = (enum) Specific replication type
+       ['routing']      = (string) Specific routing value
+       ['timeout']      = (time) Explicit operation timeout
+       ['timestamp']    = (time) Explicit timestamp for the document
+       ['ttl']          = (duration) Expiration time for the document
+       ['version']      = (number) Explicit version number for concurrency control
+       ['version_type'] = (enum) Specific version type
+       ['body']         = (array) The document
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->index($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientreindex_reindex]]
+.`reindex()`
+****
+[source,php]
+----
+/*
+$params['refresh']             = (boolean) Should the effected indexes be refreshed?
+       ['timeout']             = (time) Time each individual bulk request should wait for shards that are unavailable
+       ['consistency']         = (enum) Explicit write consistency setting for the operation
+       ['wait_for_completion'] = (boolean) Should the request should block until the reindex is complete
+       ['requests_per_second'] = (float) The throttle for this request in sub-requests per second. 0 means set no throttle
+       ['body']                = (array) The search definition using the Query DSL and the prototype for the index request (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->reindex($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientsuggest_suggest]]
+.`suggest()`
+****
+[source,php]
+----
+/*
+$params['index']          = (list) A comma-separated list of index names to restrict the operation; use `_all` or empty string to perform the operation on all indices
+       ['ignore_indices'] = (enum) When performed on multiple indices, allows to ignore `missing` ones
+       ['preference']     = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['routing']        = (string) Specific routing value
+       ['source']         = (string) The URL-encoded request definition (instead of using request body)
+       ['body']           = (array) The request definition
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->suggest($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientexplain_explain]]
+.`explain()`
+****
+[source,php]
+----
+/*
+$params['id']                       = (string) The document ID (Required)
+       ['index']                    = (string) The name of the index (Required)
+       ['type']                     = (string) The type of the document (Required)
+       ['analyze_wildcard']         = (boolean) Specify whether wildcards and prefix queries in the query string query should be analyzed (default: false)
+       ['analyzer']                 = (string) The analyzer for the query string query
+       ['default_operator']         = (enum) The default operator for query string query (AND or OR)
+       ['df']                       = (string) The default field for query string query (default: _all)
+       ['fields']                   = (list) A comma-separated list of fields to return in the response
+       ['lenient']                  = (boolean) Specify whether format-based query failures (such as providing text to a numeric field) should be ignored
+       ['lowercase_expanded_terms'] = (boolean) Specify whether query terms should be lowercased
+       ['parent']                   = (string) The ID of the parent document
+       ['preference']               = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['q']                        = (string) Query in the Lucene query string syntax
+       ['routing']                  = (string) Specific routing value
+       ['source']                   = (string) The URL-encoded query definition (instead of using the request body)
+       ['_source']                  = (list) True or false to return the _source field or not, or a list of fields to return
+       ['_source_exclude']          = (list) A list of fields to exclude from the returned _source field
+       ['_source_include']          = (list) A list of fields to extract and return from the _source field
+       ['body']                     = (string) The URL-encoded query definition (instead of using the request body)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->explain($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientsearch_search]]
+.`search()`
+****
+[source,php]
+----
+/*
+$params['index']                    = (list) A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices
+       ['type']                     = (list) A comma-separated list of document types to search; leave empty to perform the operation on all types
+       ['analyzer']                 = (string) The analyzer to use for the query string
+       ['analyze_wildcard']         = (boolean) Specify whether wildcard and prefix queries should be analyzed (default: false)
+       ['default_operator']         = (enum) The default operator for query string query (AND or OR)
+       ['df']                       = (string) The field to use as default where no field prefix is given in the query string
+       ['explain']                  = (boolean) Specify whether to return detailed information about score computation as part of a hit
+       ['fields']                   = (list) A comma-separated list of fields to return as part of a hit
+       ['from']                     = (number) Starting offset (default: 0)
+       ['ignore_indices']           = (enum) When performed on multiple indices, allows to ignore `missing` ones
+       ['indices_boost']            = (list) Comma-separated list of index boosts
+       ['lenient']                  = (boolean) Specify whether format-based query failures (such as providing text to a numeric field) should be ignored
+       ['lowercase_expanded_terms'] = (boolean) Specify whether query terms should be lowercased
+       ['preference']               = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['q']                        = (string) Query in the Lucene query string syntax
+       ['query_cache']              = (boolean) Enable query cache for this request
+       ['request_cache']            = (boolean) Enable request cache for this request
+       ['routing']                  = (list) A comma-separated list of specific routing values
+       ['scroll']                   = (duration) Specify how long a consistent view of the index should be maintained for scrolled search
+       ['search_type']              = (enum) Search operation type
+       ['size']                     = (number) Number of hits to return (default: 10)
+       ['sort']                     = (list) A comma-separated list of <field>:<direction> pairs
+       ['source']                   = (string) The URL-encoded request definition using the Query DSL (instead of using request body)
+       ['_source']                  = (list) True or false to return the _source field or not, or a list of fields to return
+       ['_source_exclude']          = (list) A list of fields to exclude from the returned _source field
+       ['_source_include']          = (list) A list of fields to extract and return from the _source field
+       ['stats']                    = (list) Specific 'tag' of the request for logging and statistical purposes
+       ['suggest_field']            = (string) Specify which field to use for suggestions
+       ['suggest_mode']             = (enum) Specify suggest mode
+       ['suggest_size']             = (number) How many suggestions to return in response
+       ['suggest_text']             = (text) The source text for which the suggestions should be returned
+       ['timeout']                  = (time) Explicit operation timeout
+       ['version']                  = (boolean) Specify whether to return document version as part of a hit
+       ['body']                     = (array|string) The search definition using the Query DSL
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->search($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientsearchShards_searchShards]]
+.`searchShards()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices
+       ['type']               = (list) A comma-separated list of document types to search; leave empty to perform the operation on all types
+       ['preference']         = (string) Specify the node or shard the operation should be performed on (default: random)
+       ['routing']            = (string) Specific routing value
+       ['local']              = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->searchShards($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientsearchTemplate_searchTemplate]]
+.`searchTemplate()`
+****
+[source,php]
+----
+/*
+$params['index']                    = (list) A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices
+       ['type']                     = (list) A comma-separated list of document types to search; leave empty to perform the operation on all types
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->searchTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientscroll_scroll]]
+.`scroll()`
+****
+[source,php]
+----
+/*
+$params['scroll_id'] = (string) The scroll ID for scrolled search
+       ['scroll']    = (duration) Specify how long a consistent view of the index should be maintained for scrolled search
+       ['body']      = (string) The scroll ID for scrolled search
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->scroll($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientclearScroll_clearScroll]]
+.`clearScroll()`
+****
+[source,php]
+----
+/*
+$params['scroll_id'] = (string) The scroll ID for scrolled search
+       ['scroll']    = (duration) Specify how long a consistent view of the index should be maintained for scrolled search
+       ['body']      = (string) The scroll ID for scrolled search
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->clearScroll($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientupdate_update]]
+.`update()`
+****
+[source,php]
+----
+/*
+$params['id']                = (string) Document ID (Required)
+       ['index']             = (string) The name of the index (Required)
+       ['type']              = (string) The type of the document (Required)
+       ['consistency']       = (enum) Explicit write consistency setting for the operation
+       ['fields']            = (list) A comma-separated list of fields to return in the response
+       ['lang']              = (string) The script language (default: mvel)
+       ['parent']            = (string) ID of the parent document
+       ['refresh']           = (boolean) Refresh the index after performing the operation
+       ['replication']       = (enum) Specific replication type
+       ['retry_on_conflict'] = (number) Specify how many times should the operation be retried when a conflict occurs (default: 0)
+       ['routing']           = (string) Specific routing value
+       ['script']            = () The URL-encoded script definition (instead of using request body)
+       ['timeout']           = (time) Explicit operation timeout
+       ['timestamp']         = (time) Explicit timestamp for the document
+       ['ttl']               = (duration) Expiration time for the document
+       ['version_type']      = (number) Explicit version number for concurrency control
+       ['body']              = (array) The request definition using either `script` or partial `doc`
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->update($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientgetScript_getScript]]
+.`getScript()`
+****
+[source,php]
+----
+/*
+$params['id']   = (string) The script ID (Required)
+       ['lang'] = (string) The script language (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->getScript($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientdeleteScript_deleteScript]]
+.`deleteScript()`
+****
+[source,php]
+----
+/*
+$params['id']   = (string) The script ID (Required)
+       ['lang'] = (string) The script language (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->deleteScript($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientputScript_putScript]]
+.`putScript()`
+****
+[source,php]
+----
+/*
+$params['id']   = (string) The script ID (Required)
+       ['lang'] = (string) The script language (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->putScript($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientgetTemplate_getTemplate]]
+.`getTemplate()`
+****
+[source,php]
+----
+/*
+$params['id']   = (string) The search template ID (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->getTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientdeleteTemplate_deleteTemplate]]
+.`deleteTemplate()`
+****
+[source,php]
+----
+/*
+$params['id']   = (string) The search template ID (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->deleteTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientputTemplate_putTemplate]]
+.`putTemplate()`
+****
+[source,php]
+----
+/*
+$params['id']   = (string) The search template ID (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->putTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientfieldStats_fieldStats]]
+.`fieldStats()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of indices to restrict the results
+       ['fields']             = (list) A comma-separated list of fields for to get field statistics for (min value, max value, and more)
+       ['level']              = (enum) Defines if field stats should be returned on a per index level or on a cluster wide level
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->fieldStats($params);
+----
+****
+
+
+
+[[Elasticsearch_ClientrenderSearchTemplate_renderSearchTemplate]]
+.`renderSearchTemplate()`
+****
+[source,php]
+----
+/*
+$params['id']                 = (string) ID of the template to render
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->renderSearchTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_Clientindices_indices]]
+.`indices()`
+****
+[source,php]
+----
+/*
+Operate on the Indices Namespace of commands
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices();
+----
+****
+
+
+
+[[Elasticsearch_Clientcluster_cluster]]
+.`cluster()`
+****
+[source,php]
+----
+/*
+Operate on the Cluster namespace of commands
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster();
+----
+****
+
+
+
+[[Elasticsearch_Clientnodes_nodes]]
+.`nodes()`
+****
+[source,php]
+----
+/*
+Operate on the Nodes namespace of commands
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->nodes();
+----
+****
+
+
+
+[[Elasticsearch_Clientsnapshot_snapshot]]
+.`snapshot()`
+****
+[source,php]
+----
+/*
+Operate on the Snapshot namespace of commands
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot();
+----
+****
+
+
+
+[[Elasticsearch_Clientcat_cat]]
+.`cat()`
+****
+[source,php]
+----
+/*
+Operate on the Cat namespace of commands
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat();
+----
+****
+
+
+
+[[Elasticsearch_Clientingest_ingest]]
+.`ingest()`
+****
+[source,php]
+----
+/*
+Operate on the Ingest namespace of commands
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->ingest();
+----
+****
+
+
+
+[[Elasticsearch_Clienttasks_tasks]]
+.`tasks()`
+****
+[source,php]
+----
+/*
+Operate on the Tasks namespace of commands
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->tasks();
+----
+****
+
+
+
+[[Elasticsearch_Client-call-_call]]
+.`__call()`
+****
+[source,php]
+----
+/*
+Catchall for registered namespaces
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->__call($name,$arguments);
+----
+****
+
+
+
+[[Elasticsearch_ClientextractArgument_extractArgument]]
+.`extractArgument()`
+****
+[source,php]
+----
+/*
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->extractArgument($params,$arg);
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/ClientBuilder.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/ClientBuilder.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..63eacc98e8ff9c8d7c2753d3f4f007fa7f2b59bd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/ClientBuilder.asciidoc
@@ -0,0 +1,342 @@
+
+
+[[Elasticsearch_ClientBuilder]]
+=== Elasticsearch\ClientBuilder
+
+
+
+Class ClientBuilder
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_ClientBuildercreate_create,`create()`>>
+* <<Elasticsearch_ClientBuilderfromConfig_fromConfig,`fromConfig()`>>
+* <<Elasticsearch_ClientBuilderdefaultHandler_defaultHandler,`defaultHandler()`>>
+* <<Elasticsearch_ClientBuildermultiHandler_multiHandler,`multiHandler()`>>
+* <<Elasticsearch_ClientBuildersingleHandler_singleHandler,`singleHandler()`>>
+* <<Elasticsearch_ClientBuilderdefaultLogger_defaultLogger,`defaultLogger()`>>
+* <<Elasticsearch_ClientBuildersetConnectionFactory_setConnectionFactory,`setConnectionFactory()`>>
+* <<Elasticsearch_ClientBuildersetConnectionPool_setConnectionPool,`setConnectionPool()`>>
+* <<Elasticsearch_ClientBuildersetEndpoint_setEndpoint,`setEndpoint()`>>
+* <<Elasticsearch_ClientBuilderregisterNamespace_registerNamespace,`registerNamespace()`>>
+* <<Elasticsearch_ClientBuildersetTransport_setTransport,`setTransport()`>>
+* <<Elasticsearch_ClientBuildersetHandler_setHandler,`setHandler()`>>
+* <<Elasticsearch_ClientBuildersetLogger_setLogger,`setLogger()`>>
+* <<Elasticsearch_ClientBuildersetTracer_setTracer,`setTracer()`>>
+* <<Elasticsearch_ClientBuildersetSerializer_setSerializer,`setSerializer()`>>
+* <<Elasticsearch_ClientBuildersetHosts_setHosts,`setHosts()`>>
+* <<Elasticsearch_ClientBuildersetRetries_setRetries,`setRetries()`>>
+* <<Elasticsearch_ClientBuildersetSelector_setSelector,`setSelector()`>>
+* <<Elasticsearch_ClientBuildersetSniffOnStart_setSniffOnStart,`setSniffOnStart()`>>
+* <<Elasticsearch_ClientBuildersetSSLCert_setSSLCert,`setSSLCert()`>>
+* <<Elasticsearch_ClientBuildersetSSLKey_setSSLKey,`setSSLKey()`>>
+* <<Elasticsearch_ClientBuildersetSSLVerification_setSSLVerification,`setSSLVerification()`>>
+* <<Elasticsearch_ClientBuilderbuild_build,`build()`>>
+
+
+
+[[Elasticsearch_ClientBuildercreate_create]]
+.`create()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuilderfromConfig_fromConfig]]
+.`fromConfig()`
+****
+[source,php]
+----
+/*
+    Build a new client from the provided config.  Hash keys
+should correspond to the method name e.g. ['connectionPool']
+corresponds to setConnectionPool().
+    ['body']  = (array) Request body
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuilderdefaultHandler_defaultHandler]]
+.`defaultHandler()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildermultiHandler_multiHandler]]
+.`multiHandler()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersingleHandler_singleHandler]]
+.`singleHandler()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuilderdefaultLogger_defaultLogger]]
+.`defaultLogger()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetConnectionFactory_setConnectionFactory]]
+.`setConnectionFactory()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetConnectionPool_setConnectionPool]]
+.`setConnectionPool()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetEndpoint_setEndpoint]]
+.`setEndpoint()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuilderregisterNamespace_registerNamespace]]
+.`registerNamespace()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetTransport_setTransport]]
+.`setTransport()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetHandler_setHandler]]
+.`setHandler()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetLogger_setLogger]]
+.`setLogger()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetTracer_setTracer]]
+.`setTracer()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetSerializer_setSerializer]]
+.`setSerializer()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetHosts_setHosts]]
+.`setHosts()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetRetries_setRetries]]
+.`setRetries()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetSelector_setSelector]]
+.`setSelector()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetSniffOnStart_setSniffOnStart]]
+.`setSniffOnStart()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetSSLCert_setSSLCert]]
+.`setSSLCert()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetSSLKey_setSSLKey]]
+.`setSSLKey()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuildersetSSLVerification_setSSLVerification]]
+.`setSSLVerification()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
+
+[[Elasticsearch_ClientBuilderbuild_build]]
+.`build()`
+****
+[source,php]
+----
+/*
+*/
+
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/CatNamespace.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/CatNamespace.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..afd8914af26ead2dfad4d2da8b5e173de79451cc
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/CatNamespace.asciidoc
@@ -0,0 +1,515 @@
+
+
+[[Elasticsearch_Namespaces_CatNamespace]]
+=== Elasticsearch\Namespaces\CatNamespace
+
+
+
+Class CatNamespace
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_Namespaces_CatNamespacealiases_aliases,`aliases()`>>
+* <<Elasticsearch_Namespaces_CatNamespaceallocation_allocation,`allocation()`>>
+* <<Elasticsearch_Namespaces_CatNamespacecount_count,`count()`>>
+* <<Elasticsearch_Namespaces_CatNamespacehealth_health,`health()`>>
+* <<Elasticsearch_Namespaces_CatNamespacehelp_help,`help()`>>
+* <<Elasticsearch_Namespaces_CatNamespaceindices_indices,`indices()`>>
+* <<Elasticsearch_Namespaces_CatNamespacemaster_master,`master()`>>
+* <<Elasticsearch_Namespaces_CatNamespacenodes_nodes,`nodes()`>>
+* <<Elasticsearch_Namespaces_CatNamespacenodeAttrs_nodeAttrs,`nodeAttrs()`>>
+* <<Elasticsearch_Namespaces_CatNamespacependingTasks_pendingTasks,`pendingTasks()`>>
+* <<Elasticsearch_Namespaces_CatNamespacerecovery_recovery,`recovery()`>>
+* <<Elasticsearch_Namespaces_CatNamespacerepositories_repositories,`repositories()`>>
+* <<Elasticsearch_Namespaces_CatNamespaceshards_shards,`shards()`>>
+* <<Elasticsearch_Namespaces_CatNamespacesnapshots_snapshots,`snapshots()`>>
+* <<Elasticsearch_Namespaces_CatNamespacethreadPool_threadPool,`threadPool()`>>
+* <<Elasticsearch_Namespaces_CatNamespacefielddata_fielddata,`fielddata()`>>
+* <<Elasticsearch_Namespaces_CatNamespaceplugins_plugins,`plugins()`>>
+* <<Elasticsearch_Namespaces_CatNamespacesegments_segments,`segments()`>>
+* <<Elasticsearch_Namespaces_CatNamespacetasks_tasks,`tasks()`>>
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacealiases_aliases]]
+.`aliases()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->aliases($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespaceallocation_allocation]]
+.`allocation()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['bytes']          = (enum) The unit in which to display byte values
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->allocation($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacecount_count]]
+.`count()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->count($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacehealth_health]]
+.`health()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['ts']             = (bool) Set to false to disable timestamping
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->health($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacehelp_help]]
+.`help()`
+****
+[source,php]
+----
+/*
+$params['help'] = (bool) Return help information
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->help($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespaceindices_indices]]
+.`indices()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['bytes']          = (enum) The unit in which to display byte values
+       ['pri']            = (bool) Set to true to return stats only for primary shards
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->indices($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacemaster_master]]
+.`master()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->master($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacenodes_nodes]]
+.`nodes()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->nodes($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacenodeAttrs_nodeAttrs]]
+.`nodeAttrs()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->nodeAttrs($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacependingTasks_pendingTasks]]
+.`pendingTasks()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->pendingTasks($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacerecovery_recovery]]
+.`recovery()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['bytes']          = (enum) The unit in which to display byte values
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->recovery($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacerepositories_repositories]]
+.`repositories()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->repositories($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespaceshards_shards]]
+.`shards()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['bytes']          = (enum) The unit in which to display byte values
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->shards($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacesnapshots_snapshots]]
+.`snapshots()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['bytes']          = (enum) The unit in which to display byte values
+       ['repository']     = (string) Name of repository from which to fetch the snapshot information
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->snapshots($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacethreadPool_threadPool]]
+.`threadPool()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['full_id']        = (bool) Enables displaying the complete node ids
+       ['size']           = (enum) The multiplier in which to display values ([ "", "k", "m", "g", "t", "p" ])
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->threadPool($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacefielddata_fielddata]]
+.`fielddata()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['bytes']          = (enum) The unit in which to display byte values
+       ['fields']         = (list) A comma-separated list of fields to return the fielddata size
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->fielddata($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespaceplugins_plugins]]
+.`plugins()`
+****
+[source,php]
+----
+/*
+$params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->plugins($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacesegments_segments]]
+.`segments()`
+****
+[source,php]
+----
+/*
+$params['h']              = (list) Comma-separated list of column names to display
+       ['help']           = (bool) Return help information
+       ['v']              = (bool) Verbose mode. Display column headers
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->segments($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_CatNamespacetasks_tasks]]
+.`tasks()`
+****
+[source,php]
+----
+/*
+$params['format']         = (string) a short version of the Accept header, e.g. json, yaml
+       ['node_id']        = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+       ['format']         = (string) a short version of the Accept header, e.g. json, yaml
+       ['actions']        = (list) A comma-separated list of actions that should be returned. Leave empty to return all.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cat()->tasks($params);
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/ClusterNamespace.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/ClusterNamespace.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..562182c1ae6babddc9c218eeb8effeec7cc61d5d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/ClusterNamespace.asciidoc
@@ -0,0 +1,210 @@
+
+
+[[Elasticsearch_Namespaces_ClusterNamespace]]
+=== Elasticsearch\Namespaces\ClusterNamespace
+
+
+
+Class ClusterNamespace
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_Namespaces_ClusterNamespacehealth_health,`health()`>>
+* <<Elasticsearch_Namespaces_ClusterNamespacereroute_reroute,`reroute()`>>
+* <<Elasticsearch_Namespaces_ClusterNamespacestate_state,`state()`>>
+* <<Elasticsearch_Namespaces_ClusterNamespacestats_stats,`stats()`>>
+* <<Elasticsearch_Namespaces_ClusterNamespaceputSettings_putSettings,`putSettings()`>>
+* <<Elasticsearch_Namespaces_ClusterNamespacegetSettings_getSettings,`getSettings()`>>
+* <<Elasticsearch_Namespaces_ClusterNamespacependingTasks_pendingTasks,`pendingTasks()`>>
+* <<Elasticsearch_Namespaces_ClusterNamespaceallocationExplain_allocationExplain,`allocationExplain()`>>
+
+
+
+[[Elasticsearch_Namespaces_ClusterNamespacehealth_health]]
+.`health()`
+****
+[source,php]
+----
+/*
+$params['index']                      = (string) Limit the information returned to a specific index
+       ['level']                      = (enum) Specify the level of detail for returned information
+       ['local']                      = (boolean) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout']             = (time) Explicit operation timeout for connection to master node
+       ['timeout']                    = (time) Explicit operation timeout
+       ['wait_for_active_shards']     = (number) Wait until the specified number of shards is active
+       ['wait_for_nodes']             = (number) Wait until the specified number of nodes is available
+       ['wait_for_relocating_shards'] = (number) Wait until the specified number of relocating shards is finished
+       ['wait_for_status']            = (enum) Wait until cluster is in a specific state
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster()->health($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_ClusterNamespacereroute_reroute]]
+.`reroute()`
+****
+[source,php]
+----
+/*
+$params['dry_run']         = (boolean) Simulate the operation only and return the resulting state
+       ['filter_metadata'] = (boolean) Don't return cluster state metadata (default: false)
+       ['body']            = (boolean) Don't return cluster state metadata (default: false)
+       ['explain']         = (boolean) Return an explanation of why the commands can or cannot be executed
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster()->reroute($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_ClusterNamespacestate_state]]
+.`state()`
+****
+[source,php]
+----
+/*
+$params['filter_blocks']          = (boolean) Do not return information about blocks
+       ['filter_index_templates'] = (boolean) Do not return information about index templates
+       ['filter_indices']         = (list) Limit returned metadata information to specific indices
+       ['filter_metadata']        = (boolean) Do not return information about indices metadata
+       ['filter_nodes']           = (boolean) Do not return information about nodes
+       ['filter_routing_table']   = (boolean) Do not return information about shard allocation (`routing_table` and `routing_nodes`)
+       ['local']                  = (boolean) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout']         = (time) Specify timeout for connection to master
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster()->state($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_ClusterNamespacestats_stats]]
+.`stats()`
+****
+[source,php]
+----
+/*
+$params['flat_settings']          = (boolean) Return settings in flat format (default: false)
+       ['human'] = (boolean) Whether to return time and byte values in human-readable format.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster()->stats($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_ClusterNamespaceputSettings_putSettings]]
+.`putSettings()`
+****
+[source,php]
+----
+/*
+$params['body'] = ()
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster()->putSettings($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_ClusterNamespacegetSettings_getSettings]]
+.`getSettings()`
+****
+[source,php]
+----
+/*
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster()->getSettings($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_ClusterNamespacependingTasks_pendingTasks]]
+.`pendingTasks()`
+****
+[source,php]
+----
+/*
+$params['local']   = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['master_timeout']  = (time) Specify timeout for connection to master
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster()->pendingTasks($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_ClusterNamespaceallocationExplain_allocationExplain]]
+.`allocationExplain()`
+****
+[source,php]
+----
+/*
+$params['include_yes_decisions'] = (bool) Return 'YES' decisions in explanation (default: false)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->cluster()->allocationExplain($params);
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/IndicesNamespace.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/IndicesNamespace.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..e46618b2e1c67b64269dd1c15e26a3ff42046b0f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/IndicesNamespace.asciidoc
@@ -0,0 +1,1071 @@
+
+
+[[Elasticsearch_Namespaces_IndicesNamespace]]
+=== Elasticsearch\Namespaces\IndicesNamespace
+
+
+
+Class IndicesNamespace
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_Namespaces_IndicesNamespaceexists_exists,`exists()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceget_get,`get()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacesegments_segments,`segments()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacedeleteTemplate_deleteTemplate,`deleteTemplate()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacedelete_delete,`delete()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacestats_stats,`stats()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceputSettings_putSettings,`putSettings()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacesnapshotIndex_snapshotIndex,`snapshotIndex()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceshrink_shrink,`shrink()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacegetMapping_getMapping,`getMapping()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacegetFieldMapping_getFieldMapping,`getFieldMapping()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceflush_flush,`flush()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceflushSynced_flushSynced,`flushSynced()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacerefresh_refresh,`refresh()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacerecovery_recovery,`recovery()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceexistsType_existsType,`existsType()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceputAlias_putAlias,`putAlias()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceputTemplate_putTemplate,`putTemplate()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacevalidateQuery_validateQuery,`validateQuery()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacegetAlias_getAlias,`getAlias()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceputMapping_putMapping,`putMapping()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacedeleteMapping_deleteMapping,`deleteMapping()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacegetTemplate_getTemplate,`getTemplate()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceexistsTemplate_existsTemplate,`existsTemplate()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacecreate_create,`create()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceforceMerge_forceMerge,`forceMerge()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacedeleteAlias_deleteAlias,`deleteAlias()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceopen_open,`open()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceanalyze_analyze,`analyze()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceclearCache_clearCache,`clearCache()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceupdateAliases_updateAliases,`updateAliases()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacegetAliases_getAliases,`getAliases()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceexistsAlias_existsAlias,`existsAlias()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacestatus_status,`status()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacegetSettings_getSettings,`getSettings()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceclose_close,`close()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceseal_seal,`seal()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceupgrade_upgrade,`upgrade()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacegetUpgrade_getUpgrade,`getUpgrade()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespaceshardStores_shardStores,`shardStores()`>>
+* <<Elasticsearch_Namespaces_IndicesNamespacerollover_rollover,`rollover()`>>
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceexists_exists]]
+.`exists()`
+****
+[source,php]
+----
+/*
+$params['index'] = (list) A comma-separated list of indices to check (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->exists($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceget_get]]
+.`get()`
+****
+[source,php]
+----
+/*
+$params['index'] = (list) A comma-separated list of indices to check (Required)
+       ['feature'] = (list) A comma-separated list of features to return
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->get($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacesegments_segments]]
+.`segments()`
+****
+[source,php]
+----
+/*
+$params['index']               = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['operation_threading'] = () TODO: ?
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->segments($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacedeleteTemplate_deleteTemplate]]
+.`deleteTemplate()`
+****
+[source,php]
+----
+/*
+$params['name']    = (string) The name of the template (Required)
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->deleteTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacedelete_delete]]
+.`delete()`
+****
+[source,php]
+----
+/*
+$params['index']   = (list) A comma-separated list of indices to delete; use `_all` or empty string to delete all indices
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->delete($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacestats_stats]]
+.`stats()`
+****
+[source,php]
+----
+/*
+$params['fields']         = (boolean) A comma-separated list of fields for `fielddata` metric (supports wildcards)
+       ['index']          = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['indexing_types'] = (list) A comma-separated list of document types to include in the `indexing` statistics
+       ['metric_family']  = (enum) Limit the information returned to a specific metric
+       ['search_groups']  = (list) A comma-separated list of search groups to include in the `search` statistics
+       ['all']            = (boolean) Return all available information
+       ['clear']          = (boolean) Reset the default level of detail
+       ['docs']           = (boolean) Return information about indexed and deleted documents
+       ['fielddata']      = (boolean) Return information about field data
+       ['filter_cache']   = (boolean) Return information about filter cache
+       ['flush']          = (boolean) Return information about flush operations
+       ['get']            = (boolean) Return information about get operations
+       ['groups']         = (boolean) A comma-separated list of search groups for `search` statistics
+       ['id_cache']       = (boolean) Return information about ID cache
+       ['ignore_indices'] = (enum) When performed on multiple indices, allows to ignore `missing` ones
+       ['indexing']       = (boolean) Return information about indexing operations
+       ['merge']          = (boolean) Return information about merge operations
+       ['refresh']        = (boolean) Return information about refresh operations
+       ['search']         = (boolean) Return information about search operations; use the `groups` parameter to include information for specific search groups
+       ['store']          = (boolean) Return information about the size of the index
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->stats($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceputSettings_putSettings]]
+.`putSettings()`
+****
+[source,php]
+----
+/*
+$params['index'] = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['body']  = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->putSettings($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacesnapshotIndex_snapshotIndex]]
+.`snapshotIndex()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->snapshotIndex($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceshrink_shrink]]
+.`shrink()`
+****
+[source,php]
+----
+/*
+$params['index']          = (string) The name of the source index to shrink
+       ['target']         = (string) The name of the target index to shrink into
+       ['timeout']        = (time) Explicit operation timeout
+       ['master_timeout'] = (time) Specify timeout for connection to master
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->shrink($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacegetMapping_getMapping]]
+.`getMapping()`
+****
+[source,php]
+----
+/*
+$params['index'] = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+       ['type']  = (list) A comma-separated list of document types
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->getMapping($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacegetFieldMapping_getFieldMapping]]
+.`getFieldMapping()`
+****
+[source,php]
+----
+/*
+$params['index']            = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+       ['type']             = (list) A comma-separated list of document types
+       ['field']            = (list) A comma-separated list of document fields
+       ['include_defaults'] = (bool) specifies default mapping values should be returned
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->getFieldMapping($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceflush_flush]]
+.`flush()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+       ['force']              = (boolean) TODO: ?
+       ['full']               = (boolean) TODO: ?
+       ['refresh']            = (boolean) Refresh the index after performing the operation
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->flush($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceflushSynced_flushSynced]]
+.`flushSynced()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+       ['force']              = (boolean) TODO: ?
+       ['full']               = (boolean) TODO: ?
+       ['refresh']            = (boolean) Refresh the index after performing the operation
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->flushSynced($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacerefresh_refresh]]
+.`refresh()`
+****
+[source,php]
+----
+/*
+$params['index']               = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['operation_threading'] = () TODO: ?
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->refresh($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacerecovery_recovery]]
+.`recovery()`
+****
+[source,php]
+----
+/*
+$params['index']       = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+       ['detailed']    = (bool) Whether to display detailed information about shard recovery
+       ['active_only'] = (bool) Display only those recoveries that are currently on-going
+       ['human']       = (bool) Whether to return time and byte values in human-readable format.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->recovery($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceexistsType_existsType]]
+.`existsType()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of index names; use `_all` to check the types across all indices (Required)
+       ['type']               = (list) A comma-separated list of document types to check (Required)
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->existsType($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceputAlias_putAlias]]
+.`putAlias()`
+****
+[source,php]
+----
+/*
+$params['index']   = (string) The name of the index with an alias
+       ['name']    = (string) The name of the alias to be created or updated
+       ['timeout'] = (time) Explicit timestamp for the document
+       ['body']    = (time) Explicit timestamp for the document
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->putAlias($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceputTemplate_putTemplate]]
+.`putTemplate()`
+****
+[source,php]
+----
+/*
+$params['name']    = (string) The name of the template (Required)
+       ['order']   = (number) The order for this template when merging multiple matching ones (higher numbers are merged later, overriding the lower numbers)
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']    = (time) Explicit operation timeout
+       ['create']  = (bool) Whether the index template should only be added if new or can also replace an existing one
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->putTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacevalidateQuery_validateQuery]]
+.`validateQuery()`
+****
+[source,php]
+----
+/*
+$params['index']               = (list) A comma-separated list of index names to restrict the operation; use `_all` or empty string to perform the operation on all indices
+       ['type']                = (list) A comma-separated list of document types to restrict the operation; leave empty to perform the operation on all types
+       ['explain']             = (boolean) Return detailed information about the error
+       ['ignore_indices']      = (enum) When performed on multiple indices, allows to ignore `missing` ones
+       ['operation_threading'] = () TODO: ?
+       ['source']              = (string) The URL-encoded query definition (instead of using the request body)
+       ['body']                = (string) The URL-encoded query definition (instead of using the request body)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->validateQuery($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacegetAlias_getAlias]]
+.`getAlias()`
+****
+[source,php]
+----
+/*
+$params['name']           = (list) A comma-separated list of alias names to return (Required)
+       ['index']          = (list) A comma-separated list of index names to filter aliases
+       ['ignore_indices'] = (enum) When performed on multiple indices, allows to ignore `missing` ones
+       ['name']           = (list) A comma-separated list of alias names to return
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->getAlias($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceputMapping_putMapping]]
+.`putMapping()`
+****
+[source,php]
+----
+/*
+$params['index']            = (list) A comma-separated list of index names; use `_all` to perform the operation on all indices (Required)
+       ['type']             = (string) The name of the document type
+       ['ignore_conflicts'] = (boolean) Specify whether to ignore conflicts while updating the mapping (default: false)
+       ['timeout']          = (time) Explicit operation timeout
+       ['body']             = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->putMapping($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacedeleteMapping_deleteMapping]]
+.`deleteMapping()`
+****
+[source,php]
+----
+/*
+$params['index'] = (list) A comma-separated list of index names; use `_all` for all indices (Required)
+       ['type']  = (string) The name of the document type to delete (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->deleteMapping($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacegetTemplate_getTemplate]]
+.`getTemplate()`
+****
+[source,php]
+----
+/*
+$params['name'] = (string) The name of the template (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->getTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceexistsTemplate_existsTemplate]]
+.`existsTemplate()`
+****
+[source,php]
+----
+/*
+$params['name'] = (string) The name of the template (Required)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->existsTemplate($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacecreate_create]]
+.`create()`
+****
+[source,php]
+----
+/*
+$params['index']   = (string) The name of the index (Required)
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']    = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->create($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceforceMerge_forceMerge]]
+.`forceMerge()`
+****
+[source,php]
+----
+/*
+$params['index']                = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['flush']                = (boolean) Specify whether the index should be flushed after performing the operation (default: true)
+       ['max_num_segments']     = (number) The number of segments the index should be merged into (default: dynamic)
+       ['only_expunge_deletes'] = (boolean) Specify whether the operation should only expunge deleted documents
+       ['operation_threading']  = () TODO: ?
+       ['refresh']              = (boolean) Specify whether the index should be refreshed after performing the operation (default: true)
+       ['wait_for_merge']       = (boolean) Specify whether the request should block until the merge process is finished (default: true)
+       ['ignore_unavailable']   = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']     = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']     = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->forceMerge($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacedeleteAlias_deleteAlias]]
+.`deleteAlias()`
+****
+[source,php]
+----
+/*
+$params['index']   = (string) The name of the index with an alias (Required)
+       ['name']    = (string) The name of the alias to be deleted (Required)
+       ['timeout'] = (time) Explicit timestamp for the document
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->deleteAlias($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceopen_open]]
+.`open()`
+****
+[source,php]
+----
+/*
+$params['index']   = (string) The name of the index (Required)
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->open($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceanalyze_analyze]]
+.`analyze()`
+****
+[source,php]
+----
+/*
+$params['index']        = (string) The name of the index to scope the operation
+       ['analyzer']     = (string) The name of the analyzer to use
+       ['field']        = (string) Use the analyzer configured for this field (instead of passing the analyzer name)
+       ['filter']       = (list) A comma-separated list of filters to use for the analysis
+       ['prefer_local'] = (boolean) With `true`, specify that a local shard should be used if available, with `false`, use a random shard (default: true)
+       ['text']         = (string) The text on which the analysis should be performed (when request body is not used)
+       ['tokenizer']    = (string) The name of the tokenizer to use for the analysis
+       ['format']       = (enum) Format of the output
+       ['body']         = (enum) Format of the output
+       ['char_filter']  = (list) A comma-separated list of character filters to use for the analysis
+       ['explain']      = (bool) With `true`, outputs more advanced details. (default: false)
+       ['attributes']   = (list) A comma-separated list of token attributes to output, this parameter works only with `explain=true`
+       ['format']       = (enum) Format of the output (["detailed", "text"])
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->analyze($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceclearCache_clearCache]]
+.`clearCache()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of index name to limit the operation
+       ['field_data']         = (boolean) Clear field data
+       ['fielddata']          = (boolean) Clear field data
+       ['fields']             = (list) A comma-separated list of fields to clear when using the `field_data` parameter (default: all)
+       ['filter']             = (boolean) Clear filter caches
+       ['filter_cache']       = (boolean) Clear filter caches
+       ['filter_keys']        = (boolean) A comma-separated list of keys to clear when using the `filter_cache` parameter (default: all)
+       ['id']                 = (boolean) Clear ID caches for parent/child
+       ['id_cache']           = (boolean) Clear ID caches for parent/child
+       ['recycler']           = (boolean) Clear the recycler cache
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->clearCache($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceupdateAliases_updateAliases]]
+.`updateAliases()`
+****
+[source,php]
+----
+/*
+$params['index']   = (list) A comma-separated list of index names to filter aliases
+       ['timeout'] = (time) Explicit timestamp for the document
+       ['body']    = (time) Explicit timestamp for the document
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->updateAliases($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacegetAliases_getAliases]]
+.`getAliases()`
+****
+[source,php]
+----
+/*
+$params['local']   = (bool) Return local information, do not retrieve the state from master node (default: false)
+       ['timeout'] = (time) Explicit timestamp for the document
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->getAliases($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceexistsAlias_existsAlias]]
+.`existsAlias()`
+****
+[source,php]
+----
+/*
+$params['name']               = (list) A comma-separated list of alias names to return (Required)
+       ['index']              = (list) A comma-separated list of index names to filter aliases
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->existsAlias($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacestatus_status]]
+.`status()`
+****
+[source,php]
+----
+/*
+$params['index']               = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['ignore_indices']      = (enum) When performed on multiple indices, allows to ignore `missing` ones
+       ['operation_threading'] = () TODO: ?
+       ['recovery']            = (boolean) Return information about shard recovery
+       ['snapshot']            = (boolean) TODO: ?
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->status($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacegetSettings_getSettings]]
+.`getSettings()`
+****
+[source,php]
+----
+/*
+$params['index'] = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->getSettings($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceclose_close]]
+.`close()`
+****
+[source,php]
+----
+/*
+$params['index']   = (string) The name of the index (Required)
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->close($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceseal_seal]]
+.`seal()`
+****
+[source,php]
+----
+/*
+$params['index']   = (string) The name of the index
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->seal($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceupgrade_upgrade]]
+.`upgrade()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+       ['wait_for_completion']= (boolean) Specify whether the request should block until the all segments are upgraded (default: false)
+       ['only_ancient_segments'] = (boolean) If true, only ancient (an older Lucene major release) segments will be upgraded
+       ['refresh']            = (boolean) Refresh the index after performing the operation
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->upgrade($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacegetUpgrade_getUpgrade]]
+.`getUpgrade()`
+****
+[source,php]
+----
+/*
+$params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+       ['wait_for_completion']= (boolean) Specify whether the request should block until the all segments are upgraded (default: false)
+       ['only_ancient_segments'] = (boolean) If true, only ancient (an older Lucene major release) segments will be upgraded
+       ['refresh']            = (boolean) Refresh the index after performing the operation
+       ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->getUpgrade($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespaceshardStores_shardStores]]
+.`shardStores()`
+****
+[source,php]
+----
+/*
+$params['index']   = (string) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+       ['status']   = (list) A comma-separated list of statuses used to filter on shards to get store information for
+       ['ignore_unavailable'] = (boolean) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+       ['allow_no_indices'] = (boolean) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+       ['expand_wildcards'] = (boolean) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->shardStores($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IndicesNamespacerollover_rollover]]
+.`rollover()`
+****
+[source,php]
+----
+/*
+$params['newIndex']       = (string) The name of the rollover index
+       ['alias']          = (string) The name of the alias to rollover
+       ['timeout']        = (time) Explicit operation timeout
+       ['master_timeout'] = (time) Specify timeout for connection to master
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->indices()->rollover($params);
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/IngestNamespace.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/IngestNamespace.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..7132c885e9500215ef98c7e9e781b754152340db
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/IngestNamespace.asciidoc
@@ -0,0 +1,106 @@
+
+
+[[Elasticsearch_Namespaces_IngestNamespace]]
+=== Elasticsearch\Namespaces\IngestNamespace
+
+
+
+Class IngestNamespace
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_Namespaces_IngestNamespacedeletePipeline_deletePipeline,`deletePipeline()`>>
+* <<Elasticsearch_Namespaces_IngestNamespacegetPipeline_getPipeline,`getPipeline()`>>
+* <<Elasticsearch_Namespaces_IngestNamespaceputPipeline_putPipeline,`putPipeline()`>>
+* <<Elasticsearch_Namespaces_IngestNamespacesimulate_simulate,`simulate()`>>
+
+
+
+[[Elasticsearch_Namespaces_IngestNamespacedeletePipeline_deletePipeline]]
+.`deletePipeline()`
+****
+[source,php]
+----
+/*
+$params['master_timeout']             = (time) Explicit operation timeout for connection to master node
+       ['timeout']                    = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->ingest()->deletePipeline($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IngestNamespacegetPipeline_getPipeline]]
+.`getPipeline()`
+****
+[source,php]
+----
+/*
+$params['master_timeout']             = (time) Explicit operation timeout for connection to master node
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->ingest()->getPipeline($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IngestNamespaceputPipeline_putPipeline]]
+.`putPipeline()`
+****
+[source,php]
+----
+/*
+$params['master_timeout']             = (time) Explicit operation timeout for connection to master node
+       ['timeout']                    = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->ingest()->putPipeline($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_IngestNamespacesimulate_simulate]]
+.`simulate()`
+****
+[source,php]
+----
+/*
+$params['verbose'] = (bool) Verbose mode. Display data output for each processor in executed pipeline
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->ingest()->simulate($params);
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/NodesNamespace.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/NodesNamespace.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..fb71cc54ca2e8b9edfe5ee69c9033d8430967d5b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/NodesNamespace.asciidoc
@@ -0,0 +1,125 @@
+
+
+[[Elasticsearch_Namespaces_NodesNamespace]]
+=== Elasticsearch\Namespaces\NodesNamespace
+
+
+
+Class NodesNamespace
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_Namespaces_NodesNamespacestats_stats,`stats()`>>
+* <<Elasticsearch_Namespaces_NodesNamespaceinfo_info,`info()`>>
+* <<Elasticsearch_Namespaces_NodesNamespacehotThreads_hotThreads,`hotThreads()`>>
+* <<Elasticsearch_Namespaces_NodesNamespaceshutdown_shutdown,`shutdown()`>>
+
+
+
+[[Elasticsearch_Namespaces_NodesNamespacestats_stats]]
+.`stats()`
+****
+[source,php]
+----
+/*
+$params['fields']        = (list) A comma-separated list of fields for `fielddata` metric (supports wildcards)
+       ['metric_family'] = (enum) Limit the information returned to a certain metric family
+       ['metric']        = (enum) Limit the information returned for `indices` family to a specific metric
+       ['node_id']       = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+       ['all']           = (boolean) Return all available information
+       ['clear']         = (boolean) Reset the default level of detail
+       ['fs']            = (boolean) Return information about the filesystem
+       ['http']          = (boolean) Return information about HTTP
+       ['indices']       = (boolean) Return information about indices
+       ['jvm']           = (boolean) Return information about the JVM
+       ['network']       = (boolean) Return information about network
+       ['os']            = (boolean) Return information about the operating system
+       ['process']       = (boolean) Return information about the Elasticsearch process
+       ['thread_pool']   = (boolean) Return information about the thread pool
+       ['transport']     = (boolean) Return information about transport
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->nodes()->stats($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_NodesNamespaceinfo_info]]
+.`info()`
+****
+[source,php]
+----
+/*
+$params['node_id']       = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+       ['metric']        = (list) A comma-separated list of metrics you wish returned. Leave empty to return all.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->nodes()->info($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_NodesNamespacehotThreads_hotThreads]]
+.`hotThreads()`
+****
+[source,php]
+----
+/*
+$params['node_id']   = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+       ['interval']  = (time) The interval for the second sampling of threads
+       ['snapshots'] = (number) Number of samples of thread stacktrace (default: 10)
+       ['threads']   = (number) Specify the number of threads to provide information for (default: 3)
+       ['type']      = (enum) The type to sample (default: cpu)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->nodes()->hotThreads($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_NodesNamespaceshutdown_shutdown]]
+.`shutdown()`
+****
+[source,php]
+----
+/*
+$params['node_id'] = (list) A comma-separated list of node IDs or names to perform the operation on; use `_local` to perform the operation on the node you're connected to, leave empty to perform the operation on all nodes
+       ['delay']   = (time) Set the delay for the operation (default: 1s)
+       ['exit']    = (boolean) Exit the JVM as well (default: true)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->nodes()->shutdown($params);
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/SnapshotNamespace.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/SnapshotNamespace.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..594133b924b20185acf8758e0e64ce36e7a66116
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/SnapshotNamespace.asciidoc
@@ -0,0 +1,220 @@
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespace]]
+=== Elasticsearch\Namespaces\SnapshotNamespace
+
+
+
+Class SnapshotNamespace
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_Namespaces_SnapshotNamespacecreate_create,`create()`>>
+* <<Elasticsearch_Namespaces_SnapshotNamespacecreateRepository_createRepository,`createRepository()`>>
+* <<Elasticsearch_Namespaces_SnapshotNamespacedelete_delete,`delete()`>>
+* <<Elasticsearch_Namespaces_SnapshotNamespacedeleteRepository_deleteRepository,`deleteRepository()`>>
+* <<Elasticsearch_Namespaces_SnapshotNamespaceget_get,`get()`>>
+* <<Elasticsearch_Namespaces_SnapshotNamespacegetRepository_getRepository,`getRepository()`>>
+* <<Elasticsearch_Namespaces_SnapshotNamespacerestore_restore,`restore()`>>
+* <<Elasticsearch_Namespaces_SnapshotNamespacestatus_status,`status()`>>
+* <<Elasticsearch_Namespaces_SnapshotNamespaceverifyRepository_verifyRepository,`verifyRepository()`>>
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespacecreate_create]]
+.`create()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['wait_for_completion'] = (bool) Should this request wait until the operation has completed before returning
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->create($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespacecreateRepository_createRepository]]
+.`createRepository()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->createRepository($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespacedelete_delete]]
+.`delete()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->delete($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespacedeleteRepository_deleteRepository]]
+.`deleteRepository()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->deleteRepository($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespaceget_get]]
+.`get()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->get($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespacegetRepository_getRepository]]
+.`getRepository()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->getRepository($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespacerestore_restore]]
+.`restore()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['wait_for_completion'] = (bool) Should this request wait until the operation has completed before returning
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->restore($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespacestatus_status]]
+.`status()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->status($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_SnapshotNamespaceverifyRepository_verifyRepository]]
+.`verifyRepository()`
+****
+[source,php]
+----
+/*
+$params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+       ['timeout'] = (time) Explicit operation timeout
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->snapshot()->verifyRepository($params);
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/TasksNamespace.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/TasksNamespace.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..9d51713aeeb3995e770b8f5b015591c82aba91c8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/Elasticsearch/Namespaces/TasksNamespace.asciidoc
@@ -0,0 +1,84 @@
+
+
+[[Elasticsearch_Namespaces_TasksNamespace]]
+=== Elasticsearch\Namespaces\TasksNamespace
+
+
+
+Class TasksNamespace
+
+
+*Methods*
+
+The class defines the following methods:
+
+* <<Elasticsearch_Namespaces_TasksNamespaceget_get,`get()`>>
+* <<Elasticsearch_Namespaces_TasksNamespacetasksList_tasksList,`tasksList()`>>
+* <<Elasticsearch_Namespaces_TasksNamespacecancel_cancel,`cancel()`>>
+
+
+
+[[Elasticsearch_Namespaces_TasksNamespaceget_get]]
+.`get()`
+****
+[source,php]
+----
+/*
+$params['wait_for_completion'] = (bool) Wait for the matching tasks to complete (default: false)
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->tasks()->get($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_TasksNamespacetasksList_tasksList]]
+.`tasksList()`
+****
+[source,php]
+----
+/*
+$params['node_id'] = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+       ['actions'] = (list) A comma-separated list of actions that should be cancelled. Leave empty to cancel all.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->tasks()->tasksList($params);
+----
+****
+
+
+
+[[Elasticsearch_Namespaces_TasksNamespacecancel_cancel]]
+.`cancel()`
+****
+[source,php]
+----
+/*
+$params['node_id'] = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+       ['actions'] = (list) A comma-separated list of actions that should be cancelled. Leave empty to cancel all.
+       ['body']  = (array) Request body
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = $client->tasks()->cancel($params);
+----
+****
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/PROJECT_VERSION b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/PROJECT_VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..8b25206ff90e9432f6f1a8600f87a7bd695a24af
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/PROJECT_VERSION
@@ -0,0 +1 @@
+master
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/SAMI_VERSION b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/SAMI_VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..75a358eed36ecc603f548bcb2e3b4208c0821048
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/SAMI_VERSION
@@ -0,0 +1 @@
+3.3.0-DEV
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/classes.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/classes.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..af3029969b281cf3ddf9c256c32459a6d3c8a998
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/classes.asciidoc
@@ -0,0 +1,26 @@
+
+[[ElasticsearchPHP_Endpoints]]
+== Reference - Endpoints
+
+This is a complete list of namespaces and their associated endpoints.
+
+NOTE: This is auto-generated documentation
+
+* <<Elasticsearch_Client, Elasticsearch\Client>>
+* <<Elasticsearch_ClientBuilder, Elasticsearch\ClientBuilder>>
+* <<Elasticsearch_Namespaces_CatNamespace, Elasticsearch\Namespaces\CatNamespace>>
+* <<Elasticsearch_Namespaces_ClusterNamespace, Elasticsearch\Namespaces\ClusterNamespace>>
+* <<Elasticsearch_Namespaces_IndicesNamespace, Elasticsearch\Namespaces\IndicesNamespace>>
+* <<Elasticsearch_Namespaces_IngestNamespace, Elasticsearch\Namespaces\IngestNamespace>>
+* <<Elasticsearch_Namespaces_NodesNamespace, Elasticsearch\Namespaces\NodesNamespace>>
+* <<Elasticsearch_Namespaces_SnapshotNamespace, Elasticsearch\Namespaces\SnapshotNamespace>>
+* <<Elasticsearch_Namespaces_TasksNamespace, Elasticsearch\Namespaces\TasksNamespace>>
+include::Elasticsearch/Client.asciidoc[]
+include::Elasticsearch/ClientBuilder.asciidoc[]
+include::Elasticsearch/Namespaces/CatNamespace.asciidoc[]
+include::Elasticsearch/Namespaces/ClusterNamespace.asciidoc[]
+include::Elasticsearch/Namespaces/IndicesNamespace.asciidoc[]
+include::Elasticsearch/Namespaces/IngestNamespace.asciidoc[]
+include::Elasticsearch/Namespaces/NodesNamespace.asciidoc[]
+include::Elasticsearch/Namespaces/SnapshotNamespace.asciidoc[]
+include::Elasticsearch/Namespaces/TasksNamespace.asciidoc[]
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/interfaces.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/interfaces.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..5b17b386baa8e5ecb59bcc6c073ce739556cde20
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/interfaces.asciidoc
@@ -0,0 +1,7 @@
+
+[[ElasticsearchPHP_Interfaces]]
+== Reference - Interfaces
+
+This is a complete list of available interfaces:
+
+* There are no interfaces available.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/namespaces.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/namespaces.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..a59ad372261112abe2bd335da983faa00e147140
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/namespaces.asciidoc
@@ -0,0 +1,10 @@
+
+[[ElasticsearchPHP_Namespaces]]
+== Reference - Namespaces
+
+This is a complete list of available namespaces:
+
+* <<Elasticsearch, Elasticsearch>>
+* <<Elasticsearch_Namespaces, Elasticsearch\Namespaces>>
+include::Elasticsearch.asciidoc[]
+include::Elasticsearch/Namespaces.asciidoc[]
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/renderer.index b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/renderer.index
new file mode 100644
index 0000000000000000000000000000000000000000..9064cb3089ae424275ad022e8b5c7a9a39bc496c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/build/renderer.index
@@ -0,0 +1 @@
+C:19:"Sami\Renderer\Index":944:{a:3:{i:0;a:9:{s:20:"Elasticsearch\Client";s:40:"c92166baaf85cb08a91ce4e3cf845b1626ba12f0";s:27:"Elasticsearch\ClientBuilder";s:40:"347f22134a07f53b3355a211264d8e53aa545243";s:37:"Elasticsearch\Namespaces\CatNamespace";s:40:"51d06cd6b8334bcf3a2580f67bbc5c88f8fde761";s:41:"Elasticsearch\Namespaces\ClusterNamespace";s:40:"0934f56b5dfa7978ab1907b6c8a04b0a293ae274";s:41:"Elasticsearch\Namespaces\IndicesNamespace";s:40:"3d23245494af9443c215b31faa4e78dd6ab29750";s:40:"Elasticsearch\Namespaces\IngestNamespace";s:40:"b52adeb7071f16cba79cdcc3dac3fa6e53ed62bd";s:39:"Elasticsearch\Namespaces\NodesNamespace";s:40:"da4e71f9d953d00600920c26fe585b6884e45f94";s:42:"Elasticsearch\Namespaces\SnapshotNamespace";s:40:"e28a1807789b0fcca3fd6b9712ed713650cf7ac2";s:39:"Elasticsearch\Namespaces\TasksNamespace";s:40:"2de86d7ab409a629320725f6444c76d2a9313c72";}i:1;a:1:{i:0;s:6:"master";}i:2;a:2:{i:0;s:13:"Elasticsearch";i:1;s:24:"Elasticsearch\Namespaces";}}}
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/community.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/community.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..c05b4411fcdda199e3454fa8501a90db7ddd54fd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/community.asciidoc
@@ -0,0 +1,89 @@
+
+== Community DSLs
+
+=== ElasticsearchDSL
+
+https://github.com/ongr-io/ElasticsearchDSL[Link: ElasticsearchDSL]
+[quote, ElasticsearchDSL]
+__________________________
+Introducing Elasticsearch DSL library to provide objective query builder for Elasticsearch bundle and elasticsearch-php client. You can easily build any Elasticsearch query and transform it to an array.
+__________________________
+
+=== elasticsearcher
+
+https://github.com/madewithlove/elasticsearcher[Link: elasticsearcher]
+
+[quote, elasticsearcher]
+__________________________
+This agnostic package is a lightweight wrapper on top of the Elasticsearch PHP client. Its main goal is to allow for easier structuring of queries and indices in your application. It does not want to hide or replace functionality of the Elasticsearch PHP client.
+__________________________
+
+== Community Integrations
+
+=== Symfony
+
+==== ONGR Elasticsearch Bundle
+
+https://github.com/ongr-io/ElasticsearchBundle[Link: ONGR Elasticsearch Bundle]
+
+[quote, ONGR Elasticsearch Bundle]
+__________________________
+Elasticsearch Bundle was created in order to serve the need for professional elasticsearch
+integration with enterprise level Symfony 2 systems. This bundle is:
+
+- Supported by ONGR.io development team.
+- Uses the official elasticsearch-php client.
+- Ensures full integration with Symfony 2 framework.
+
+Technical goodies:
+
+- Provides nestable and DSL query builder to be executed by type repository services.
+- Uses Doctrine-like document / entities document-object mapping using annotations.
+- Query results iterators are provided for your convenience.
+- Registers console commands for index and types management and data import / export.
+- Designed in an extensible way for all your custom needs.
+__________________________
+
+
+=== Drupal
+
+==== Elasticsearch Connector
+
+https://www.drupal.org/project/elasticsearch_connector[Link: Elasticsearch Connector]
+
+[quote, Elasticsearch Connector]
+__________________________
+Elasticsearch Connector is a set of modules designed to build a full Elasticsearch eco system in Drupal.
+__________________________
+
+=== Laravel
+
+==== shift31/Laravel-Elasticsearch
+
+https://github.com/shift31/laravel-elasticsearch[Link: shift31/Laravel-Elasticsearch]
+
+[quote, Laravel-Elasticsearch]
+__________________________
+This is a Laravel (4+) Service Provider for the official Elasticsearch low-level client.
+__________________________
+
+
+==== cviebrock/Laravel-Elasticsearch
+
+https://github.com/cviebrock/laravel-elasticsearch[Link: cviebrock/Laravel-Elasticsearch]
+
+[quote, Laravel-Elasticsearch]
+__________________________
+An easy way to use the official Elastic Search client in your Laravel applications.
+__________________________
+
+
+==== Plastic
+
+https://github.com/sleimanx2/plastic[Link: Plastic]
+
+[quote, Plastic]
+__________________________
+Plastic is an Elasticsearch ODM and mapper for Laravel. It renders the developer experience more enjoyable while using Elasticsearch, by providing a fluent syntax for mapping, querying, and storing eloquent models.
+__________________________
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/configuration.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/configuration.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..e159eee67f4766619ad05db3f7648b9b00cbe80c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/configuration.asciidoc
@@ -0,0 +1,442 @@
+
+== Configuration
+
+Almost every aspect of the client is configurable.  Most users will only need to configure a few parameters to suit
+their needs, but it is possible to completely replace much of the internals if required.
+
+Custom configuration is accomplished before the client is instantiated, through the ClientBuilder helper object.
+We'll walk through all the configuration options and show sample code to replace the various components.
+
+=== Inline Host Configuration
+
+The most common configuration is telling the client about your cluster: how many nodes, their addresses and ports.  If
+no hosts are specified, the client will attempt to connect to `localhost:9200`.
+
+This behavior can be changed by using the `setHosts()` method on `ClientBuilder`.  The method accepts an array of values,
+each entry corresponding to one node in your cluster.  The format of the host can vary, depending on your needs (ip vs
+hostname, port, ssl, etc)
+
+[source,php]
+----
+$hosts = [
+    '192.168.1.1:9200',         // IP + Port
+    '192.168.1.2',              // Just IP
+    'mydomain.server.com:9201', // Domain + Port
+    'mydomain2.server.com',     // Just Domain
+    'https://localhost',        // SSL to localhost
+    'https://192.168.1.3:9200'  // SSL to IP + Port
+];
+$client = ClientBuilder::create()           // Instantiate a new ClientBuilder
+                    ->setHosts($hosts)      // Set the hosts
+                    ->build();              // Build the client object
+----
+
+Notice that the `ClientBuilder` object allows chaining method calls for brevity.  It is also possible to call the methods
+individually:
+
+[source,php]
+----
+$hosts = [
+    '192.168.1.1:9200',         // IP + Port
+    '192.168.1.2',              // Just IP
+    'mydomain.server.com:9201', // Domain + Port
+    'mydomain2.server.com',     // Just Domain
+    'https://localhost',        // SSL to localhost
+    'https://192.168.1.3:9200'  // SSL to IP + Port
+];
+$clientBuilder = ClientBuilder::create();   // Instantiate a new ClientBuilder
+$clientBuilder->setHosts($hosts);           // Set the hosts
+$client = $clientBuilder->build();          // Build the client object
+----
+
+=== Extended Host Configuration
+
+The client also supports an _extended_ host configuration syntax.  The inline configuration method relies on PHP's
+`filter_var()` and `parse_url()` methods to validate and extract the components of a URL.  Unfortunately, these built-in
+methods run into problems with certain edge-cases.  For example, `filter_var()` will not accept URL's that have underscores
+(which are questionably legal, depending on how you interpret the RFCs).  Similarly, `parse_url()` will choke if a
+Basic Auth's password contains special characters such as a pound sign (`#`) or question-marks (`?`).
+
+For this reason, the client supports an extended host syntax which provides greater control over host initialization.
+None of the components are validated, so edge-cases like underscores domain names will not cause problems.
+
+The extended syntax is an array of parameters for each host:
+
+[source,php]
+----
+$hosts = [
+    // This is effectively equal to: "https://username:password!#$?*abc@foo.com:9200/"
+    [
+        'host' => 'foo.com',
+        'port' => '9200',
+        'scheme' => 'https',
+        'user' => 'username',
+        'pass' => 'password!#$?*abc'
+    ],
+
+    // This is equal to "http://localhost:9200/"
+    [
+        'host' => 'localhost',    // Only host is required
+    ]
+];
+$client = ClientBuilder::create()           // Instantiate a new ClientBuilder
+                    ->setHosts($hosts)      // Set the hosts
+                    ->build();              // Build the client object
+----
+
+Only the `host` parameter is required for each configured host.  If not provided, the default port is `9200`.  The default
+scheme is `http`.
+
+=== Authorization and Encryption
+
+For details about HTTP Authorization and SSL encryption, please see link:_security.html[Authorization and SSL].
+
+=== Set retries
+
+By default, the client will retry `n` times, where `n = number of nodes` in your cluster.  A retry is only performed
+if the operation results in a "hard" exception: connection refusal, connection timeout, DNS lookup timeout, etc.  4xx and
+5xx errors are not considered retry'able events, since the node returns an operational response.
+
+If you would like to disable retries, or change the number, you can do so with the `setRetries()` method:
+
+[source,php]
+----------------------------
+
+$client = ClientBuilder::create()
+                    ->setRetries(2)
+                    ->build();
+----------------------------
+
+When the client runs out of retries, it will throw the last exception that it received.  For example, if you have ten
+alive nodes, and `setRetries(5)`, the client will attempt to execute the command up to five times.  If all five nodes
+result in a connection timeout (for example), the client will throw an `OperationTimeoutException`.  Depending on the
+Connection Pool being used, these nodes may also be marked dead.
+
+To help in identification, exceptions that are thrown due to max retries will wrap a `MaxRetriesException`.  For example,
+you can catch a specific curl exception then check if it wraps a MaxRetriesException using `getPrevious()`:
+
+[source,php]
+----
+$client = Elasticsearch\ClientBuilder::create()
+    ->setHosts(["localhost:1"])
+    ->setRetries(0)
+    ->build();
+
+try {
+    $client->search($searchParams);
+} catch (Elasticsearch\Common\Exceptions\Curl\CouldNotConnectToHost $e) {
+    $previous = $e->getPrevious();
+    if ($previous instanceof 'Elasticsearch\Common\Exceptions\MaxRetriesException') {
+        echo "Max retries!";
+    }
+}
+----
+
+Alternatively, all "hard" curl exceptions (`CouldNotConnectToHost`, `CouldNotResolveHostException`, `OperationTimeoutException`)
+extend the more general `TransportException`.  So you could instead catch the general `TransportException` and then
+check it's previous value:
+
+[source,php]
+----
+$client = Elasticsearch\ClientBuilder::create()
+    ->setHosts(["localhost:1"])
+    ->setRetries(0)
+    ->build();
+
+try {
+    $client->search($searchParams);
+} catch (Elasticsearch\Common\Exceptions\TransportException $e) {
+    $previous = $e->getPrevious();
+    if ($previous instanceof 'Elasticsearch\Common\Exceptions\MaxRetriesException') {
+        echo "Max retries!";
+    }
+}
+----
+
+
+[[enabling_logger]]
+=== Enabling the Logger
+Elasticsearch-PHP supports logging, but it is not enabled by default for performance reasons.  If you wish to enable logging,
+you need to select a logging implementation, install it, then enable the logger in the Client.  The recommended logger
+is https://github.com/Seldaek/monolog[Monolog], but any logger that implements the `PSR/Log` interface will work.
+
+You might have noticed that Monolog was suggested during installation.  To begin using Monolog, add it to your `composer.json`:
+
+[source,json]
+----------------------------
+{
+    "require": {
+        ...
+        "elasticsearch/elasticsearch" : "~5.0",
+        "monolog/monolog": "~1.0"
+    }
+}
+----------------------------
+
+And then update your composer installation:
+
+[source,shell]
+----------------------------
+php composer.phar update
+----------------------------
+
+Once Monolog (or another logger) is installed, you need to create a log object and inject it into the client.  The
+`ClientBuilder` object has a helper static function that will generate a common Monolog-based logger for you.  All you need
+to do is provide the path to your desired logging location:
+
+[source,php]
+----
+$logger = ClientBuilder::defaultLogger('path/to/your.log');
+
+$client = ClientBuilder::create()       // Instantiate a new ClientBuilder
+            ->setLogger($logger)        // Set the logger with a default logger
+            ->build();                  // Build the client object
+----
+
+You can also specify the severity of log messages that you wish to log:
+
+[source,php]
+----
+// set severity with second parameter
+$logger = ClientBuilder::defaultLogger('/path/to/logs/', Logger::INFO);
+
+$client = ClientBuilder::create()       // Instantiate a new ClientBuilder
+            ->setLogger($logger)        // Set the logger with a default logger
+            ->build();                  // Build the client object
+----
+
+The `defaultLogger()` method is just a helper, you are not required to use it.  You can create your own logger and inject
+that instead:
+
+
+[source,php]
+----
+use Monolog\Logger;
+use Monolog\Handler\StreamHandler;
+
+$logger = new Logger('name');
+$logger->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
+
+$client = ClientBuilder::create()       // Instantiate a new ClientBuilder
+            ->setLogger($logger)        // Set your custom logger
+            ->build();                  // Build the client object
+----
+
+
+=== Configure the HTTP Handler
+
+Elasticsearch-PHP uses an interchangeable HTTP transport layer called https://github.com/guzzle/RingPHP/[RingPHP].  This
+allows the client to construct a generic HTTP request, then pass it to the transport layer to execute.  The actual execution
+details are hidden from the client and modular, so that you can choose from several HTTP handlers depending on your needs.
+
+The default handler that the client uses is a combination handler.  When executing in synchronous mode, the handler
+uses `CurlHandler`, which executes single curl calls.  These are very fast for single requests.  When asynchronous (future)
+mode is enabled, the handler switches to `CurlMultiHandler`, which uses the curl_multi interface.  This involves a bit
+more overhead, but allows batches of HTTP requests to be processed in parallel.
+
+You can configure the HTTP handler with one of several helper functions, or provide your own custom handler:
+
+[source,php]
+----
+$defaultHandler = ClientBuilder::defaultHandler();
+$singleHandler  = ClientBuilder::singleHandler();
+$multiHandler   = ClientBuilder::multiHandler();
+$customHandler  = new MyCustomHandler();
+
+$client = ClientBuilder::create()
+            ->setHandler($defaultHandler)
+            ->build();
+----
+
+For details on creating your own custom Ring handler, please see the http://guzzle.readthedocs.org/en/latest/handlers.html[RingPHP Documentation]
+
+The default handler is recommended in almost all cases.  This allows fast synchronous execution, while retaining flexibility
+to invoke parallel batches with async future mode.  You may consider using just the `singleHandler` if you know you will
+never need async capabilities, since it will save a small amount of overhead by reducing indirection.
+
+
+=== Setting the Connection Pool
+
+The client maintains a pool of connections, with each connection representing a node in your cluster.  There are several
+connection pool implementations available, and each has slightly different behavior (pinging vs no pinging, etc).
+Connection pools are configured via the `setConnectionPool()` method:
+
+[source,php]
+----
+$connectionPool = '\Elasticsearch\ConnectionPool\StaticNoPingConnectionPool';
+$client = ClientBuilder::create()
+            ->setConnectionPool($connectionPool)
+            ->build();
+----
+
+For more details, please see the dedicated page on link:_connection_pool.html[configuring connection pools].
+
+=== Setting the Connection Selector
+
+The connection pool manages the connections to your cluster, but the Selector is the logic that decides which connection
+should be used for the next API request.  There are several selectors that you can choose from.  Selectors can be changed
+via the `setSelector()` method:
+
+[source,php]
+----
+$selector = '\Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector';
+$client = ClientBuilder::create()
+            ->setSelector($selector)
+            ->build();
+----
+
+For more details, please see the dedicated page on link:_selectors.html[configuring selectors].
+
+
+=== Setting the Serializer
+
+Requests are given to the client in the form of associative arrays, but Elasticsearch expects JSON.  The Serializer's
+job is to serialize PHP objects into JSON.  It also de-serializes JSON back into PHP arrays.  This seems trivial, but
+there are a few edgecases which make it useful for the serializer to remain modular.
+
+The majority of people will never need to change the default serializer (`SmartSerializer`), but if you need to,
+it can be done via the `setSerializer()` method:
+
+[source,php]
+----
+$serializer = '\Elasticsearch\Serializers\SmartSerializer';
+$client = ClientBuilder::create()
+            ->setSerializer($serializer)
+            ->build();
+----
+
+For more details, please see the dedicated page on link:_serializers.html[configuring serializers].
+
+
+=== Setting a custom ConnectionFactory
+
+The ConnectionFactory instantiates new Connection objects when requested by the ConnectionPool.  A single Connection
+represents a single node.  Since the client hands actual networking work over to RingPHP, the Connection's main job is
+book-keeping:  Is this node alive?  Did it fail a ping request?  What is the host and port?
+
+There is little reason to provide your own ConnectionFactory, but if you need to do so, you need to supply an intact
+ConnectionFactory object to the `setConnectionFactory()` method.  The object should implement the `ConnectionFactoryInterface`
+interface.
+
+[source,php]
+----
+
+class MyConnectionFactory implements ConnectionFactoryInterface
+{
+
+    public function __construct($handler, array $connectionParams,
+                                SerializerInterface $serializer,
+                                LoggerInterface $logger,
+                                LoggerInterface $tracer)
+    {
+       // Code here
+    }
+
+
+    /**
+     * @param $hostDetails
+     *
+     * @return ConnectionInterface
+     */
+    public function create($hostDetails)
+    {
+        // Code here...must return a Connection object
+    }
+}
+
+
+$connectionFactory = new MyConnectionFactory(
+    $handler,
+    $connectionParams,
+    $serializer,
+    $logger,
+    $tracer
+);
+
+$client = ClientBuilder::create()
+            ->setConnectionFactory($connectionFactory);
+            ->build();
+----
+
+As you can see, if you decide to inject your own ConnectionFactory, you take over the responsibiltiy of wiring it correctly.
+The ConnectionFactory requires a working HTTP handler, serializer, logger and tracer.
+
+
+=== Set the Endpoint closure
+
+The client uses an Endpoint closure to dispatch API requests to the correct Endpoint object.  A namespace object will
+construct a new Endpoint via this closure, which means this is a handy location if you wish to extend the available set
+of API endpoints available
+
+For example, we could add a new endpoint like so:
+
+[source,php]
+----
+
+$transport = $this->transport;
+$serializer = $this->serializer;
+
+$newEndpoint = function ($class) use ($transport, $serializer) {
+    if ($class == 'SuperSearch') {
+        return new MyProject\SuperSearch($transport);
+    } else {
+        // Default handler
+        $fullPath = '\\Elasticsearch\\Endpoints\\' . $class;
+        if ($class === 'Bulk' || $class === 'Msearch' || $class === 'MPercolate') {
+            return new $fullPath($transport, $serializer);
+        } else {
+            return new $fullPath($transport);
+        }
+    }
+};
+
+$client = ClientBuilder::create()
+            ->setEndpoint($newEndpoint)
+            ->build();
+----
+
+Obviously, by doing this you take responsibility that all existing endpoints still function correctly.  And you also
+assume the responsibility of correctly wiring the Transport and Serializer into each endpoint.
+
+
+=== Building the client from a configuration hash
+
+To help ease automated building of the client, all configurations can be provided in a setting
+hash instead of calling the individual methods directly.  This functionality is exposed through
+the `ClientBuilder::FromConfig()` static method, which accepts an array of configurations
+and returns a fully built client.
+
+Array keys correspond to the method name, e.g. `retries` key corresponds to `setRetries()` method.
+
+
+[source,php]
+----
+$params = [
+    'hosts' => [
+        'localhost:9200'
+    ],
+    'retries' => 2,
+    'handler' => ClientBuilder::singleHandler()
+];
+$client = ClientBuilder::fromConfig($params);
+----
+
+
+Unknown parameters will throw an exception, to help the user find potential problems.
+If this behavior is not desired (e.g. you are using the hash for other purposes, and may have
+keys unrelated to the Elasticsearch client), you can set $quiet = true in fromConfig() to
+silence the exceptions.
+
+[source,php]
+----
+$params = [
+    'hosts' => [
+        'localhost:9200'
+    ],
+    'retries' => 2,
+    'imNotReal' => 5
+];
+
+// Set $quiet to true to ignore the unknown `imNotReal` key
+$client = ClientBuilder::fromConfig($params, true);
+----
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/connection-pool.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/connection-pool.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..192fb3dbd8046b9f459c5978d7227b791b0e746e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/connection-pool.asciidoc
@@ -0,0 +1,204 @@
+
+== Connection Pool
+
+The connection pool is an object inside the client that is responsible for maintaining the current list of nodes.
+Theoretically, nodes are either dead or alive.
+
+However, in the real world, things are never so clear.  Nodes are sometimes in a gray-zone of _"probably dead but not
+confirmed"_, _"timed-out but unclear why"_ or _"recently dead but now alive"_. The connection pool's job is to
+manage this set of unruly connections and try to provide the best behavior to the client.
+
+If a connection pool is unable to find an alive node to query against, it will return a `NoNodesAvailableException`.
+This is distinct from an exception due to maximum retries.  For example, your cluster may have 10 nodes.  You execute
+a request and 9 out of the 10 nodes fail due to connection timeouts.  The tenth node succeeds and the query executes.
+The first nine nodes will be marked dead (depending on the connection pool being used) and their "dead" timers will begin
+ticking.
+
+When the next request is sent to the client, nodes 1-9 are still considered "dead", so they will be skipped.  The request
+is sent to the only known alive node (#10), and if this node fails, a `NoNodesAvailableException` is returned. You'll note
+this is much less than the `retries` value, because `retries` only applies to retries against alive nodes.  In this case,
+only one node is known to be alive, so `NoNodesAvailableException` is returned.
+
+
+There are several connection pool implementations that you can choose from:
+
+=== staticNoPingConnectionPool (default)
+
+This connection pool maintains a static list of hosts, which are assumed to be alive when the client initializes.  If
+a node fails a request, it is marked as `dead` for 60 seconds and the next node is tried.  After 60 seconds, the node
+is revived and put back into rotation.  Each additional failed request will cause the dead timeout to increase exponentially.
+
+A successful request will reset the "failed ping timeout" counter.
+
+If you wish to explicitly set the `StaticNoPingConnectionPool` implementation, you may do so with the `setConnectionPool()`
+method of the ClientBuilder object:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setConnectionPool('\Elasticsearch\ConnectionPool\StaticNoPingConnectionPool', [])
+            ->build();
+----
+
+Note that the implementation is specified via a namespace path to the class.
+
+=== staticConnectionPool
+
+Identical to the `StaticNoPingConnectionPool`, except it pings nodes before they are used to determine if they are alive.
+This may be useful for long-running scripts, but tends to be additional overhead that is unnecessary for average PHP scripts.
+
+To use the `StaticConnectionPool`:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setConnectionPool('\Elasticsearch\ConnectionPool\StaticConnectionPool', [])
+            ->build();
+----
+
+Note that the implementation is specified via a namespace path to the class.
+
+=== simpleConnectionPool
+
+The `SimpleConnectionPool` simply returns the next node as specified by the Selector; it does not perform track
+the "liveness" of nodes.  This pool will return nodes whether they are alive or dead.  It is just a simple pool of static
+hosts.
+
+The `SimpleConnectionPool` is not recommended for routine use, but it may be a useful debugging tool.
+
+To use the `SimpleConnectionPool`:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setConnectionPool('\Elasticsearch\ConnectionPool\SimpleConnectionPool', [])
+            ->build();
+----
+
+Note that the implementation is specified via a namespace path to the class.
+
+=== sniffingConnectionPool
+
+Unlike the two previous static connection pools, this one is dynamic.  The user provides a seed list of hosts, which the
+client uses to "sniff" and discover the rest of the cluster.  It achieves this through the Cluster State API.  As new
+nodes are added or removed from the cluster, the client will update it's pool of active connections.
+
+To use the `SniffingConnectionPool`:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setConnectionPool('\Elasticsearch\ConnectionPool\SniffingConnectionPool', [])
+            ->build();
+----
+
+Note that the implementation is specified via a namespace path to the class.
+
+
+=== Custom Connection Pool
+
+If you wish to implement your own custom Connection Pool, your class must implement `ConnectionPoolInterface`:
+
+[source,php]
+----
+class MyCustomConnectionPool implements ConnectionPoolInterface
+{
+
+    /**
+     * @param bool $force
+     *
+     * @return ConnectionInterface
+     */
+    public function nextConnection($force = false)
+    {
+        // code here
+    }
+
+    /**
+     * @return void
+     */
+    public function scheduleCheck()
+    {
+        // code here
+    }
+}
+----
+
+You can then instantiate an instance of your ConnectionPool and inject it into the ClientBuilder:
+
+[source,php]
+----
+$myConnectionPool = new MyCustomConnectionPool();
+
+$client = ClientBuilder::create()
+            ->setConnectionPool($myConnectionPool, [])
+            ->build();
+----
+
+If your connection pool only makes minor changes, you may consider extending `AbstractConnectionPool`, which provides
+some helper concrete methods.  If you choose to go down this route, you need to make sure your ConnectionPool's implementation
+has a compatible constructor (since it is not defined in the interface):
+
+[source,php]
+----
+class MyCustomConnectionPool extends AbstractConnectionPool implements ConnectionPoolInterface
+{
+
+    public function __construct($connections, SelectorInterface $selector, ConnectionFactory $factory, $connectionPoolParams)
+    {
+        parent::__construct($connections, $selector, $factory, $connectionPoolParams);
+    }
+
+    /**
+     * @param bool $force
+     *
+     * @return ConnectionInterface
+     */
+    public function nextConnection($force = false)
+    {
+        // code here
+    }
+
+    /**
+     * @return void
+     */
+    public function scheduleCheck()
+    {
+        // code here
+    }
+}
+----
+
+If your constructor matches AbstractConnectionPool, you may use either object injection or namespace instantiation:
+
+[source,php]
+----
+$myConnectionPool = new MyCustomConnectionPool();
+
+$client = ClientBuilder::create()
+            ->setConnectionPool($myConnectionPool, [])                                      // object injection
+            ->setConnectionPool('/MyProject/ConnectionPools/MyCustomConnectionPool', [])    // or namespace
+            ->build();
+----
+
+
+=== Which connection pool to choose? PHP and connection pooling
+
+At first glance, the `sniffingConnectionPool` implementation seems superior.  For many languages, it is.  In PHP, the
+conversation is a bit more nuanced.
+
+Because PHP is a share-nothing architecture, there is no way to maintain a connection pool across script instances.
+This means that every script is responsible for creating, maintaining, and destroying connections everytime the script
+is re-run.
+
+Sniffing is a relatively lightweight operation (one API call to `/_cluster/state`, followed by pings to each node) but
+it may be a non-negligible overhead for certain PHP applications.  The average PHP script will likely load the client,
+execute a few queries and then close.  Imagine this script being called 1000 times per second: the sniffing connection
+pool will perform the sniffing and pinging process 1000 times per second.  The sniffing process will add a large
+amount of overhead
+
+In reality, if your script only executes a few queries, the sniffing concept is _too_ robust.  It tends to be more
+useful in long-lived processes which potentially "out-live" a static list.
+
+For this reason the default connection pool is currently the `staticNoPingConnectionPool`.  You can, of course, change
+this default - but we strongly recommend you load test and verify that it does not negatively impact your performance.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/crud.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/crud.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..d778746a8566d94054d1bfbbf7729f10ec4c08c6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/crud.asciidoc
@@ -0,0 +1,245 @@
+
+== Indexing Documents
+
+When you add documents to Elasticsearch, you index JSON documents.  This maps naturally to PHP associative arrays, since
+they can easily be encoded in JSON.  Therefore, in Elasticsearch-PHP you create and pass associative arrays to the client
+for indexing.  There are several methods of ingesting data into Elasticsearch, which we will cover here
+
+=== Single document indexing
+
+When indexing a document, you can either provide an ID or let elasticsearch generate one for you.
+
+{zwsp} +
+
+.Providing an ID value
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id',
+    'body' => [ 'testField' => 'abc']
+];
+
+// Document will be indexed to my_index/my_type/my_id
+$response = $client->index($params);
+----
+{zwsp} +
+
+.Omitting an ID value
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => [ 'testField' => 'abc']
+];
+
+// Document will be indexed to my_index/my_type/<autogenerated ID>
+$response = $client->index($params);
+----
+{zwsp} +
+
+If you need to set other parameters, such as a `routing` value, you specify those in the array alongside the `index`,
+`type`, etc.  For example, let's set the routing and timestamp of this new document:
+
+.Additional parameters
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id',
+    'routing' => 'company_xyz',
+    'timestamp' => strtotime("-1d"),
+    'body' => [ 'testField' => 'abc']
+];
+
+
+$response = $client->index($params);
+----
+{zwsp} +
+
+=== Bulk Indexing
+
+Elasticsearch also supports bulk indexing of documents.  The bulk API expects JSON action/metadata pairs, separated by
+newlines.  When constructing your documents in PHP, the process is similar.  You first create an action array object
+(e.g. `index` object), then you create a document body object.  This process repeats for all your documents.
+
+A simple example might look like this:
+
+.Bulk indexing with PHP arrays
+[source,php]
+----
+for($i = 0; $i < 100; $i++) {
+    $params['body'][] = [
+        'index' => [
+            '_index' => 'my_index',
+            '_type' => 'my_type',
+	]
+    ];
+
+    $params['body'][] = [
+        'my_field' => 'my_value',
+        'second_field' => 'some more values'
+    ];
+}
+
+$responses = $client->bulk($params);
+----
+
+In practice, you'll likely have more documents than you want to send in a single bulk request.  In that case, you need
+to batch up the requests and periodically send them:
+
+
+.Bulk indexing with batches
+[source,php]
+----
+$params = ['body' => []];
+
+for ($i = 1; $i <= 1234567; $i++) {
+    $params['body'][] = [
+        'index' => [
+            '_index' => 'my_index',
+            '_type' => 'my_type',
+            '_id' => $i
+        ]
+    ];
+
+    $params['body'][] = [
+        'my_field' => 'my_value',
+        'second_field' => 'some more values'
+    ];
+
+    // Every 1000 documents stop and send the bulk request
+    if ($i % 1000 == 0) {
+        $responses = $client->bulk($params);
+
+        // erase the old bulk request
+        $params = ['body' => []];
+
+        // unset the bulk response when you are done to save memory
+        unset($responses);
+    }
+}
+
+// Send the last batch if it exists
+if (!empty($params['body'])) {
+    $responses = $client->bulk($params);
+}
+----
+
+== Getting Documents
+
+Elasticsearch provides realtime GETs of documents.  This means that as soon as the document has been indexed and your
+client receives an acknowledgement, you can immediately retrieve the document from any shard.  Get operations are
+performed by requesting a document by it's full `index/type/id` path:
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id'
+];
+
+// Get doc at /my_index/my_type/my_id
+$response = $client->get($params);
+----
+{zwsp} +
+
+== Updating Documents
+
+Updating a document allows you to either completely replace the contents of the existing document, or perform a partial
+update to just some fields (either changing an existing field, or adding new fields).
+
+=== Partial document update
+
+If you want to partially update a document (e.g. change an existing field, or add a new one) you can do so by specifying
+the `doc` in the `body` parameter.  This will merge the fields in `doc` with the existing document
+
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id',
+    'body' => [
+        'doc' => [
+            'new_field' => 'abc'
+        ]
+    ]
+];
+
+// Update doc at /my_index/my_type/my_id
+$response = $client->update($params);
+----
+{zwsp} +
+
+=== Scripted document update
+
+Sometimes you need to perform a scripted update, such as incrementing a counter or appending a new value to an array.
+To perform a scripted update, you need to provide a script and (usually) a set of parameters:
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id',
+    'body' => [
+        'script' => 'ctx._source.counter += count',
+        'params' => [
+            'count' => 4
+        ]
+    ]
+];
+
+$response = $client->update($params);
+----
+{zwsp} +
+
+=== Upserts
+
+Upserts are "Update or Insert" operations.  This means an upsert will attempt to run your update script, but if the document
+does not exist (or the field you are trying to update doesn't exist), default values will be inserted instead.
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id',
+    'body' => [
+        'script' => 'ctx._source.counter += count',
+        'params' => [
+            'count' => 4
+        ],
+        'upsert' => [
+            'counter' => 1
+        ]
+    ]
+];
+
+$response = $client->update($params);
+----
+{zwsp} +
+
+
+== Deleting documents
+
+Finally, you can delete documents by specifying their full `/index/type/id` path:
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id'
+];
+
+// Delete doc at /my_index/my_type/my_id
+$response = $client->delete($params);
+----
+{zwsp} +
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/futures.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/futures.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..ceee52016af7a1146c1cf002ed21494292d44982
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/futures.asciidoc
@@ -0,0 +1,259 @@
+
+== Future Mode
+
+The client offers a mode called "future" or "async" mode.  This allows batch processing of requests (sent in parallel
+to the cluster), which can have a dramatic impact on performance and throughput.
+
+PHP is fundamentally single-threaded, however libcurl provides functionality called the "multi interface".  This allows
+languages like PHP to gain concurrency by providing a batch of requests to process.  The batch is executed in a parallel
+by the underlying multithreaded libcurl library, and the batch of responses is then returned to PHP.
+
+In a single-threaded environment, the time to execute `n` requests is the sum of those `n` request's latencies.  With
+the multi interface, the time to execute `n` requests is the latency of the slowest request (assuming enough handles
+are available to execute all requests in parallel).
+
+Furthermore, the multi-interface allows requests to different hosts simultaneously, which means the Elasticsearch-PHP
+client can more effectively utilize your full cluster.
+
+=== Using Future Mode
+
+Utilizing this feature is relatively straightforward, but it does introduce more responsibility into your code.  To enable
+future mode, set the `future` flag in the client options to `'lazy'`:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1,
+    'client' => [
+        'future' => 'lazy'
+    ]
+];
+
+$future = $client->get($params);
+----
+
+This will return a _future_, rather than the actual response.  A future represents a _future computation_ and acts like
+a placeholder.  You can pass a future around your code like a regular object.  When you need the result values, you
+can _resolve_ the future.  If the future has already resolved (due to some other activity), the values will be immediately
+available.  If the future has not resolved yet, the resolution will block until those values have become available (e.g.
+after the API call completes).
+
+In practice, this means you can queue up a batch of requests by using `future: lazy` and they will pend until you resolve
+the futures, at which time all requests will be sent in parallel to the cluster and return asynchronously to curl.
+
+This sounds tricky, but it is actually very simple thanks to RingPHP's `FutureArray` interface, which makes the future
+act like a simple associative array.  For example:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1,
+    'client' => [
+        'future' => 'lazy'
+    ]
+];
+
+$future = $client->get($params);
+
+$doc = $future['_source'];    // This call will block and force the future to resolve
+----
+
+Interacting with the future as an associative array, just like a normal response, will cause the future to resolve
+that particular value (which in turn resolves all pending requests and values).  This allows patterns such as:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+$futures = [];
+
+for ($i = 0; $i < 1000; $i++) {
+    $params = [
+        'index' => 'test',
+        'type' => 'test',
+        'id' => $i,
+        'client' => [
+            'future' => 'lazy'
+        ]
+    ];
+
+    $futures[] = $client->get($params);     //queue up the request
+}
+
+
+foreach ($futures as $future) {
+    // access future's values, causing resolution if necessary
+    echo $future['_source'];
+}
+----
+
+The queued requests will execute in parallel and populate their futures after execution.  Batch size defaults to
+100 requests-per-batch.
+
+If you wish to force future resolution, but don't actually need the values immediately, you can call `wait()` on the future
+to force resolution too:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+$futures = [];
+
+for ($i = 0; $i < 1000; $i++) {
+    $params = [
+        'index' => 'test',
+        'type' => 'test',
+        'id' => $i,
+        'client' => [
+            'future' => 'lazy'
+        ]
+    ];
+
+    $futures[] = $client->get($params);     //queue up the request
+}
+
+//wait() forces future resolution and will execute the underlying curl batch
+$futures[999]->wait();
+----
+
+=== Changing batch size
+
+The default batch size is 100, meaning 100 requests will queue up before the client forces futures to begin resolving
+(e.g. initiate a `curl_multi` call).  The batch size can be changed depending on your preferences.  The batch size
+is controllable via the `max_handles` setting when configuring the handler:
+
+[source,php]
+----
+$handlerParams = [
+    'max_handles' => 500
+];
+
+$defaultHandler = ClientBuilder::defaultHandler($handlerParams);
+
+$client = ClientBuilder::create()
+            ->setHandler($defaultHandler)
+            ->build();
+----
+
+This will change the behavior to wait on 500 queued requests before sending the batch.  Note, however, that forcing a
+future to resolve will cause the underlying curl batch to execute, regardless of if the batch is "full" or not.  In this
+example, only 499 requests are added to the queue...but the final future resolution will force the batch to flush
+anyway:
+
+[source,php]
+----
+$handlerParams = [
+    'max_handles' => 500
+];
+
+$defaultHandler = ClientBuilder::defaultHandler($handlerParams);
+
+$client = ClientBuilder::create()
+            ->setHandler($defaultHandler)
+            ->build();
+
+$futures = [];
+
+for ($i = 0; $i < 499; $i++) {
+    $params = [
+        'index' => 'test',
+        'type' => 'test',
+        'id' => $i,
+        'client' => [
+            'future' => 'lazy'
+        ]
+    ];
+
+    $futures[] = $client->get($params);     //queue up the request
+}
+
+// resolve the future, and therefore the underlying batch
+$body = $future[499]['body'];
+----
+
+=== Heterogeneous batches are OK
+
+It is possible to queue up heterogeneous batches of requests.  For example, you can queue up several GETs, indexing requests
+and a search:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+$futures = [];
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1,
+    'client' => [
+        'future' => 'lazy'
+    ]
+];
+
+$futures['getRequest'] = $client->get($params);     // First request
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 2,
+    'body' => [
+        'field' => 'value'
+    ],
+    'client' => [
+        'future' => 'lazy'
+    ]
+];
+
+$futures['indexRequest'] = $client->index($params);       // Second request
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'body' => [
+        'query' => [
+            'match' => [
+                'field' => 'value'
+            ]
+        ]
+    ],
+    'client' => [
+        'future' => 'lazy'
+    ]
+];
+
+$futures['searchRequest'] = $client->search($params);      // Third request
+
+// Resolve futures...blocks until network call completes
+$searchResults = $futures['searchRequest']['hits'];
+
+// Should return immediately, since the previous future resolved the entire batch
+$doc = $futures['getRequest']['_source'];
+----
+
+=== Caveats to Future mode
+
+There are a few caveats to using future mode.  The biggest is also the most obvious: you need to deal with resolving the
+future yourself.  This is usually trivial, but can sometimes introduce unexpected complications.
+
+For example, if you resolve manually using `wait()`, you may need to call `wait()` several times if there were retries.
+This is because each retry will introduce another layer of wrapped futures, and each needs to be resolved to get the
+final result.
+
+This is not needed if you access values via the ArrayInterface however (e.g. `$response['hits']['hits']`), since
+FutureArrayInterface will automatically and fully resolve the future to provide values.
+
+Another caveat is that certain APIs will lose their "helper" functionality.  For example, "exists" APIs (e.g.
+`$client->exists()`, `$client->indices()->exists`, `$client->indices->templateExists()`, etc) typically return a true
+or false under normal operation.
+
+When operated in future mode, unwrapping of the future is left to your application,
+which means the client can no longer inspect the response and return a simple true/false.  Instead, you'll see the raw
+response from Elasticsearch and will have to take action appropriately.
+
+This also applies to `ping()`.
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/index-operations.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/index-operations.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..3108e14298fa2e61759fe022e65cfa558a94e38f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/index-operations.asciidoc
@@ -0,0 +1,274 @@
+
+== Index Management Operations
+
+Index management operations allow you to manage the indices in your Elasticsearch cluster, such as creating, deleting and
+updating indices and their mappings/settings.
+
+=== Create an index
+
+The index operations are all contained under a distinct namespace, separated from other methods that are on the root
+client object.  As an example, let's create a new index:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+$params = [
+    'index' => 'my_index'
+];
+
+// Create the index
+$response = $client->indices()->create($indexParams);
+----
+{zwsp} +
+
+You can specify any parameters that would normally be included in a new index creation API.  All parameters that
+would normally go in the request body are located in the 'body' parameter:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+$params = [
+    'index' => 'my_index',
+    'body' => [
+        'settings' => [
+            'number_of_shards' => 3,
+            'number_of_replicas' => 2
+        ],
+        'mappings' => [
+            'my_type' => [
+                '_source' => [
+                    'enabled' => true
+                ],
+                'properties' => [
+                    'first_name' => [
+                        'type' => 'string',
+                        'analyzer' => 'standard'
+                    ],
+                    'age' => [
+                        'type' => 'integer'
+                    ]
+                ]
+            ]
+        ]
+    ]
+];
+
+
+// Create the index with mappings and settings now
+$response = $client->indices()->create($params);
+----
+{zwsp} +
+
+=== Create an index (advanced example)
+
+This is a more complicated example of creating an index, showing how to define analyzers, tokenizers, filters and
+index settings. Although essentially the same as the previous example, the more complicated example can be helpful
+for "real world" usage of the client, since this particular syntax is easy to mess up.
+
+[source,php]
+----
+$params = [
+    'index' => 'reuters',
+    'body' => [
+        'settings' => [ <1>
+            'number_of_shards' => 1,
+            'number_of_replicas' => 0,
+            'analysis' => [ <2>
+                'filter' => [
+                    'shingle' => [
+                        'type' => 'shingle'
+                    ]
+                ],
+                'char_filter' => [
+                    'pre_negs' => [
+                        'type' => 'pattern_replace',
+                        'pattern' => '(\\w+)\\s+((?i:never|no|nothing|nowhere|noone|none|not|havent|hasnt|hadnt|cant|couldnt|shouldnt|wont|wouldnt|dont|doesnt|didnt|isnt|arent|aint))\\b',
+                        'replacement' => '~$1 $2'
+                    ],
+                    'post_negs' => [
+                        'type' => 'pattern_replace',
+                        'pattern' => '\\b((?i:never|no|nothing|nowhere|noone|none|not|havent|hasnt|hadnt|cant|couldnt|shouldnt|wont|wouldnt|dont|doesnt|didnt|isnt|arent|aint))\\s+(\\w+)',
+                        'replacement' => '$1 ~$2'
+                    ]
+                ],
+                'analyzer' => [
+                    'reuters' => [
+                        'type' => 'custom',
+                        'tokenizer' => 'standard',
+                        'filter' => ['lowercase', 'stop', 'kstem']
+                    ]
+                ]
+            ]
+        ],
+        'mappings' => [ <3>
+            '_default_' => [    <4>
+                'properties' => [
+                    'title' => [
+                        'type' => 'string',
+                        'analyzer' => 'reuters',
+                        'term_vector' => 'yes',
+                        'copy_to' => 'combined'
+                    ],
+                    'body' => [
+                        'type' => 'string',
+                        'analyzer' => 'reuters',
+                        'term_vector' => 'yes',
+                        'copy_to' => 'combined'
+                    ],
+                    'combined' => [
+                        'type' => 'string',
+                        'analyzer' => 'reuters',
+                        'term_vector' => 'yes'
+                    ],
+                    'topics' => [
+                        'type' => 'string',
+                        'index' => 'not_analyzed'
+                    ],
+                    'places' => [
+                        'type' => 'string',
+                        'index' => 'not_analyzed'
+                    ]
+                ]
+            ],
+            'my_type' => [  <5>
+                'properties' => [
+                    'my_field' => [
+                        'type' => 'string'
+                    ]
+                ]
+            ]
+        ]
+    ]
+];
+$client->indices()->create($params);
+----
+<1> The top level `settings` contains config about the index (# of shards, etc) as well as analyzers
+<2> `analysis` is nested inside of `settings`, and contains tokenizers, filters, char filters and analyzers
+<3> `mappings` is another element nested inside of `settings`, and contains the mappings for various types
+<4> The `_default_` type is a dynamic template that is applied to all fields that don't have an explicit mapping
+<5> The `my_type` type is an example of a user-defined type that holds a single field, `my_field`
+
+
+=== Delete an index
+
+Deleting an index is very simple:
+
+[source,php]
+----
+$params = ['index' => 'my_index'];
+$response = $client->indices()->delete($params);
+----
+{zwsp} +
+
+=== Put Settings API
+The Put Settings API allows you to modify any index setting that is dynamic:
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'body' => [
+        'settings' => [
+            'number_of_replicas' => 0,
+            'refresh_interval' => -1
+        ]
+    ]
+];
+
+$response = $client->indices()->putSettings($params);
+----
+{zwsp} +
+
+=== Get Settings API
+
+Get Settings API will show you the currently configured settings for one or more indexes:
+
+[source,php]
+----
+// Get settings for one index
+$params = ['index' => 'my_index'];
+$response = $client->indices()->getSettings($params);
+
+// Get settings for several indices
+$params = [
+    'index' => [ 'my_index', 'my_index2' ]
+];
+$response = $client->indices()->getSettings($params);
+----
+{zwsp} +
+
+=== Put Mappings API
+
+The Put Mappings API allows you to modify or add to an existing index's mapping.
+
+[source,php]
+----
+// Set the index and type
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type2',
+    'body' => [
+        'my_type2' => [
+            '_source' => [
+                'enabled' => true
+            ],
+            'properties' => [
+                'first_name' => [
+                    'type' => 'string',
+                    'analyzer' => 'standard'
+                ],
+                'age' => [
+                    'type' => 'integer'
+                ]
+            ]
+        ]
+    ]
+];
+
+// Update the index mapping
+$client->indices()->putMapping($params);
+----
+{zwsp} +
+
+=== Get Mappings API
+
+The Get Mappings API will return the mapping details about your indexes and types.  Depending on the mappings that you wish to retrieve, you can specify a number of combinations of index and type:
+
+[source,php]
+----
+// Get mappings for all indexes and types
+$response = $client->indices()->getMapping();
+
+// Get mappings for all types in 'my_index'
+$params = ['index' => 'my_index'];
+$response = $client->indices()->getMapping($params);
+
+// Get mappings for all types of 'my_type', regardless of index
+$params = ['type' => 'my_type' ];
+$response = $client->indices()->getMapping($params);
+
+// Get mapping 'my_type' in 'my_index'
+$params = [
+    'index' => 'my_index'
+    'type' => 'my_type'
+];
+$response = $client->indices()->getMapping($params);
+
+// Get mappings for two indexes
+$params = [
+    'index' => [ 'my_index', 'my_index2' ]
+];
+$response = $client->indices()->getMapping($params);
+----
+{zwsp} +
+
+=== Other APIs in the Indices Namespace
+There are a number of other APIs in the indices namespace that allow you to manage your elasticsearch indexes (add/remove templates, flush segments, close indexes, etc).
+
+If you use an IDE with autocompletion, you should be able to easily explore the indices namespace by typing:
+
+[source,php]
+----
+$client->indices()->
+----
+And perusing the list of available methods.  Alternatively, browsing the `\Elasticsearch\Namespaces\Indices.php` file will show you the full list of available method calls (as well as parameter lists in the comments for each method).
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/index.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/index.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..4403e2e2d964e7ae062fc943ca27188d12c734e4
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/index.asciidoc
@@ -0,0 +1,40 @@
+
+= Elasticsearch-PHP
+
+include::overview.asciidoc[]
+
+include::quickstart.asciidoc[]
+
+include::installation.asciidoc[]
+
+include::configuration.asciidoc[]
+
+include::per-request-configuration.asciidoc[]
+
+include::futures.asciidoc[]
+
+include::php_json_objects.asciidoc[]
+
+include::index-operations.asciidoc[]
+
+include::crud.asciidoc[]
+
+include::search-operations.asciidoc[]
+
+include::namespaces.asciidoc[]
+
+include::security.asciidoc[]
+
+include::connection-pool.asciidoc[]
+
+include::selectors.asciidoc[]
+
+include::serializers.asciidoc[]
+
+include::php-version-requirement.asciidoc[]
+
+include::breaking-changes.asciidoc[]
+
+include::community.asciidoc[]
+
+include::build/classes.asciidoc[]
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/installation.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/installation.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..f043b4d233d42a01f008008ff6e53ac0631798cd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/installation.asciidoc
@@ -0,0 +1,79 @@
+== Installation
+
+Elasticsearch-php only has a three requirements that you need to worry about:
+
+* PHP 5.6.6 or higher
+* http://getcomposer.org[Composer]
+* http://php.net/manual/en/book.curl.php[ext-curl]: the Libcurl extension for PHP (see note below)
+* Native JSON Extensions (`ext-json`) 1.3.7 or higher
+
+The rest of the dependencies will automatically be downloaded and installed by Composer.  Composer is a package and dependency manager for PHP.  Installing elasticsearch-php with Composer is very easy
+
+[NOTE]
+.Libcurl can be replaced
+====
+The default HTTP handlers that ship with Elasticsearch-php require the PHP libcurl extension, but it is not technically
+required for the client to operate.  If you have a host that does not have libcurl installed, you can use an
+alternate HTTP handler based on PHP streams.  Performance _will_ suffer, as the libcurl extension is much faster
+====
+
+=== Version Matrix
+
+You need to match your version of Elasticsearch to the appropriate version of this library.
+
+The master branch will always track Elasticsearch master, but it is not recommended to use `dev-master` in your production code.
+
+[width="40%",options="header",frame="topbot"]
+|============================
+|Elasticsearch Version | Elasticsearch-PHP Branch
+| >= 5.0                | `5.0`
+| >= 1.0, <= 5.0        | `1.0`, `2.0`
+| <= 0.90.*             | `0.4`
+|============================
+
+=== Composer Installation
+
+* Include elasticsearch-php in your `composer.json` file.  If you are starting a new project, simply paste the following JSON snippet into a new file called `composer.json`.  If you have an existing project, include this requirement under the rest of requirements already present:
++
+[source,json]
+--------------------------
+{
+    "require": {
+        "elasticsearch/elasticsearch": "~5.0"
+    }
+}
+--------------------------
+
+* Install the client with composer.  The first command download the `composer.phar` PHP package, and the second command invokes the installation.  Composer will automatically download any required dependencies, store them in a /vendor/ directory and build an autoloader.:
++
+[source,shell]
+--------------------------
+curl -s http://getcomposer.org/installer | php
+php composer.phar install --no-dev
+--------------------------
++
+More information about http://getcomposer.org/[Composer can be found at their website].
+
+* Finally, include the generated autoloader in your main project.  If your project is already based on Composer, the autoloader is likely already included somewhere and you don't need to add it again.  Finally, instantiate a new client:
++
+[source,php]
+--------------------------
+require 'vendor/autoload.php';
+
+$client = Elasticsearch\ClientBuilder::create()->build();
+--------------------------
++
+Client instantiation is performed with a static helper function `create()`.  This creates a ClientBuilder object,
+which helps you to set custom configurations.  When you are done configuring, you call the `build()` method to generate
+a `Client` object.  We'll discuss configuration more in the Configuration section
+
+
+=== --no-dev flag
+You'll notice that the installation command specified `--no-dev`.  This prevents Composer
+from installing the various testing and development dependencies.  For average users, there
+is no need to install the test suite.  In particular, the development dependencies include
+a full copy of Elasticsearch so that tests can be run against the REST specifications.  This
+is a rather large download for non-developers, hence the --no-dev flag
+
+If you wish to contribute to development of this library, just omit the `--no-dev` flag to
+be able to run tests.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/namespaces.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/namespaces.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..05a18d1fef518d454e5cfe7012528ce9f431343a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/namespaces.asciidoc
@@ -0,0 +1,82 @@
+
+== Namespaces
+
+The client has a number of "namespaces", which generally expose administrative
+functionality.  The namespaces correspond to the various administrative endpoints
+in Elasticsearch.  This is a complete list of namespaces:
+
+
+[width="40%",options="header",frame="topbot"]
+|============================
+| Namespace  | Functionality
+| `indices()`  | Index-centric stats and info
+| `nodes()`    | Node-centric stats and info
+| `cluster()`  | Cluster-centric stats and info
+| `snapshot()` | Methods to snapshot/restore your cluster and indices
+| `cat()`      | Access to the Cat API (which is generally used standalone from the command line
+|============================
+
+Some methods are available in several different namespaces, which give you
+the same information but grouped into different contexts.  To see how these
+namespaces work, let's look at the `_stats` output:
+
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+// Index Stats
+// Corresponds to curl -XGET localhost:9200/_stats
+$response = $client->indices()->stats();
+
+// Node Stats
+// Corresponds to curl -XGET localhost:9200/_nodes/stats
+$response = $client->nodes()->stats();
+
+// Cluster Stats
+// Corresponds to curl -XGET localhost:9200/_cluster/stats
+$response = $client->cluster()->stats();
+----
+{zwsp} +
+
+As you can see, the same `stats()` call is made through three different
+namespaces.  Sometimes the methods require parameters.  These parameters work
+just like any other method in the library.
+
+For example, we can requests index stats about a specific index, or multiple
+indices:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+// Corresponds to curl -XGET localhost:9200/my_index/_stats
+$params['index'] = 'my_index';
+$response = $client->indices()->stats($params);
+
+// Corresponds to curl -XGET localhost:9200/my_index1,my_index2/_stats
+$params['index'] = array('my_index1', 'my_index2');
+$response = $client->indices()->stats($params);
+----
+{zwsp} +
+
+As another example, here is how you might add an alias to an existing index:
+
+[source,php]
+----
+$params['body'] = array(
+    'actions' => array(
+        array(
+            'add' => array(
+                'index' => 'myindex',
+                'alias' => 'myalias'
+            )
+        )
+    )
+);
+$client->indices()->updateAliases($params);
+----
+
+Notice how both the `stats` calls and the updateAlias took a variety of parameters,
+each according to what the particular API requires.  The `stats` API only requires
+an index name(s), while the `updateAlias` requires a body of actions.
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/overview.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/overview.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..f2dda5aee0c96b2d18e524fd46d0c151832b8f59
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/overview.asciidoc
@@ -0,0 +1,8 @@
+== Overview
+
+This is the official PHP client for Elasticsearch.  It is designed to be a very low-level client that does not stray from the REST API.
+
+All methods closely match the REST API, and furthermore, match the method structure of other language clients (ruby, python, etc).  We hope that this consistency makes it easy to get started with a client, and to seamlessly switch from one language to the next with minimal effort.
+
+The client is designed to be "unopinionated".  There are a few universal niceties added to the client (cluster state sniffing, round-robin requests, etc) but largely it is very barebones.  This was intentional.  We want a common base that more sophisticated libraries can build on top of.
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/per-request-configuration.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/per-request-configuration.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..ad33ca98d57ce41a12ee1fe6f4cafebd5fe8d092
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/per-request-configuration.asciidoc
@@ -0,0 +1,295 @@
+
+== Per-request configuration
+
+There are several configurations that can be set on a per-request basis, rather than at a connection- or client-level.
+These are specified as part of the request associative array.
+
+=== Ignoring exceptions
+The library attempts to throw exceptions for common problems.  These exceptions match the HTTP response code provided
+by Elasticsearch.  For example, attempting to GET a nonexistent document will throw a `MissingDocument404Exception`.
+
+Exceptions are a useful and consistent way to deal with problems like missing documents, syntax errors, version
+conflicts, etc.  But sometimes you want to deal with the response body rather than catch exceptions (often useful
+in test suites).
+
+If you need that behavior, you can configure an `ignore` parameter.  This should be configured in the `client` parameter
+of the reuqest array.  For example, this example will ignore the `MissingDocument404Exception`
+exception and instead return the JSON provided by Elasticsearch.
+
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index'  => 'test_missing',
+    'type'   => 'test',
+    'id'     => 1,
+    'client' => [ 'ignore' => 404 ] <1>
+];
+echo $client->get($params);
+
+> {"_index":"test_missing","_type":"test","_id":"1","found":false}
+----
+<1> This will ignore just the 404 missing exception
+
+You can specify multiple HTTP status codes to ignore, by providing an array of values:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index'  => 'test_missing',
+    'type'   => 'test',
+    'client' => [ 'ignore' => [400, 404] ] <1>
+];
+echo $client->get($params);
+
+> No handler found for uri [/test_missing/test/] and method [GET]
+
+----
+<1> `ignore` also accepts an array of exceptions to ignore. In this example,
+the `BadRequest400Exception` is being ignored
+
+
+It should be noted that the response is simply a string, which may or may not be encoded as JSON.  In the first example,
+the response body was a complete JSON object which could be decoded.  In the second example, it was simply a string.
+
+Since the client has no way of knowing what the exception response will contain, no attempts to decode it are taken.
+
+=== Providing custom query parameters
+
+Sometimes you need to provide custom query params, such as authentication tokens for a third-party plugin or proxy.
+All query parameters are white-listed in Elasticsearch-php, which is to protect you from specifying a param which is
+not accepted by Elasticsearch.
+
+If you need custom parameters, you need to bypass this whitelisting mechanism.  To do so, add them to the `custom`
+parameter as an array of values:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1,
+    'parent' => 'abc',              // white-listed Elasticsearch parameter
+    'client' => [
+        'custom' => [
+            'customToken' => 'abc', // user-defined, not white listed, not checked
+            'otherToken' => 123
+        ]
+    ]
+];
+$exists = $client->exists($params);
+----
+
+
+=== Increasing the Verbosity of responses
+
+By default, the client will only return the response body.  If you require more information (e.g. stats about the transfer,
+headers, status codes, etc), you can tell the client to return a more verbose response.  This is enabled via the
+`verbose` parameter in the client options.
+
+Without verbosity, all you see is the response body:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1
+];
+$response = $client->get($params);
+print_r($response);
+
+
+Array
+(
+    [_index] => test
+    [_type] => test
+    [_id] => 1
+    [_version] => 1
+    [found] => 1
+    [_source] => Array
+        (
+            [field] => value
+        )
+
+)
+----
+
+With verbosity turned on, you will see all of the transfer stats:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1,
+    'client' => [
+        'verbose' => true
+    ]
+];
+$response = $client->get($params);
+print_r($response);
+
+
+Array
+(
+    [transfer_stats] => Array
+        (
+            [url] => http://127.0.0.1:9200/test/test/1
+            [content_type] => application/json; charset=UTF-8
+            [http_code] => 200
+            [header_size] => 86
+            [request_size] => 51
+            [filetime] => -1
+            [ssl_verify_result] => 0
+            [redirect_count] => 0
+            [total_time] => 0.00289
+            [namelookup_time] => 9.7E-5
+            [connect_time] => 0.000265
+            [pretransfer_time] => 0.000322
+            [size_upload] => 0
+            [size_download] => 96
+            [speed_download] => 33217
+            [speed_upload] => 0
+            [download_content_length] => 96
+            [upload_content_length] => -1
+            [starttransfer_time] => 0.002796
+            [redirect_time] => 0
+            [redirect_url] =>
+            [primary_ip] => 127.0.0.1
+            [certinfo] => Array
+                (
+                )
+
+            [primary_port] => 9200
+            [local_ip] => 127.0.0.1
+            [local_port] => 62971
+        )
+
+    [curl] => Array
+        (
+            [error] =>
+            [errno] => 0
+        )
+
+    [effective_url] => http://127.0.0.1:9200/test/test/1
+    [headers] => Array
+        (
+            [Content-Type] => Array
+                (
+                    [0] => application/json; charset=UTF-8
+                )
+
+            [Content-Length] => Array
+                (
+                    [0] => 96
+                )
+
+        )
+
+    [status] => 200
+    [reason] => OK
+    [body] => Array
+        (
+            [_index] => test
+            [_type] => test
+            [_id] => 1
+            [_version] => 1
+            [found] => 1
+            [_source] => Array
+                (
+                    [field] => value
+                )
+        )
+)
+----
+
+=== Curl Timeouts
+
+It is possible to configure per-request curl timeouts via the `timeout` and `connect_timeout` parameters.  These
+control the client-side, curl timeouts.  The `connect_timeout` paramter controls how long curl should wait for the
+"connect" phase to finish, while the `timeout` parameter controls how long curl should wait for the entire request
+to finish.
+
+If either timeout expires, curl will close the connection and return an error.  Both parameters should be specified
+in seconds.
+
+Note: client-side timeouts *do not* mean that Elasticsearch aborts the request.  Elasticsearch will continue executing
+the request until it completes.  In the case of a slow query or bulk request, the operation will continue executing
+"in the background", unknown to your client.  If your client kills connections rapidly with a timeout, only to immediately
+execute another request, it is possible to swamp the server with many connections because there is no "back-pressure" on the
+client.  In these situations, you will see the appropriate threadpool queue growing in size, and may start receiving
+`EsRejectedExecutionException` exceptions from Elasticsearch when the queue finally reaches capacity.
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1,
+    'client' => [
+        'timeout' => 10,        // ten second timeout
+        'connect_timeout' => 10
+    ]
+];
+$response = $client->get($params);
+----
+
+=== Enabling Future Mode
+
+The client supports asynchronous, batch processing of requests.  This is enabled (if your HTTP handler supports it) on
+a per-request basis via the `future` parameter in the client options:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1,
+    'client' => [
+        'future' => 'lazy'
+    ]
+];
+$future = $client->get($params);
+$results = $future->wait();       // resolve the future
+----
+
+Future mode supports two options: `true` or `'lazy'`.  For more details about how asynchronous execution functions, and
+how to work with the results, see the dedicated page on <<_future_mode>>.
+
+=== SSL Encryption
+
+Normally, you will specify SSL configurations when you create the client (see <<_security>> for more details), since encryption typically
+applies to all requests. However, it is possible to configure on a per-request basis too if you need that functionality.
+For example, if you  need to use a self-signed cert on a specific request, you can specify it via the `verify` parameter
+in the client options:
+
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+
+$params = [
+    'index' => 'test',
+    'type' => 'test',
+    'id' => 1,
+    'client' => [
+        'verify' => 'path/to/cacert.pem'      //Use a self-signed certificate
+    ]
+];
+$result = $client->get($params);
+----
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/php-version-requirement.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/php-version-requirement.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..b45fb5aaf91f443c9cb7b6707af9fccfd367fc1a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/php-version-requirement.asciidoc
@@ -0,0 +1,4 @@
+== PHP Version Requirement
+
+Version 5.0 of Elasticsearch-PHP requires PHP version 5.6.6 or higher. In addition, it requires the native JSON
+extension to be version 1.3.7 or higher.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/php_json_objects.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/php_json_objects.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..b237bf4fa7bc066ed7382b7fc06edee40109e165
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/php_json_objects.asciidoc
@@ -0,0 +1,161 @@
+[[php_json_objects]]
+== Dealing with JSON Arrays and Objects in PHP
+
+A common source of confusion with the client revolves around JSON arrays and objects, and how to specify them in PHP.
+In particular, problems are caused by empty objects and arrays of objects.  This page will show you some common patterns
+used in Elasticsearch JSON API, and how to convert that to a PHP representation
+
+=== Empty Objects
+
+The Elasticsearch API uses empty JSON objects in several locations, and this can cause problems for PHP.  Unlike other
+languages, PHP does not have a "short" notation for empty objects and so many developers are unaware how to specify
+an empty object.
+
+Consider adding a Highlight to a query:
+
+[source,json]
+----
+{
+    "query" : {
+        "match" : {
+            "content" : "quick brown fox"
+        }
+    },
+    "highlight" : {
+        "fields" : {
+            "content" : {} <1>
+        }
+    }
+}
+----
+<1> This empty JSON object is what causes problems.
+
+The problem is that PHP will automatically convert `"content" : {}` into `"content" : []`, which is no longer valid
+Elasticsearch DSL.  We need to tell PHP that the empty object is explicitly an object, not an array.  To define this
+query in PHP, you would do:
+
+[source,json]
+----
+$params['body'] = array(
+    'query' => array(
+        'match' => array(
+            'content' => 'quick brown fox'
+        )
+    ),
+    'highlight' => array(
+        'fields' => array(
+            'content' => new \stdClass() <1>
+        )
+    )
+);
+$results = $client->search($params);
+----
+<1> We use the generic PHP stdClass object to represent an empty object.  The JSON will now encode correctly.
+
+By using an explicit stdClass object, we can force the `json_encode` parser to correctly output an empty object, instead
+of an empty array.  Sadly, this verbose solution is the only way to acomplish the goal in PHP...there is no "short"
+version of an empty object.
+
+=== Arrays of Objects
+
+Another common pattern in Elasticsearch DSL is an array of objects.  For example, consider adding a sort to your query:
+
+[source,json]
+----
+{
+    "query" : {
+        "match" : { "content" : "quick brown fox" }
+    },
+    "sort" : [  <1>
+        {"time" : {"order" : "desc"}},
+        {"popularity" : {"order" : "desc"}}
+    ]
+}
+----
+<1> "sort" contains an array of JSON objects
+
+This arrangement is *very* common, but the construction in PHP can be tricky since it requires nesting arrays.  The
+verbosity of PHP tends to obscure what is actually going on.  To construct an array of objects, you actually need
+an array of arrays:
+
+[source,json]
+----
+$params['body'] = array(
+    'query' => array(
+        'match' => array(
+            'content' => 'quick brown fox'
+        )
+    ),
+    'sort' => array(    <1>
+        array('time' => array('order' => 'desc')),  <2>
+        array('popularity' => array('order' => 'desc')) <3>
+    )
+);
+$results = $client->search($params);
+----
+<1> This array encodes the `"sort" : []` array
+<2> This array encodes the `{"time" : {"order" : "desc"}}` object
+<3> This array encodes the `{"popularity" : {"order" : "desc"}}` object
+
+If you are on PHP 5.4+, I would strongly encourage you to use the short array syntax.  It makes these nested arrays
+much simpler to read:
+
+[source,json]
+----
+$params['body'] = [
+    'query' => [
+        'match' => [
+            'content' => 'quick brown fox'
+        ]
+    ],
+    'sort' => [
+        ['time' => ['order' => 'desc']],
+        ['popularity' => ['order' => 'desc']]
+    ]
+];
+$results = $client->search($params);
+----
+
+=== Arrays of empty objects
+
+Occasionally, you'll encounter DSL that requires both of the previous patterns.  The function score query is a good
+example, it sometimes requires an array of objects, and some of those objects might be empty JSON objects.
+
+Given this query:
+[source,json]
+----
+{
+   "query":{
+      "function_score":{
+         "functions":[
+            {
+               "random_score":{}
+            }
+         ],
+         "boost_mode":"replace"
+      }
+   }
+}
+----
+
+We can build it using the following PHP code:
+
+
+[source,json]
+----
+$params['body'] = array(
+    'query' => array(
+        'function_score' => array(
+            'functions' => array(  <1>
+                array(  <2>
+                    'random_score' => new \stdClass() <3>
+                )
+            )
+        )
+    )
+);
+$results = $client->search($params);
+----
+<1> This encodes the array of objects: `"functions" : []`
+<2> This encodes an object inside the array: `{ "random_score": {} }`
+<3> This encodes the empty JSON object: `"random_score": {}`
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/quickstart.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/quickstart.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..61aa73c016549deb5754c90f15830f3cb6ea76db
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/quickstart.asciidoc
@@ -0,0 +1,269 @@
+
+== Quickstart
+
+This section will give you a quick overview of the client and how the major functions work.
+
+=== Installation
+
+* Include elasticsearch-php in your `composer.json` file:
++
+[source,json]
+----------------------------
+{
+    "require": {
+        "elasticsearch/elasticsearch": "~5.0"
+    }
+}
+----------------------------
+
+* Install the client with composer:
++
+[source,shell]
+----------------------------
+curl -s http://getcomposer.org/installer | php
+php composer.phar install --no-dev
+----------------------------
+
+* Include the autoloader in your main project (if you haven't already), and instantiate a new client :
++
+[source,php]
+----------------------------
+require 'vendor/autoload.php';
+
+use Elasticsearch\ClientBuilder;
+
+$client = ClientBuilder::create()->build();
+----------------------------
+
+
+=== Index a document
+
+In elasticsearch-php, almost everything is configured by associative arrays.  The REST endpoint, document and optional parameters - everything is an associative array.
+
+To index a document, we need to specify four pieces of information: index, type, id and a document body. This is done by
+constructing an associative array of key:value pairs.  The request body is itself an associative array with key:value pairs
+corresponding to the data in your document:
+
+[source,php]
+----------------------------
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id',
+    'body' => ['testField' => 'abc']
+];
+
+$response = $client->index($params);
+print_r($response);
+----------------------------
+
+The response that you get back indicates the document was created in the index that you specified.  The response is an
+associative array containing a decoded version of the JSON that Elasticsearch returns:
+
+[source,php]
+----------------------------
+Array
+(
+    [_index] => my_index
+    [_type] => my_type
+    [_id] => my_id
+    [_version] => 1
+    [created] => 1
+)
+
+----------------------------
+
+=== Get a document
+
+Let's get the document that we just indexed.  This will simply return the document:
+
+[source,php]
+----------------------------
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id'
+];
+
+$response = $client->get($params);
+print_r($response);
+----------------------------
+
+The response contains some metadata (index, type, etc) as well as a `_source` field...this is the original document
+that you sent to Elasticsearch.
+
+[source,php]
+----------------------------
+Array
+(
+    [_index] => my_index
+    [_type] => my_type
+    [_id] => my_id
+    [_version] => 1
+    [found] => 1
+    [_source] => Array
+        (
+            [testField] => abc
+        )
+
+)
+----------------------------
+
+=== Search for a document
+
+Searching is a hallmark of elasticsearch, so let's perform a search.  We are going to use the Match query as a demonstration:
+
+[source,php]
+----------------------------
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => [
+        'query' => [
+            'match' => [
+                'testField' => 'abc'
+            ]
+        ]
+    ]
+];
+
+$response = $client->search($params);
+print_r($response);
+----------------------------
+
+The response is a little different from the previous responses.  We see some metadata (`took`, `timed_out`, etc) and
+an array named `hits`.  This represents your search results.  Inside of `hits` is another array named `hits`, which contains
+individual search results:
+
+[source,php]
+----------------------------
+Array
+(
+    [took] => 1
+    [timed_out] =>
+    [_shards] => Array
+        (
+            [total] => 5
+            [successful] => 5
+            [failed] => 0
+        )
+
+    [hits] => Array
+        (
+            [total] => 1
+            [max_score] => 0.30685282
+            [hits] => Array
+                (
+                    [0] => Array
+                        (
+                            [_index] => my_index
+                            [_type] => my_type
+                            [_id] => my_id
+                            [_score] => 0.30685282
+                            [_source] => Array
+                                (
+                                    [testField] => abc
+                                )
+                        )
+                )
+        )
+)
+----------------------------
+
+=== Delete a document
+
+Alright, let's go ahead and delete the document that we added previously:
+
+[source,php]
+----------------------------
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'id' => 'my_id'
+];
+
+$response = $client->delete($params);
+print_r($response);
+----------------------------
+
+You'll notice this is identical syntax to the `get` syntax.  The only difference is the operation: `delete` instead of
+`get`.  The response will confirm the document was deleted:
+
+[source,php]
+----------------------------
+Array
+(
+    [found] => 1
+    [_index] => my_index
+    [_type] => my_type
+    [_id] => my_id
+    [_version] => 2
+)
+----------------------------
+
+
+=== Delete an index
+
+Due to the dynamic nature of elasticsearch, the first document we added automatically built an index with some default settings.  Let's delete that index because we want to specify our own settings later:
+
+[source,php]
+----------------------------
+$deleteParams = [
+    'index' => 'my_index'
+];
+$response = $client->indices()->delete($deleteParams);
+print_r($response);
+----------------------------
+
+The response:
+
+
+[source,php]
+----------------------------
+Array
+(
+    [acknowledged] => 1
+)
+----------------------------
+
+=== Create an index
+
+Now that we are starting fresh (no data or index), let's add a new index with some custom settings:
+
+[source,php]
+----------------------------
+$params = [
+    'index' => 'my_index',
+    'body' => [
+        'settings' => [
+            'number_of_shards' => 2,
+            'number_of_replicas' => 0
+        ]
+    ]
+];
+
+$response = $client->indices()->create($params);
+print_r($response);
+----------------------------
+
+Elasticsearch will now create that index with your chosen settings, and return an acknowledgement:
+
+[source,php]
+----------------------------
+Array
+(
+    [acknowledged] => 1
+)
+----------------------------
+
+=== Wrap up
+
+That was just a crash-course overview of the client and it's syntax.  If you are familiar with elasticsearch, you'll
+notice that the methods are named just like REST endpoints.
+
+You'll also notice that the client is configured in a manner that facilitates easy discovery via your IDE.  All core
+actions are available under the `$client` object (indexing, searching, getting, etc).  Index and cluster management
+are located under the `$client->indices()` and `$client->cluster()` objects, respectively.
+
+Check out the rest of the Documentation to see how the entire client works.
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/search-operations.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/search-operations.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..d45ca847be25736173e85a8ad5da9d0808266264
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/search-operations.asciidoc
@@ -0,0 +1,270 @@
+== Search Operations
+
+Well...it isn't called elasticsearch for nothing!  Let's talk about search operations in the client.
+
+The client gives you full access to every query and parameter exposed by the REST API, following the naming scheme as
+much as possible. Let's look at a few examples so you can become familiar with the syntax.
+
+=== Match Query
+
+Here is a standard curl for a Match query:
+
+[source,shell]
+----
+curl -XGET 'localhost:9200/my_index/my_type/_search' -d '{
+    "query" : {
+        "match" : {
+            "testField" : "abc"
+        }
+    }
+}'
+----
+{zwsp} +
+
+And here is the same query constructed in the client:
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => [
+        'query' => [
+            'match' => [
+                'testField' => 'abc'
+            ]
+        ]
+    ]
+];
+
+$results = $client->search($params);
+----
+{zwsp} +
+
+Notice how the structure and layout of the PHP array is identical to that of the JSON request body.  This makes it very
+simple to convert JSON examples into PHP.  A quick method to check your PHP array (for more complex examples) is to
+encode it back to JSON and check by eye:
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => [
+        'query' => [
+            'match' => [
+                'testField' => 'abc'
+            ]
+        ]
+    ]
+];
+
+print_r(json_encode($params['body']));
+
+
+{"query":{"match":{"testField":"abc"}}}
+----
+{zwsp} +
+
+
+.Using Raw JSON
+****
+Sometimes it is convenient to use raw JSON for testing purposes, or when migrating from a different system.  You can
+use raw JSON as a string in the body, and the client will detect this automatically:
+
+[source,php]
+----
+$json = '{
+    "query" : {
+        "match" : {
+            "testField" : "abc"
+        }
+    }
+}';
+
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => $json
+];
+
+$results = $client->search($params);
+----
+****
+{zwsp} +
+
+Search results follow the same format as Elasticsearch search response, the only difference is that the JSON response is
+serialized back into PHP arrays. Working with the search results is as simple as iterating over the array values:
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => [
+        'query' => [
+            'match' => [
+                'testField' => 'abc'
+            ]
+        ]
+    ]
+];
+
+$results = $client->search($params);
+
+$milliseconds = $results['took'];
+$maxScore     = $results['hits']['max_score'];
+
+$score = $results['hits']['hits'][0]['_score'];
+$doc   = $results['hits']['hits'][0]['_source'];
+----
+{zwsp} +
+
+=== Bool Queries
+
+Bool queries can be easily constructed using the client. For example, this query:
+[source,shell]
+----
+curl -XGET 'localhost:9200/my_index/my_type/_search' -d '{
+    "query" : {
+        "bool" : {
+            "must": [
+                {
+                    "match" : { "testField" : "abc" }
+                },
+                {
+                    "match" : { "testField2" : "xyz" }
+                }
+            ]
+        }
+    }
+}'
+----
+{zwsp} +
+
+Would be structured like this (Note the position of the square brackets):
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => [
+        'query' => [
+            'bool' => [
+                'must' => [
+                    [ 'match' => [ 'testField' => 'abc' ] ],
+                    [ 'match' => [ 'testField2' => 'xyz' ] ],
+                ]
+            ]
+        ]
+    ]
+];
+
+$results = $client->search($params);
+----
+{zwsp} +
+
+Notice that the `must` clause accepts an array of arrays.  This will be serialized into an array of JSON objects internally,
+so the final resulting output will be identical to the curl example.  For more details about arrays vs objects in PHP,
+see <<php_json_objects, Dealing with JSON Arrays and Objects in PHP>>.
+
+=== A more complicated example
+
+Let's construct a slightly more complicated example: a boolean query that contains both a filter and a query.
+This is a very common activity in elasticsearch queries, so it will be a good demonstration.
+
+The curl version of the query:
+
+[source,shell]
+----
+curl -XGET 'localhost:9200/my_index/my_type/_search' -d '{
+    "query" : {
+        "bool" : {
+            "filter" : {
+                "term" : { "my_field" : "abc" }
+            },
+            "query" : {
+                "match" : { "my_other_field" : "xyz" }
+            }
+        }
+    }
+}'
+----
+{zwsp} +
+
+And in PHP:
+
+[source,php]
+----
+$params = [
+    'index' => 'my_index',
+    'type' => 'my_type',
+    'body' => [
+        'query' => [
+            'bool' => [
+                'filter' => [
+                    'term' => [ 'my_field' => 'abc' ]
+                ],
+                'query' => [
+                    'match' => [ 'my_other_field' => 'xyz' ]
+                ]
+            ]
+        ]
+    ]
+];
+
+
+$results = $client->search($params);
+----
+{zwsp} +
+
+
+=== Scan/Scroll
+
+The Scan/Scroll functionality of Elasticsearch is similar to search, but different in many ways.  It works by executing a search query with a `search_type` of `scan`.  This initiates a "scan window" which will remain open for the duration of the scan.  This allows proper, consistent pagination.
+
+Once a scan window is open, you may start _scrolling) over that window.  This returns results matching your query...but returns them in random order.  This random ordering is important to performance.  Deep pagination is expensive when you need to maintain a sorted, consistent order across shards.  By removing this obligation, Scan/Scroll can efficiently export all the data from your index.
+
+This is an example which can be used as a template for more advanced operations:
+
+[source,php]
+----
+$client = ClientBuilder::create()->build();
+$params = [
+    "search_type" => "scan",    // use search_type=scan
+    "scroll" => "30s",          // how long between scroll requests. should be small!
+    "size" => 50,               // how many results *per shard* you want back
+    "index" => "my_index",
+    "body" => [
+        "query" => [
+            "match_all" => []
+        ]
+    ]
+];
+
+$docs = $client->search($params);   // Execute the search
+$scroll_id = $docs['_scroll_id'];   // The response will contain no results, just a _scroll_id
+
+// Now we loop until the scroll "cursors" are exhausted
+while (\true) {
+
+    // Execute a Scroll request
+    $response = $client->scroll([
+            "scroll_id" => $scroll_id,  //...using our previously obtained _scroll_id
+            "scroll" => "30s"           // and the same timeout window
+        ]
+    );
+
+    // Check to see if we got any search hits from the scroll
+    if (count($response['hits']['hits']) > 0) {
+        // If yes, Do Work Here
+
+        // Get new scroll_id
+        // Must always refresh your _scroll_id!  It can change sometimes
+        $scroll_id = $response['_scroll_id'];
+    } else {
+        // No results, scroll cursor is empty.  You've exported all the data
+        break;
+    }
+}
+----
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/security.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/security.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..b4484fbe2dc5416952b1103d8ba61ee294561723
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/security.asciidoc
@@ -0,0 +1,115 @@
+
+== Security
+
+The Elasticsearch-PHP client supports two security features: HTTP Authentication and SSL encryption.
+
+=== HTTP Authentication
+
+If your Elasticsearch server is protected by HTTP Authentication, you need to provide the credentials to ES-PHP so
+that requests can be authenticated server-side.  Authentication credentials are provided as part of the host array
+when instantiating the client:
+
+[source,php]
+----
+$hosts = [
+    'http://user:pass@localhost:9200',       // HTTP Basic Authentication
+    'http://user2:pass2@other-host.com:9200' // Different credentials on different host
+];
+
+$client = ClientBuilder::create()
+                    ->setHosts($hosts)
+                    ->build();
+----
+
+Credentials are provided per-host, which allows each host to have their own set of credentials.  All requests sent to the
+cluster will use the appropriate credentials depending on the node being talked to.
+
+=== SSL Encryption
+
+Configuring SSL is a little more complex.  You need to identify if your certificate has been signed by a public
+Certificate Authority (CA), or if it is a self-signed certificate.
+
+[NOTE]
+.A note on libcurl version
+=================
+If you believe the client is configured to correctly use SSL, but it simply is not working, check your libcurl
+version.  On certain platforms, various features may or may not be available depending on version number of libcurl.
+For example, the `--cacert` option was not added to the OSX version of libcurl until version 7.37.1.  The `--cacert`
+option is equivalent to PHP's `CURLOPT_CAINFO` constant, meaning that custom certificate paths will not work on lower
+versions.
+
+If you are encountering problems, update your libcurl version and/or check the http://curl.haxx.se/changes.html[curl changelog].
+=================
+
+==== Public CA Certificates
+
+If your certificate has been signed by a public Certificate Authority and your server has up-to-date root certificates,
+you only need to use `https` in the host path.  The client will automatically verify SSL certificates:
+
+[source,php]
+----
+$hosts = [
+    'https://localhost:9200' <1>
+];
+
+$client = ClientBuilder::create()
+                    ->setHosts($hosts)
+                    ->build();
+----
+<1> Note that `https` is used, not `http`
+
+
+If your server has out-dated root certificates, you may need to use a certificate bundle.  For PHP clients, the best
+way is to use https://github.com/Kdyby/CurlCaBundle[Kdyby/CurlCaBundle].  Once installed, you need to tell the client to
+use your certificates instead of the system-wide bundle.  To do this, specify the path to verify:
+
+
+[source,php]
+----
+$hosts = ['https://localhost:9200'];
+$caBundle = \Kdyby\CurlCaBundle\CertificateHelper::getCaInfoFile();
+
+$client = ClientBuilder::create()
+                    ->setHosts($hosts)
+                    ->setSSLVerification($caBundle)
+                    ->build();
+----
+
+==== Self-signed Certificates
+
+Self-signed certificates are certs that have not been signed by a public CA.  They are signed by your own organization.
+Self-signed certificates are often used for internal purposes, when you can securely spread the root certificate
+yourself.  It should not be used when being exposed to public consumers, since this leaves the client vulnerable to
+man-in-the-middle attacks.
+
+If you are using a self-signed certificate, you need to provide the certificate to the client.  This is the same syntax
+as specifying a new root bundle, but instead you point to your certificate:
+
+[source,php]
+----
+$hosts = ['https://localhost:9200'];
+$myCert = 'path/to/cacert.pem';
+
+$client = ClientBuilder::create()
+                    ->setHosts($hosts)
+                    ->setSSLVerification($myCert)
+                    ->build();
+----
+
+
+=== Using Authentication with SSL
+
+It is possible to use HTTP authentication with SSL.  Simply specify `https` in the URI, configure SSL settings as
+required and provide authentication credentials.  For example, this snippet will authenticate using Basic HTTP auth
+and a self-signed certificate:
+
+[source,php]
+----
+$hosts = ['https://user:pass@localhost:9200'];
+$myCert = 'path/to/cacert.pem';
+
+$client = ClientBuilder::create()
+                    ->setHosts($hosts)
+                    ->setSSLVerification($myCert)
+                    ->build();
+----
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/selectors.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/selectors.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..f091c1f603222c923db88bf5769e2149c2382207
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/selectors.asciidoc
@@ -0,0 +1,110 @@
+
+== Selectors
+
+The connection pool maintains the list of connections, and decides when nodes should transition from alive to dead (and
+vice versa).  It has no logic to choose connections, however.  That job belongs to the Selector class.
+
+The selector's job is to return a single connection from a provided array of connections.  Like the Connection Pool,
+there are several implementations to choose from.
+
+=== RoundRobinSelector (Default)
+
+This selector returns connections in a round-robin fashion.  Node #1 is selected on the first request, Node #2 on
+the second request, etc.  This ensures an even load of traffic across your cluster.  Round-robin'ing happens on a
+per-request basis (e.g. sequential requests go to different nodes).
+
+The `RoundRobinSelector` is default, but if you wish to explicitily configure it you can do:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setSelector('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+            ->build();
+----
+
+Note that the implementation is specified via a namespace path to the class.
+
+=== StickyRoundRobinSelector
+
+This selector is "sticky", in that it prefers to reuse the same connection repeatedly.  For example, Node #1 is chosen
+on the first request.  Node #1 will continue to be re-used for each subsequent request until that node fails.  Upon failure,
+the selector will round-robin to the next available node, then "stick" to that node.
+
+This is an ideal strategy for many PHP scripts.  Since PHP scripts are shared-nothing and tend to exit quickly, creating
+new connections for each request is often a sub-optimal strategy and introduces a lot of overhead.  Instead, it is
+better to "stick" to a single connection for the duration of the script.
+
+By default, this selector will randomize the hosts upon initialization, which will still guarantee an even distribution
+of load across the cluster.  It changes the round-robin dynamics from per-request to per-script.
+
+If you are using <<_future_mode>>, the "sticky" behavior of this selector will be non-ideal, since all parallel requests
+will go to the same node instead of multiple nodes in your cluster.  When using future mode, the default `RoundRobinSelector`
+should be preferred.
+
+If you wish to use this selector, you may do so with:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setSelector('\Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector')
+            ->build();
+----
+
+Note that the implementation is specified via a namespace path to the class.
+
+=== RandomSelector
+
+This selector simply returns a random node, regardless of state.  It is generally just for testing.
+
+If you wish to use this selector, you may do so with:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setSelector('\Elasticsearch\ConnectionPool\Selectors\RandomSelector')
+            ->build();
+----
+
+Note that the implementation is specified via a namespace path to the class.
+
+=== Custom Selector
+
+You can implement your own custom selector.  Custom selectors must implement `SelectorInterface`
+
+[source,php]
+----
+namespace MyProject\Selectors;
+
+use Elasticsearch\Connections\ConnectionInterface;
+use Elasticsearch\ConnectionPool\Selectors\SelectorInterface
+
+class MyCustomSelector implements SelectorInterface
+{
+
+    /**
+     * Selects the first connection
+     *
+     * @param array $connections Array of Connection objects
+     *
+     * @return ConnectionInterface
+     */
+    public function select($connections)
+    {
+        // code here
+    }
+
+}
+----
+{zwsp} +
+
+You can then use your custom selector either via object injection or namespace instantiation:
+
+[source,php]
+----
+$mySelector = new MyCustomSelector();
+
+$client = ClientBuilder::create()
+            ->setSelector($mySelector)                             // object injection
+            ->setSelector('\MyProject\Selectors\FirstSelector')    // or namespace
+            ->build();
+----
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/docs/serializers.asciidoc b/apps/maarch_entreprise/tools/elasticsearch-php/docs/serializers.asciidoc
new file mode 100644
index 0000000000000000000000000000000000000000..4b90fd530e44e435f9bb1216068230f44677d17f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/docs/serializers.asciidoc
@@ -0,0 +1,167 @@
+
+== Serializers
+
+The client has three serializers available.  You will most likely never need
+to change the serializer, unless you have special requirements or are
+implementing a new protocol.
+
+The job of the serializer is to encode the outgoing request body and decode
+the incoming response body.  In 99% of cases, this is a simple conversion
+to/from JSON.
+
+The default serializer is the `SmartSerializer`
+
+=== SmartSerializer
+==== Serialize()
+The `SmartSerializer` inspects the data to be encoded.  If the request body
+is provided as a string, it is passed directly to Elasticsearch as a string.
+This allows users to provide raw JSON, or raw strings for certain endpoints that
+dont have structure (such as the Analyze endpoint).
+
+If the data is an array, it is converted to json.  If the data provided was an
+empty array, the serializer manually converts the JSON from an empty array (`[]`)
+to an empty object (`{}`) so that it is valid JSON for Elasticsearch request
+bodies.
+
+==== Deserialize()
+When decoding the response body, the `SmartSerializer` introspects the
+`content_type` headers to determine the appropriate encoding.  If the data is
+encoded as JSON, it is decoded into an array using `json_decode`.  Otherwise,
+it is returned as a string.
+
+This functionality is required to cooperate with endpoints such as the `Cat`
+endpoints, which return tabular text instead of JSON.
+
+==== Selecting the SmartSerializer
+
+The SmartSerializer is selected by default, but if you wish to manually configure it for explicitness, you can
+do so by using the `setSerializer()` method on the ClientBuilder object:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setSerializer('\Elasticsearch\Serializers\SmartSerializer');
+            ->build();
+----
+
+Note that the serializer is configured by specifying a namespace path to the serializer.
+
+=== ArrayToJSONSerializer
+==== Serialize()
+The `ArrayToJSONSerializer` inspects the data to be encoded.  If the request body
+is provided as a string, it is passed directly to Elasticsearch as a string.
+This allows users to provide raw JSON, or raw strings for certain endpoints that
+dont have structure (such as the Analyze endpoint).
+
+If the data is an array, it is converted to json.  If the data provided was an
+empty array, the serializer manually converts the JSON from an empty array (`[]`)
+to an empty object (`{}`) so that it is valid JSON for Elasticsearch request
+bodies.
+
+==== Deserialize()
+When decoding the response body, everything is decoded to JSON from JSON.  If
+the data is not valid JSON, `null` will be returned.
+
+==== Selecting the ArrayToJSONSerializer
+
+You can select  `ArrayToJSONSerializer` by using the `setSerializer()` method on the ClientBuilder object:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setSerializer('\Elasticsearch\Serializers\ArrayToJSONSerializer');
+            ->build();
+----
+
+Note that the serializer is configured by specifying a namespace path to the serializer.
+
+=== EverythingToJSONSerializer
+==== Serialize()
+The `EverythingToJSONSerializer` tries to convert everything to JSON.
+
+If the data provided was an empty array, the serializer manually converts the
+JSON from an empty array (`[]`) to an empty object (`{}`) so that it is valid
+JSON for Elasticsearch request bodies.
+
+If the data was not an array and/or not convertible to JSON, the method returns
+`null`.
+
+==== Deserialize()
+When decoding the response body, everything is decoded to JSON from JSON.  If
+the data is not valid JSON, `null` will be returned.
+
+==== Selecting the EverythingToJSONSerializer
+
+You can select  `EverythingToJSONSerializer` by using the `setSerializer()` method on the ClientBuilder object:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setSerializer('\Elasticsearch\Serializers\EverythingToJSONSerializer');
+            ->build();
+----
+
+Note that the serializer is configured by specifying a namespace path to the serializer.
+
+=== Implementing your own Serializer
+If you want to use your own custom serializer, you need to implement the `SerializerInterface` interface.  Please
+keep in mind that the client uses a single Serializer object for all endpoints and all connections.
+
+
+[source,php]
+----
+class MyCustomSerializer implements SerializerInterface
+{
+
+    /**
+     * Serialize request body
+     *
+     * @param string|array $data Request body
+     *
+     * @return string
+     */
+    public function serialize($data)
+    {
+        // code here
+    }
+
+    /**
+     * Deserialize response body
+     *
+     * @param string $data Response body
+     * @param array  $headers Response Headers
+     *
+     * @return array|string
+     */
+    public function deserialize($data, $headers)
+    {
+        // code here
+    }
+}
+----
+{zwsp} +
+
+To then use your custom serializer, you can specify the namespace path in the `setSerializer()` method of the ClientBuilder
+object:
+
+[source,php]
+----
+$client = ClientBuilder::create()
+            ->setSerializer('\MyProject\Serializers\MyCustomSerializer');
+            ->build();
+----
+
+Alternatively, if your serializer has a constructor or further initialization that should occur before given to the
+client, you can instantiate an object and provide that instead:
+
+[source,php]
+----
+$mySerializer = new MyCustomSerializer($a, $b, $c);
+$mySerializer->setFoo("bar");
+
+$client = ClientBuilder::create()
+            ->setSerializer($mySerializer);
+            ->build();
+----
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/phpunit-integration.xml b/apps/maarch_entreprise/tools/elasticsearch-php/phpunit-integration.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e7cd6ddf33ee7e7c29207cdd587eb77777d33695
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/phpunit-integration.xml
@@ -0,0 +1,23 @@
+<phpunit
+        bootstrap="tests/bootstrap.php"
+        colors="true"
+        convertNoticesToExceptions="true"
+        convertWarningsToExceptions="true"
+        convertErrorsToExceptions="true"
+        syntaxCheck="true"
+        verbose="true"
+>
+    <php>
+        <env name="ES_TEST_HOST" value="http://localhost:9200"/>
+    </php>
+    <testsuites>
+        <testsuite>
+            <file>tests/Elasticsearch/Tests/YamlRunnerTest.php</file>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist>
+            <directory suffix=".php">src</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/phpunit.xml b/apps/maarch_entreprise/tools/elasticsearch-php/phpunit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..841f48eb3cf8ff6a4bcac113065f4214dd678277
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/phpunit.xml
@@ -0,0 +1,24 @@
+<phpunit
+        bootstrap="tests/bootstrap.php"
+        colors="true"
+        convertNoticesToExceptions="true"
+        convertWarningsToExceptions="true"
+        convertErrorsToExceptions="true"
+        syntaxCheck="true"
+        verbose="true"
+>
+    <php>
+        <env name="ES_TEST_HOST" value="http://localhost:9200"/>
+    </php>
+    <testsuites>
+        <testsuite>
+            <directory>tests</directory>
+            <exclude>tests/Elasticsearch/Tests/YamlRunnerTest.php</exclude>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist>
+            <directory suffix=".php">src</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Client.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Client.php
new file mode 100644
index 0000000000000000000000000000000000000000..bfd7712344a8cb9558b0a627dc79dd1b41303dd0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Client.php
@@ -0,0 +1,1507 @@
+<?php
+
+namespace Elasticsearch;
+
+use Elasticsearch\Common\Exceptions\BadMethodCallException;
+use Elasticsearch\Common\Exceptions\InvalidArgumentException;
+use Elasticsearch\Common\Exceptions\NoNodesAvailableException;
+use Elasticsearch\Common\Exceptions\BadRequest400Exception;
+use Elasticsearch\Common\Exceptions\Missing404Exception;
+use Elasticsearch\Common\Exceptions\TransportException;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Namespaces\CatNamespace;
+use Elasticsearch\Namespaces\ClusterNamespace;
+use Elasticsearch\Namespaces\IndicesNamespace;
+use Elasticsearch\Namespaces\IngestNamespace;
+use Elasticsearch\Namespaces\NamespaceBuilderInterface;
+use Elasticsearch\Namespaces\NodesNamespace;
+use Elasticsearch\Namespaces\SnapshotNamespace;
+use Elasticsearch\Namespaces\BooleanRequestWrapper;
+use Elasticsearch\Namespaces\TasksNamespace;
+
+/**
+ * Class Client
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Client
+{
+    /**
+     * @var Transport
+     */
+    public $transport;
+
+    /**
+     * @var array
+     */
+    protected $params;
+
+    /**
+     * @var IndicesNamespace
+     */
+    protected $indices;
+
+    /**
+     * @var ClusterNamespace
+     */
+    protected $cluster;
+
+    /**
+     * @var NodesNamespace
+     */
+    protected $nodes;
+
+    /**
+     * @var SnapshotNamespace
+     */
+    protected $snapshot;
+
+    /**
+     * @var CatNamespace
+     */
+    protected $cat;
+
+    /**
+     * @var IngestNamespace
+     */
+    protected $ingest;
+
+    /**
+     * @var TasksNamespace
+     */
+    protected $tasks;
+
+    /** @var  callback */
+    protected $endpoints;
+
+    /** @var  NamespaceBuilderInterface[] */
+    protected $registeredNamespaces = [];
+
+    /**
+     * Client constructor
+     *
+     * @param Transport $transport
+     * @param callable $endpoint
+     * @param AbstractNamespace[] $registeredNamespaces
+     */
+    public function __construct(Transport $transport, callable $endpoint, array $registeredNamespaces)
+    {
+        $this->transport = $transport;
+        $this->endpoints = $endpoint;
+        $this->indices   = new IndicesNamespace($transport, $endpoint);
+        $this->cluster   = new ClusterNamespace($transport, $endpoint);
+        $this->nodes     = new NodesNamespace($transport, $endpoint);
+        $this->snapshot  = new SnapshotNamespace($transport, $endpoint);
+        $this->cat       = new CatNamespace($transport, $endpoint);
+        $this->ingest    = new IngestNamespace($transport, $endpoint);
+        $this->tasks     = new TasksNamespace($transport, $endpoint);
+        $this->registeredNamespaces = $registeredNamespaces;
+    }
+
+    /**
+     * @param $params
+     * @return array
+     */
+    public function info($params = [])
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Info $endpoint */
+        $endpoint = $endpointBuilder('Info');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * @param $params array Associative array of parameters
+     *
+     * @return bool
+     */
+    public function ping($params = [])
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Ping $endpoint */
+        $endpoint = $endpointBuilder('Ping');
+        $endpoint->setParams($params);
+
+        try {
+            $this->performRequest($endpoint);
+        } catch (Missing404Exception $exception) {
+            return false;
+        } catch (TransportException $exception) {
+            return false;
+        } catch (NoNodesAvailableException $exception) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * $params['id']              = (string) The document ID (Required)
+     *        ['index']           = (string) The name of the index (Required)
+     *        ['type']            = (string) The type of the document (use `_all` to fetch the first document matching the ID across all types) (Required)
+     *        ['ignore_missing']  = ??
+     *        ['fields']          = (list) A comma-separated list of fields to return in the response
+     *        ['parent']          = (string) The ID of the parent document
+     *        ['preference']      = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['realtime']        = (boolean) Specify whether to perform the operation in realtime or search mode
+     *        ['refresh']         = (boolean) Refresh the shard containing the document before performing the operation
+     *        ['routing']         = (string) Specific routing value
+     *        ['_source']         = (list) True or false to return the _source field or not, or a list of fields to return
+     *        ['_source_exclude'] = (list) A list of fields to exclude from the returned _source field
+     *        ['_source_include'] = (list) A list of fields to extract and return from the _source field
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function get($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Get $endpoint */
+        $endpoint = $endpointBuilder('Get');
+        $endpoint->setID($id)
+                 ->setIndex($index)
+                 ->setType($type);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']             = (string) The document ID (Required)
+     *        ['index']          = (string) The name of the index (Required)
+     *        ['type']           = (string) The type of the document (use `_all` to fetch the first document matching the ID across all types) (Required)
+     *        ['ignore_missing'] = ??
+     *        ['parent']         = (string) The ID of the parent document
+     *        ['preference']     = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['realtime']       = (boolean) Specify whether to perform the operation in realtime or search mode
+     *        ['refresh']        = (boolean) Refresh the shard containing the document before performing the operation
+     *        ['routing']        = (string) Specific routing value
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getSource($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Get $endpoint */
+        $endpoint = $endpointBuilder('Get');
+        $endpoint->setID($id)
+                 ->setIndex($index)
+                 ->setType($type)
+                 ->returnOnlySource();
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']           = (string) The document ID (Required)
+     *        ['index']        = (string) The name of the index (Required)
+     *        ['type']         = (string) The type of the document (Required)
+     *        ['consistency']  = (enum) Specific write consistency setting for the operation
+     *        ['parent']       = (string) ID of parent document
+     *        ['refresh']      = (boolean) Refresh the index after performing the operation
+     *        ['replication']  = (enum) Specific replication type
+     *        ['routing']      = (string) Specific routing value
+     *        ['timeout']      = (time) Explicit operation timeout
+     *        ['version_type'] = (enum) Specific version type
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function delete($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+
+        $this->verifyNotNullOrEmpty("id", $id);
+        $this->verifyNotNullOrEmpty("type", $type);
+        $this->verifyNotNullOrEmpty("index", $index);
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Delete $endpoint */
+        $endpoint = $endpointBuilder('Delete');
+        $endpoint->setID($id)
+                 ->setIndex($index)
+                 ->setType($type);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     *
+     * $params['_source'] = (list) True or false to return the _source field or not, or a list of fields to return
+     *        ['_source_exclude'] = (array) A list of fields to exclude from the returned _source field
+     *        ['_source_include'] = (array) A list of fields to extract and return from the _source field
+     *        ['allow_no_indices'] = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['analyze_wildcard'] = (bool) Specify whether wildcard and prefix queries should be analyzed (default: false)
+     *        ['analyzer'] = (string) The analyzer to use for the query string
+     *        ['conflicts'] = (enum) What to do when the delete-by-query hits version conflicts?
+     *        ['default_operator'] = (enum) The default operator for query string query (AND or OR)
+     *        ['df'] = (string) The field to use as default where no field prefix is given in the query string
+     *        ['expand_wildcards'] = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *        ['from'] = (number) Starting offset (default: 0)
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['lenient'] = (bool) Specify whether format-based query failures (such as providing text to a numeric field) should be ignored
+     *        ['preference'] = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['q'] = (string) Query in the Lucene query string syntax
+     *        ['refresh'] = (bool) Should the effected indexes be refreshed?
+     *        ['request_cache'] = (bool) Specify if request cache should be used for this request or not, defaults to index level setting
+     *        ['requests_per_second'] = (number) The throttle for this request in sub-requests per second. -1 means no throttle.
+     *        ['routing'] = (array) A comma-separated list of specific routing values
+     *        ['scroll'] = (number) Specify how long a consistent view of the index should be maintained for scrolled search
+     *        ['scroll_size'] = (number) Size on the scroll request powering the update_by_query
+     *        ['search_timeout'] = (number) Explicit timeout for each search request. Defaults to no timeout.
+     *        ['search_type'] = (enum) Search operation type
+     *        ['size'] = (number) Number of hits to return (default: 10)
+     *        ['slices'] = (integer) The number of slices this task should be divided into. Defaults to 1 meaning the task isn't sliced into subtasks.
+     *        ['sort'] = (array) A comma-separated list of <field>:<direction> pairs
+     *        ['stats'] = (array) Specific 'tag' of the request for logging and statistical purposes
+     *        ['terminate_after'] = (number) The maximum number of documents to collect for each shard, upon reaching which the query execution will terminate early.
+     *        ['timeout'] = (number) Time each individual bulk request should wait for shards that are unavailable.
+     *        ['version'] = (bool) Specify whether to return document version as part of a hit
+     *        ['wait_for_active_shards'] = (string) Sets the number of shard copies that must be active before proceeding with the delete by query operation. Defaults to 1, meaning the primary shard only. Set to `all` for all shard copies, otherwise set to any non-negative value less than or equal to the total number of copies for the shard (number of replicas + 1)
+     *        ['wait_for_completion'] = (bool) Should the request should block until the delete-by-query is complete.
+     *
+     * @param array $params
+     *
+     * @return array
+     */
+    public function deleteByQuery($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $type = $this->extractArgument($params, 'type');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\DeleteByQuery $endpoint */
+        $endpoint = $endpointBuilder('DeleteByQuery');
+        $endpoint->setIndex($index)
+                ->setType($type)
+                ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of indices to restrict the results
+     *        ['type']               = (list) A comma-separated list of types to restrict the results
+     *        ['min_score']          = (number) Include only documents with a specific `_score` value in the result
+     *        ['preference']         = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['routing']            = (string) Specific routing value
+     *        ['source']             = (string) The URL-encoded query definition (instead of using the request body)
+     *        ['body']               = (array) A query to restrict the results (optional)
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function count($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Count $endpoint */
+        $endpoint = $endpointBuilder('Count');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of indices to restrict the results
+     *        ['type']               = (list) A comma-separated list of types to restrict the results
+     *        ['id']                 = (string) ID of document
+     *        ['ignore_unavailable'] = (boolean) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['preference']         = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['routing']            = (string) Specific routing value
+     *        ['allow_no_indices']   = (boolean) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['body']               = (array) A query to restrict the results (optional)
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['percolate_index']    = (string) The index to count percolate the document into. Defaults to index.
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *        ['version']            = (number) Explicit version number for concurrency control
+     *        ['version_type']       = (enum) Specific version type
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     *
+     * @deprecated
+     */
+    public function countPercolate($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type  = $this->extractArgument($params, 'type');
+        $id    = $this->extractArgument($params, 'id');
+        $body  = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\CountPercolate $endpoint */
+        $endpoint = $endpointBuilder('CountPercolate');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setID($id)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']        = (string) The name of the index with a registered percolator query (Required)
+     *        ['type']         = (string) The document type (Required)
+     *        ['prefer_local'] = (boolean) With `true`, specify that a local shard should be used if available, with `false`, use a random shard (default: true)
+     *        ['body']         = (array) The document (`doc`) to percolate against registered queries; optionally also a `query` to limit the percolation to specific registered queries
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     *
+     * @deprecated
+     */
+    public function percolate($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type  = $this->extractArgument($params, 'type');
+        $id    = $this->extractArgument($params, 'id');
+        $body  = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Percolate $endpoint */
+        $endpoint = $endpointBuilder('Percolate');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setID($id)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (string) Default index for items which don't provide one
+     *        ['type']               = (string) Default document type for items which don't provide one
+     *        ['ignore_unavailable'] = (boolean) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (boolean) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     *
+     * @deprecated
+     */
+    public function mpercolate($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\MPercolate $endpoint */
+        $endpoint = $endpointBuilder('MPercolate');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']            = (string) Default index for items which don't provide one
+     *        ['type']             = (string) Default document type for items which don't provide one
+     *        ['term_statistics']  = (boolean) Specifies if total term frequency and document frequency should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['field_statistics'] = (boolean) Specifies if document count, sum of document frequencies and sum of total term frequencies should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['fields']           = (list) A comma-separated list of fields to return. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['offsets']          = (boolean) Specifies if term offsets should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['positions']        = (boolean) Specifies if term positions should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['payloads']         = (boolean) Specifies if term payloads should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+     *        ['preference']       = (string) Specify the node or shard the operation should be performed on (default: random) .Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+     *        ['routing']          = (string) Specific routing value. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+     *        ['parent']           = (string) Parent id of documents. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+     *        ['realtime']         = (boolean) Specifies if request is real-time as opposed to near-real-time (default: true).
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function termvectors($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type  = $this->extractArgument($params, 'type');
+        $id    = $this->extractArgument($params, 'id');
+        $body  = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\TermVectors $endpoint */
+        $endpoint = $endpointBuilder('TermVectors');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setID($id)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']            = (string) Default index for items which don't provide one
+     *        ['type']             = (string) Default document type for items which don't provide one
+     *        ['ids']              = (list) A comma-separated list of documents ids. You must define ids as parameter or set \"ids\" or \"docs\" in the request body
+     *        ['term_statistics']  = (boolean) Specifies if total term frequency and document frequency should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['field_statistics'] = (boolean) Specifies if document count, sum of document frequencies and sum of total term frequencies should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['fields']           = (list) A comma-separated list of fields to return. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['offsets']          = (boolean) Specifies if term offsets should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['positions']        = (boolean) Specifies if term positions should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\"."
+     *        ['payloads']         = (boolean) Specifies if term payloads should be returned. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+     *        ['preference']       = (string) Specify the node or shard the operation should be performed on (default: random) .Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+     *        ['routing']          = (string) Specific routing value. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+     *        ['parent']           = (string) Parent id of documents. Applies to all returned documents unless otherwise specified in body \"params\" or \"docs\".
+     *        ['realtime']         = (boolean) Specifies if request is real-time as opposed to near-real-time (default: true).
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function mtermvectors($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type  = $this->extractArgument($params, 'type');
+        $body  = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\MTermVectors $endpoint */
+        $endpoint = $endpointBuilder('MTermVectors');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']         = (string) The document ID (Required)
+     *        ['index']      = (string) The name of the index (Required)
+     *        ['type']       = (string) The type of the document (use `_all` to fetch the first document matching the ID across all types) (Required)
+     *        ['parent']     = (string) The ID of the parent document
+     *        ['preference'] = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['realtime']   = (boolean) Specify whether to perform the operation in realtime or search mode
+     *        ['refresh']    = (boolean) Refresh the shard containing the document before performing the operation
+     *        ['routing']    = (string) Specific routing value
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array | boolean
+     */
+    public function exists($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+
+        //manually make this verbose so we can check status code
+        $params['client']['verbose'] = true;
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Exists $endpoint */
+        $endpoint = $endpointBuilder('Exists');
+        $endpoint->setID($id)
+                 ->setIndex($index)
+                 ->setType($type);
+        $endpoint->setParams($params);
+
+        return BooleanRequestWrapper::performRequest($endpoint, $this->transport);
+    }
+
+    /**
+     * $params['index']           = (string) The name of the index
+     *        ['type']            = (string) The type of the document
+     *        ['fields']          = (list) A comma-separated list of fields to return in the response
+     *        ['parent']          = (string) The ID of the parent document
+     *        ['preference']      = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['realtime']        = (boolean) Specify whether to perform the operation in realtime or search mode
+     *        ['refresh']         = (boolean) Refresh the shard containing the document before performing the operation
+     *        ['routing']         = (string) Specific routing value
+     *        ['body']            = (array) Document identifiers; can be either `docs` (containing full document information) or `ids` (when index and type is provided in the URL.
+     *        ['_source']         = (list) True or false to return the _source field or not, or a list of fields to return
+     *        ['_source_exclude'] = (list) A list of fields to exclude from the returned _source field
+     *        ['_source_include'] = (list) A list of fields to extract and return from the _source field
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function mget($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Mget $endpoint */
+        $endpoint = $endpointBuilder('Mget');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']       = (list) A comma-separated list of index names to use as default
+     *        ['type']        = (list) A comma-separated list of document types to use as default
+     *        ['search_type'] = (enum) Search operation type
+     *        ['body']        = (array|string) The request definitions (metadata-search request definition pairs), separated by newlines
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function msearch($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Msearch $endpoint */
+        $endpoint = $endpointBuilder('Msearch');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']        = (string) The name of the index (Required)
+     *        ['type']         = (string) The type of the document (Required)
+     *        ['id']           = (string) Specific document ID (when the POST method is used)
+     *        ['consistency']  = (enum) Explicit write consistency setting for the operation
+     *        ['parent']       = (string) ID of the parent document
+     *        ['refresh']      = (boolean) Refresh the index after performing the operation
+     *        ['replication']  = (enum) Specific replication type
+     *        ['routing']      = (string) Specific routing value
+     *        ['timeout']      = (time) Explicit operation timeout
+     *        ['timestamp']    = (time) Explicit timestamp for the document
+     *        ['ttl']          = (duration) Expiration time for the document
+     *        ['version']      = (number) Explicit version number for concurrency control
+     *        ['version_type'] = (enum) Specific version type
+     *        ['body']         = (array) The document
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function create($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Create $endpoint */
+        $endpoint = $endpointBuilder('Create');
+        $endpoint->setID($id)
+                 ->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']       = (string) Default index for items which don't provide one
+     *        ['type']        = (string) Default document type for items which don't provide one
+     *        ['consistency'] = (enum) Explicit write consistency setting for the operation
+     *        ['refresh']     = (boolean) Refresh the index after performing the operation
+     *        ['replication'] = (enum) Explicitly set the replication type
+     *        ['fields']      = (list) Default comma-separated list of fields to return in the response for updates
+     *        ['body']        = (array) The document
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function bulk($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Bulk $endpoint */
+        $endpoint = $endpointBuilder('Bulk');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']        = (string) The name of the index (Required)
+     *        ['type']         = (string) The type of the document (Required)
+     *        ['id']           = (string) Specific document ID (when the POST method is used)
+     *        ['consistency']  = (enum) Explicit write consistency setting for the operation
+     *        ['op_type']      = (enum) Explicit operation type
+     *        ['parent']       = (string) ID of the parent document
+     *        ['refresh']      = (boolean) Refresh the index after performing the operation
+     *        ['replication']  = (enum) Specific replication type
+     *        ['routing']      = (string) Specific routing value
+     *        ['timeout']      = (time) Explicit operation timeout
+     *        ['timestamp']    = (time) Explicit timestamp for the document
+     *        ['ttl']          = (duration) Expiration time for the document
+     *        ['version']      = (number) Explicit version number for concurrency control
+     *        ['version_type'] = (enum) Specific version type
+     *        ['body']         = (array) The document
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function index($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Index $endpoint */
+        $endpoint = $endpointBuilder('Index');
+        $endpoint->setID($id)
+                 ->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['refresh']             = (boolean) Should the effected indexes be refreshed?
+     *        ['timeout']             = (time) Time each individual bulk request should wait for shards that are unavailable
+     *        ['consistency']         = (enum) Explicit write consistency setting for the operation
+     *        ['wait_for_completion'] = (boolean) Should the request should block until the reindex is complete
+     *        ['requests_per_second'] = (float) The throttle for this request in sub-requests per second. 0 means set no throttle
+     *        ['body']                = (array) The search definition using the Query DSL and the prototype for the index request (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function reindex($params)
+    {
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+        /** @var \Elasticsearch\Endpoints\Reindex $endpoint */
+        $endpoint = $endpointBuilder('Reindex');
+        $endpoint->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']          = (list) A comma-separated list of index names to restrict the operation; use `_all` or empty string to perform the operation on all indices
+     *        ['ignore_indices'] = (enum) When performed on multiple indices, allows to ignore `missing` ones
+     *        ['preference']     = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['routing']        = (string) Specific routing value
+     *        ['source']         = (string) The URL-encoded request definition (instead of using request body)
+     *        ['body']           = (array) The request definition
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function suggest($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Suggest $endpoint */
+        $endpoint = $endpointBuilder('Suggest');
+        $endpoint->setIndex($index)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']                       = (string) The document ID (Required)
+     *        ['index']                    = (string) The name of the index (Required)
+     *        ['type']                     = (string) The type of the document (Required)
+     *        ['analyze_wildcard']         = (boolean) Specify whether wildcards and prefix queries in the query string query should be analyzed (default: false)
+     *        ['analyzer']                 = (string) The analyzer for the query string query
+     *        ['default_operator']         = (enum) The default operator for query string query (AND or OR)
+     *        ['df']                       = (string) The default field for query string query (default: _all)
+     *        ['fields']                   = (list) A comma-separated list of fields to return in the response
+     *        ['lenient']                  = (boolean) Specify whether format-based query failures (such as providing text to a numeric field) should be ignored
+     *        ['lowercase_expanded_terms'] = (boolean) Specify whether query terms should be lowercased
+     *        ['parent']                   = (string) The ID of the parent document
+     *        ['preference']               = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['q']                        = (string) Query in the Lucene query string syntax
+     *        ['routing']                  = (string) Specific routing value
+     *        ['source']                   = (string) The URL-encoded query definition (instead of using the request body)
+     *        ['_source']                  = (list) True or false to return the _source field or not, or a list of fields to return
+     *        ['_source_exclude']          = (list) A list of fields to exclude from the returned _source field
+     *        ['_source_include']          = (list) A list of fields to extract and return from the _source field
+     *        ['body']                     = (string) The URL-encoded query definition (instead of using the request body)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function explain($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Explain $endpoint */
+        $endpoint = $endpointBuilder('Explain');
+        $endpoint->setID($id)
+                 ->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']                    = (list) A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices
+     *        ['type']                     = (list) A comma-separated list of document types to search; leave empty to perform the operation on all types
+     *        ['analyzer']                 = (string) The analyzer to use for the query string
+     *        ['analyze_wildcard']         = (boolean) Specify whether wildcard and prefix queries should be analyzed (default: false)
+     *        ['default_operator']         = (enum) The default operator for query string query (AND or OR)
+     *        ['df']                       = (string) The field to use as default where no field prefix is given in the query string
+     *        ['explain']                  = (boolean) Specify whether to return detailed information about score computation as part of a hit
+     *        ['fields']                   = (list) A comma-separated list of fields to return as part of a hit
+     *        ['from']                     = (number) Starting offset (default: 0)
+     *        ['ignore_indices']           = (enum) When performed on multiple indices, allows to ignore `missing` ones
+     *        ['indices_boost']            = (list) Comma-separated list of index boosts
+     *        ['lenient']                  = (boolean) Specify whether format-based query failures (such as providing text to a numeric field) should be ignored
+     *        ['lowercase_expanded_terms'] = (boolean) Specify whether query terms should be lowercased
+     *        ['preference']               = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['q']                        = (string) Query in the Lucene query string syntax
+     *        ['query_cache']              = (boolean) Enable query cache for this request
+     *        ['request_cache']            = (boolean) Enable request cache for this request
+     *        ['routing']                  = (list) A comma-separated list of specific routing values
+     *        ['scroll']                   = (duration) Specify how long a consistent view of the index should be maintained for scrolled search
+     *        ['search_type']              = (enum) Search operation type
+     *        ['size']                     = (number) Number of hits to return (default: 10)
+     *        ['sort']                     = (list) A comma-separated list of <field>:<direction> pairs
+     *        ['source']                   = (string) The URL-encoded request definition using the Query DSL (instead of using request body)
+     *        ['_source']                  = (list) True or false to return the _source field or not, or a list of fields to return
+     *        ['_source_exclude']          = (list) A list of fields to exclude from the returned _source field
+     *        ['_source_include']          = (list) A list of fields to extract and return from the _source field
+     *        ['stats']                    = (list) Specific 'tag' of the request for logging and statistical purposes
+     *        ['suggest_field']            = (string) Specify which field to use for suggestions
+     *        ['suggest_mode']             = (enum) Specify suggest mode
+     *        ['suggest_size']             = (number) How many suggestions to return in response
+     *        ['suggest_text']             = (text) The source text for which the suggestions should be returned
+     *        ['timeout']                  = (time) Explicit operation timeout
+     *        ['terminate_after']          = (number) The maximum number of documents to collect for each shard, upon reaching which the query execution will terminate early.
+     *        ['version']                  = (boolean) Specify whether to return document version as part of a hit
+     *        ['body']                     = (array|string) The search definition using the Query DSL
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function search($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Search $endpoint */
+        $endpoint = $endpointBuilder('Search');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices
+     *        ['type']               = (list) A comma-separated list of document types to search; leave empty to perform the operation on all types
+     *        ['preference']         = (string) Specify the node or shard the operation should be performed on (default: random)
+     *        ['routing']            = (string) Specific routing value
+     *        ['local']              = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function searchShards($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\SearchShards $endpoint */
+        $endpoint = $endpointBuilder('SearchShards');
+        $endpoint->setIndex($index)
+                 ->setType($type);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']                    = (list) A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices
+     *        ['type']                     = (list) A comma-separated list of document types to search; leave empty to perform the operation on all types
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function searchTemplate($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Search $endpoint */
+        $endpoint = $endpointBuilder('SearchTemplate');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['scroll_id'] = (string) The scroll ID for scrolled search
+     *        ['scroll']    = (duration) Specify how long a consistent view of the index should be maintained for scrolled search
+     *        ['body']      = (string) The scroll ID for scrolled search
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function scroll($params = array())
+    {
+        $scrollID = $this->extractArgument($params, 'scroll_id');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Scroll $endpoint */
+        $endpoint = $endpointBuilder('Scroll');
+        $endpoint->setScrollID($scrollID)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['scroll_id'] = (string) The scroll ID for scrolled search
+     *        ['scroll']    = (duration) Specify how long a consistent view of the index should be maintained for scrolled search
+     *        ['body']      = (string) The scroll ID for scrolled search
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function clearScroll($params = array())
+    {
+        $scrollID = $this->extractArgument($params, 'scroll_id');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Scroll $endpoint */
+        $endpoint = $endpointBuilder('Scroll');
+        $endpoint->setScrollID($scrollID)
+                 ->setBody($body)
+                 ->setClearScroll(true);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']                = (string) Document ID (Required)
+     *        ['index']             = (string) The name of the index (Required)
+     *        ['type']              = (string) The type of the document (Required)
+     *        ['consistency']       = (enum) Explicit write consistency setting for the operation
+     *        ['fields']            = (list) A comma-separated list of fields to return in the response
+     *        ['lang']              = (string) The script language (default: mvel)
+     *        ['parent']            = (string) ID of the parent document
+     *        ['refresh']           = (boolean) Refresh the index after performing the operation
+     *        ['replication']       = (enum) Specific replication type
+     *        ['retry_on_conflict'] = (number) Specify how many times should the operation be retried when a conflict occurs (default: 0)
+     *        ['routing']           = (string) Specific routing value
+     *        ['script']            = () The URL-encoded script definition (instead of using request body)
+     *        ['timeout']           = (time) Explicit operation timeout
+     *        ['timestamp']         = (time) Explicit timestamp for the document
+     *        ['ttl']               = (duration) Expiration time for the document
+     *        ['version_type']      = (number) Explicit version number for concurrency control
+     *        ['body']              = (array) The request definition using either `script` or partial `doc`
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function update($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Update $endpoint */
+        $endpoint = $endpointBuilder('Update');
+        $endpoint->setID($id)
+                 ->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']                    = (list) A comma-separated list of index names to search; use `_all` or
+     * empty string to perform the operation on all indices (Required)
+     *        ['type']                     = (list) A comma-separated list of document types to search; leave empty to
+     * perform the operation on all types
+     *        ['analyzer']                 = (string) The analyzer to use for the query string
+     *        ['analyze_wildcard']         = (boolean) Specify whether wildcard and prefix queries should be analyzed
+     * (default: false)
+     *        ['default_operator']         = (enum) The default operator for query string query (AND or OR) (AND,OR)
+     * (default: OR)
+     *        ['df']                       = (string) The field to use as default where no field prefix is given in the
+     * query string
+     *        ['explain']                  = (boolean) Specify whether to return detailed information about score
+     * computation as part of a hit
+     *        ['fields']                   = (list) A comma-separated list of fields to return as part of a hit
+     *        ['fielddata_fields']         = (list) A comma-separated list of fields to return as the field data
+     * representation of a field for each hit
+     *        ['from']                     = (number) Starting offset (default: 0)
+     *        ['ignore_unavailable']       = (boolean) Whether specified concrete indices should be ignored when
+     * unavailable (missing or closed)
+     *        ['allow_no_indices']         = (boolean) Whether to ignore if a wildcard indices expression resolves into
+     * no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['conflicts']                = (enum) What to do when the reindex hits version conflicts? (abort,proceed)
+     * (default: abort)
+     *        ['expand_wildcards']         = (enum) Whether to expand wildcard expression to concrete indices that are
+     * open, closed or both. (open,closed,none,all) (default: open)
+     *        ['lenient']                  = (boolean) Specify whether format-based query failures (such as providing
+     * text to a numeric field) should be ignored
+     *        ['lowercase_expanded_terms'] = (boolean) Specify whether query terms should be lowercased
+     *        ['preference']               = (string) Specify the node or shard the operation should be performed on
+     * (default: random)
+     *        ['q']                        = (string) Query in the Lucene query string syntax
+     *        ['routing']                  = (list) A comma-separated list of specific routing values
+     *        ['scroll']                   = (duration) Specify how long a consistent view of the index should be
+     * maintained for scrolled search
+     *        ['search_type']              = (enum) Search operation type (query_then_fetch,dfs_query_then_fetch)
+     *        ['search_timeout']           = (time) Explicit timeout for each search request. Defaults to no timeout.
+     *        ['size']                     = (number) Number of hits to return (default: 10)
+     *        ['sort']                     = (list) A comma-separated list of <field>:<direction> pairs
+     *        ['_source']                  = (list) True or false to return the _source field or not, or a list of
+     * fields to return
+     *        ['_source_exclude']          = (list) A list of fields to exclude from the returned _source field
+     *        ['_source_include']          = (list) A list of fields to extract and return from the _source field
+     *        ['terminate_after']          = (number) The maximum number of documents to collect for each shard, upon
+     * reaching which the query execution will terminate early.
+     *        ['stats']                    = (list) Specific 'tag' of the request for logging and statistical purposes
+     *        ['suggest_field']            = (string) Specify which field to use for suggestions
+     *        ['suggest_mode']             = (enum) Specify suggest mode (missing,popular,always) (default: missing)
+     *        ['suggest_size']             = (number) How many suggestions to return in response
+     *        ['suggest_text']             = (text) The source text for which the suggestions should be returned
+     *        ['timeout']                  = (time) Time each individual bulk request should wait for shards that are
+     * unavailable. (default: 1m)
+     *        ['track_scores']             = (boolean) Whether to calculate and return scores even if they are not used
+     * for sorting
+     *        ['version']                  = (boolean) Specify whether to return document version as part of a hit
+     *        ['version_type']             = (boolean) Should the document increment the version number (internal) on
+     * hit or not (reindex)
+     *        ['request_cache']            = (boolean) Specify if request cache should be used for this request or not,
+     * defaults to index level setting
+     *        ['refresh']                  = (boolean) Should the effected indexes be refreshed?
+     *        ['consistency']              = (enum) Explicit write consistency setting for the operation
+     * (one,quorum,all)
+     *        ['scroll_size']              = (integer) Size on the scroll request powering the update_by_query
+     *        ['wait_for_completion']      = (boolean) Should the request should block until the reindex is complete.
+     * (default: false)
+     *        ['body']                     = The search definition using the Query DSL
+     *
+     * @param array $params
+     *
+     * @return array
+     */
+    public function updateByQuery($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $body = $this->extractArgument($params, 'body');
+
+        $type = $this->extractArgument($params, 'type');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\UpdateByQuery $endpoint */
+        $endpoint = $endpointBuilder('UpdateByQuery');
+        $endpoint->setIndex($index)
+            ->setType($type)
+            ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']   = (string) The script ID (Required)
+     *        ['lang'] = (string) The script language (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getScript($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $lang = $this->extractArgument($params, 'lang');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Script\Get $endpoint */
+        $endpoint = $endpointBuilder('Script\Get');
+        $endpoint->setID($id)
+                 ->setLang($lang);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']   = (string) The script ID (Required)
+     *        ['lang'] = (string) The script language (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function deleteScript($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+        $lang = $this->extractArgument($params, 'lang');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Script\Delete $endpoint */
+        $endpoint = $endpointBuilder('Script\Delete');
+        $endpoint->setID($id)
+                 ->setLang($lang);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']   = (string) The script ID (Required)
+     *        ['lang'] = (string) The script language (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function putScript($params)
+    {
+        $id   = $this->extractArgument($params, 'id');
+        $lang = $this->extractArgument($params, 'lang');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Script\Put $endpoint */
+        $endpoint = $endpointBuilder('Script\Put');
+        $endpoint->setID($id)
+                 ->setLang($lang)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']   = (string) The search template ID (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getTemplate($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Template\Get $endpoint */
+        $endpoint = $endpointBuilder('Template\Get');
+        $endpoint->setID($id);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']   = (string) The search template ID (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function deleteTemplate($params)
+    {
+        $id = $this->extractArgument($params, 'id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Template\Delete $endpoint */
+        $endpoint = $endpointBuilder('Template\Delete');
+        $endpoint->setID($id);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']   = (string) The search template ID (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function putTemplate($params)
+    {
+        $id   = $this->extractArgument($params, 'id');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Template\Put $endpoint */
+        $endpoint = $endpointBuilder('Template\Put');
+        $endpoint->setID($id)
+            ->setBody($body)
+            ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of indices to restrict the results
+     *        ['fields']             = (list) A comma-separated list of fields for to get field statistics for (min value, max value, and more)
+     *        ['level']              = (enum) Defines if field stats should be returned on a per index level or on a cluster wide level
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function fieldStats($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\FieldStats $endpoint */
+        $endpoint = $endpointBuilder('FieldStats');
+        $endpoint->setIndex($index)
+            ->setBody($body)
+            ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['id']                 = (string) ID of the template to render
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function renderSearchTemplate($params = array())
+    {
+        $body = $this->extractArgument($params, 'body');
+        $id   = $this->extractArgument($params, 'id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\RenderSearchTemplate $endpoint */
+        $endpoint = $endpointBuilder('RenderSearchTemplate');
+        $endpoint->setBody($body)
+            ->setID($id);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * Operate on the Indices Namespace of commands
+     *
+     * @return IndicesNamespace
+     */
+    public function indices()
+    {
+        return $this->indices;
+    }
+
+    /**
+     * Operate on the Cluster namespace of commands
+     *
+     * @return ClusterNamespace
+     */
+    public function cluster()
+    {
+        return $this->cluster;
+    }
+
+    /**
+     * Operate on the Nodes namespace of commands
+     *
+     * @return NodesNamespace
+     */
+    public function nodes()
+    {
+        return $this->nodes;
+    }
+
+    /**
+     * Operate on the Snapshot namespace of commands
+     *
+     * @return SnapshotNamespace
+     */
+    public function snapshot()
+    {
+        return $this->snapshot;
+    }
+
+    /**
+     * Operate on the Cat namespace of commands
+     *
+     * @return CatNamespace
+     */
+    public function cat()
+    {
+        return $this->cat;
+    }
+
+    /**
+     * Operate on the Ingest namespace of commands
+     *
+     * @return IngestNamespace
+     */
+    public function ingest()
+    {
+        return $this->ingest;
+    }
+
+    /**
+     * Operate on the Tasks namespace of commands
+     *
+     * @return TasksNamespace
+     */
+    public function tasks()
+    {
+        return $this->tasks;
+    }
+
+    /**
+     * Catchall for registered namespaces
+     *
+     * @param $name
+     * @param $arguments
+     * @return Object
+     * @throws BadMethodCallException if the namespace cannot be found
+     */
+    public function __call($name, $arguments)
+    {
+        if (isset($this->registeredNamespaces[$name])) {
+            return $this->registeredNamespaces[$name];
+        }
+        throw new BadMethodCallException("Namespace [$name] not found");
+    }
+
+    /**
+     * @param array $params
+     * @param string $arg
+     *
+     * @return null|mixed
+     */
+    public function extractArgument(&$params, $arg)
+    {
+        if (is_object($params) === true) {
+            $params = (array) $params;
+        }
+
+        if (isset($params[$arg]) === true) {
+            $val = $params[$arg];
+            unset($params[$arg]);
+
+            return $val;
+        } else {
+            return null;
+        }
+    }
+
+    private function verifyNotNullOrEmpty($name, $var)
+    {
+        if ($var === null) {
+            throw new InvalidArgumentException("$name cannot be null.");
+        }
+
+        if (is_string($var)) {
+            if (strlen($var) === 0) {
+                throw new InvalidArgumentException("$name cannot be an empty string");
+            }
+        }
+
+        if (is_array($var)) {
+            if (strlen(implode("", $var)) === 0) {
+                throw new InvalidArgumentException("$name cannot be an array of empty strings");
+            }
+        }
+    }
+
+    /**
+     * @param $endpoint AbstractEndpoint
+     * 
+     * @throws \Exception
+     * @return array
+     */
+    private function performRequest(AbstractEndpoint $endpoint)
+    {
+        $promise =  $this->transport->performRequest(
+            $endpoint->getMethod(),
+            $endpoint->getURI(),
+            $endpoint->getParams(),
+            $endpoint->getBody(),
+            $endpoint->getOptions()
+        );
+
+        return $this->transport->resultOrFuture($promise, $endpoint->getOptions());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ClientBuilder.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ClientBuilder.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc36abaf832fa10bcc023e2b7c64007c96317e9f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ClientBuilder.php
@@ -0,0 +1,633 @@
+<?php
+
+namespace Elasticsearch;
+
+use Elasticsearch\Common\Exceptions\InvalidArgumentException;
+use Elasticsearch\Common\Exceptions\RuntimeException;
+use Elasticsearch\ConnectionPool\AbstractConnectionPool;
+use Elasticsearch\ConnectionPool\Selectors\SelectorInterface;
+use Elasticsearch\ConnectionPool\StaticNoPingConnectionPool;
+use Elasticsearch\Connections\Connection;
+use Elasticsearch\Connections\ConnectionFactory;
+use Elasticsearch\Connections\ConnectionFactoryInterface;
+use Elasticsearch\Namespaces\NamespaceBuilderInterface;
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\ConnectionPool\Selectors;
+use Elasticsearch\Serializers\SmartSerializer;
+use GuzzleHttp\Ring\Client\CurlHandler;
+use GuzzleHttp\Ring\Client\CurlMultiHandler;
+use GuzzleHttp\Ring\Client\Middleware;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+use Monolog\Logger;
+use Monolog\Handler\StreamHandler;
+use Monolog\Processor\IntrospectionProcessor;
+
+/**
+ * Class ClientBuilder
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+  */
+class ClientBuilder
+{
+    /** @var Transport */
+    private $transport;
+
+    /** @var callback */
+    private $endpoint;
+
+    /** @var NamespaceBuilderInterface[] */
+    private $registeredNamespacesBuilders = [];
+
+    /** @var  ConnectionFactoryInterface */
+    private $connectionFactory;
+
+    private $handler;
+
+    /** @var  LoggerInterface */
+    private $logger;
+
+    /** @var  LoggerInterface */
+    private $tracer;
+
+    /** @var string */
+    private $connectionPool = '\Elasticsearch\ConnectionPool\StaticNoPingConnectionPool';
+
+    /** @var  string */
+    private $serializer = '\Elasticsearch\Serializers\SmartSerializer';
+
+    /** @var  string */
+    private $selector = '\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector';
+
+    /** @var  array */
+    private $connectionPoolArgs = [
+        'randomizeHosts' => true
+    ];
+
+    /** @var array */
+    private $hosts;
+
+    /** @var array */
+    private $connectionParams;
+
+    /** @var  int */
+    private $retries;
+
+    /** @var bool */
+    private $sniffOnStart = false;
+
+    /** @var null|array  */
+    private $sslCert = null;
+
+    /** @var null|array  */
+    private $sslKey = null;
+
+    /** @var null|bool|string */
+    private $sslVerification = null;
+
+    /**
+     * @return ClientBuilder
+     */
+    public static function create()
+    {
+        return new static();
+    }
+
+    /**
+     * Build a new client from the provided config.  Hash keys
+     * should correspond to the method name e.g. ['connectionPool']
+     * corresponds to setConnectionPool().
+     *
+     * Missing keys will use the default for that setting if applicable
+     *
+     * Unknown keys will throw an exception by default, but this can be silenced
+     * by setting `quiet` to true
+     *
+     * @param array $config hash of settings
+     * @param bool $quiet False if unknown settings throw exception, true to silently
+     *                    ignore unknown settings
+     * @throws Common\Exceptions\RuntimeException
+     * @return \Elasticsearch\Client
+     */
+    public static function fromConfig($config, $quiet = false)
+    {
+        $builder = new self;
+        foreach ($config as $key => $value) {
+            $method = "set$key";
+            if (method_exists($builder, $method)) {
+                $builder->$method($value);
+                unset($config[$key]);
+            }
+        }
+
+        if ($quiet === false && count($config) > 0) {
+            $unknown = implode(array_keys($config));
+            throw new RuntimeException("Unknown parameters provided: $unknown");
+        }
+        return $builder->build();
+    }
+
+    /**
+     * @param array $singleParams
+     * @param array $multiParams
+     * @throws \RuntimeException
+     * @return callable
+     */
+    public static function defaultHandler($multiParams = [], $singleParams = [])
+    {
+        $future = null;
+        if (extension_loaded('curl')) {
+            $config = array_merge([ 'mh' => curl_multi_init() ], $multiParams);
+            if (function_exists('curl_reset')) {
+                $default = new CurlHandler($singleParams);
+                $future = new CurlMultiHandler($config);
+            } else {
+                $default = new CurlMultiHandler($config);
+            }
+        } else {
+            throw new \RuntimeException('Elasticsearch-PHP requires cURL, or a custom HTTP handler.');
+        }
+
+        return $future ? Middleware::wrapFuture($default, $future) : $default;
+    }
+
+    /**
+     * @param array $params
+     * @throws \RuntimeException
+     * @return CurlMultiHandler
+     */
+    public static function multiHandler($params = [])
+    {
+        if (function_exists('curl_multi_init')) {
+            return new CurlMultiHandler(array_merge([ 'mh' => curl_multi_init() ], $params));
+        } else {
+            throw new \RuntimeException('CurlMulti handler requires cURL.');
+        }
+    }
+
+    /**
+     * @return CurlHandler
+     * @throws \RuntimeException
+     */
+    public static function singleHandler()
+    {
+        if (function_exists('curl_reset')) {
+            return new CurlHandler();
+        } else {
+            throw new \RuntimeException('CurlSingle handler requires cURL.');
+        }
+    }
+
+    /**
+     * @param $path string
+     * @return \Monolog\Logger\Logger
+     */
+    public static function defaultLogger($path, $level = Logger::WARNING)
+    {
+        $log       = new Logger('log');
+        $handler   = new StreamHandler($path, $level);
+        $log->pushHandler($handler);
+
+        return $log;
+    }
+
+    /**
+     * @param \Elasticsearch\Connections\ConnectionFactoryInterface $connectionFactory
+     * @return $this
+     */
+    public function setConnectionFactory(ConnectionFactoryInterface $connectionFactory)
+    {
+        $this->connectionFactory = $connectionFactory;
+
+        return $this;
+    }
+
+    /**
+     * @param \Elasticsearch\ConnectionPool\AbstractConnectionPool|string $connectionPool
+     * @param array $args
+     * @throws \InvalidArgumentException
+     * @return $this
+     */
+    public function setConnectionPool($connectionPool, array $args = [])
+    {
+        if (is_string($connectionPool)) {
+            $this->connectionPool = $connectionPool;
+            $this->connectionPoolArgs = $args;
+        } elseif (is_object($connectionPool)) {
+            $this->connectionPool = $connectionPool;
+        } else {
+            throw new InvalidArgumentException("Serializer must be a class path or instantiated object extending AbstractConnectionPool");
+        }
+
+        return $this;
+    }
+
+    /**
+     * @param callable $endpoint
+     * @return $this
+     */
+    public function setEndpoint($endpoint)
+    {
+        $this->endpoint = $endpoint;
+
+        return $this;
+    }
+
+    /**
+     * @param NamespaceBuilderInterface $namespaceBuilder
+     * @return $this
+     */
+    public function registerNamespace(NamespaceBuilderInterface $namespaceBuilder)
+    {
+        $this->registeredNamespacesBuilders[] = $namespaceBuilder;
+
+        return $this;
+    }
+
+    /**
+     * @param \Elasticsearch\Transport $transport
+     * @return $this
+     */
+    public function setTransport($transport)
+    {
+        $this->transport = $transport;
+
+        return $this;
+    }
+
+    /**
+     * @param mixed $handler
+     * @return $this
+     */
+    public function setHandler($handler)
+    {
+        $this->handler = $handler;
+
+        return $this;
+    }
+
+    /**
+     * @param \Psr\Log\LoggerInterface $logger
+     * @return $this
+     */
+    public function setLogger($logger)
+    {
+        $this->logger = $logger;
+
+        return $this;
+    }
+
+    /**
+     * @param \Psr\Log\LoggerInterface $tracer
+     * @return $this
+     */
+    public function setTracer($tracer)
+    {
+        $this->tracer = $tracer;
+
+        return $this;
+    }
+
+    /**
+     * @param \Elasticsearch\Serializers\SerializerInterface|string $serializer
+     * @throws \InvalidArgumentException
+     * @return $this
+     */
+    public function setSerializer($serializer)
+    {
+        $this->parseStringOrObject($serializer, $this->serializer, 'SerializerInterface');
+
+        return $this;
+    }
+
+    /**
+     * @param array $hosts
+     * @return $this
+     */
+    public function setHosts($hosts)
+    {
+        $this->hosts = $hosts;
+
+        return $this;
+    }
+
+    /**
+     * @param array $params
+     * @return $this
+     */
+    public function setConnectionParams(array $params)
+    {
+        $this->connectionParams = $params;
+
+        return $this;
+    }
+
+    /**
+     * @param int $retries
+     * @return $this
+     */
+    public function setRetries($retries)
+    {
+        $this->retries = $retries;
+
+        return $this;
+    }
+
+    /**
+     * @param \Elasticsearch\ConnectionPool\Selectors\SelectorInterface|string $selector
+     * @throws \InvalidArgumentException
+     * @return $this
+     */
+    public function setSelector($selector)
+    {
+        $this->parseStringOrObject($selector, $this->selector, 'SelectorInterface');
+
+        return $this;
+    }
+
+    /**
+     * @param boolean $sniffOnStart
+     * @return $this
+     */
+    public function setSniffOnStart($sniffOnStart)
+    {
+        $this->sniffOnStart = $sniffOnStart;
+
+        return $this;
+    }
+
+    /**
+     * @param $cert
+     * @param null|string $password
+     * @return $this
+     */
+    public function setSSLCert($cert, $password = null)
+    {
+        $this->sslCert = [$cert, $password];
+
+        return $this;
+    }
+
+    /**
+     * @param $key
+     * @param null|string $password
+     * @return $this
+     */
+    public function setSSLKey($key, $password = null)
+    {
+        $this->sslKey = [$key, $password];
+
+        return $this;
+    }
+
+    /**
+     * @param bool|string $value
+     * @return $this
+     */
+    public function setSSLVerification($value = true)
+    {
+        $this->sslVerification = $value;
+
+        return $this;
+    }
+
+    /**
+     * @return Client
+     */
+    public function build()
+    {
+        $this->buildLoggers();
+
+        if (is_null($this->handler)) {
+            $this->handler = ClientBuilder::defaultHandler();
+        }
+
+        $sslOptions = null;
+        if (isset($this->sslKey)) {
+            $sslOptions['ssl_key'] = $this->sslKey;
+        }
+        if (isset($this->sslCert)) {
+            $sslOptions['cert'] = $this->sslCert;
+        }
+        if (isset($this->sslVerification)) {
+            $sslOptions['verify'] = $this->sslVerification;
+        }
+
+        if (!is_null($sslOptions)) {
+            $sslHandler = function (callable $handler, array $sslOptions) {
+                return function (array $request) use ($handler, $sslOptions) {
+                    // Add our custom headers
+                    foreach ($sslOptions as $key => $value) {
+                        $request['client'][$key] = $value;
+                    }
+
+                    // Send the request using the handler and return the response.
+                    return $handler($request);
+                };
+            };
+            $this->handler = $sslHandler($this->handler, $sslOptions);
+        }
+
+        if (is_null($this->serializer)) {
+            $this->serializer = new SmartSerializer();
+        } elseif (is_string($this->serializer)) {
+            $this->serializer = new $this->serializer;
+        }
+
+        if (is_null($this->connectionFactory)) {
+            if (is_null($this->connectionParams)) {
+                $this->connectionParams = [];
+            }
+            $this->connectionFactory = new ConnectionFactory($this->handler, $this->connectionParams, $this->serializer, $this->logger, $this->tracer);
+        }
+
+        if (is_null($this->hosts)) {
+            $this->hosts = $this->getDefaultHost();
+        }
+
+        if (is_null($this->selector)) {
+            $this->selector = new Selectors\RoundRobinSelector();
+        } elseif (is_string($this->selector)) {
+            $this->selector = new $this->selector;
+        }
+
+        $this->buildTransport();
+
+        if (is_null($this->endpoint)) {
+            $serializer = $this->serializer;
+
+            $this->endpoint = function ($class) use ($serializer) {
+                $fullPath = '\\Elasticsearch\\Endpoints\\' . $class;
+                if ($class === 'Bulk' || $class === 'Msearch' || $class === 'MPercolate') {
+                    return new $fullPath($serializer);
+                } else {
+                    return new $fullPath();
+                }
+            };
+        }
+
+        $registeredNamespaces = [];
+        foreach ($this->registeredNamespacesBuilders as $builder) {
+            /** @var $builder NamespaceBuilderInterface */
+            $registeredNamespaces[$builder->getName()] = $builder->getObject($this->transport, $this->serializer);
+        }
+
+        return $this->instantiate($this->transport, $this->endpoint, $registeredNamespaces);
+    }
+
+    /**
+     * @param Transport $transport
+     * @param callable $endpoint
+     * @param Object[] $registeredNamespaces
+     * @return Client
+     */
+    protected function instantiate(Transport $transport, callable $endpoint, array $registeredNamespaces)
+    {
+        return new Client($transport, $endpoint, $registeredNamespaces);
+    }
+
+    private function buildLoggers()
+    {
+        if (is_null($this->logger)) {
+            $this->logger = new NullLogger();
+        }
+
+        if (is_null($this->tracer)) {
+            $this->tracer = new NullLogger();
+        }
+    }
+
+    private function buildTransport()
+    {
+        $connections = $this->buildConnectionsFromHosts($this->hosts);
+
+        if (is_string($this->connectionPool)) {
+            $this->connectionPool = new $this->connectionPool(
+                $connections,
+                $this->selector,
+                $this->connectionFactory,
+                $this->connectionPoolArgs);
+        } elseif (is_null($this->connectionPool)) {
+            $this->connectionPool = new StaticNoPingConnectionPool(
+                $connections,
+                $this->selector,
+                $this->connectionFactory,
+                $this->connectionPoolArgs);
+        }
+
+        if (is_null($this->retries)) {
+            $this->retries = count($connections);
+        }
+
+        if (is_null($this->transport)) {
+            $this->transport = new Transport($this->retries, $this->sniffOnStart, $this->connectionPool, $this->logger);
+        }
+    }
+
+    private function parseStringOrObject($arg, &$destination, $interface)
+    {
+        if (is_string($arg)) {
+            $destination = new $arg;
+        } elseif (is_object($arg)) {
+            $destination = $arg;
+        } else {
+            throw new InvalidArgumentException("Serializer must be a class path or instantiated object implementing $interface");
+        }
+    }
+
+    /**
+     * @return array
+     */
+    private function getDefaultHost()
+    {
+        return ['localhost:9200'];
+    }
+
+    /**
+     * @param array $hosts
+     *
+     * @throws \InvalidArgumentException
+     * @return \Elasticsearch\Connections\Connection[]
+     */
+    private function buildConnectionsFromHosts($hosts)
+    {
+        if (is_array($hosts) === false) {
+            $this->logger->error("Hosts parameter must be an array of strings, or an array of Connection hashes.");
+            throw new InvalidArgumentException('Hosts parameter must be an array of strings, or an array of Connection hashes.');
+        }
+
+        $connections = [];
+        foreach ($hosts as $host) {
+            if (is_string($host)) {
+                $host = $this->prependMissingScheme($host);
+                $host = $this->extractURIParts($host);
+            } else if (is_array($host)) {
+                $host = $this->normalizeExtendedHost($host);
+            } else {
+                $this->logger->error("Could not parse host: ".print_r($host, true));
+                throw new RuntimeException("Could not parse host: ".print_r($host, true));
+            }
+            $connections[] = $this->connectionFactory->create($host);
+        }
+
+        return $connections;
+    }
+
+    /**
+     * @param $host
+     * @return array
+     */
+    private function normalizeExtendedHost($host) {
+        if (isset($host['host']) === false) {
+            $this->logger->error("Required 'host' was not defined in extended format: ".print_r($host, true));
+            throw new RuntimeException("Required 'host' was not defined in extended format: ".print_r($host, true));
+        }
+
+        if (isset($host['scheme']) === false) {
+            $host['scheme'] = 'http';
+        }
+        if (isset($host['port']) === false) {
+            $host['port'] = '9200';
+        }
+        return $host;
+    }
+
+    /**
+     * @param array $host
+     *
+     * @throws \InvalidArgumentException
+     * @return array
+     */
+    private function extractURIParts($host)
+    {
+        $parts = parse_url($host);
+
+        if ($parts === false) {
+            throw new InvalidArgumentException("Could not parse URI");
+        }
+
+        if (isset($parts['port']) !== true) {
+            $parts['port'] = 9200;
+        }
+
+        return $parts;
+    }
+
+    /**
+     * @param string $host
+     *
+     * @return string
+     */
+    private function prependMissingScheme($host)
+    {
+        if (!filter_var($host, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)) {
+            $host = 'http://' . $host;
+        }
+
+        return $host;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/EmptyLogger.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/EmptyLogger.php
new file mode 100644
index 0000000000000000000000000000000000000000..89ced833da357fb52c35b7029f2a14302d67fc3c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/EmptyLogger.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Elasticsearch\Common;
+
+use Psr\Log\AbstractLogger;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Class EmptyLogger
+ *
+ * Logger that doesn't do anything.  Similar to Monolog's NullHandler,
+ * but avoids the overhead of partially loading Monolog
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class EmptyLogger extends AbstractLogger implements LoggerInterface
+{
+    /**
+     * Logs with an arbitrary level.
+     *
+     * @param mixed $level
+     * @param string $message
+     * @param array $context
+     *
+     * @return null
+     */
+    public function log($level, $message, array $context = array())
+    {
+        return;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/AlreadyExpiredException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/AlreadyExpiredException.php
new file mode 100644
index 0000000000000000000000000000000000000000..411c70abb9b7e37ab70acca2fdbd5a5b70125dcd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/AlreadyExpiredException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * AlreadyExpiredException, thrown when a document has already expired
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class AlreadyExpiredException extends \Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/BadMethodCallException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/BadMethodCallException.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8dea6c66309e43243774fc44f9649d8f6028b25
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/BadMethodCallException.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * BadMethodCallException
+ *
+ * Denote problems with a method call (e.g. incorrect number of arguments)
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class BadMethodCallException extends \BadMethodCallException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/BadRequest400Exception.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/BadRequest400Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..1c652d78b9c54dff6bf586d63277cbd1d553664c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/BadRequest400Exception.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * BadRequest400Exception, thrown on 400 conflict http error
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class BadRequest400Exception extends \Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ClientErrorResponseException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ClientErrorResponseException.php
new file mode 100644
index 0000000000000000000000000000000000000000..844bbccaaa13134dde5dc6bfb78159e54415f318
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ClientErrorResponseException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * Class ClientErrorResponseException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ClientErrorResponseException extends TransportException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Conflict409Exception.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Conflict409Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..d7f10a47aac6146bd75c62cd26b3157a0e629be8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Conflict409Exception.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * Conflict409Exception, thrown on 409 conflict http error
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Conflict409Exception extends \Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/CouldNotConnectToHost.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/CouldNotConnectToHost.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1ccc22c9da7e9adf7c177361b3850abbbd28d43
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/CouldNotConnectToHost.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions\Curl;
+
+use Elasticsearch\Common\Exceptions\ElasticsearchException;
+use Elasticsearch\Common\Exceptions\TransportException;
+
+/**
+ * Class CouldNotConnectToHost
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions\Curl
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class CouldNotConnectToHost extends TransportException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/CouldNotResolveHostException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/CouldNotResolveHostException.php
new file mode 100644
index 0000000000000000000000000000000000000000..283afdf9dba2c5eeec63dba2b33be91ded7de44f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/CouldNotResolveHostException.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions\Curl;
+
+use Elasticsearch\Common\Exceptions\ElasticsearchException;
+use Elasticsearch\Common\Exceptions\TransportException;
+
+/**
+ * Class CouldNotResolveHostException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions\Curl
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+  */
+class CouldNotResolveHostException extends TransportException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/OperationTimeoutException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/OperationTimeoutException.php
new file mode 100644
index 0000000000000000000000000000000000000000..12c1722f1230b1a02d3a7a2d99b5f9d22780d5c5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Curl/OperationTimeoutException.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions\Curl;
+
+use Elasticsearch\Common\Exceptions\ElasticsearchException;
+use Elasticsearch\Common\Exceptions\TransportException;
+
+/**
+ * Class OperationTimeoutException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions\Curl
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+  */
+class OperationTimeoutException extends TransportException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ElasticsearchException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ElasticsearchException.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5cab88c52dd93f2be592fde6946dd32ad6dea5d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ElasticsearchException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * Generic Exception interface
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+interface ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Forbidden403Exception.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Forbidden403Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..2b84c64bcdcd968b4e28450b0a10ea264cbf1f75
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Forbidden403Exception.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * Forbidden403Exception
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Forbidden403Exception extends \Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/InvalidArgumentException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..65e932baf3f0ee67a6a44fde4856267d39eba772
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/InvalidArgumentException.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * InvalidArgumentException
+ *
+ * Denote invalid or incorrect argument values
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/MaxRetriesException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/MaxRetriesException.php
new file mode 100644
index 0000000000000000000000000000000000000000..15b28337d23cea6b58189401cea043ca3ac1be09
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/MaxRetriesException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * MaxRetriesException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class MaxRetriesException extends TransportException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Missing404Exception.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Missing404Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..76bc87a8d34d5ddbd74d676d43ea1e050b918793
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Missing404Exception.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * Missing404Exception
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Missing404Exception extends \Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoDocumentsToGetException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoDocumentsToGetException.php
new file mode 100644
index 0000000000000000000000000000000000000000..75beb9f590f3ca85035101d2a4a2a8ce4ebabbe6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoDocumentsToGetException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * NoDocumentsToGetException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class NoDocumentsToGetException extends ServerErrorResponseException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoNodesAvailableException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoNodesAvailableException.php
new file mode 100644
index 0000000000000000000000000000000000000000..63a1793274a7d8b7099a3e5bfd903bb3a37865c3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoNodesAvailableException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * NoNodesAvailableException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class NoNodesAvailableException extends \Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoShardAvailableException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoShardAvailableException.php
new file mode 100644
index 0000000000000000000000000000000000000000..71b9a4ade77981a17e70c87299d2f9e770985776
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/NoShardAvailableException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * NoShardAvailableException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class NoShardAvailableException extends ServerErrorResponseException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RequestTimeout408Exception.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RequestTimeout408Exception.php
new file mode 100644
index 0000000000000000000000000000000000000000..8b668a88dda69ec17e08632c6ef0877421b00cc3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RequestTimeout408Exception.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * RequestTimeout408Exception
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class RequestTimeout408Exception extends BadRequest400Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RoutingMissingException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RoutingMissingException.php
new file mode 100644
index 0000000000000000000000000000000000000000..efa3cbd901b0446351dd049e797c4e3b69239411
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RoutingMissingException.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * RoutingMissingException, thrown on when a routing value is required but
+ * not provided
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class RoutingMissingException extends ServerErrorResponseException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RuntimeException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RuntimeException.php
new file mode 100644
index 0000000000000000000000000000000000000000..2fc381a5f366bb8b447ecfe0168e544c40090ebb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/RuntimeException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * RuntimeException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class RuntimeException extends \RuntimeException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ScriptLangNotSupportedException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ScriptLangNotSupportedException.php
new file mode 100644
index 0000000000000000000000000000000000000000..255c3a55a3f50e04129bf0382ba117b89ba59de9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ScriptLangNotSupportedException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * ScriptLangNotSupportedException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ScriptLangNotSupportedException extends BadRequest400Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Serializer/JsonErrorException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Serializer/JsonErrorException.php
new file mode 100644
index 0000000000000000000000000000000000000000..626d4ae47e107405f2036b0e12eba4bb0d431644
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/Serializer/JsonErrorException.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions\Serializer;
+
+use Elasticsearch\Common\Exceptions\ElasticsearchException;
+
+/**
+ * Class JsonErrorException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions\Curl
+ * @author   Bez Hermoso <bezalelhermoso@gmail.com>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class JsonErrorException extends \Exception implements ElasticsearchException
+{
+    /**
+     * @var mixed
+     */
+    private $input;
+
+    /**
+     * @var mixed
+     */
+    private $result;
+
+    private static $messages = array(
+        JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
+        JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',
+        JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
+        JSON_ERROR_SYNTAX => 'Syntax error',
+        JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded',
+        JSON_ERROR_RECURSION => 'One or more recursive references in the value to be encoded',
+        JSON_ERROR_INF_OR_NAN => 'One or more NAN or INF values in the value to be encoded',
+        JSON_ERROR_UNSUPPORTED_TYPE => 'A value of a type that cannot be encoded was given',
+
+        // JSON_ERROR_* constant values that are available on PHP >= 7.0
+        9 => 'Decoding of value would result in invalid PHP property name', //JSON_ERROR_INVALID_PROPERTY_NAME
+        10 => 'Attempted to decode nonexistent UTF-16 code-point' //JSON_ERROR_UTF16
+    );
+
+    public function __construct($code, $input, $result, $previous = null)
+    {
+        if (isset(self::$messages[$code]) !== true) {
+            throw new \InvalidArgumentException(sprintf('Encountered unknown JSON error code: [%d]', $code));
+        }
+
+        parent::__construct(self::$messages[$code], $code, $previous);
+        $this->input = $input;
+        $this->result = $result;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getInput()
+    {
+        return $this->input;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getResult()
+    {
+        return $this->result;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ServerErrorResponseException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ServerErrorResponseException.php
new file mode 100644
index 0000000000000000000000000000000000000000..9841254e1b590b134a082b4d8261821312b31967
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/ServerErrorResponseException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * ServerErrorResponseException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ServerErrorResponseException extends TransportException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/TransportException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/TransportException.php
new file mode 100644
index 0000000000000000000000000000000000000000..6dce5b482583099bafefcc7d392e24b45594fe4b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/TransportException.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * TransportException
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class TransportException extends \Exception implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/UnexpectedValueException.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/UnexpectedValueException.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a63e8088061879b6b1501764a9108ece2ebeaf0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Common/Exceptions/UnexpectedValueException.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Elasticsearch\Common\Exceptions;
+
+/**
+ * UnexpectedValueException
+ *
+ * Denote a value that is outside the normally accepted values
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Common\Exceptions
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class UnexpectedValueException extends \UnexpectedValueException implements ElasticsearchException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/AbstractConnectionPool.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/AbstractConnectionPool.php
new file mode 100644
index 0000000000000000000000000000000000000000..625eaa4a075440e90cd0c282ed68b8ca3a15f718
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/AbstractConnectionPool.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool;
+
+use Elasticsearch\Common\Exceptions\InvalidArgumentException;
+use Elasticsearch\ConnectionPool\Selectors\SelectorInterface;
+use Elasticsearch\Connections\Connection;
+use Elasticsearch\Connections\ConnectionFactoryInterface;
+use Elasticsearch\Connections\ConnectionInterface;
+
+/**
+ * Class AbstractConnectionPool
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\ConnectionPool
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+abstract class AbstractConnectionPool implements ConnectionPoolInterface
+{
+    /**
+     * Array of connections
+     *
+     * @var ConnectionInterface[]
+     */
+    protected $connections;
+
+    /**
+     * Array of initial seed connections
+     *
+     * @var ConnectionInterface[]
+     */
+    protected $seedConnections;
+
+    /**
+     * Selector object, used to select a connection on each request
+     *
+     * @var SelectorInterface
+     */
+    protected $selector;
+
+    /** @var array */
+    protected $connectionPoolParams;
+
+    /** @var \Elasticsearch\Connections\ConnectionFactory  */
+    protected $connectionFactory;
+
+    /**
+     * Constructor
+     *
+     * @param ConnectionInterface[]          $connections          The Connections to choose from
+     * @param SelectorInterface              $selector             A Selector instance to perform the selection logic for the available connections
+     * @param ConnectionFactoryInterface     $factory              ConnectionFactory instance
+     * @param array                          $connectionPoolParams
+     */
+    public function __construct($connections, SelectorInterface $selector, ConnectionFactoryInterface $factory, $connectionPoolParams)
+    {
+        $paramList = array('connections', 'selector', 'connectionPoolParams');
+        foreach ($paramList as $param) {
+            if (isset($$param) === false) {
+                throw new InvalidArgumentException('`' . $param . '` parameter must not be null');
+            }
+        }
+
+        if (isset($connectionPoolParams['randomizeHosts']) === true
+            && $connectionPoolParams['randomizeHosts'] === true) {
+            shuffle($connections);
+        }
+
+        $this->connections          = $connections;
+        $this->seedConnections      = $connections;
+        $this->selector             = $selector;
+        $this->connectionPoolParams = $connectionPoolParams;
+        $this->connectionFactory    = $factory;
+    }
+
+    /**
+     * @param bool $force
+     *
+     * @return Connection
+     */
+    abstract public function nextConnection($force = false);
+
+    abstract public function scheduleCheck();
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/ConnectionPoolInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/ConnectionPoolInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..d10fc3542575aefee57c1a22c4ab0639c01967d0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/ConnectionPoolInterface.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool;
+
+use Elasticsearch\Connections\ConnectionInterface;
+
+/**
+ * ConnectionPoolInterface
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\ConnectionPool
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+interface ConnectionPoolInterface
+{
+    /**
+     * @param bool $force
+     *
+     * @return ConnectionInterface
+     */
+    public function nextConnection($force = false);
+
+    /**
+     * @return void
+     */
+    public function scheduleCheck();
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/RandomSelector.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/RandomSelector.php
new file mode 100644
index 0000000000000000000000000000000000000000..b544292e3012fd4c65a59fc0bfe13a50b1e4d079
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/RandomSelector.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool\Selectors;
+
+use Elasticsearch\Connections\ConnectionInterface;
+
+/**
+ * Class RandomSelector
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Connections\Selectors\RandomSelector
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class RandomSelector implements SelectorInterface
+{
+    /**
+     * Select a random connection from the provided array
+     *
+     * @param  ConnectionInterface[] $connections an array of ConnectionInterface instances to choose from
+     *
+     * @return \Elasticsearch\Connections\ConnectionInterface
+     */
+    public function select($connections)
+    {
+        return $connections[array_rand($connections)];
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/RoundRobinSelector.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/RoundRobinSelector.php
new file mode 100644
index 0000000000000000000000000000000000000000..e8b978454a80b665b07cd6660e2faecc01a0d27d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/RoundRobinSelector.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool\Selectors;
+
+use Elasticsearch\Connections\ConnectionInterface;
+
+/**
+ * Class RoundRobinSelector
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\ConnectionPool\Selectors\ConnectionPool
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class RoundRobinSelector implements SelectorInterface
+{
+    /**
+     * @var int
+     */
+    private $current = 0;
+
+    /**
+     * Select the next connection in the sequence
+     *
+     * @param  ConnectionInterface[] $connections an array of ConnectionInterface instances to choose from
+     *
+     * @return \Elasticsearch\Connections\ConnectionInterface
+     */
+    public function select($connections)
+    {
+        $this->current += 1;
+
+        return $connections[$this->current % count($connections)];
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/SelectorInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/SelectorInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..72dfd195bb5b850a9ac12e37921bce0aae9bf0ec
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/SelectorInterface.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool\Selectors;
+
+/**
+ * Class RandomSelector
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Connections\Selectors
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+interface SelectorInterface
+{
+    /**
+     * Perform logic to select a single ConnectionInterface instance from the array provided
+     *
+     * @param  ConnectionInterface[] $connections an array of ConnectionInterface instances to choose from
+     *
+     * @return \Elasticsearch\Connections\ConnectionInterface
+     */
+    public function select($connections);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/StickyRoundRobinSelector.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/StickyRoundRobinSelector.php
new file mode 100644
index 0000000000000000000000000000000000000000..f44a68ca42b2d6decf9d2fe835212ed74d8e095c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/Selectors/StickyRoundRobinSelector.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool\Selectors;
+
+use Elasticsearch\Connections\ConnectionInterface;
+
+/**
+ * Class StickyRoundRobinSelector
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\ConnectionPool\Selectors\ConnectionPool
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class StickyRoundRobinSelector implements SelectorInterface
+{
+    /**
+     * @var int
+     */
+    private $current = 0;
+
+    /**
+     * @var int
+     */
+    private $currentCounter = 0;
+
+    /**
+     * Use current connection unless it is dead, otherwise round-robin
+     *
+     * @param ConnectionInterface[] $connections Array of connections to choose from
+     *
+     * @return ConnectionInterface
+     */
+    public function select($connections)
+    {
+        /** @var ConnectionInterface[] $connections */
+        if ($connections[$this->current]->isAlive()) {
+            return $connections[$this->current];
+        }
+
+        $this->currentCounter += 1;
+        $this->current = $this->currentCounter % count($connections);
+
+        return $connections[$this->current];
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/SimpleConnectionPool.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/SimpleConnectionPool.php
new file mode 100644
index 0000000000000000000000000000000000000000..f77e8d7666114302cdfff23087508908035580ca
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/SimpleConnectionPool.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool;
+
+use Elasticsearch\ConnectionPool\Selectors\SelectorInterface;
+use Elasticsearch\Connections\Connection;
+use Elasticsearch\Connections\ConnectionFactoryInterface;
+
+class SimpleConnectionPool extends AbstractConnectionPool implements ConnectionPoolInterface
+{
+
+    /**
+     * {@inheritdoc}
+     */
+    public function __construct($connections, SelectorInterface $selector, ConnectionFactoryInterface $factory, $connectionPoolParams)
+    {
+        parent::__construct($connections, $selector, $factory, $connectionPoolParams);
+    }
+
+    /**
+     * @param bool $force
+     *
+     * @return Connection
+     * @throws \Elasticsearch\Common\Exceptions\NoNodesAvailableException
+     */
+    public function nextConnection($force = false)
+    {
+        return $this->selector->select($this->connections);
+    }
+
+    public function scheduleCheck()
+    {
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/SniffingConnectionPool.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/SniffingConnectionPool.php
new file mode 100644
index 0000000000000000000000000000000000000000..89b1f8126f17ae0e35c9514f4050ff5c06ddf5f7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/SniffingConnectionPool.php
@@ -0,0 +1,155 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool;
+
+use Elasticsearch\Common\Exceptions\Curl\OperationTimeoutException;
+use Elasticsearch\Common\Exceptions\NoNodesAvailableException;
+use Elasticsearch\ConnectionPool\Selectors\SelectorInterface;
+use Elasticsearch\Connections\Connection;
+use Elasticsearch\Connections\ConnectionFactoryInterface;
+
+class SniffingConnectionPool extends AbstractConnectionPool implements ConnectionPoolInterface
+{
+    /** @var int  */
+    private $sniffingInterval = 300;
+
+    /** @var  int */
+    private $nextSniff = -1;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function __construct($connections, SelectorInterface $selector, ConnectionFactoryInterface $factory, $connectionPoolParams)
+    {
+        parent::__construct($connections, $selector, $factory, $connectionPoolParams);
+
+        $this->setConnectionPoolParams($connectionPoolParams);
+        $this->nextSniff = time() + $this->sniffingInterval;
+    }
+
+    /**
+     * @param bool $force
+     *
+     * @return Connection
+     * @throws \Elasticsearch\Common\Exceptions\NoNodesAvailableException
+     */
+    public function nextConnection($force = false)
+    {
+        $this->sniff($force);
+
+        $size = count($this->connections);
+        while ($size--) {
+            /** @var Connection $connection */
+            $connection = $this->selector->select($this->connections);
+            if ($connection->isAlive() === true || $connection->ping() === true) {
+                return $connection;
+            }
+        }
+
+        if ($force === true) {
+            throw new NoNodesAvailableException("No alive nodes found in your cluster");
+        }
+
+        return $this->nextConnection(true);
+    }
+
+    public function scheduleCheck()
+    {
+        $this->nextSniff = -1;
+    }
+
+    /**
+     * @param bool $force
+     */
+    private function sniff($force = false)
+    {
+        if ($force === false && $this->nextSniff >= time()) {
+            return;
+        }
+
+        $total = count($this->connections);
+
+        while ($total--) {
+            /** @var Connection $connection */
+            $connection = $this->selector->select($this->connections);
+
+            if ($connection->isAlive() xor $force) {
+                continue;
+            }
+
+            if ($this->sniffConnection($connection) === true) {
+                return;
+            }
+        }
+
+        if ($force === true) {
+            return;
+        }
+
+        foreach ($this->seedConnections as $connection) {
+            if ($this->sniffConnection($connection) === true) {
+                return;
+            }
+        }
+    }
+
+    /**
+     * @param Connection $connection
+     * @return bool
+     */
+    private function sniffConnection(Connection $connection)
+    {
+        try {
+            $response = $connection->sniff();
+        } catch (OperationTimeoutException $exception) {
+            return false;
+        }
+
+        $nodes = $this->parseClusterState($connection->getTransportSchema(), $response);
+
+        if (count($nodes) === 0) {
+            return false;
+        }
+
+        $this->connections = array();
+
+        foreach ($nodes as $node) {
+            $nodeDetails = array(
+                'host' => $node['host'],
+                'port' => $node['port']
+            );
+            $this->connections[] = $this->connectionFactory->create($nodeDetails);
+        }
+
+        $this->nextSniff = time() + $this->sniffingInterval;
+
+        return true;
+    }
+
+    private function parseClusterState($transportSchema, $nodeInfo)
+    {
+        $pattern       = '/\/([^:]*):([0-9]+)\]/';
+        $schemaAddress = $transportSchema . '_address';
+        $hosts         = array();
+
+        foreach ($nodeInfo['nodes'] as $node) {
+            if (isset($node[$schemaAddress]) === true) {
+                if (preg_match($pattern, $node[$schemaAddress], $match) === 1) {
+                    $hosts[] = array(
+                        'host' => $match[1],
+                        'port' => (int) $match[2],
+                    );
+                }
+            }
+        }
+
+        return $hosts;
+    }
+
+    private function setConnectionPoolParams($connectionPoolParams)
+    {
+        if (isset($connectionPoolParams['sniffingInterval']) === true) {
+            $this->sniffingInterval = $connectionPoolParams['sniffingInterval'];
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/StaticConnectionPool.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/StaticConnectionPool.php
new file mode 100644
index 0000000000000000000000000000000000000000..102dda37c11196069428a4744bf66c85485a5978
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/StaticConnectionPool.php
@@ -0,0 +1,93 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool;
+
+use Elasticsearch\Common\Exceptions\NoNodesAvailableException;
+use Elasticsearch\ConnectionPool\Selectors\SelectorInterface;
+use Elasticsearch\Connections\Connection;
+use Elasticsearch\Connections\ConnectionFactoryInterface;
+
+class StaticConnectionPool extends AbstractConnectionPool implements ConnectionPoolInterface
+{
+    /**
+     * @var int
+     */
+    private $pingTimeout    = 60;
+
+    /**
+     * @var int
+     */
+    private $maxPingTimeout = 3600;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function __construct($connections, SelectorInterface $selector, ConnectionFactoryInterface $factory, $connectionPoolParams)
+    {
+        parent::__construct($connections, $selector, $factory, $connectionPoolParams);
+        $this->scheduleCheck();
+    }
+
+    /**
+     * @param bool $force
+     *
+     * @return Connection
+     * @throws \Elasticsearch\Common\Exceptions\NoNodesAvailableException
+     */
+    public function nextConnection($force = false)
+    {
+        $skipped = array();
+
+        $total = count($this->connections);
+        while ($total--) {
+            /** @var Connection $connection */
+            $connection = $this->selector->select($this->connections);
+            if ($connection->isAlive() === true) {
+                return $connection;
+            }
+
+            if ($this->readyToRevive($connection) === true) {
+                if ($connection->ping() === true) {
+                    return $connection;
+                }
+            } else {
+                $skipped[] = $connection;
+            }
+        }
+
+        // All "alive" nodes failed, force pings on "dead" nodes
+        foreach ($skipped as $connection) {
+            if ($connection->ping() === true) {
+                return $connection;
+            }
+        }
+
+        throw new NoNodesAvailableException("No alive nodes found in your cluster");
+    }
+
+    public function scheduleCheck()
+    {
+        foreach ($this->connections as $connection) {
+            $connection->markDead();
+        }
+    }
+
+    /**
+     * @param Connection $connection
+     *
+     * @return bool
+     */
+    private function readyToRevive(Connection $connection)
+    {
+        $timeout = min(
+            $this->pingTimeout * pow(2, $connection->getPingFailures()),
+            $this->maxPingTimeout
+        );
+
+        if ($connection->getLastPing() + $timeout < time()) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php
new file mode 100644
index 0000000000000000000000000000000000000000..b7b056e67c3a2bf7e620cceaacedc76725f121c9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace Elasticsearch\ConnectionPool;
+
+use Elasticsearch\Common\Exceptions\NoNodesAvailableException;
+use Elasticsearch\ConnectionPool\Selectors\SelectorInterface;
+use Elasticsearch\Connections\Connection;
+use Elasticsearch\Connections\ConnectionFactoryInterface;
+
+class StaticNoPingConnectionPool extends AbstractConnectionPool implements ConnectionPoolInterface
+{
+    /**
+     * @var int
+     */
+    private $pingTimeout    = 60;
+
+    /**
+     * @var int
+     */
+    private $maxPingTimeout = 3600;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function __construct($connections, SelectorInterface $selector, ConnectionFactoryInterface $factory, $connectionPoolParams)
+    {
+        parent::__construct($connections, $selector, $factory, $connectionPoolParams);
+    }
+
+    /**
+     * @param bool $force
+     *
+     * @return Connection
+     * @throws \Elasticsearch\Common\Exceptions\NoNodesAvailableException
+     */
+    public function nextConnection($force = false)
+    {
+        $total = count($this->connections);
+        while ($total--) {
+            /** @var Connection $connection */
+            $connection = $this->selector->select($this->connections);
+            if ($connection->isAlive() === true) {
+                return $connection;
+            }
+
+            if ($this->readyToRevive($connection) === true) {
+                return $connection;
+            }
+        }
+
+        throw new NoNodesAvailableException("No alive nodes found in your cluster");
+    }
+
+    public function scheduleCheck()
+    {
+    }
+
+    /**
+     * @param \Elasticsearch\Connections\Connection $connection
+     *
+     * @return bool
+     */
+    private function readyToRevive(Connection $connection)
+    {
+        $timeout = min(
+            $this->pingTimeout * pow(2, $connection->getPingFailures()),
+            $this->maxPingTimeout
+        );
+
+        if ($connection->getLastPing() + $timeout < time()) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/Connection.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/Connection.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d9e28984ea7d97e5326165e4fbbf384c0f81e5a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/Connection.php
@@ -0,0 +1,706 @@
+<?php
+
+namespace Elasticsearch\Connections;
+
+use Elasticsearch\Common\Exceptions\AlreadyExpiredException;
+use Elasticsearch\Common\Exceptions\BadRequest400Exception;
+use Elasticsearch\Common\Exceptions\Conflict409Exception;
+use Elasticsearch\Common\Exceptions\Curl\CouldNotConnectToHost;
+use Elasticsearch\Common\Exceptions\Curl\CouldNotResolveHostException;
+use Elasticsearch\Common\Exceptions\Curl\OperationTimeoutException;
+use Elasticsearch\Common\Exceptions\Forbidden403Exception;
+use Elasticsearch\Common\Exceptions\MaxRetriesException;
+use Elasticsearch\Common\Exceptions\Missing404Exception;
+use Elasticsearch\Common\Exceptions\NoDocumentsToGetException;
+use Elasticsearch\Common\Exceptions\NoShardAvailableException;
+use Elasticsearch\Common\Exceptions\RequestTimeout408Exception;
+use Elasticsearch\Common\Exceptions\RoutingMissingException;
+use Elasticsearch\Common\Exceptions\ScriptLangNotSupportedException;
+use Elasticsearch\Common\Exceptions\ServerErrorResponseException;
+use Elasticsearch\Common\Exceptions\TransportException;
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Exception\ConnectException;
+use GuzzleHttp\Ring\Exception\RingException;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Class AbstractConnection
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Connections
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Connection implements ConnectionInterface
+{
+    /** @var  callable */
+    protected $handler;
+
+    /** @var SerializerInterface */
+    protected $serializer;
+
+    /**
+     * @var string
+     */
+    protected $transportSchema = 'http';    // TODO depreciate this default
+
+    /**
+     * @var string
+     */
+    protected $host;
+
+    /**
+     * @var string || null
+     */
+    protected $path;
+
+    /**
+     * @var LoggerInterface
+     */
+    protected $log;
+
+    /**
+     * @var LoggerInterface
+     */
+    protected $trace;
+
+    /**
+     * @var array
+     */
+    protected $connectionParams;
+
+    /** @var bool  */
+    protected $isAlive = false;
+
+    /** @var float  */
+    private $pingTimeout = 1;    //TODO expose this
+
+    /** @var int  */
+    private $lastPing = 0;
+
+    /** @var int  */
+    private $failedPings = 0;
+
+    private $lastRequest = array();
+
+    /**
+     * Constructor
+     *
+     * @param $handler
+     * @param array $hostDetails
+     * @param array $connectionParams Array of connection-specific parameters
+     * @param \Elasticsearch\Serializers\SerializerInterface $serializer
+     * @param \Psr\Log\LoggerInterface $log              Logger object
+     * @param \Psr\Log\LoggerInterface $trace
+     */
+    public function __construct($handler, $hostDetails, $connectionParams,
+                                SerializerInterface $serializer, LoggerInterface $log, LoggerInterface $trace)
+    {
+        if (isset($hostDetails['port']) !== true) {
+            $hostDetails['port'] = 9200;
+        }
+
+        if (isset($hostDetails['scheme'])) {
+            $this->transportSchema = $hostDetails['scheme'];
+        }
+
+        if (isset($hostDetails['user']) && isset($hostDetails['pass'])) {
+            $connectionParams['client']['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_BASIC;
+            $connectionParams['client']['curl'][CURLOPT_USERPWD] = $hostDetails['user'].':'.$hostDetails['pass'];
+        }
+
+        $host = $hostDetails['host'].':'.$hostDetails['port'];
+        $path = null;
+        if (isset($hostDetails['path']) === true) {
+            $path = $hostDetails['path'];
+        }
+        $this->host             = $host;
+        $this->path             = $path;
+        $this->log              = $log;
+        $this->trace            = $trace;
+        $this->connectionParams = $connectionParams;
+        $this->serializer       = $serializer;
+
+        $this->handler = $this->wrapHandler($handler, $log, $trace);
+    }
+
+    /**
+     * @param $method
+     * @param $uri
+     * @param null $params
+     * @param null $body
+     * @param array $options
+     * @param \Elasticsearch\Transport $transport
+     * @return mixed
+     */
+    public function performRequest($method, $uri, $params = null, $body = null, $options = [], Transport $transport = null)
+    {
+        if (isset($body) === true) {
+            $body = $this->serializer->serialize($body);
+        }
+
+        $request = [
+            'http_method' => $method,
+            'scheme'      => $this->transportSchema,
+            'uri'         => $this->getURI($uri, $params),
+            'body'        => $body,
+            'headers'     => [
+                'host'  => [$this->host]
+            ]
+
+        ];
+        $request = array_merge_recursive($request, $this->connectionParams, $options);
+
+
+        $handler = $this->handler;
+        $future = $handler($request, $this, $transport, $options);
+
+        return $future;
+    }
+
+    /** @return string */
+    public function getTransportSchema()
+    {
+        return $this->transportSchema;
+    }
+
+    /** @return array */
+    public function getLastRequestInfo()
+    {
+        return $this->lastRequest;
+    }
+
+    private function wrapHandler(callable $handler, LoggerInterface $logger, LoggerInterface $tracer)
+    {
+        return function (array $request, Connection $connection, Transport $transport = null, $options) use ($handler, $logger, $tracer) {
+
+            $this->lastRequest = [];
+            $this->lastRequest['request'] = $request;
+
+            // Send the request using the wrapped handler.
+            $response =  Core::proxy($handler($request), function ($response) use ($connection, $transport, $logger, $tracer, $request, $options) {
+
+                $this->lastRequest['response'] = $response;
+
+                if (isset($response['error']) === true) {
+                    if ($response['error'] instanceof ConnectException || $response['error'] instanceof RingException) {
+                        $this->log->warning("Curl exception encountered.");
+
+                        $exception = $this->getCurlRetryException($request, $response);
+
+                        $this->logRequestFail(
+                            $request['http_method'],
+                            $response['effective_url'],
+                            $request['body'],
+                            $request['headers'],
+                            $response['status'],
+                            $response['body'],
+                            $response['transfer_stats']['total_time'],
+                            $exception
+                        );
+
+                        $node = $connection->getHost();
+                        $this->log->warning("Marking node $node dead.");
+                        $connection->markDead();
+
+                        // If the transport has not been set, we are inside a Ping or Sniff,
+                        // so we don't want to retrigger retries anyway.
+                        //
+                        // TODO this could be handled better, but we are limited because connectionpools do not
+                        // have access to Transport.  Architecturally, all of this needs to be refactored
+                        if (isset($transport) === true) {
+                            $transport->connectionPool->scheduleCheck();
+
+                            $neverRetry = isset($request['client']['never_retry']) ? $request['client']['never_retry'] : false;
+                            $shouldRetry = $transport->shouldRetry($request);
+                            $shouldRetryText = ($shouldRetry) ? 'true' : 'false';
+
+                            $this->log->warning("Retries left? $shouldRetryText");
+                            if ($shouldRetry && !$neverRetry) {
+                                return $transport->performRequest(
+                                    $request['http_method'],
+                                    $request['uri'],
+                                    [],
+                                    $request['body'],
+                                    $options
+                                );
+                            }
+                        }
+
+                        $this->log->warning("Out of retries, throwing exception from $node");
+                        // Only throw if we run out of retries
+                        throw $exception;
+                    } else {
+                        // Something went seriously wrong, bail
+                        $exception = new TransportException($response['error']->getMessage());
+                        $this->logRequestFail(
+                            $request['http_method'],
+                            $response['effective_url'],
+                            $request['body'],
+                            $request['headers'],
+                            $response['status'],
+                            $response['body'],
+                            $response['transfer_stats']['total_time'],
+                            $exception
+                        );
+                        throw $exception;
+                    }
+                } else {
+                    $connection->markAlive();
+
+                    if (isset($response['body']) === true) {
+                        $response['body'] = stream_get_contents($response['body']);
+                        $this->lastRequest['response']['body'] = $response['body'];
+                    }
+
+                    if ($response['status'] >= 400 && $response['status'] < 500) {
+                        $ignore = isset($request['client']['ignore']) ? $request['client']['ignore'] : [];
+                        $this->process4xxError($request, $response, $ignore);
+                    } elseif ($response['status'] >= 500) {
+                        $ignore = isset($request['client']['ignore']) ? $request['client']['ignore'] : [];
+                        $this->process5xxError($request, $response, $ignore);
+                    }
+
+                    // No error, deserialize
+                    $response['body'] = $this->serializer->deserialize($response['body'], $response['transfer_stats']);
+                }
+                $this->logRequestSuccess(
+                    $request['http_method'],
+                    $response['effective_url'],
+                    $request['body'],
+                    $request['headers'],
+                    $response['status'],
+                    $response['body'],
+                    $response['transfer_stats']['total_time']
+                );
+
+                return isset($request['client']['verbose']) && $request['client']['verbose'] === true ? $response : $response['body'];
+
+            });
+
+            return $response;
+        };
+    }
+
+    /**
+     * @param string $uri
+     * @param array $params
+     *
+     * @return string
+     */
+    private function getURI($uri, $params)
+    {
+        if (isset($params) === true && !empty($params)) {
+            array_walk($params, function (&$value, &$key) {
+                if ($value === true) {
+                    $value = 'true';
+                } else if ($value === false) {
+                    $value = 'false';
+                }
+            });
+
+            $uri .= '?' . http_build_query($params);
+        }
+
+        if ($this->path !== null) {
+            $uri = $this->path . $uri;
+        }
+
+        return $uri;
+    }
+
+    /**
+     * Log a successful request
+     *
+     * @param string $method
+     * @param string $fullURI
+     * @param string $body
+     * @param array  $headers
+     * @param string $statusCode
+     * @param string $response
+     * @param string $duration
+     *
+     * @return void
+     */
+    public function logRequestSuccess($method, $fullURI, $body, $headers, $statusCode, $response, $duration)
+    {
+        $this->log->debug('Request Body', array($body));
+        $this->log->info(
+            'Request Success:',
+            array(
+                'method'    => $method,
+                'uri'       => $fullURI,
+                'headers'   => $headers,
+                'HTTP code' => $statusCode,
+                'duration'  => $duration,
+            )
+        );
+        $this->log->debug('Response', array($response));
+
+        // Build the curl command for Trace.
+        $curlCommand = $this->buildCurlCommand($method, $fullURI, $body);
+        $this->trace->info($curlCommand);
+        $this->trace->debug(
+            'Response:',
+            array(
+                'response'  => $response,
+                'method'    => $method,
+                'uri'       => $fullURI,
+                'HTTP code' => $statusCode,
+                'duration'  => $duration,
+            )
+        );
+    }
+
+    /**
+     * Log a a failed request
+     *
+     * @param string $method
+     * @param string $fullURI
+     * @param string $body
+     * @param array $headers
+     * @param null|string $statusCode
+     * @param null|string $response
+     * @param string $duration
+     * @param \Exception|null $exception
+     *
+     * @return void
+     */
+    public function logRequestFail($method, $fullURI, $body, $headers, $statusCode, $response, $duration, \Exception $exception)
+    {
+        $this->log->debug('Request Body', array($body));
+        $this->log->warning(
+            'Request Failure:',
+            array(
+                'method'    => $method,
+                'uri'       => $fullURI,
+                'headers'   => $headers,
+                'HTTP code' => $statusCode,
+                'duration'  => $duration,
+                'error'     => $exception->getMessage(),
+            )
+        );
+        $this->log->warning('Response', array($response));
+
+        // Build the curl command for Trace.
+        $curlCommand = $this->buildCurlCommand($method, $fullURI, $body);
+        $this->trace->info($curlCommand);
+        $this->trace->debug(
+            'Response:',
+            array(
+                'response'  => $response,
+                'method'    => $method,
+                'uri'       => $fullURI,
+                'HTTP code' => $statusCode,
+                'duration'  => $duration,
+            )
+        );
+    }
+
+    /**
+     * @return bool
+     */
+    public function ping()
+    {
+        $options = [
+            'client' => [
+                'timeout' => $this->pingTimeout,
+                'never_retry' => true,
+                'verbose' => true
+            ]
+        ];
+        try {
+            $response = $this->performRequest('HEAD', '/', null, null, $options);
+            $response = $response->wait();
+        } catch (TransportException $exception) {
+            $this->markDead();
+
+            return false;
+        }
+
+        if ($response['status'] === 200) {
+            $this->markAlive();
+
+            return true;
+        } else {
+            $this->markDead();
+
+            return false;
+        }
+    }
+
+    /**
+     * @return array
+     */
+    public function sniff()
+    {
+        $options = [
+            'client' => [
+                'timeout' => $this->pingTimeout,
+                'never_retry' => true
+            ]
+        ];
+
+        return $this->performRequest('GET', '/_nodes/_all/clear', null, null, $options);
+    }
+
+    /**
+     * @return bool
+     */
+    public function isAlive()
+    {
+        return $this->isAlive;
+    }
+
+    public function markAlive()
+    {
+        $this->failedPings = 0;
+        $this->isAlive = true;
+        $this->lastPing = time();
+    }
+
+    public function markDead()
+    {
+        $this->isAlive = false;
+        $this->failedPings += 1;
+        $this->lastPing = time();
+    }
+
+    /**
+     * @return int
+     */
+    public function getLastPing()
+    {
+        return $this->lastPing;
+    }
+
+    /**
+     * @return int
+     */
+    public function getPingFailures()
+    {
+        return $this->failedPings;
+    }
+
+    /**
+     * @return string
+     */
+    public function getHost()
+    {
+        return $this->host;
+    }
+
+    /**
+     * @return null|string
+     */
+    public function getUserPass()
+    {
+        if (isset($this->connectionParams['client']['curl'][CURLOPT_USERPWD]) === true) {
+            return $this->connectionParams['client']['curl'][CURLOPT_USERPWD];
+        }
+        return null;
+    }
+
+    /**
+     * @return null|string
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
+
+    /**
+     * @param $request
+     * @param $response
+     * @return \Elasticsearch\Common\Exceptions\Curl\CouldNotConnectToHost|\Elasticsearch\Common\Exceptions\Curl\CouldNotResolveHostException|\Elasticsearch\Common\Exceptions\Curl\OperationTimeoutException|\Elasticsearch\Common\Exceptions\MaxRetriesException
+     */
+    protected function getCurlRetryException($request, $response)
+    {
+        $exception = null;
+        $message = $response['error']->getMessage();
+        $exception = new MaxRetriesException($message);
+        switch ($response['curl']['errno']) {
+            case 6:
+                $exception = new CouldNotResolveHostException($message, null, $exception);
+                break;
+            case 7:
+                $exception = new CouldNotConnectToHost($message, null, $exception);
+                break;
+            case 28:
+                $exception = new OperationTimeoutException($message, null, $exception);
+                break;
+        }
+
+        return $exception;
+    }
+
+    /**
+     * Construct a string cURL command
+     *
+     * @param string $method HTTP method
+     * @param string $uri    Full URI of request
+     * @param string $body   Request body
+     *
+     * @return string
+     */
+    private function buildCurlCommand($method, $uri, $body)
+    {
+        if (strpos($uri, '?') === false) {
+            $uri .= '?pretty=true';
+        } else {
+            str_replace('?', '?pretty=true', $uri);
+        }
+
+        $curlCommand = 'curl -X' . strtoupper($method);
+        $curlCommand .= " '" . $uri . "'";
+
+        if (isset($body) === true && $body !== '') {
+            $curlCommand .= " -d '" . $body . "'";
+        }
+
+        return $curlCommand;
+    }
+
+    /**
+     * @param $request
+     * @param $response
+     * @param $ignore
+     * @throws \Elasticsearch\Common\Exceptions\AlreadyExpiredException|\Elasticsearch\Common\Exceptions\BadRequest400Exception|\Elasticsearch\Common\Exceptions\Conflict409Exception|\Elasticsearch\Common\Exceptions\Forbidden403Exception|\Elasticsearch\Common\Exceptions\Missing404Exception|\Elasticsearch\Common\Exceptions\ScriptLangNotSupportedException|null
+     */
+    private function process4xxError($request, $response, $ignore)
+    {
+        $statusCode = $response['status'];
+        $responseBody = $response['body'];
+
+        /** @var \Exception $exception */
+        $exception = $this->tryDeserialize400Error($response);
+
+        if (array_search($response['status'], $ignore) !== false) {
+            return;
+        }
+
+        if ($statusCode === 400 && strpos($responseBody, "AlreadyExpiredException") !== false) {
+            $exception = new AlreadyExpiredException($responseBody, $statusCode);
+        } elseif ($statusCode === 403) {
+            $exception = new Forbidden403Exception($responseBody, $statusCode);
+        } elseif ($statusCode === 404) {
+            $exception = new Missing404Exception($responseBody, $statusCode);
+        } elseif ($statusCode === 409) {
+            $exception = new Conflict409Exception($responseBody, $statusCode);
+        } elseif ($statusCode === 400 && strpos($responseBody, 'script_lang not supported') !== false) {
+            $exception = new ScriptLangNotSupportedException($responseBody. $statusCode);
+        } elseif ($statusCode === 408) {
+            $exception = new RequestTimeout408Exception($responseBody, $statusCode);
+        } else {
+            $exception = new BadRequest400Exception($responseBody, $statusCode);
+        }
+
+        $this->logRequestFail(
+            $request['http_method'],
+            $response['effective_url'],
+            $request['body'],
+            $request['headers'],
+            $response['status'],
+            $response['body'],
+            $response['transfer_stats']['total_time'],
+            $exception
+        );
+
+        throw $exception;
+    }
+
+    /**
+     * @param $request
+     * @param $response
+     * @param $ignore
+     * @throws \Elasticsearch\Common\Exceptions\NoDocumentsToGetException|\Elasticsearch\Common\Exceptions\NoShardAvailableException|\Elasticsearch\Common\Exceptions\RoutingMissingException|\Elasticsearch\Common\Exceptions\ServerErrorResponseException
+     */
+    private function process5xxError($request, $response, $ignore)
+    {
+        $statusCode = $response['status'];
+        $responseBody = $response['body'];
+
+        /** @var \Exception $exception */
+        $exception = $this->tryDeserialize500Error($response);
+
+        $exceptionText = "[$statusCode Server Exception] ".$exception->getMessage();
+        $this->log->error($exceptionText);
+        $this->log->error($exception->getTraceAsString());
+
+        if (array_search($statusCode, $ignore) !== false) {
+            return;
+        }
+
+        if ($statusCode === 500 && strpos($responseBody, "RoutingMissingException") !== false) {
+            $exception = new RoutingMissingException($exception->getMessage(), $statusCode, $exception);
+        } elseif ($statusCode === 500 && preg_match('/ActionRequestValidationException.+ no documents to get/', $responseBody) === 1) {
+            $exception = new NoDocumentsToGetException($exception->getMessage(), $statusCode, $exception);
+        } elseif ($statusCode === 500 && strpos($responseBody, 'NoShardAvailableActionException') !== false) {
+            $exception = new NoShardAvailableException($exception->getMessage(), $statusCode, $exception);
+        } else {
+            $exception = new ServerErrorResponseException($responseBody, $statusCode);
+        }
+
+        $this->logRequestFail(
+            $request['http_method'],
+            $response['effective_url'],
+            $request['body'],
+            $request['headers'],
+            $response['status'],
+            $response['body'],
+            $response['transfer_stats']['total_time'],
+            $exception
+        );
+
+        throw $exception;
+    }
+
+    private function tryDeserialize400Error($response)
+    {
+        return $this->tryDeserializeError($response, 'Elasticsearch\Common\Exceptions\BadRequest400Exception');
+    }
+
+    private function tryDeserialize500Error($response)
+    {
+        return $this->tryDeserializeError($response, 'Elasticsearch\Common\Exceptions\ServerErrorResponseException');
+    }
+
+    private function tryDeserializeError($response, $errorClass)
+    {
+        $error = $this->serializer->deserialize($response['body'], $response['transfer_stats']);
+        if (is_array($error) === true) {
+            // 2.0 structured exceptions
+            if (isset($error['error']['reason']) === true) {
+
+                // Try to use root cause first (only grabs the first root cause)
+                $root = $error['error']['root_cause'];
+                if (isset($root) && isset($root[0])) {
+                    $cause = $root[0]['reason'];
+                    $type = $root[0]['type'];
+                } else {
+                    $cause = $error['error']['reason'];
+                    $type = $error['error']['type'];
+                }
+
+                $original = new $errorClass($response['body'], $response['status']);
+
+                return new $errorClass("$type: $cause", $response['status'], $original);
+            } elseif (isset($error['error']) === true) {
+                // <2.0 semi-structured exceptions
+                $original = new $errorClass($response['body'], $response['status']);
+
+                return new $errorClass($error['error'], $response['status'], $original);
+            }
+
+            // <2.0 "i just blew up" nonstructured exception
+            // $error is an array but we don't know the format, reuse the response body instead
+            return new $errorClass($response['body'], $response['status']);
+        }
+
+        // <2.0 "i just blew up" nonstructured exception
+        return new $errorClass($response['body']);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionFactory.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..88d6dc938d7fb415cefa068b8045de59a7090f96
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionFactory.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Elasticsearch\Connections;
+
+use Elasticsearch\Serializers\SerializerInterface;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Class AbstractConnection
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Connections
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ConnectionFactory implements ConnectionFactoryInterface
+{
+    /** @var  array */
+    private $connectionParams;
+
+    /** @var  SerializerInterface */
+    private $serializer;
+
+    /** @var  LoggerInterface */
+    private $logger;
+
+    /** @var  LoggerInterface */
+    private $tracer;
+
+    /** @var callable */
+    private $handler;
+
+    /**
+     * Constructor
+     *
+     * @param callable            $handler
+     * @param array               $connectionParams
+     * @param SerializerInterface $serializer
+     * @param LoggerInterface     $logger
+     * @param LoggerInterface     $tracer
+     */
+    public function __construct(callable $handler, array $connectionParams, SerializerInterface $serializer, LoggerInterface $logger, LoggerInterface $tracer)
+    {
+        $this->handler          = $handler;
+        $this->connectionParams = $connectionParams;
+        $this->logger           = $logger;
+        $this->tracer           = $tracer;
+        $this->serializer       = $serializer;
+    }
+    /**
+     * @param $hostDetails
+     *
+     * @return ConnectionInterface
+     */
+    public function create($hostDetails)
+    {
+        return new Connection(
+            $this->handler,
+            $hostDetails,
+            $this->connectionParams,
+            $this->serializer,
+            $this->logger,
+            $this->tracer
+        );
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionFactoryInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionFactoryInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..242a32105cc81cfe7881432f1bd7c1d7b01deb27
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionFactoryInterface.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Elasticsearch\Connections;
+
+use Elasticsearch\Serializers\SerializerInterface;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Class AbstractConnection
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Connections
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+interface ConnectionFactoryInterface
+{
+    /**
+     * @param $handler
+     * @param array $connectionParams
+     * @param SerializerInterface $serializer
+     * @param LoggerInterface $logger
+     * @param LoggerInterface $tracer
+     */
+    public function __construct(callable $handler, array $connectionParams,
+                                SerializerInterface $serializer, LoggerInterface $logger, LoggerInterface $tracer);
+
+    /**
+     * @param $hostDetails
+     *
+     * @return ConnectionInterface
+     */
+    public function create($hostDetails);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..44495dbdcbf04256e2803becf5724b620c2dfd4a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Connections/ConnectionInterface.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Elasticsearch\Connections;
+
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Interface ConnectionInterface
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Connections
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+interface ConnectionInterface
+{
+    /**
+     * Constructor
+     *
+     * @param $handler
+     * @param array $hostDetails
+     * @param array $connectionParams connection-specific parameters
+     * @param \Elasticsearch\Serializers\SerializerInterface $serializer
+     * @param \Psr\Log\LoggerInterface $log          Logger object
+     * @param \Psr\Log\LoggerInterface $trace        Logger object
+     */
+    public function __construct($handler, $hostDetails, $connectionParams,
+                                SerializerInterface $serializer, LoggerInterface $log, LoggerInterface $trace);
+
+    /**
+     * Get the transport schema for this connection
+     *
+     * @return string
+     */
+    public function getTransportSchema();
+
+    /**
+     * Get the hostname for this connection
+     *
+     * @return string
+     */
+    public function getHost();
+
+    /**
+     * Get the username:password string for this connection, null if not set
+     *
+     * @return null|string
+     */
+    public function getUserPass();
+
+    /**
+     * Get the URL path suffix, null if not set
+     *
+     * @return null|string;
+     */
+    public function getPath();
+
+    /**
+     * Check to see if this instance is marked as 'alive'
+     *
+     * @return bool
+     */
+    public function isAlive();
+
+    /**
+     * Mark this instance as 'alive'
+     *
+     * @return void
+     */
+    public function markAlive();
+
+    /**
+     * Mark this instance as 'dead'
+     *
+     * @return void
+     */
+    public function markDead();
+
+    /**
+     * Return an associative array of information about the last request
+     *
+     * @return array
+     */
+    public function getLastRequestInfo();
+
+    /**
+     * @param $method
+     * @param $uri
+     * @param null $params
+     * @param null $body
+     * @param array $options
+     * @param \Elasticsearch\Transport $transport
+     * @return mixed
+     */
+    public function performRequest($method, $uri, $params = null, $body = null, $options = [], Transport $transport);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/AbstractEndpoint.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/AbstractEndpoint.php
new file mode 100644
index 0000000000000000000000000000000000000000..9ede17a8280c6770634be7f154431272360d123b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/AbstractEndpoint.php
@@ -0,0 +1,287 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions\UnexpectedValueException;
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+use Exception;
+use GuzzleHttp\Ring\Future\FutureArrayInterface;
+
+/**
+ * Class AbstractEndpoint
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+abstract class AbstractEndpoint
+{
+    /** @var array  */
+    protected $params = array();
+
+    /** @var  string */
+    protected $index = null;
+
+    /** @var  string */
+    protected $type = null;
+
+    /** @var  string|int */
+    protected $id = null;
+
+    /** @var  string */
+    protected $method = null;
+
+    /** @var  array */
+    protected $body = null;
+
+    /** @var array  */
+    private $options = [];
+
+    /** @var  SerializerInterface */
+    protected $serializer;
+
+    /**
+     * @return string[]
+     */
+    abstract public function getParamWhitelist();
+
+    /**
+     * @return string
+     */
+    abstract public function getURI();
+
+    /**
+     * @return string
+     */
+    abstract public function getMethod();
+
+
+    /**
+     * Set the parameters for this endpoint
+     *
+     * @param string[] $params Array of parameters
+     * @return $this
+     */
+    public function setParams($params)
+    {
+        if (is_object($params) === true) {
+            $params = (array) $params;
+        }
+
+        $this->checkUserParams($params);
+        $params = $this->convertCustom($params);
+        $this->extractOptions($params);
+        $this->params = $this->convertArraysToStrings($params);
+
+        return $this;
+    }
+
+    /**
+     * @return array
+     */
+    public function getParams()
+    {
+        return $this->params;
+    }
+
+    /**
+     * @return array
+     */
+    public function getOptions()
+    {
+        return $this->options;
+    }
+
+    /**
+     * @param string $index
+     *
+     * @return $this
+     */
+    public function setIndex($index)
+    {
+        if ($index === null) {
+            return $this;
+        }
+
+        if (is_array($index) === true) {
+            $index = array_map('trim', $index);
+            $index = implode(",", $index);
+        }
+
+        $this->index = urlencode($index);
+
+        return $this;
+    }
+
+    /**
+     * @param string $type
+     *
+     * @return $this
+     */
+    public function setType($type)
+    {
+        if ($type === null) {
+            return $this;
+        }
+
+        if (is_array($type) === true) {
+            $type = array_map('trim', $type);
+            $type = implode(",", $type);
+        }
+
+        $this->type = urlencode($type);
+
+        return $this;
+    }
+
+    /**
+     * @param int|string $docID
+     *
+     * @return $this
+     */
+    public function setID($docID)
+    {
+        if ($docID === null) {
+            return $this;
+        }
+
+        $this->id = urlencode($docID);
+
+        return $this;
+    }
+
+    /**
+     * @return array
+     */
+    public function getBody()
+    {
+        return $this->body;
+    }
+
+    /**
+     * @param string $endpoint
+     *
+     * @return string
+     */
+    protected function getOptionalURI($endpoint)
+    {
+        $uri = array();
+        $uri[] = $this->getOptionalIndex();
+        $uri[] = $this->getOptionalType();
+        $uri[] = $endpoint;
+        $uri =  array_filter($uri);
+
+        return '/' . implode('/', $uri);
+    }
+
+    /**
+     * @return string
+     */
+    private function getOptionalIndex()
+    {
+        if (isset($this->index) === true) {
+            return $this->index;
+        } else {
+            return '_all';
+        }
+    }
+
+    /**
+     * @return string
+     */
+    private function getOptionalType()
+    {
+        if (isset($this->type) === true) {
+            return $this->type;
+        } else {
+            return '';
+        }
+    }
+
+    /**
+     * @param array $params
+     *
+     * @throws \Elasticsearch\Common\Exceptions\UnexpectedValueException
+     */
+    private function checkUserParams($params)
+    {
+        if (isset($params) !== true) {
+            return; //no params, just return.
+        }
+
+        $whitelist = array_merge($this->getParamWhitelist(), array('client', 'custom', 'filter_path', 'human'));
+
+        $invalid = array_diff(array_keys($params), $whitelist);
+        if (count($invalid) > 0) {
+            sort($invalid);
+            sort($whitelist);
+            throw new UnexpectedValueException(sprintf(
+                (count($invalid) > 1 ? '"%s" are not valid parameters.' : '"%s" is not a valid parameter.').' Allowed parameters are "%s"',
+                implode('", "', $invalid),
+                implode('", "', $whitelist)
+            ));
+        }
+    }
+
+    /**
+     * @param $params       Note: this is passed by-reference!
+     */
+    private function extractOptions(&$params)
+    {
+        // Extract out client options, then start transforming
+        if (isset($params['client']) === true) {
+            $this->options['client'] = $params['client'];
+            unset($params['client']);
+        }
+
+        $ignore = isset($this->options['client']['ignore']) ? $this->options['client']['ignore'] : null;
+        if (isset($ignore) === true) {
+            if (is_string($ignore)) {
+                $this->options['client']['ignore'] = explode(",", $ignore);
+            } elseif (is_array($ignore)) {
+                $this->options['client']['ignore'] = $ignore;
+            } else {
+                $this->options['client']['ignore'] = [$ignore];
+            }
+        }
+    }
+
+    private function convertCustom($params)
+    {
+        if (isset($params['custom']) === true) {
+            foreach ($params['custom'] as $k => $v) {
+                $params[$k] = $v;
+            }
+            unset($params['custom']);
+        }
+
+        return $params;
+    }
+
+    private function convertArraysToStrings($params)
+    {
+        foreach ($params as $key => &$value) {
+            if (!($key === 'client' || $key == 'custom') && is_array($value) === true) {
+                if ($this->isNestedArray($value) !== true) {
+                    $value = implode(",", $value);
+                }
+            }
+        }
+
+        return $params;
+    }
+
+    private function isNestedArray($a)
+    {
+        foreach ($a as $v) {
+            if (is_array($v)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Bulk.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Bulk.php
new file mode 100644
index 0000000000000000000000000000000000000000..3bc15bc4e9337bd8019d549afcc0812b77b4afcf
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Bulk.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+
+/**
+ * Class Bulk
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Bulk extends AbstractEndpoint implements BulkEndpointInterface
+{
+    /**
+     * @param SerializerInterface $serializer
+     */
+    public function __construct(SerializerInterface $serializer)
+    {
+        $this->serializer = $serializer;
+    }
+
+    /**
+     * @param string|array|\Traversable $body
+     *
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (empty($body)) {
+            return $this;
+        }
+
+        if (is_array($body) === true || $body instanceof \Traversable) {
+            foreach ($body as $item) {
+                $this->body .= $this->serializer->serialize($item) . "\n";
+            }
+        } else {
+            $this->body = $body;
+        }
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        return $this->getOptionalURI('_bulk');
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'consistency',
+            'refresh',
+            'replication',
+            'type',
+            'fields',
+            'pipeline',
+            '_source',
+            '_source_include',
+            '_source_exclude',
+            'pipeline'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/BulkEndpointInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/BulkEndpointInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7da2545130c7c6ec37283652c11ff08368e3291
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/BulkEndpointInterface.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+
+/**
+ * Interface BulkEndpointInterface
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+interface BulkEndpointInterface
+{
+    /**
+     * Constructor
+     *
+     * @param SerializerInterface $serializer A serializer
+     */
+    public function __construct(SerializerInterface $serializer);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Aliases.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Aliases.php
new file mode 100644
index 0000000000000000000000000000000000000000..959fbaeafae812bdbed0aaff22798365a86fa8f3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Aliases.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Aliases
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Aliases extends AbstractEndpoint
+{
+    // A comma-separated list of alias names to return
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $name = $this->name;
+        $uri   = "/_cat/aliases";
+
+        if (isset($name) === true) {
+            $uri = "/_cat/aliases/$name";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            'format',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Allocation.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Allocation.php
new file mode 100644
index 0000000000000000000000000000000000000000..5322453727143fe0a408ef98676b3d58755f5118
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Allocation.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Allocation
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Allocation extends AbstractEndpoint
+{
+    // A comma-separated list of node IDs or names to limit the returned information
+    private $node_id;
+
+    /**
+     * @param $node_id
+     *
+     * @return $this
+     */
+    public function setNodeId($node_id)
+    {
+        if (isset($node_id) !== true) {
+            return $this;
+        }
+
+        $this->node_id = $node_id;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $node_id = $this->node_id;
+        $uri   = "/_cat/allocation";
+
+        if (isset($node_id) === true) {
+            $uri = "/_cat/allocation/$node_id";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'bytes',
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Count.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Count.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ec9d6423c1bf13760dc3df7e0d2e55cbfb8d88a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Count.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Count
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Count extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_cat/count";
+
+        if (isset($index) === true) {
+            $uri = "/_cat/count/$index";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Fielddata.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Fielddata.php
new file mode 100644
index 0000000000000000000000000000000000000000..eff659ec7ab8dabe4c9c2d1cab585d9a67818fc0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Fielddata.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Fielddata
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Fielddata extends AbstractEndpoint
+{
+    private $fields;
+
+    /**
+     * @param $fields
+     *
+     * @return $this
+     */
+    public function setFields($fields)
+    {
+        if (isset($fields) !== true) {
+            return $this;
+        }
+
+        $this->fields = $fields;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $fields = $this->fields;
+        $uri   = "/_cat/fielddata";
+
+        if (isset($fields) === true) {
+            $uri = "/_cat/fielddata/$fields";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Health.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Health.php
new file mode 100644
index 0000000000000000000000000000000000000000..6a2cf9710c6791fb95979084a3a52d0850105ca5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Health.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Health
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Health extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat/health";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'ts',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Help.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Help.php
new file mode 100644
index 0000000000000000000000000000000000000000..d959ca826d4060c019d35c148beb9b4246ead315
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Help.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Help
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Help extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'help',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Indices.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Indices.php
new file mode 100644
index 0000000000000000000000000000000000000000..97d8b17962109f8cebbb42e37d26910ca70ea078
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Indices.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Indices
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class Indices extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_cat/indices";
+
+        if (isset($index) === true) {
+            $uri = "/_cat/indices/$index";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'bytes',
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'pri',
+            'v',
+            'health',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Master.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Master.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6dbfe17884439ada831ddf79bdd3f87926c63cd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Master.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Master
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Master extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat/master";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/NodeAttrs.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/NodeAttrs.php
new file mode 100644
index 0000000000000000000000000000000000000000..ff0d8fa5366fcfba196522f77eaba8bea5700cc7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/NodeAttrs.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class NodeAttrs
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class NodeAttrs extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat/nodeattrs";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Nodes.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Nodes.php
new file mode 100644
index 0000000000000000000000000000000000000000..8d388c592dd9ba6b6378de0e85c2f6362557e63c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Nodes.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Nodes
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Nodes extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat/nodes";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's',
+            'full_id'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/PendingTasks.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/PendingTasks.php
new file mode 100644
index 0000000000000000000000000000000000000000..435f208fcc1b1e501e0253de3076253e33791f02
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/PendingTasks.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Pendingtasks
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class PendingTasks extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat/pending_tasks";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Plugins.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Plugins.php
new file mode 100644
index 0000000000000000000000000000000000000000..dbdc52a07cb576eec72d1ff4d4da89d9ba797e55
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Plugins.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Health
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Plugins extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat/plugins";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Recovery.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Recovery.php
new file mode 100644
index 0000000000000000000000000000000000000000..4644e8fa8c6f37a036a38bc2f2d7ed6126880113
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Recovery.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Recovery
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Recovery extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_cat/recovery";
+
+        if (isset($index) === true) {
+            $uri = "/_cat/recovery/$index";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'bytes',
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Repositories.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Repositories.php
new file mode 100644
index 0000000000000000000000000000000000000000..1857cd548052917dd1cc9528ae6fcbf260c2e7ef
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Repositories.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Repositories
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Repositories extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat/repositories";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Segments.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Segments.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7b728e306ccd0931f0b18129ee962235c957244
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Segments.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * User: zach
+ * Date: 01/12/2015
+ * Time: 14:34:49 pm
+ */
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Segments
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class Segments extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_cat/segments";
+
+        if (isset($index) === true) {
+            $uri = "/_cat/segments/$index";
+        }
+
+        return $uri;
+    }
+
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Shards.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Shards.php
new file mode 100644
index 0000000000000000000000000000000000000000..1107037cdefc02d674dc04e1bf3d1eb0eb2af6d1
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Shards.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Shards
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Shards extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_cat/shards";
+
+        if (isset($index) === true) {
+            $uri = "/_cat/shards/$index";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'bytes',
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Snapshots.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Snapshots.php
new file mode 100644
index 0000000000000000000000000000000000000000..72d544f3f2834d14f0ee6ee3d90cf37448b5720a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Snapshots.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Common\Exceptions\RuntimeException;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Snapshots
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Snapshots extends AbstractEndpoint
+{
+    private $repository;
+
+    /**
+     * @param $fields
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $repository = $this->repository;
+        if (isset($this->repository) === true) {
+            return "/_cat/snapshots/$repository/";
+        }
+
+        return "/_cat/snapshots/";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Tasks.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Tasks.php
new file mode 100644
index 0000000000000000000000000000000000000000..92cc033536ed1882be986fb450d873b0531c359b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/Tasks.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Tasks
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Tasks extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        return "/_cat/tasks";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'format',
+            'node_id',
+            'actions',
+            'detailed',
+            'parent_node',
+            'parent_task',
+            'h',
+            'help',
+            'v',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/ThreadPool.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/ThreadPool.php
new file mode 100644
index 0000000000000000000000000000000000000000..d2a6e04883b1422c6a379e67b5830cea6fc1b38e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cat/ThreadPool.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cat;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class ThreadPool
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cat
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class ThreadPool extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cat/thread_pool";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'h',
+            'help',
+            'v',
+            'full_id',
+            'size',
+            'thread_pool_patterns',
+            's'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/ClearScroll.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/ClearScroll.php
new file mode 100644
index 0000000000000000000000000000000000000000..e9600171d41fa9a7d6b2eac5b5f23ff2028413db
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/ClearScroll.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Clearscroll
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ClearScroll extends AbstractEndpoint
+{
+    // A comma-separated list of scroll IDs to clear
+    private $scroll_id;
+
+    /**
+     * @param $scroll_id
+     *
+     * @return $this
+     */
+    public function setScroll_Id($scroll_id)
+    {
+        if (isset($scroll_id) !== true) {
+            return $this;
+        }
+
+        $this->scroll_id = $scroll_id;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->scroll_id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'scroll_id is required for Clearscroll'
+            );
+        }
+        $scroll_id = $this->scroll_id;
+        $uri   = "/_search/scroll/$scroll_id";
+
+        if (isset($scroll_id) === true) {
+            $uri = "/_search/scroll/$scroll_id";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/AllocationExplain.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/AllocationExplain.php
new file mode 100644
index 0000000000000000000000000000000000000000..25014bf0251fc71a13b95dd63def781a7f47fd50
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/AllocationExplain.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class AllocationExplain
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class AllocationExplain extends AbstractEndpoint
+{
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        return "/_cluster/allocation/explain";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'include_yes_decisions',
+            'include_disk_info',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Health.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Health.php
new file mode 100644
index 0000000000000000000000000000000000000000..10e8a7c209b3734395e76bbe269ee8ee0dd34205
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Health.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Health
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Health extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_cluster/health";
+
+        if (isset($index) === true) {
+            $uri = "/_cluster/health/$index";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'level',
+            'local',
+            'master_timeout',
+            'timeout',
+            'wait_for_active_shards',
+            'wait_for_nodes',
+            'wait_for_relocating_shards',
+            'wait_for_status',
+            'wait_for_events',
+            'wait_for_no_relocating_shards'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/AbstractNodesEndpoint.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/AbstractNodesEndpoint.php
new file mode 100644
index 0000000000000000000000000000000000000000..3b817b1a3acfc1b1cf74bc170e05c91a4096de04
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/AbstractNodesEndpoint.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster\Nodes;
+
+use Elasticsearch\Common\Exceptions\InvalidArgumentException;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class AbstractNodesEndpoint
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster\Nodes
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+abstract class AbstractNodesEndpoint extends AbstractEndpoint
+{
+    /** @var  string  A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you&#039;re connecting to, leave empty to get information from all nodes */
+    protected $nodeID;
+
+    /**
+     * @param $nodeID
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     *
+     * @return $this
+     */
+    public function setNodeID($nodeID)
+    {
+        if (isset($nodeID) !== true) {
+            return $this;
+        }
+
+        if (!(is_array($nodeID) === true || is_string($nodeID) === true)) {
+            throw new InvalidArgumentException("invalid node_id");
+        }
+
+        if (is_array($nodeID) === true) {
+            $nodeID = implode(',', $nodeID);
+        }
+
+        $this->nodeID = $nodeID;
+
+        return $this;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/HotThreads.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/HotThreads.php
new file mode 100644
index 0000000000000000000000000000000000000000..eeb4a96ac3dd8b052386ebf1e47bbd76488fe6cf
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/HotThreads.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster\Nodes;
+
+/**
+ * Class Hotthreads
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster\Nodes
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class HotThreads extends AbstractNodesEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $node_id = $this->nodeID;
+        $uri   = "/_cluster/nodes/hotthreads";
+
+        if (isset($node_id) === true) {
+            $uri = "/_cluster/nodes/$node_id/hotthreads";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'interval',
+            'snapshots',
+            'threads',
+            'type',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Info.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Info.php
new file mode 100644
index 0000000000000000000000000000000000000000..bde5305b4af0222adb8a1e0cf413ee88762a3e81
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Info.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster\Nodes;
+
+/**
+ * Class Info
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster\Nodes
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Info extends AbstractNodesEndpoint
+{
+    // A comma-separated list of metrics you wish returned. Leave empty to return all.
+    private $metric;
+
+    /**
+     * @param $metric
+     *
+     * @return $this
+     */
+    public function setMetric($metric)
+    {
+        if (isset($metric) !== true) {
+            return $this;
+        }
+
+        if (is_array($metric) === true) {
+            $metric = implode(",", $metric);
+        }
+
+        $this->metric = $metric;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $node_id = $this->nodeID;
+        $metric = $this->metric;
+        $uri   = "/_nodes";
+
+        if (isset($node_id) === true && isset($metric) === true) {
+            $uri = "/_nodes/$node_id/$metric";
+        } elseif (isset($metric) === true) {
+            $uri = "/_nodes/$metric";
+        } elseif (isset($node_id) === true) {
+            $uri = "/_nodes/$node_id";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'flat_settings',
+            'human',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Shutdown.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Shutdown.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b7a6f2c85feb5627bf1589f957ea9fb5941d4ba
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Shutdown.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster\Nodes;
+
+/**
+ * Class Shutdown
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster\Nodes
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Shutdown extends AbstractNodesEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $node_id = $this->nodeID;
+        $uri   = "/_shutdown";
+
+        if (isset($node_id) === true) {
+            $uri = "/_cluster/nodes/$node_id/_shutdown";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'delay',
+            'exit',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Stats.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Stats.php
new file mode 100644
index 0000000000000000000000000000000000000000..94dd6cf34af612e5f2e57a0dad58ffc09087fb1e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Nodes/Stats.php
@@ -0,0 +1,111 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster\Nodes;
+
+/**
+ * Class Stats
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster\Nodes
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Stats extends AbstractNodesEndpoint
+{
+    // Limit the information returned to the specified metrics
+    private $metric;
+
+    // Limit the information returned for `indices` metric to the specific index metrics. Isn&#039;t used if `indices` (or `all`) metric isn&#039;t specified.
+    private $indexMetric;
+
+    /**
+     * @param $metric
+     *
+     * @return $this
+     */
+    public function setMetric($metric)
+    {
+        if (isset($metric) !== true) {
+            return $this;
+        }
+
+        if (is_array($metric) === true) {
+            $metric = implode(",", $metric);
+        }
+
+        $this->metric = $metric;
+
+        return $this;
+    }
+
+    /**
+     * @param $indexMetric
+     *
+     * @return $this
+     */
+    public function setIndexMetric($indexMetric)
+    {
+        if (isset($indexMetric) !== true) {
+            return $this;
+        }
+
+        if (is_array($indexMetric) === true) {
+            $indexMetric = implode(",", $indexMetric);
+        }
+
+        $this->indexMetric = $indexMetric;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $metric = $this->metric;
+        $index_metric = $this->indexMetric;
+        $node_id = $this->nodeID;
+        $uri   = "/_nodes/stats";
+
+        if (isset($node_id) === true && isset($metric) === true && isset($index_metric) === true) {
+            $uri = "/_nodes/$node_id/stats/$metric/$index_metric";
+        } elseif (isset($metric) === true && isset($index_metric) === true) {
+            $uri = "/_nodes/stats/$metric/$index_metric";
+        } elseif (isset($node_id) === true && isset($metric) === true) {
+            $uri = "/_nodes/$node_id/stats/$metric";
+        } elseif (isset($metric) === true) {
+            $uri = "/_nodes/stats/$metric";
+        } elseif (isset($node_id) === true) {
+            $uri = "/_nodes/$node_id/stats";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'completion_fields',
+            'fielddata_fields',
+            'fields',
+            'groups',
+            'human',
+            'level',
+            'types',
+            'include_segment_file_sizes',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/PendingTasks.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/PendingTasks.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ceac3a07dd2ad628ad2bac068db98e84cb3fa55
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/PendingTasks.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Pendingtasks
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class PendingTasks extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cluster/pending_tasks";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Reroute.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Reroute.php
new file mode 100644
index 0000000000000000000000000000000000000000..4113053999ad15d906132692ce53def404693aaa
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Reroute.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Reroute
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Reroute extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cluster/reroute";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'dry_run',
+            'filter_metadata',
+            'master_timeout',
+            'timeout',
+            'explain',
+            'metric'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Settings/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Settings/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..12a53492fd63434afd0fce1fd15e3e3a3d271c53
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Settings/Get.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster\Settings;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster\Settings
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class Get extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cluster/settings";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'flat_settings',
+            'master_timeout',
+            'timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Settings/Put.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Settings/Put.php
new file mode 100644
index 0000000000000000000000000000000000000000..522e7b1d94a3ca1e91307dd04934b8bc1735d9cc
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Settings/Put.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster\Settings;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Put
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster\Settings
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Put extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_cluster/settings";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'flat_settings',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/State.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/State.php
new file mode 100644
index 0000000000000000000000000000000000000000..94af3b19db52d789c0a981d2202b02f223886435
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/State.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class State
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class State extends AbstractEndpoint
+{
+    // Limit the information returned to the specified metrics
+    private $metric;
+
+    /**
+     * @param $metric
+     *
+     * @return $this
+     */
+    public function setMetric($metric)
+    {
+        if (isset($metric) !== true) {
+            return $this;
+        }
+
+        if (is_array($metric) === true) {
+            $metric = implode(",", $metric);
+        }
+
+        $this->metric = $metric;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $metric = $this->metric;
+        $uri   = "/_cluster/state";
+
+        if (isset($metric) === true && isset($index) === true) {
+            $uri = "/_cluster/state/$metric/$index";
+        } elseif (isset($metric) === true) {
+            $uri = "/_cluster/state/$metric";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout',
+            'flat_settings',
+            'index_templates',
+            'expand_wildcards',
+            'ignore_unavailable',
+            'allow_no_indices'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Stats.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Stats.php
new file mode 100644
index 0000000000000000000000000000000000000000..729b611f3d9acede49ec16eadacf4191f99b43b7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Cluster/Stats.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Cluster;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Stats
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Cluster
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Stats extends AbstractEndpoint
+{
+    // A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you&#039;re connecting to, leave empty to get information from all nodes
+    private $nodeID;
+
+    /**
+     * @param $node_id
+     *
+     * @return $this
+     */
+    public function setNodeID($node_id)
+    {
+        if (isset($node_id) !== true) {
+            return $this;
+        }
+
+        $this->nodeID = $node_id;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $node_id = $this->nodeID;
+        $uri   = "/_cluster/stats";
+
+        if (isset($node_id) === true) {
+            $uri = "/_cluster/stats/nodes/$node_id";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'flat_settings',
+            'human',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Count.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Count.php
new file mode 100644
index 0000000000000000000000000000000000000000..7bedb4b3312ddca0d7ef212c30db4338874ff869
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Count.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Count
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Count extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_count";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_count";
+        } elseif (isset($type) === true) {
+            $uri = "/_all/$type/_count";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_count";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'min_score',
+            'preference',
+            'routing',
+            'source',
+            'q',
+            'df',
+            'default_operator',
+            'analyzer',
+            'lowercase_expanded_terms',
+            'analyze_wildcard',
+            'lenient',
+            'lowercase_expanded_terms'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/CountPercolate.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/CountPercolate.php
new file mode 100644
index 0000000000000000000000000000000000000000..f87d6b5e51983291a5dd3f2fb8dbee8232345cec
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/CountPercolate.php
@@ -0,0 +1,90 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class CountPercolate
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class CountPercolate extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for CountPercolate'
+            );
+        }
+
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for CountPercolate'
+            );
+        }
+
+        $index = $this->index;
+        $type  = $this->type;
+        $id    = $this->id;
+        $uri   = "/$index/$type/_percolate/count";
+
+        if (isset($id) === true) {
+            $uri = "/$index/$type/$id/_percolate/count";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'routing',
+            'preference',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'percolate_index',
+            'percolate_type',
+            'version',
+            'version_type'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Create.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Create.php
new file mode 100644
index 0000000000000000000000000000000000000000..bbecabeb59127eccebe02956cf390832a055d3ff
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Create.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Create
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Create extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Create'
+            );
+        }
+
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Create'
+            );
+        }
+
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Create'
+            );
+        }
+
+        $id    = $this->id;
+        $index = $this->index;
+        $type  = $this->type;
+        return "/$index/$type/$id/_create";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'consistency',
+            'op_type',
+            'parent',
+            'percolate',
+            'refresh',
+            'replication',
+            'routing',
+            'timeout',
+            'timestamp',
+            'ttl',
+            'version',
+            'version_type',
+            'pipeline'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Document body must be set for create request');
+        } else {
+            return $this->body;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f51baeadc4b25293bb85d0896a5fab1521e6479
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Delete.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Delete'
+            );
+        }
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Delete'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Delete'
+            );
+        }
+        $id = $this->id;
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/$index/$type/$id";
+
+        if (isset($index) === true && isset($type) === true && isset($id) === true) {
+            $uri = "/$index/$type/$id";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'consistency',
+            'parent',
+            'refresh',
+            'replication',
+            'routing',
+            'timeout',
+            'version',
+            'version_type',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/DeleteByQuery.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/DeleteByQuery.php
new file mode 100644
index 0000000000000000000000000000000000000000..1826589519dc4b1915b74112d389a5e20c5df78e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/DeleteByQuery.php
@@ -0,0 +1,103 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Deletebyquery
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class DeleteByQuery extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (!$this->index) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Deletebyquery'
+            );
+        }
+
+        $uri = "/{$this->index}/_delete_by_query";
+        if ($this->type) {
+            $uri = "/{$this->index}/{$this->type}/_delete_by_query";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            '_source',
+            '_source_exclude',
+            '_source_include',
+            'allow_no_indices',
+            'analyze_wildcard',
+            'analyzer',
+            'conflicts',
+            'default_operator',
+            'df',
+            'expand_wildcards',
+            'from',
+            'ignore_unavailable',
+            'lenient',
+            'preference',
+            'query',
+            'refresh',
+            'request_cache',
+            'requests_per_second',
+            'routing',
+            'scroll',
+            'scroll_size',
+            'search_timeout',
+            'search_type',
+            'size',
+            'slices',
+            'sort',
+            'stats',
+            'terminate_after',
+            'timeout',
+            'version',
+            'wait_for_active_shards',
+            'wait_for_completion',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Exists.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Exists.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ab0bedbc4eec681e609fa49298a60f3191a8f32
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Exists.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Exists
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Exists extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Exists'
+            );
+        }
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Exists'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Exists'
+            );
+        }
+        $id = $this->id;
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/$index/$type/$id";
+
+        if (isset($index) === true && isset($type) === true && isset($id) === true) {
+            $uri = "/$index/$type/$id";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'parent',
+            'preference',
+            'realtime',
+            'refresh',
+            'routing',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'HEAD';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Explain.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Explain.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d1bb2e8167bdbb0ced31c8d75015c92c02cca97
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Explain.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Explain
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Explain extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Explain'
+            );
+        }
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Explain'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Explain'
+            );
+        }
+        $id = $this->id;
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/$index/$type/$id/_explain";
+
+        if (isset($index) === true && isset($type) === true && isset($id) === true) {
+            $uri = "/$index/$type/$id/_explain";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'analyze_wildcard',
+            'analyzer',
+            'default_operator',
+            'df',
+            'fields',
+            'lenient',
+            'lowercase_expanded_terms',
+            'parent',
+            'preference',
+            'q',
+            'routing',
+            'source',
+            '_source',
+            '_source_exclude',
+            '_source_include',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/FieldStats.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/FieldStats.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ca80d83e18bcdaccc8d55090ab25ba8ed9d47f0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/FieldStats.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class FieldStats
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class FieldStats extends AbstractEndpoint
+{
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_field_stats";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_field_stats";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'fields',
+            'level',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'fields'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..34fa6669ee830cd96c84c4eede7402507c88a59a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Get.php
@@ -0,0 +1,113 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    /** @var bool  */
+    private $returnOnlySource = false;
+
+    /** @var bool  */
+    private $checkOnlyExistance = false;
+
+    /**
+     * @return $this
+     */
+    public function returnOnlySource()
+    {
+        $this->returnOnlySource = true;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function checkOnlyExistance()
+    {
+        $this->checkOnlyExistance = true;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Get'
+            );
+        }
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Get'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Get'
+            );
+        }
+        $id = $this->id;
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/$index/$type/$id";
+
+        if (isset($index) === true && isset($type) === true && isset($id) === true) {
+            $uri = "/$index/$type/$id";
+        }
+
+        if ($this->returnOnlySource === true) {
+            $uri .= '/_source';
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'fields',
+            'parent',
+            'preference',
+            'realtime',
+            'refresh',
+            'routing',
+            '_source',
+            '_source_exclude',
+            '_source_include',
+            'version',
+            'version_type',
+            'stored_fields'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        if ($this->checkOnlyExistance === true) {
+            return 'HEAD';
+        } else {
+            return 'GET';
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Index.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Index.php
new file mode 100644
index 0000000000000000000000000000000000000000..ba3c82a0b8b6879ea7aea848944da95cae0a09d0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Index.php
@@ -0,0 +1,123 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Index
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Index extends AbstractEndpoint
+{
+    /** @var bool  */
+    private $createIfAbsent = false;
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return $this
+     */
+    public function createIfAbsent()
+    {
+        $this->createIfAbsent = true;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Index'
+            );
+        }
+
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Index'
+            );
+        }
+
+        $id    = $this->id;
+        $index = $this->index;
+        $type  = $this->type;
+        $uri   = "/$index/$type";
+
+        if (isset($id) === true) {
+            $uri = "/$index/$type/$id";
+        }
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'consistency',
+            'op_type',
+            'parent',
+            'percolate',
+            'refresh',
+            'replication',
+            'routing',
+            'timeout',
+            'timestamp',
+            'ttl',
+            'version',
+            'version_type',
+            'pipeline'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        if (isset($this->id) === true) {
+            return 'PUT';
+        } else {
+            return 'POST';
+        }
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Document body must be set for index request');
+        } else {
+            return $this->body;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/AbstractAliasEndpoint.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/AbstractAliasEndpoint.php
new file mode 100644
index 0000000000000000000000000000000000000000..c3ebf84851e91dc70cbbbaec7db46145e754aebb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/AbstractAliasEndpoint.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Alias;
+
+use Elasticsearch\Common\Exceptions\InvalidArgumentException;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class AbstractAliasEndpoint
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints\Indices\Alias
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+abstract class AbstractAliasEndpoint extends AbstractEndpoint
+{
+    /** @var null|string */
+    protected $name = null;
+
+    /**
+     * @param $name
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (is_string($name) !== true) {
+            throw new InvalidArgumentException('Name must be a string');
+        }
+        $this->name = urlencode($name);
+
+        return $this;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ed46816d9e0930e8e856bc89add57739c457db0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Delete.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Alias;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints\Indices\Alias
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    // A comma-separated list of aliases to delete (supports wildcards); use `_all` to delete all aliases for the specified indices.
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Delete'
+            );
+        }
+        if (isset($this->name) !== true) {
+            throw new Exceptions\RuntimeException(
+                'name is required for Delete'
+            );
+        }
+        $index = $this->index;
+        $name = $this->name;
+        $uri   = "/$index/_alias/$name";
+
+        if (isset($index) === true && isset($name) === true) {
+            $uri = "/$index/_alias/$name";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Exists.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Exists.php
new file mode 100644
index 0000000000000000000000000000000000000000..abc978a19f6877969f6ac27ae1380e5f4aa90dd0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Exists.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Alias;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Exists
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Alias
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Exists extends AbstractEndpoint
+{
+    // A comma-separated list of alias names to return
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $name = $this->name;
+        $uri   = "/_alias/$name";
+
+        if (isset($index) === true && isset($name) === true) {
+            $uri = "/$index/_alias/$name";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_alias";
+        } elseif (isset($name) === true) {
+            $uri = "/_alias/$name";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'HEAD';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..8b2ae03a70b367f8e0ee3cd9049f2d6229d58769
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Get.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Alias;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Alias
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    // A comma-separated list of alias names to return
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $name = $this->name;
+        $uri   = "/_alias";
+
+        if (isset($index) === true && isset($name) === true) {
+            $uri = "/$index/_alias/$name";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_alias";
+        } elseif (isset($name) === true) {
+            $uri = "/_alias/$name";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Put.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Put.php
new file mode 100644
index 0000000000000000000000000000000000000000..a91d6254f1172cbbecf07f93362ed417149a4c8d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Alias/Put.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Alias;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Put
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Alias
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Put extends AbstractEndpoint
+{
+    // The name of the alias to be created or updated
+    private $name;
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->name) !== true) {
+            throw new Exceptions\RuntimeException(
+                'name is required for Put'
+            );
+        }
+
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Put'
+            );
+        }
+        $index = $this->index;
+        $name = $this->name;
+        $uri = "/$index/_alias/$name";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Aliases/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Aliases/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e9287fdc3843826e123b88ba6bb2b475d53f56c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Aliases/Get.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Aliases;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Aliases
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    // A comma-separated list of alias names to filter
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $name = $this->name;
+        $uri   = "/_aliases";
+
+        if (isset($index) === true && isset($name) === true) {
+            $uri = "/$index/_aliases/$name";
+        } elseif (isset($name) === true) {
+            $uri = "/_aliases/$name";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_aliases";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Aliases/Update.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Aliases/Update.php
new file mode 100644
index 0000000000000000000000000000000000000000..a715b0f98a553f25b5272d0fe2c8da1b625b0aba
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Aliases/Update.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Aliases;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Update
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Aliases
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Update extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_aliases";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for Update Aliases');
+        }
+
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Analyze.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Analyze.php
new file mode 100644
index 0000000000000000000000000000000000000000..ac77879487df05eb94ec2648f7896ce561864942
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Analyze.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Analyze
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Analyze extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_analyze";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_analyze";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'analyzer',
+            'field',
+            'filter',
+            'index',
+            'prefer_local',
+            'text',
+            'tokenizer',
+            'format',
+            'char_filter',
+            'explain',
+            'attributes',
+            'format'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Cache/Clear.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Cache/Clear.php
new file mode 100644
index 0000000000000000000000000000000000000000..787072d513002cb45bab02992c6bddb9a7a0967a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Cache/Clear.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Cache;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Clear
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Cache
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Clear extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_cache/clear";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_cache/clear";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'field_data',
+            'fielddata',
+            'fields',
+            'filter',
+            'filter_cache',
+            'filter_keys',
+            'id',
+            'id_cache',
+            'index',
+            'recycler',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ClearCache.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ClearCache.php
new file mode 100644
index 0000000000000000000000000000000000000000..4b502ba5a37e2b1d9f11b6373ed5a7a990322d3b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ClearCache.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class ClearCache
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ClearCache extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_cache/clear";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_cache/clear";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'field_data',
+            'fielddata',
+            'fields',
+            'filter',
+            'filter_cache',
+            'filter_keys',
+            'id',
+            'id_cache',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'index',
+            'recycler',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Close.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Close.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d5bf7e6f525d61f25c323523f307ba21859d552
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Close.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Close
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Close extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Close'
+            );
+        }
+        $index = $this->index;
+        $uri   = "/$index/_close";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_close";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Create.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Create.php
new file mode 100644
index 0000000000000000000000000000000000000000..505d252d649b5f8123f50d7931044dede2c84769
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Create.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Create
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Create extends AbstractEndpoint
+{
+    /**
+     * @param array|object $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Create'
+            );
+        }
+        $index = $this->index;
+        $uri   = "/$index";
+
+        if (isset($index) === true) {
+            $uri = "/$index";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+            'update_all_types',
+            'wait_for_active_shards'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..b832e7114567a02f655f87a35e4b3ea141b614f7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Delete.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/$index";
+
+        if (isset($index) === true) {
+            $uri = "/$index";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Exists.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Exists.php
new file mode 100644
index 0000000000000000000000000000000000000000..ac45e3f74cfc1e0365fa6b57747fd22e46609ffa
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Exists.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Exists
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Exists extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Exists'
+            );
+        }
+        $index = $this->index;
+        $uri   = "/$index";
+
+        if (isset($index) === true) {
+            $uri = "/$index";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'HEAD';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Exists/Types.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Exists/Types.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5b4b67a6e23519fd71c6907af49ac761ab1279d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Exists/Types.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Exists;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Types
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Exists
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Types extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Types Exists'
+            );
+        }
+
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Types Exists'
+            );
+        }
+
+        $index = $this->index;
+        $type  = $this->type;
+        $uri   = "/$index/$type";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'HEAD';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Field/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Field/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..c991234626acf536a6f48e615568736372dc2b32
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Field/Get.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Field;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Field
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    // A comma-separated list of fields
+    private $field;
+
+    /**
+     * @param $field
+     *
+     * @return $this
+     */
+    public function setField($field)
+    {
+        if (isset($field) !== true) {
+            return $this;
+        }
+
+        $this->field = $field;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->field) !== true) {
+            throw new Exceptions\RuntimeException(
+                'field is required for Get'
+            );
+        }
+        $index = $this->index;
+        $type = $this->type;
+        $field = $this->field;
+        $uri   = "/_mapping/field/$field";
+
+        if (isset($index) === true && isset($type) === true && isset($field) === true) {
+            $uri = "/$index/_mapping/$type/field/$field";
+        } elseif (isset($type) === true && isset($field) === true) {
+            $uri = "/_mapping/$type/field/$field";
+        } elseif (isset($index) === true && isset($field) === true) {
+            $uri = "/$index/_mapping/field/$field";
+        } elseif (isset($field) === true) {
+            $uri = "/_mapping/field/$field";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'include_defaults',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Flush.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Flush.php
new file mode 100644
index 0000000000000000000000000000000000000000..f8d7c4b3448aea0e6cb44e1f7cd8f6b33f5866db
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Flush.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Flush
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Flush extends AbstractEndpoint
+{
+    protected $synced = false;
+
+    public function setSynced($synced)
+    {
+        $this->synced = $synced;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_flush";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_flush";
+        }
+
+        if ($this->synced === true) {
+            $uri .= "/synced";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'force',
+            'full',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'wait_if_ongoing'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ForceMerge.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ForceMerge.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e6e0b4653d09084b657967a13d152dc13d8cd8e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ForceMerge.php
@@ -0,0 +1,57 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class ForceMerge
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ForceMerge extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_forcemerge";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_forcemerge";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'flush',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'max_num_segments',
+            'only_expunge_deletes',
+            'operation_threading',
+            'wait_for_merge',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Gateway/Snapshot.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Gateway/Snapshot.php
new file mode 100644
index 0000000000000000000000000000000000000000..b492ceae90c8af302c779335b836bcf4983cca5b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Gateway/Snapshot.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Gateway;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Snapshot
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Gateway
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Snapshot extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_gateway/snapshot";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_gateway/snapshot";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..58a7de7b0eabe5565f9e973a5cc43d54a78140fb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Get.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Get
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    private $feature;
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Get'
+            );
+        }
+        $index   = $this->index;
+        $feature = $this->feature;
+        $uri     = "/$index";
+
+        if (isset($feature) === true) {
+            $uri = "/$index/$feature";
+        }
+
+        return $uri;
+    }
+
+    public function setFeature($feature)
+    {
+        if (isset($feature) !== true) {
+            return $this;
+        }
+
+        if (is_array($feature) === true) {
+            $feature = implode(",", $feature);
+        }
+
+        $this->feature = $feature;
+
+        return $this;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'human'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..87ac13d9844de5347669a7c0678a871a2a711a41
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Delete.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Mapping;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Mapping
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Delete'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Delete'
+            );
+        }
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/$index/$type/_mapping";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_mapping";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..88568e6dc10216b0d143fbafb9e2ac87b9aa7857
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Get.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Mapping;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Mapping
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_mapping";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/_mapping/$type";
+        } elseif (isset($type) === true) {
+            $uri = "/_mapping/$type";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_mapping";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'wildcard_expansion',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/GetField.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/GetField.php
new file mode 100644
index 0000000000000000000000000000000000000000..068be334d5f26bc89141b3755860d28ba9c07ce5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/GetField.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Mapping;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class GetField
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Mapping
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class GetField extends AbstractEndpoint
+{
+    /** @var  string */
+    private $fields;
+
+    /**
+     * @param string|array $fields
+     *
+     * @return $this
+     */
+    public function setFields($fields)
+    {
+        if (isset($fields) !== true) {
+            return $this;
+        }
+
+        if (is_array($fields) === true) {
+            $fields = implode(",", $fields);
+        }
+
+        $this->fields = $fields;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->fields) !== true) {
+            throw new Exceptions\RuntimeException(
+                'fields is required for Get Field Mapping'
+            );
+        }
+        $uri = $this->getOptionalURI('_mapping/field');
+
+        return $uri.'/'.$this->fields;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'include_defaults',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'local'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Put.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Put.php
new file mode 100644
index 0000000000000000000000000000000000000000..1639ca72b71f9a93cae4892422e61875c6291ac9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Mapping/Put.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Mapping;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Put
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Mapping
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Put extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Put'
+            );
+        }
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_mapping/$type";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_mapping";
+        } elseif (isset($type) === true) {
+            $uri = "/_mapping/$type";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_conflicts',
+            'timeout',
+            'master_timeout',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'update_all_types'
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for Put Mapping');
+        }
+
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Open.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Open.php
new file mode 100644
index 0000000000000000000000000000000000000000..6808659b59420b89437bf61eea9b15aa41c39bf7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Open.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Open
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Open extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Open'
+            );
+        }
+        $index = $this->index;
+        $uri   = "/$index/_open";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_open";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Recovery.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Recovery.php
new file mode 100644
index 0000000000000000000000000000000000000000..11e11cf69d2cdb379385fbf278face497d810958
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Recovery.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Recovery
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Recovery extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_recovery";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_recovery";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'detailed',
+            'active_only',
+            'human'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Refresh.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Refresh.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7938d15176ccb410c5aa7ea59f850fa2554771d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Refresh.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Refresh
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Refresh extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_refresh";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_refresh";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'force',
+            'operation_threading',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Rollover.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Rollover.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc188eadf89200f2404181ab759d81df569ea959
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Rollover.php
@@ -0,0 +1,109 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Rollover
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Rollover extends AbstractEndpoint
+{
+    private $alias;
+    private $newIndex;
+
+    /**
+     * @param string $alias
+     *
+     * @return $this
+     */
+    public function setAlias($alias)
+    {
+        if ($alias === null) {
+            return $this;
+        }
+
+        $this->alias = urlencode($alias);
+        return $this;
+    }
+
+    /**
+     * @param string $newIndex
+     *
+     * @return $this
+     */
+    public function setNewIndex($newIndex)
+    {
+        if ($newIndex === null) {
+            return $this;
+        }
+
+        $this->newIndex = urlencode($newIndex);
+        return $this;
+    }
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->alias) !== true) {
+            throw new Exceptions\RuntimeException(
+                'alias name is required for Rollover'
+            );
+        }
+
+        $uri = "/{$this->alias}/_rollover";
+
+        if (isset($this->newIndex) === true) {
+            $uri .= "/{$this->newIndex}";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+            'wait_for_active_shards',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Seal.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Seal.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6f51382907c08be86009180be027487eed35d83
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Seal.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Seal
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Seal extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_seal";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_seal";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array();
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Segments.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Segments.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ade2912ef2ceb2edf9d4a940ef69629b2baae07
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Segments.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Segments
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Segments extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_segments";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_segments";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'human',
+            'operation_threading',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Settings/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Settings/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..943bfd98378ba4d71551cf25ea7734ceb693de4b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Settings/Get.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Settings;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Settings
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    // The name of the settings that should be included
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $name = $this->name;
+        $uri   = "/_settings";
+
+        if (isset($index) === true && isset($name) === true) {
+            $uri = "/$index/_settings/$name";
+        } elseif (isset($name) === true) {
+            $uri = "/_settings/$name";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_settings";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'flat_settings',
+            'local',
+            'include_defaults'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Settings/Put.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Settings/Put.php
new file mode 100644
index 0000000000000000000000000000000000000000..57f211a31e49309e4a5742b8c596e670eda7430e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Settings/Put.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Settings;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Put
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Settings
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Put extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_settings";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_settings";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'flat_settings',
+            'preserve_existing'
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for Put Settings');
+        }
+
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ShardStores.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ShardStores.php
new file mode 100644
index 0000000000000000000000000000000000000000..10dc447260ed152b8f6007aa399fde5c36f4b63f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ShardStores.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class ShardStores
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class ShardStores extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_shard_stores";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_shard_stores";
+        }
+
+        return $uri;
+    }
+
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'status',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'operation_threading'
+        );
+    }
+
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Shrink.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Shrink.php
new file mode 100644
index 0000000000000000000000000000000000000000..b4e7832b7db2249c66ce45a64f27a5f03adf1e0e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Shrink.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Shrink.
+ *
+ * @category Elasticsearch
+ *
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ *
+ * @link     http://elastic.co
+ */
+class Shrink extends AbstractEndpoint
+{
+    // The name of the target index to shrink into
+    private $target;
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     *
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @param $target
+     *
+     * @return $this
+     */
+    public function setTarget($target)
+    {
+        if (isset($target) !== true) {
+            return $this;
+        }
+        $this->target = $target;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\BadMethodCallException
+     *
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Shrink'
+            );
+        }
+        if (isset($this->target) !== true) {
+            throw new Exceptions\RuntimeException(
+                'target is required for Shrink'
+            );
+        }
+        $index = $this->index;
+        $target = $this->target;
+        $uri = "/$index/_shrink/$target";
+        if (isset($index) === true && isset($target) === true) {
+            $uri = "/$index/_shrink/$target";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        //TODO Fix Me!
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Snapshotindex.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Snapshotindex.php
new file mode 100644
index 0000000000000000000000000000000000000000..e30530b1d09fbf3418bdc2694fa6ab4a7c4ee7b7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Snapshotindex.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Snapshotindex
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Snapshotindex extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_gateway/snapshot";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_gateway/snapshot";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Stats.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Stats.php
new file mode 100644
index 0000000000000000000000000000000000000000..bbdc1d2fcabb0bb2e6cd77bcd9bffb004318bcc1
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Stats.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Stats
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Stats extends AbstractEndpoint
+{
+    // Limit the information returned the specific metrics.
+    private $metric;
+
+    /**
+     * @param $metric
+     *
+     * @return $this
+     */
+    public function setMetric($metric)
+    {
+        if (isset($metric) !== true) {
+            return $this;
+        }
+
+        if (is_array($metric)) {
+            $metric = implode(",", $metric);
+        }
+
+        $this->metric = $metric;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $metric = $this->metric;
+        $uri   = "/_stats";
+
+        if (isset($index) === true && isset($metric) === true) {
+            $uri = "/$index/_stats/$metric";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_stats";
+        } elseif (isset($metric) === true) {
+            $uri = "/_stats/$metric";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'completion_fields',
+            'fielddata_fields',
+            'fields',
+            'groups',
+            'human',
+            'level',
+            'types',
+            'metric',
+            'include_segment_file_sizes'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Status.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Status.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc52f84e5953251fe3b1881be4ab6d20e37101eb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Status.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Status
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Status extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_status";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_status";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'human',
+            'operation_threading',
+            'recovery',
+            'snapshot',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/AbstractTemplateEndpoint.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/AbstractTemplateEndpoint.php
new file mode 100644
index 0000000000000000000000000000000000000000..cde022581a575d5d6b697b1a469b07d7a25af0b2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/AbstractTemplateEndpoint.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Template;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class AbstractTemplateEndpoint
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Template
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+abstract class AbstractTemplateEndpoint extends AbstractEndpoint
+{
+    /** @var  string */
+    protected $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        $this->name = $name;
+
+        return $this;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..044dce6f1bb4db6cc15ccfce30e34de99ff96850
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Delete.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Template;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints\Indices\Template
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class Delete extends AbstractEndpoint
+{
+    // The name of the template
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->name) !== true) {
+            throw new Exceptions\RuntimeException(
+                'name is required for Delete'
+            );
+        }
+        $name = $this->name;
+        $uri   = "/_template/$name";
+
+        if (isset($name) === true) {
+            $uri = "/_template/$name";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'timeout',
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Exists.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Exists.php
new file mode 100644
index 0000000000000000000000000000000000000000..ebf6fdfe3cafa911f159b09a9cc3d3fe8730fe2e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Exists.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Template;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Exists
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Template
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Exists extends AbstractEndpoint
+{
+    // The name of the template
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->name) !== true) {
+            throw new Exceptions\RuntimeException(
+                'name is required for Exists'
+            );
+        }
+        $name = $this->name;
+        $uri   = "/_template/$name";
+
+        if (isset($name) === true) {
+            $uri = "/_template/$name";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'local',
+            'master_timeout'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'HEAD';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..77472063dbd6bc093654b53421f261190803b9f5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Get.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Template;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Template
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    // The name of the template
+    private $name;
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        $name = $this->name;
+        $uri   = "/_template";
+
+        if (isset($name) === true) {
+            $uri = "/_template/$name";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'flat_settings',
+            'local',
+            'master_timeout'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Put.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Put.php
new file mode 100644
index 0000000000000000000000000000000000000000..3aca04607d06951c206563c0114c5ee1734b853a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Template/Put.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Template;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Put
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Template
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Put extends AbstractEndpoint
+{
+    // The name of the template
+    private $name;
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @param $name
+     *
+     * @return $this
+     */
+    public function setName($name)
+    {
+        if (isset($name) !== true) {
+            return $this;
+        }
+
+        $this->name = $name;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->name) !== true) {
+            throw new Exceptions\RuntimeException(
+                'name is required for Put'
+            );
+        }
+        $name = $this->name;
+        $uri   = "/_template/$name";
+
+        if (isset($name) === true) {
+            $uri = "/_template/$name";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'order',
+            'timeout',
+            'master_timeout',
+            'flat_settings',
+            'create'
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for Put Template');
+        }
+
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Type/Exists.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Type/Exists.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2951892997a8222e778127aab9eae536df18a3c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Type/Exists.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Type;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Exists
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Type
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Exists extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Exists'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Exists'
+            );
+        }
+        $uri   = "/{$this->index}/_mapping/{$this->type}";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'HEAD';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Upgrade/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Upgrade/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..d9cb7bea29cccd631a09d310bd154047e8582c20
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Upgrade/Get.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * User: zach
+ * Date: 01/20/2014
+ * Time: 14:34:49 pm
+ */
+
+namespace Elasticsearch\Endpoints\Indices\Upgrade;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Post
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class Get extends AbstractEndpoint
+{
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_upgrade";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_upgrade";
+        }
+
+
+        return $uri;
+    }
+
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'wait_for_completion',
+            'only_ancient_segments',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+        );
+    }
+
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Upgrade/Post.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Upgrade/Post.php
new file mode 100644
index 0000000000000000000000000000000000000000..5b00f68b61f29594e717b1f37ef2027ab3113006
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Upgrade/Post.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * User: zach
+ * Date: 01/20/2014
+ * Time: 14:34:49 pm
+ */
+
+namespace Elasticsearch\Endpoints\Indices\Upgrade;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Post
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class Post extends AbstractEndpoint
+{
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_upgrade";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_upgrade";
+        }
+
+
+        return $uri;
+    }
+
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'wait_for_completion',
+            'only_ancient_segments',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+        );
+    }
+
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Validate/Query.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Validate/Query.php
new file mode 100644
index 0000000000000000000000000000000000000000..a963038037f0b7e21bcae6755b50e67497d103e7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/Validate/Query.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices\Validate;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Query
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices\Validate
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Query extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        return $this->getOptionalURI('_validate/query');
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'explain',
+            'ignore_indices',
+            'operation_threading',
+            'source',
+            'q',
+            'df',
+            'default_operator',
+            'analyzer',
+            'analyze_wildcard',
+            'lenient',
+            'lowercase_expanded_terms'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ValidateQuery.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ValidateQuery.php
new file mode 100644
index 0000000000000000000000000000000000000000..df94c02a9831b87d420602959d9b9a4752dadc0d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Indices/ValidateQuery.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Indices;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class ValidateQuery
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ValidateQuery extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_validate/query";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_validate/query";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_validate/query";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'explain',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'operation_threading',
+            'source',
+            'q',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Info.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Info.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc157d7bc86b2f5ca7687aac42e2923048137efc
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Info.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+/**
+ * Class Info
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Info extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..b61e9e81387693031b0327c567fc333fae51eaad
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Delete.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Ingest\Pipeline;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Ingest
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for DeletePipeline'
+            );
+        }
+        $id = $this->id;
+        $uri = "/_ingest/pipeline/$id";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'timeout'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5cf38fca02da3e3389a8b498bea2e634989fdea
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Get.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Ingest\Pipeline;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Ingest
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            return '/_ingest/pipeline/*';
+        }
+
+        $id = $this->id;
+
+        return "/_ingest/pipeline/$id";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Put.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Put.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8707b3cb94dfa93a5d482aae13fee8441afc6e6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Pipeline/Put.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Ingest\Pipeline;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Put
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Ingest
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Put extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for PutPipeline'
+            );
+        }
+        $id = $this->id;
+        $uri = "/_ingest/pipeline/$id";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'timeout'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Simulate.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Simulate.php
new file mode 100644
index 0000000000000000000000000000000000000000..f4570bbdf0155e4bfdbeea6df7f621c55c09a81c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ingest/Simulate.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Ingest;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Simulate
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Ingest
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Simulate extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) === true) {
+            return "/_ingest/pipeline/{$this->id}/_simulate";
+        }
+        return "/_ingest/pipeline/_simulate";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'verbose',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/MPercolate.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/MPercolate.php
new file mode 100644
index 0000000000000000000000000000000000000000..47d20a88fd1578801ebab77610e0d3829fc674e7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/MPercolate.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+
+/**
+ * Class MPercolate
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class MPercolate extends AbstractEndpoint implements BulkEndpointInterface
+{
+    /**
+     * @param SerializerInterface $serializer
+     */
+    public function __construct(SerializerInterface $serializer)
+    {
+        $this->serializer = $serializer;
+    }
+
+    /**
+     * @param string|array $body
+     *
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        if (is_array($body) === true) {
+            $bulkBody = "";
+            foreach ($body as $item) {
+                $bulkBody .= $this->serializer->serialize($item)."\n";
+            }
+            $body = $bulkBody;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        return $this->getOptionalURI('_mpercolate');
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/MTermVectors.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/MTermVectors.php
new file mode 100644
index 0000000000000000000000000000000000000000..e723920d9d85a71c90cb1913aaf1f38ccb2cd2d9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/MTermVectors.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class MTermVectors
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class MTermVectors extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        return $this->getOptionalURI('_mtermvectors');
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ids',
+            'term_statistics',
+            'field_statistics',
+            'fields',
+            'offsets',
+            'positions',
+            'payloads',
+            'preference',
+            'routing',
+            'parent',
+            'realtime'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Mget.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Mget.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d7dd562c4706566e5354d4133f570464f49e305
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Mget.php
@@ -0,0 +1,93 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Mget
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Mget extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_mget";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_mget";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_mget";
+        } elseif (isset($type) === true) {
+            $uri = "/_all/$type/_mget";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'fields',
+            'preference',
+            'realtime',
+            'refresh',
+            '_source',
+            '_source_exclude',
+            '_source_include',
+            'routing',
+            'stored_fields'
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for MGet');
+        }
+
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Msearch.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Msearch.php
new file mode 100644
index 0000000000000000000000000000000000000000..b4b4d1e82524accd6c533f1cf16b2e74b8944b30
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Msearch.php
@@ -0,0 +1,103 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+
+/**
+ * Class Msearch
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Msearch extends AbstractEndpoint
+{
+    /**
+     * @param SerializerInterface $serializer
+     */
+    public function __construct(SerializerInterface $serializer)
+    {
+        $this->serializer = $serializer;
+    }
+
+    /**
+     * @param array|string $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        if (is_array($body) === true) {
+            $bulkBody = "";
+            foreach ($body as $item) {
+                $bulkBody .= $this->serializer->serialize($item)."\n";
+            }
+            $body = $bulkBody;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_msearch";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_msearch";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_msearch";
+        } elseif (isset($type) === true) {
+            $uri = "/_all/$type/_msearch";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'search_type',
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for MSearch');
+        }
+
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Percolate.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Percolate.php
new file mode 100644
index 0000000000000000000000000000000000000000..4418d7dc4e86b5af03864cdcd0703e2576aebbc9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Percolate.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Percolate
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Percolate extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Percolate'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Percolate'
+            );
+        }
+        $index = $this->index;
+        $type  = $this->type;
+        $id    = $this->id;
+        $uri   = "/$index/$type/_percolate";
+
+        if (isset($id) === true) {
+            $uri = "/$index/$type/$id/_percolate";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'routing',
+            'preference',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'percolate_index',
+            'percolate_type',
+            'version',
+            'version_type',
+            'percolate_format'
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ping.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ping.php
new file mode 100644
index 0000000000000000000000000000000000000000..a11d902874402467fb749de5f2c3684f5b6a3068
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Ping.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+/**
+ * Class Ping
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Ping extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'HEAD';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Reindex.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Reindex.php
new file mode 100644
index 0000000000000000000000000000000000000000..5f8b97c86e59c984f3a7c9b764239ceac40e833c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Reindex.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+/**
+ * Class Reindex
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Indices
+ * @author   Augustin Husson <husson.augustin@gmail.com>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Reindex extends AbstractEndpoint
+{
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'refresh',
+            'timeout',
+            'consistency',
+            'wait_for_completion',
+            'requests_per_second',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        return '/_reindex';
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/RenderSearchTemplate.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/RenderSearchTemplate.php
new file mode 100644
index 0000000000000000000000000000000000000000..c31eb7238c3e0d14eb73434bf893ac21fda12cc7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/RenderSearchTemplate.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Render
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class RenderSearchTemplate extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        $id = $this->id;
+
+        $uri   = "/_render/template";
+
+        if (isset($id) === true) {
+            $uri = "/_render/template/$id";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array();
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..887c9f8b9be66fe44714ab349df60e51fec142a8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Delete.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Script;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Script
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    /** @var  String */
+    private $lang;
+
+    /**
+     * @param $lang
+     *
+     * @return $this
+     */
+    public function setLang($lang)
+    {
+        if (isset($lang) !== true) {
+            return $this;
+        }
+
+        $this->lang = $lang;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->lang) !== true) {
+            throw new Exceptions\RuntimeException(
+                'lang is required for Put'
+            );
+        }
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for put'
+            );
+        }
+        $id   = $this->id;
+        $lang = $this->lang;
+        $uri  = "/_scripts/$lang/$id";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'version',
+            'version_type'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..78c01c8c52285c44abf15badd6d5f4ff10f4b43a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Get.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Script;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Script
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    /** @var  String */
+    private $lang;
+
+    /**
+     * @param $lang
+     *
+     * @return $this
+     */
+    public function setLang($lang)
+    {
+        if (isset($lang) !== true) {
+            return $this;
+        }
+
+        $this->lang = $lang;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->lang) !== true) {
+            throw new Exceptions\RuntimeException(
+                'lang is required for Put'
+            );
+        }
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for put'
+            );
+        }
+        $id   = $this->id;
+        $lang = $this->lang;
+        $uri  = "/_scripts/$lang/$id";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'version_type',
+            'version'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Put.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Put.php
new file mode 100644
index 0000000000000000000000000000000000000000..d10603e302b8d7f351c1298a5065fd47ec50ed2c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Script/Put.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Script;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Put
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Script
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Put extends AbstractEndpoint
+{
+    /** @var  String */
+    private $lang;
+
+    /**
+     * @param $lang
+     *
+     * @return $this
+     */
+    public function setLang($lang)
+    {
+        if (isset($lang) !== true) {
+            return $this;
+        }
+
+        $this->lang = $lang;
+
+        return $this;
+    }
+
+    /**
+     * @param array $body
+     *
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->lang) !== true) {
+            throw new Exceptions\RuntimeException(
+                'lang is required for Put'
+            );
+        }
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for put'
+            );
+        }
+        $id   = $this->id;
+        $lang = $this->lang;
+        $uri  = "/_scripts/$lang/$id";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'version_type',
+            'version',
+            'op_type'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Scroll.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Scroll.php
new file mode 100644
index 0000000000000000000000000000000000000000..65aab8ddc249b8fe2ae68fec1232f86c8e006da2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Scroll.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Scroll
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Scroll extends AbstractEndpoint
+{
+    private $clear = false;
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return array
+     */
+    public function getBody()
+    {
+        return $this->body;
+    }
+
+    public function setClearScroll($clear)
+    {
+        $this->clear = $clear;
+
+        return $this;
+    }
+
+    /**
+     * @param $scroll_id
+     *
+     * @return $this
+     */
+    public function setScrollId($scroll_id)
+    {
+        if (isset($scroll_id) !== true) {
+            return $this;
+        }
+
+        $this->body = $scroll_id;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $uri   = "/_search/scroll";
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'scroll',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        if ($this->clear == true) {
+            return 'DELETE';
+        }
+
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Search.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Search.php
new file mode 100644
index 0000000000000000000000000000000000000000..b23e613945bff1c761a0dea1f03b9f96079f00d9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Search.php
@@ -0,0 +1,108 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions\InvalidArgumentException;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Search
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Search extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_search";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_search";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_search";
+        } elseif (isset($type) === true) {
+            $uri = "/_all/$type/_search";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'analyzer',
+            'analyze_wildcard',
+            'default_operator',
+            'df',
+            'explain',
+            'from',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'indices_boost',
+            'lenient',
+            'lowercase_expanded_terms',
+            'preference',
+            'q',
+            'query_cache',
+            'request_cache',
+            'routing',
+            'scroll',
+            'search_type',
+            'size',
+            'sort',
+            'source',
+            '_source',
+            '_source_exclude',
+            '_source_include',
+            'stats',
+            'suggest_field',
+            'suggest_mode',
+            'suggest_size',
+            'suggest_text',
+            'timeout',
+            'version',
+            'fielddata_fields',
+            'docvalue_fields',
+            'filter_path',
+            'terminate_after',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/SearchShards.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/SearchShards.php
new file mode 100644
index 0000000000000000000000000000000000000000..85c564adbb204f0eb5bc1edf1146997ee26a3681
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/SearchShards.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+/**
+ * Class Search
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class SearchShards extends AbstractEndpoint
+{
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_search_shards";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_search_shards";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_search_shards";
+        } elseif (isset($type) === true) {
+            $uri = "/_all/$type/_search_shards";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'preference',
+            'routing',
+            'local',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/SearchTemplate.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/SearchTemplate.php
new file mode 100644
index 0000000000000000000000000000000000000000..7b5c8304830e7f49320c699f2f1a7ffe6506304b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/SearchTemplate.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions\InvalidArgumentException;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class SearchTemplate
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class SearchTemplate extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/_search/template";
+
+        if (isset($index) === true && isset($type) === true) {
+            $uri = "/$index/$type/_search/template";
+        } elseif (isset($index) === true) {
+            $uri = "/$index/_search/template";
+        } elseif (isset($type) === true) {
+            $uri = "/_all/$type/_search/template";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'preference',
+            'routing',
+            'scroll',
+            'search_type'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Create.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Create.php
new file mode 100644
index 0000000000000000000000000000000000000000..a00a1cead961ecda1e771e2862375c335cb9b9fc
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Create.php
@@ -0,0 +1,119 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Create
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Create extends AbstractEndpoint
+{
+    // A repository name
+    private $repository;
+
+    // A snapshot name
+    private $snapshot;
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @param $snapshot
+     *
+     * @return $this
+     */
+    public function setSnapshot($snapshot)
+    {
+        if (isset($snapshot) !== true) {
+            return $this;
+        }
+
+        $this->snapshot = $snapshot;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->repository) !== true) {
+            throw new Exceptions\RuntimeException(
+                'repository is required for Create'
+            );
+        }
+        if (isset($this->snapshot) !== true) {
+            throw new Exceptions\RuntimeException(
+                'snapshot is required for Create'
+            );
+        }
+        $repository = $this->repository;
+        $snapshot = $this->snapshot;
+        $uri   = "/_snapshot/$repository/$snapshot";
+
+        if (isset($repository) === true && isset($snapshot) === true) {
+            $uri = "/_snapshot/$repository/$snapshot";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'wait_for_completion',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..ca28cfc10af59dd1505fa25ebec36a1498234f5f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Delete.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    // A repository name
+    private $repository;
+
+    // A snapshot name
+    private $snapshot;
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @param $snapshot
+     *
+     * @return $this
+     */
+    public function setSnapshot($snapshot)
+    {
+        if (isset($snapshot) !== true) {
+            return $this;
+        }
+
+        $this->snapshot = $snapshot;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->repository) !== true) {
+            throw new Exceptions\RuntimeException(
+                'repository is required for Delete'
+            );
+        }
+        if (isset($this->snapshot) !== true) {
+            throw new Exceptions\RuntimeException(
+                'snapshot is required for Delete'
+            );
+        }
+        $repository = $this->repository;
+        $snapshot = $this->snapshot;
+        $uri   = "/_snapshot/$repository/$snapshot";
+
+        if (isset($repository) === true && isset($snapshot) === true) {
+            $uri = "/_snapshot/$repository/$snapshot";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..70c6b54dcb2b60b5c49f06567f2107518170e15d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Get.php
@@ -0,0 +1,102 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    // A comma-separated list of repository names
+    private $repository;
+
+    // A comma-separated list of snapshot names
+    private $snapshot;
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @param $snapshot
+     *
+     * @return $this
+     */
+    public function setSnapshot($snapshot)
+    {
+        if (isset($snapshot) !== true) {
+            return $this;
+        }
+
+        $this->snapshot = $snapshot;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->repository) !== true) {
+            throw new Exceptions\RuntimeException(
+                'repository is required for Get'
+            );
+        }
+        if (isset($this->snapshot) !== true) {
+            throw new Exceptions\RuntimeException(
+                'snapshot is required for Get'
+            );
+        }
+        $repository = $this->repository;
+        $snapshot = $this->snapshot;
+        $uri   = "/_snapshot/$repository/$snapshot";
+
+        if (isset($repository) === true && isset($snapshot) === true) {
+            $uri = "/_snapshot/$repository/$snapshot";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'ignore_unavailable'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Create.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Create.php
new file mode 100644
index 0000000000000000000000000000000000000000..94275c77bb97425161219ee329a83b056a12fd85
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Create.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot\Repository;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Create
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot\Repository
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Create extends AbstractEndpoint
+{
+    // A repository name
+    private $repository;
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->repository) !== true) {
+            throw new Exceptions\RuntimeException(
+                'repository is required for Create'
+            );
+        }
+        $repository = $this->repository;
+        $uri   = "/_snapshot/$repository";
+
+        if (isset($repository) === true) {
+            $uri = "/_snapshot/$repository";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'timeout',
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for Create Repository');
+        }
+
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e0109f9656d0f736c1fa35cebc3eb6a03d9b9e7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Delete.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot\Repository;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot\Repository
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    // A comma-separated list of repository names
+    private $repository;
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->repository) !== true) {
+            throw new Exceptions\RuntimeException(
+                'repository is required for Delete'
+            );
+        }
+        $repository = $this->repository;
+        $uri   = "/_snapshot/$repository";
+
+        if (isset($repository) === true) {
+            $uri = "/_snapshot/$repository";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'timeout',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..57af42b36cb7e5e771c5c8596a7195358da2b18b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Get.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot\Repository;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot\Repository
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    // A comma-separated list of repository names
+    private $repository;
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $repository = $this->repository;
+        $uri   = "/_snapshot";
+
+        if (isset($repository) === true) {
+            $uri = "/_snapshot/$repository";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Verify.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Verify.php
new file mode 100644
index 0000000000000000000000000000000000000000..ebd8fa3ee449eae74ed9882a9ff6d25db2a34615
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Repository/Verify.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot\Repository;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Verify
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot\Repository
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Verify extends AbstractEndpoint
+{
+    // A comma-separated list of repository names
+    private $repository;
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        $repository = $this->repository;
+        if (isset($this->repository) !== true) {
+            throw new Exceptions\RuntimeException(
+                'repository is required for Verify'
+            );
+        }
+
+        $uri   = "/_snapshot/$repository/_verify";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'local',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Restore.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Restore.php
new file mode 100644
index 0000000000000000000000000000000000000000..193d2031eef5777eaf99a76d9cbdf19799777dfe
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Restore.php
@@ -0,0 +1,119 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Restore
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Restore extends AbstractEndpoint
+{
+    // A repository name
+    private $repository;
+
+    // A snapshot name
+    private $snapshot;
+
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @param $snapshot
+     *
+     * @return $this
+     */
+    public function setSnapshot($snapshot)
+    {
+        if (isset($snapshot) !== true) {
+            return $this;
+        }
+
+        $this->snapshot = $snapshot;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->repository) !== true) {
+            throw new Exceptions\RuntimeException(
+                'repository is required for Restore'
+            );
+        }
+        if (isset($this->snapshot) !== true) {
+            throw new Exceptions\RuntimeException(
+                'snapshot is required for Restore'
+            );
+        }
+        $repository = $this->repository;
+        $snapshot = $this->snapshot;
+        $uri   = "/_snapshot/$repository/$snapshot/_restore";
+
+        if (isset($repository) === true && isset($snapshot) === true) {
+            $uri = "/_snapshot/$repository/$snapshot/_restore";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'wait_for_completion',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Status.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Status.php
new file mode 100644
index 0000000000000000000000000000000000000000..b8e6aba83ad293b9061e0e3a10ad35b4f790af39
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Snapshot/Status.php
@@ -0,0 +1,100 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Snapshot;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Status
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Snapshot
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Status extends AbstractEndpoint
+{
+    // A comma-separated list of repository names
+    private $repository;
+
+    // A comma-separated list of snapshot names
+    private $snapshot;
+
+    /**
+     * @param $repository
+     *
+     * @return $this
+     */
+    public function setRepository($repository)
+    {
+        if (isset($repository) !== true) {
+            return $this;
+        }
+
+        $this->repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * @param $snapshot
+     *
+     * @return $this
+     */
+    public function setSnapshot($snapshot)
+    {
+        if (isset($snapshot) !== true) {
+            return $this;
+        }
+
+        $this->snapshot = $snapshot;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->snapshot) === true && isset($this->repository) !== true) {
+            throw new Exceptions\RuntimeException(
+                'Repository param must be provided if snapshot param is set'
+            );
+        }
+
+        $repository = $this->repository;
+        $snapshot   = $this->snapshot;
+        $uri        = "/_snapshot/_status";
+
+        if (isset($repository) === true) {
+            $uri = "/_snapshot/$repository/_status";
+        } elseif (isset($repository) === true && isset($snapshot) === true) {
+            $uri = "/_snapshot/$repository/$snapshot/_status";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'master_timeout',
+            'ignore_unavailable'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Source/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Source/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e8ac26b5928bfd11d17deec07fe7333cad6d74d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Source/Get.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Source;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Source
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Get'
+            );
+        }
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Get'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Get'
+            );
+        }
+        $id = $this->id;
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/$index/$type/$id/_source";
+
+        if (isset($index) === true && isset($type) === true && isset($id) === true) {
+            $uri = "/$index/$type/$id/_source";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'parent',
+            'preference',
+            'realtime',
+            'refresh',
+            'routing',
+            '_source',
+            '_source_exclude',
+            '_source_include',
+            'version',
+            'version_type',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Suggest.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Suggest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1afb1f274c750546b458db2428b75a10e51a9f41
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Suggest.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Suggest
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Suggest extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getURI()
+    {
+        $index = $this->index;
+        $uri   = "/_suggest";
+
+        if (isset($index) === true) {
+            $uri = "/$index/_suggest";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'ignore_unavailable',
+            'allow_no_indices',
+            'expand_wildcards',
+            'preference',
+            'routing',
+            'source',
+        );
+    }
+
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for Suggest');
+        }
+
+        return $this->body;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/Cancel.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/Cancel.php
new file mode 100644
index 0000000000000000000000000000000000000000..ff2405b2de7c14eac5fa341a64d5a6748cc656d0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/Cancel.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Tasks;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Cancel
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Tasks
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Cancel extends AbstractEndpoint
+{
+    private $taskId;
+
+    /**
+     * @param string $taskId
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setTaskId($taskId)
+    {
+        if (isset($taskId) !== true) {
+            return $this;
+        }
+
+        $this->taskId = $taskId;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) === true) {
+            return "/_tasks/{$this->taskId}/_cancel";
+        }
+
+        return "/_tasks/_cancel";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'node_id',
+            'actions',
+            'parent_node',
+            'parent_task',
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e7318d06a2df8369c85a2792e29f6d7a6cc6032
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/Get.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Tasks;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Tasks
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    private $taskId;
+
+    /**
+     * @param string $taskId
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setTaskId($taskId)
+    {
+        if (isset($taskId) !== true) {
+            return $this;
+        }
+
+        $this->taskId = $taskId;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->taskId) === true) {
+            return "/_tasks/{$this->taskId}";
+        }
+
+        return "/_tasks";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'wait_for_completion'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/TasksList.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/TasksList.php
new file mode 100644
index 0000000000000000000000000000000000000000..b45f20628546f19b1546cd6e617c112a8b6cc82e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Tasks/TasksList.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Tasks;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+/**
+ * Class TasksLists
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Tasks
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class TasksList extends AbstractEndpoint
+{
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        return "/_tasks";
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'node_id',
+            'actions',
+            'detailed',
+            'parent_node',
+            'parent_task',
+            'wait_for_completion',
+            'group_by',
+            'task_id'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Delete.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..b3593ba276662b51f990c50923bd6b9a4f537c20
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Delete.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Template;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Delete
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Template
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Delete extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Delete'
+            );
+        }
+        $templateId   = $this->id;
+        $uri  = "/_search/template/$templateId";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array();
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'DELETE';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Get.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Get.php
new file mode 100644
index 0000000000000000000000000000000000000000..954ecdda1b4250ce8229c148f164435c357a0f17
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Get.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Template;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Get
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Template
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Get extends AbstractEndpoint
+{
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Get'
+            );
+        }
+        $templateId = $this->id;
+        $uri  = "/_search/template/$templateId";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array();
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'GET';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Put.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Put.php
new file mode 100644
index 0000000000000000000000000000000000000000..075f413350b914224a9a4bb04165d7e677ad5abc
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Template/Put.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Elasticsearch\Endpoints\Template;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Put
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints\Template
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Put extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Put'
+            );
+        }
+
+        $templateId = $this->id;
+        $uri  = "/_search/template/$templateId";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array();
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'PUT';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/TermVectors.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/TermVectors.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ac9569e38c8d16764ce2a9e40b45dcd2a763bbd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/TermVectors.php
@@ -0,0 +1,91 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class TermVectors
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class TermVectors extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for TermVectors'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for TermVectors'
+            );
+        }
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for TermVectors'
+            );
+        }
+
+        $index = $this->index;
+        $type  = $this->type;
+        $id    = $this->id;
+        $uri   = "/$index/$type/$id/_termvectors";
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'term_statistics',
+            'field_statistics',
+            'fields',
+            'offsets',
+            'positions',
+            'payloads',
+            'preference',
+            'routing',
+            'parent',
+            'realtime'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Update.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Update.php
new file mode 100644
index 0000000000000000000000000000000000000000..9627feeadaa8cfbcb771443c523a10a05d132fd2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/Update.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class Update
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Endpoints
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Update extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+
+        return $this;
+    }
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (isset($this->id) !== true) {
+            throw new Exceptions\RuntimeException(
+                'id is required for Update'
+            );
+        }
+        if (isset($this->index) !== true) {
+            throw new Exceptions\RuntimeException(
+                'index is required for Update'
+            );
+        }
+        if (isset($this->type) !== true) {
+            throw new Exceptions\RuntimeException(
+                'type is required for Update'
+            );
+        }
+        $id = $this->id;
+        $index = $this->index;
+        $type = $this->type;
+        $uri   = "/$index/$type/$id/_update";
+
+        if (isset($index) === true && isset($type) === true && isset($id) === true) {
+            $uri = "/$index/$type/$id/_update";
+        }
+
+        return $uri;
+    }
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return array(
+            'consistency',
+            'fields',
+            'lang',
+            'parent',
+            'refresh',
+            'replication',
+            'retry_on_conflict',
+            'routing',
+            'script',
+            'timeout',
+            'timestamp',
+            'ttl',
+            'version',
+            'version_type',
+            '_source'
+        );
+    }
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/UpdateByQuery.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/UpdateByQuery.php
new file mode 100644
index 0000000000000000000000000000000000000000..79a19e7ee30d9423bbad597301d73ee14c94ffb6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Endpoints/UpdateByQuery.php
@@ -0,0 +1,119 @@
+<?php
+
+namespace Elasticsearch\Endpoints;
+
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class UpdateByQuery
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints *
+ * @author   Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elasticsearch.org
+ */
+class UpdateByQuery extends AbstractEndpoint
+{
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        if (is_array($body) !== true) {
+            throw new Exceptions\InvalidArgumentException(
+                'Body must be an array'
+            );
+        }
+        $this->body = $body;
+
+        return $this;
+    }
+
+
+    /**
+     * @throws \Elasticsearch\Common\Exceptions\BadMethodCallException
+     * @return string
+     */
+    public function getURI()
+    {
+        if (!$this->index) {
+            throw new Exceptions\RuntimeException(
+                'index is required for UpdateByQuery'
+            );
+        }
+
+        $uri = "/{$this->index}/_update_by_query";
+        if ($this->type) {
+            $uri = "/{$this->index}/{$this->type}/_update_by_query";
+        }
+
+        return $uri;
+    }
+
+
+    /**
+     * @return string[]
+     */
+    public function getParamWhitelist()
+    {
+        return [
+            'analyzer',
+            'analyze_wildcard',
+            'default_operator',
+            'df',
+            'explain',
+            'fields',
+            'fielddata_fields',
+            'from',
+            'ignore_unavailable',
+            'allow_no_indices',
+            'conflicts',
+            'expand_wildcards',
+            'lenient',
+            'lowercase_expanded_terms',
+            'preference',
+            'q',
+            'routing',
+            'scroll',
+            'search_type',
+            'search_timeout',
+            'size',
+            'sort',
+            '_source',
+            '_source_exclude',
+            '_source_include',
+            'terminate_after',
+            'stats',
+            'suggest_field',
+            'suggest_mode',
+            'suggest_size',
+            'suggest_text',
+            'timeout',
+            'track_scores',
+            'version',
+            'version_type',
+            'request_cache',
+            'refresh',
+            'consistency',
+            'scroll_size',
+            'wait_for_completion',
+        ];
+    }
+
+
+    /**
+     * @return string
+     */
+    public function getMethod()
+    {
+        return 'POST';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Helper/Iterators/SearchHitIterator.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Helper/Iterators/SearchHitIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..38695c337bb72bf63310f9c7fab29a8ecddd48c6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Helper/Iterators/SearchHitIterator.php
@@ -0,0 +1,161 @@
+<?php
+
+namespace Elasticsearch\Helper\Iterators;
+
+use Iterator;
+
+/**
+ * Class SearchHitIterator
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Helper\Iterators
+ * @author   Arturo Mejia <arturo.mejia@kreatetechnology.com>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ * @see      Iterator
+ */
+class SearchHitIterator implements Iterator, \Countable
+{
+
+    /**
+     * @var SearchResponseIterator
+     */
+    private $search_responses;
+
+    /**
+     * @var int
+     */
+    protected $current_key;
+
+    /**
+     * @var int
+     */
+    protected $current_hit_index;
+
+    /**
+     * @var array|null
+     */
+    protected $current_hit_data;
+
+    /**
+     * @var int
+     */
+    protected $count;
+
+    /**
+     * Constructor
+     *
+     * @param SearchResponseIterator $search_responses
+     */
+    public function __construct(SearchResponseIterator $search_responses)
+    {
+        $this->search_responses = $search_responses;
+    }
+
+    /**
+     * Rewinds the internal SearchResponseIterator and itself
+     *
+     * @return void
+     * @see    Iterator::rewind()
+     */
+    public function rewind()
+    {
+        $this->current_key = 0;
+        $this->search_responses->rewind();
+
+        // The first page may be empty. In that case, the next page is fetched.
+        $current_page = $this->search_responses->current();
+        if ($this->search_responses->valid() && empty($current_page['hits']['hits'])) {
+            $this->search_responses->next();
+        }
+
+        $this->count = 0;
+        if (isset($current_page['hits']) && isset($current_page['hits']['total'])) {
+            $this->count = $current_page['hits']['total'];
+        }
+
+        $this->readPageData();
+    }
+
+    /**
+     * Advances pointer of the current hit to the next one in the current page. If there
+     * isn't a next hit in the current page, then it advances the current page and moves the
+     * pointer to the first hit in the page.
+     *
+     * @return void
+     * @see    Iterator::next()
+     */
+    public function next()
+    {
+        $this->current_key++;
+        $this->current_hit_index++;
+        $current_page = $this->search_responses->current();
+        if (isset($current_page['hits']['hits'][$this->current_hit_index])) {
+            $this->current_hit_data = $current_page['hits']['hits'][$this->current_hit_index];
+        } else {
+            $this->search_responses->next();
+            $this->readPageData();
+        }
+    }
+
+    /**
+     * Returns a boolean indicating whether or not the current pointer has valid data
+     *
+     * @return bool
+     * @see    Iterator::valid()
+     */
+    public function valid()
+    {
+        return is_array($this->current_hit_data);
+    }
+
+    /**
+     * Returns the current hit
+     *
+     * @return array
+     * @see    Iterator::current()
+     */
+    public function current()
+    {
+        return $this->current_hit_data;
+    }
+
+    /**
+     * Returns the current hit index. The hit index spans all pages.
+     *
+     * @return int
+     * @see    Iterator::key()
+     */
+    public function key()
+    {
+        return $this->current_hit_index;
+    }
+
+    /**
+     * Advances the internal SearchResponseIterator and resets the current_hit_index to 0
+     *
+     * @internal
+     */
+    private function readPageData()
+    {
+        if ($this->search_responses->valid()) {
+            $current_page = $this->search_responses->current();
+            $this->current_hit_index = 0;
+            $this->current_hit_data = $current_page['hits']['hits'][$this->current_hit_index];
+        } else {
+            $this->current_hit_data = null;
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function count()
+    {
+        if ($this->count === null) {
+            $this->rewind();
+        }
+
+        return $this->count;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Helper/Iterators/SearchResponseIterator.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Helper/Iterators/SearchResponseIterator.php
new file mode 100644
index 0000000000000000000000000000000000000000..f8644229d4c50ac0c246d9cf5fc4d350234c6c56
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Helper/Iterators/SearchResponseIterator.php
@@ -0,0 +1,175 @@
+<?php
+
+namespace Elasticsearch\Helper\Iterators;
+
+use ElasticSearch\Client;
+use Iterator;
+
+/**
+ * Class SearchResponseIterator
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Helper\Iterators
+ * @author   Arturo Mejia <arturo.mejia@kreatetechnology.com>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ * @see      Iterator
+ */
+class SearchResponseIterator implements Iterator
+{
+
+    /**
+     * @var Client
+     */
+    private $client;
+
+    /**
+     * @var array
+     */
+    private $params;
+
+    /**
+     * @var int
+     */
+    private $current_key;
+
+    /**
+     * @var array
+     */
+    private $current_scrolled_response;
+
+    /**
+     * @var string
+     */
+    private $scroll_id;
+
+    /**
+     * @var duration
+     */
+    private $scroll_ttl;
+
+    /**
+     * Constructor
+     *
+     * @param Client $client
+     * @param array  $params  Associative array of parameters
+     * @see   Client::search()
+     */
+    public function __construct(Client $client, array $search_params)
+    {
+        $this->client = $client;
+        $this->params = $search_params;
+
+        if (isset($search_params['scroll'])) {
+            $this->scroll_ttl = $search_params['scroll'];
+        }
+    }
+
+    /**
+     * Destructor
+     */
+    public function __destruct()
+    {
+        $this->clearScroll();
+    }
+
+    /**
+     * Sets the time to live duration of a scroll window
+     *
+     * @param  string $time_to_live
+     * @return $this
+     */
+    public function setScrollTimeout($time_to_live)
+    {
+        $this->scroll_ttl = $time_to_live;
+        return $this;
+    }
+
+    /**
+     * Clears the current scroll window if there is a scroll_id stored
+     *
+     * @return void
+     */
+    private function clearScroll()
+    {
+        if (!empty($this->scroll_id)) {
+            $this->client->clearScroll(
+                array(
+                    'scroll_id' => $this->scroll_id,
+                    'client' => array(
+                        'ignore' => 404
+                    )
+                )
+            );
+            $this->scroll_id = null;
+        }
+    }
+
+    /**
+     * Rewinds the iterator by performing the initial search.
+     *
+     *
+     * @return void
+     * @see    Iterator::rewind()
+     */
+    public function rewind()
+    {
+        $this->clearScroll();
+        $this->current_key = 0;
+        $this->current_scrolled_response = $this->client->search($this->params);
+        $this->scroll_id = $this->current_scrolled_response['_scroll_id'];
+    }
+
+    /**
+     * Fetches every "page" after the first one using the lastest "scroll_id"
+     *
+     * @return void
+     * @see    Iterator::next()
+     */
+    public function next()
+    {
+        if ($this->current_key !== 0) {
+            $this->current_scrolled_response = $this->client->scroll(
+                array(
+                    'scroll_id' => $this->scroll_id,
+                    'scroll'    => $this->scroll_ttl
+                )
+            );
+            $this->scroll_id = $this->current_scrolled_response['_scroll_id'];
+        }
+        $this->current_key++;
+    }
+
+    /**
+     * Returns a boolean value indicating if the current page is valid or not
+     *
+     * @return bool
+     * @see    Iterator::valid()
+     */
+    public function valid()
+    {
+        return isset($this->current_scrolled_response['hits']['hits'][0]);
+    }
+
+    /**
+     * Returns the current "page"
+     *
+     * @return array
+     * @see    Iterator::current()
+     */
+    public function current()
+    {
+        return $this->current_scrolled_response;
+    }
+
+    /**
+     * Returns the current "page number" of the current "page"
+     *
+     * @return int
+     * @see    Iterator::key()
+     */
+    public function key()
+    {
+        return $this->current_key;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/AbstractNamespace.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/AbstractNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..42a0c7815fd10e369b4ba07532c81565562eaf81
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/AbstractNamespace.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Transport;
+
+/**
+ * Class AbstractNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+abstract class AbstractNamespace
+{
+    /** @var \Elasticsearch\Transport  */
+    protected $transport;
+
+    /** @var  callback */
+    protected $endpoints;
+
+    /**
+     * Abstract constructor
+     *
+     * @param Transport $transport Transport object
+     * @param $endpoints
+     */
+    public function __construct($transport, $endpoints)
+    {
+        $this->transport = $transport;
+        $this->endpoints = $endpoints;
+    }
+
+    /**
+     * @param array $params
+     * @param string $arg
+     *
+     * @return null|mixed
+     */
+    public function extractArgument(&$params, $arg)
+    {
+        if (is_object($params) === true) {
+            $params = (array) $params;
+        }
+
+        if (isset($params[$arg]) === true) {
+            $val = $params[$arg];
+            unset($params[$arg]);
+
+            return $val;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * @param $endpoint AbstractEndpoint
+     *
+     * @throws \Exception
+     * @return array
+     */
+    protected function performRequest(AbstractEndpoint $endpoint)
+    {
+        $response = $this->transport->performRequest(
+            $endpoint->getMethod(),
+            $endpoint->getURI(),
+            $endpoint->getParams(),
+            $endpoint->getBody(),
+            $endpoint->getOptions()
+        );
+
+        return $this->transport->resultOrFuture($response, $endpoint->getOptions());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/BooleanRequestWrapper.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/BooleanRequestWrapper.php
new file mode 100644
index 0000000000000000000000000000000000000000..eb9c4cd57d19644a96c7b6d582b13f8365f2b4ff
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/BooleanRequestWrapper.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+use Elasticsearch\Common\Exceptions\Missing404Exception;
+use Elasticsearch\Common\Exceptions\RoutingMissingException;
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Transport;
+use GuzzleHttp\Ring\Future\FutureArrayInterface;
+
+/**
+ * Trait AbstractNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+trait BooleanRequestWrapper
+{
+    /**
+     * Perform Request
+     *
+     * @param  AbstractEndpoint $endpoint The Endpoint to perform this request against
+     *
+     * @throws Missing404Exception
+     * @throws RoutingMissingException
+     */
+    public static function performRequest(AbstractEndpoint $endpoint, Transport $transport)
+    {
+        try {
+            $response = $transport->performRequest(
+                $endpoint->getMethod(),
+                $endpoint->getURI(),
+                $endpoint->getParams(),
+                $endpoint->getBody(),
+                $endpoint->getOptions()
+            );
+
+            $response = $transport->resultOrFuture($response, $endpoint->getOptions());
+            if (!($response instanceof FutureArrayInterface)) {
+                if ($response['status'] === 200) {
+                    return true;
+                } else {
+                    return false;
+                }
+            } else {
+                // async mode, can't easily resolve this...punt to user
+                return $response;
+            }
+        } catch (Missing404Exception $exception) {
+            return false;
+        } catch (RoutingMissingException $exception) {
+            return false;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/CatNamespace.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/CatNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..dac0ff6e10877be21689a834a5018d3909b36a4d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/CatNamespace.php
@@ -0,0 +1,493 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+/**
+ * Class CatNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces\CatNamespace
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class CatNamespace extends AbstractNamespace
+{
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function aliases($params = array())
+    {
+        $name = $this->extractArgument($params, 'name');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Aliases $endpoint */
+        $endpoint = $endpointBuilder('Cat\Aliases');
+        $endpoint->setName($name);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *        ['bytes']          = (enum) The unit in which to display byte values
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function allocation($params = array())
+    {
+        $nodeID = $this->extractArgument($params, 'node_id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Allocation $endpoint */
+        $endpoint = $endpointBuilder('Cat\Allocation');
+        $endpoint->setNodeID($nodeID);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function count($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Count $endpoint */
+        $endpoint = $endpointBuilder('Cat\Count');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *        ['ts']             = (bool) Set to false to disable timestamping
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function health($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Health $endpoint */
+        $endpoint = $endpointBuilder('Cat\Health');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['help'] = (bool) Return help information
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function help($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Help $endpoint */
+        $endpoint = $endpointBuilder('Cat\Help');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *        ['bytes']          = (enum) The unit in which to display byte values
+     *        ['pri']            = (bool) Set to true to return stats only for primary shards
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function indices($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Indices $endpoint */
+        $endpoint = $endpointBuilder('Cat\Indices');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function master($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Master $endpoint */
+        $endpoint = $endpointBuilder('Cat\Master');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function nodes($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Nodes $endpoint */
+        $endpoint = $endpointBuilder('Cat\Nodes');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function nodeAttrs($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\NodeAttrs $endpoint */
+        $endpoint = $endpointBuilder('Cat\NodeAttrs');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function pendingTasks($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\PendingTasks $endpoint */
+        $endpoint = $endpointBuilder('Cat\PendingTasks');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *        ['bytes']          = (enum) The unit in which to display byte values
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function recovery($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Recovery $endpoint */
+        $endpoint = $endpointBuilder('Cat\Recovery');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function repositories($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Repositories $endpoint */
+        $endpoint = $endpointBuilder('Cat\Repositories');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *        ['bytes']          = (enum) The unit in which to display byte values
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function shards($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Shards $endpoint */
+        $endpoint = $endpointBuilder('Cat\Shards');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *        ['bytes']          = (enum) The unit in which to display byte values
+     *        ['repository']     = (string) Name of repository from which to fetch the snapshot information
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function snapshots($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Snapshots $endpoint */
+        $endpoint = $endpointBuilder('Cat\Snapshots');
+        $endpoint->setRepository($repository);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *        ['full_id']        = (bool) Enables displaying the complete node ids
+     *        ['size']           = (enum) The multiplier in which to display values ([ "", "k", "m", "g", "t", "p" ])
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function threadPool($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\ThreadPool $endpoint */
+        $endpoint = $endpointBuilder('Cat\ThreadPool');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *        ['bytes']          = (enum) The unit in which to display byte values
+     *        ['fields']         = (list) A comma-separated list of fields to return the fielddata size
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function fielddata($params = array())
+    {
+        $fields = $this->extractArgument($params, 'fields');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Fielddata $endpoint */
+        $endpoint = $endpointBuilder('Cat\Fielddata');
+        $endpoint->setFields($fields);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']          = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function plugins($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Plugins $endpoint */
+        $endpoint = $endpointBuilder('Cat\Plugins');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function segments($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Segments $endpoint */
+        $endpoint = $endpointBuilder('Cat\Segments');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['format']         = (string) a short version of the Accept header, e.g. json, yaml
+     *        ['node_id']        = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+     *        ['format']         = (string) a short version of the Accept header, e.g. json, yaml
+     *        ['actions']        = (list) A comma-separated list of actions that should be returned. Leave empty to return all.
+     *        ['detailed']       = (boolean) Return detailed task information (default: false)
+     *        ['parent_node']    = (string) Return tasks with specified parent node.
+     *        ['parent_task']    = (number) Return tasks with specified parent task id. Set to -1 to return all.
+     *        ['h']              = (list) Comma-separated list of column names to display
+     *        ['help']           = (bool) Return help information
+     *        ['v']              = (bool) Verbose mode. Display column headers
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function tasks($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cat\Tasks $endpoint */
+        $endpoint = $endpointBuilder('Cat\Tasks');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/ClusterNamespace.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/ClusterNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..01a50021495903565dd1fda5b827f3fcefeea1b3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/ClusterNamespace.php
@@ -0,0 +1,205 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+/**
+ * Class ClusterNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces\ClusterNamespace
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ClusterNamespace extends AbstractNamespace
+{
+    /**
+     * $params['index']                      = (string) Limit the information returned to a specific index
+     *        ['level']                      = (enum) Specify the level of detail for returned information
+     *        ['local']                      = (boolean) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout']             = (time) Explicit operation timeout for connection to master node
+     *        ['timeout']                    = (time) Explicit operation timeout
+     *        ['wait_for_active_shards']     = (number) Wait until the specified number of shards is active
+     *        ['wait_for_nodes']             = (number) Wait until the specified number of nodes is available
+     *        ['wait_for_relocating_shards'] = (number) Wait until the specified number of relocating shards is finished
+     *        ['wait_for_status']            = (enum) Wait until cluster is in a specific state
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function health($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Health $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Health');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['dry_run']         = (boolean) Simulate the operation only and return the resulting state
+     *        ['filter_metadata'] = (boolean) Don't return cluster state metadata (default: false)
+     *        ['body']            = (boolean) Don't return cluster state metadata (default: false)
+     *        ['explain']         = (boolean) Return an explanation of why the commands can or cannot be executed
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function reroute($params = array())
+    {
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Reroute $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Reroute');
+        $endpoint->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['filter_blocks']          = (boolean) Do not return information about blocks
+     *        ['filter_index_templates'] = (boolean) Do not return information about index templates
+     *        ['filter_indices']         = (list) Limit returned metadata information to specific indices
+     *        ['filter_metadata']        = (boolean) Do not return information about indices metadata
+     *        ['filter_nodes']           = (boolean) Do not return information about nodes
+     *        ['filter_routing_table']   = (boolean) Do not return information about shard allocation (`routing_table` and `routing_nodes`)
+     *        ['local']                  = (boolean) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout']         = (time) Specify timeout for connection to master
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function state($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $metric = $this->extractArgument($params, 'metric');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\State $endpoint */
+        $endpoint = $endpointBuilder('Cluster\State');
+        $endpoint->setParams($params)
+                 ->setIndex($index)
+                 ->setMetric($metric);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['flat_settings']          = (boolean) Return settings in flat format (default: false)
+     *        ['human'] = (boolean) Whether to return time and byte values in human-readable format.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function stats($params = array())
+    {
+        $nodeID = $this->extractArgument($params, 'node_id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Stats $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Stats');
+        $endpoint->setNodeID($nodeID)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['body'] = ()
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function putSettings($params = array())
+    {
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Settings\Put $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Settings\Put');
+        $endpoint->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * @param array $params
+     *
+     * @return array
+     */
+    public function getSettings($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Settings\Put $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Settings\Get');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']   = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['master_timeout']  = (time) Specify timeout for connection to master
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function pendingTasks($params = array())
+    {
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\PendingTasks $endpoint */
+        $endpoint = $endpointBuilder('Cluster\PendingTasks');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['include_yes_decisions'] = (bool) Return 'YES' decisions in explanation (default: false)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function allocationExplain($params = array())
+    {
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\AllocationExplain $endpoint */
+        $endpoint = $endpointBuilder('Cluster\AllocationExplain');
+        $endpoint->setBody($body)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/IndicesNamespace.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/IndicesNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ad6b158595bbf157c63e10ee2204069ae341ff2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/IndicesNamespace.php
@@ -0,0 +1,1163 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+/**
+ * Class IndicesNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces\IndicesNamespace
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class IndicesNamespace extends AbstractNamespace
+{
+    /**
+     * $params['index'] = (list) A comma-separated list of indices to check (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return boolean
+     */
+    public function exists($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        //manually make this verbose so we can check status code
+        $params['client']['verbose'] = true;
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Exists $endpoint */
+        $endpoint = $endpointBuilder('Indices\Exists');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return BooleanRequestWrapper::performRequest($endpoint, $this->transport);
+    }
+
+    /**
+     * $params['index'] = (list) A comma-separated list of indices to check (Required)
+     *        ['feature'] = (list) A comma-separated list of features to return
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *        ['local']   = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return bool
+     */
+    public function get($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+        $feature = $this->extractArgument($params, 'feature');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Get $endpoint */
+        $endpoint = $endpointBuilder('Indices\Get');
+        $endpoint->setIndex($index)
+                 ->setFeature($feature)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']               = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *        ['operation_threading'] = () TODO: ?
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function segments($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Segments $endpoint */
+        $endpoint = $endpointBuilder('Indices\Segments');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['name']    = (string) The name of the template (Required)
+     *        ['timeout'] = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function deleteTemplate($params)
+    {
+        $name = $this->extractArgument($params, 'name');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Template\Delete $endpoint */
+        $endpoint = $endpointBuilder('Indices\Template\Delete');
+        $endpoint->setName($name);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']   = (list) A comma-separated list of indices to delete; use `_all` or empty string to delete all indices
+     *        ['timeout'] = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function delete($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Delete $endpoint */
+        $endpoint = $endpointBuilder('Indices\Delete');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['fields']         = (boolean) A comma-separated list of fields for `fielddata` metric (supports wildcards)
+     *        ['index']          = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *        ['indexing_types'] = (list) A comma-separated list of document types to include in the `indexing` statistics
+     *        ['metric_family']  = (enum) Limit the information returned to a specific metric
+     *        ['search_groups']  = (list) A comma-separated list of search groups to include in the `search` statistics
+     *        ['all']            = (boolean) Return all available information
+     *        ['clear']          = (boolean) Reset the default level of detail
+     *        ['docs']           = (boolean) Return information about indexed and deleted documents
+     *        ['fielddata']      = (boolean) Return information about field data
+     *        ['filter_cache']   = (boolean) Return information about filter cache
+     *        ['flush']          = (boolean) Return information about flush operations
+     *        ['get']            = (boolean) Return information about get operations
+     *        ['groups']         = (boolean) A comma-separated list of search groups for `search` statistics
+     *        ['id_cache']       = (boolean) Return information about ID cache
+     *        ['ignore_indices'] = (enum) When performed on multiple indices, allows to ignore `missing` ones
+     *        ['indexing']       = (boolean) Return information about indexing operations
+     *        ['merge']          = (boolean) Return information about merge operations
+     *        ['refresh']        = (boolean) Return information about refresh operations
+     *        ['search']         = (boolean) Return information about search operations; use the `groups` parameter to include information for specific search groups
+     *        ['store']          = (boolean) Return information about the size of the index
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function stats($params = array())
+    {
+        $metric = $this->extractArgument($params, 'metric');
+
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Stats $endpoint */
+        $endpoint = $endpointBuilder('Indices\Stats');
+        $endpoint->setIndex($index)
+                 ->setMetric($metric);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index'] = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *        ['body']  = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function putSettings($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Settings\Put $endpoint */
+        $endpoint = $endpointBuilder('Indices\Settings\Put');
+        $endpoint->setIndex($index)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function snapshotIndex($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Gateway\Snapshot $endpoint */
+        $endpoint = $endpointBuilder('Indices\Gateway\Snapshot');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']          = (string) The name of the source index to shrink
+     *        ['target']         = (string) The name of the target index to shrink into
+     *        ['timeout']        = (time) Explicit operation timeout
+     *        ['master_timeout'] = (time) Specify timeout for connection to master
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function shrink($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $target = $this->extractArgument($params, 'target');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Shrink $endpoint */
+        $endpoint = $endpointBuilder('Indices\Shrink');
+        $endpoint->setIndex($index)
+                 ->setTarget($target);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index'] = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+     *        ['type']  = (list) A comma-separated list of document types
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getMapping($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $type = $this->extractArgument($params, 'type');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Mapping\Get $endpoint */
+        $endpoint = $endpointBuilder('Indices\Mapping\Get');
+        $endpoint->setIndex($index)
+                 ->setType($type);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']            = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+     *        ['type']             = (list) A comma-separated list of document types
+     *        ['field']            = (list) A comma-separated list of document fields
+     *        ['include_defaults'] = (bool) specifies default mapping values should be returned
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getFieldMapping($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+        $type = $this->extractArgument($params, 'type');
+        $fields = $this->extractArgument($params, 'fields');
+
+        if (!isset($fields)) {
+            $fields = $this->extractArgument($params, 'field');
+        }
+
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Mapping\GetField $endpoint */
+        $endpoint = $endpointBuilder('Indices\Mapping\GetField');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setFields($fields);
+
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+     *        ['force']              = (boolean) TODO: ?
+     *        ['full']               = (boolean) TODO: ?
+     *        ['refresh']            = (boolean) Refresh the index after performing the operation
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function flush($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Flush $endpoint */
+        $endpoint = $endpointBuilder('Indices\Flush');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+     *        ['force']              = (boolean) TODO: ?
+     *        ['full']               = (boolean) TODO: ?
+     *        ['refresh']            = (boolean) Refresh the index after performing the operation
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function flushSynced($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Flush $endpoint */
+        $endpoint = $endpointBuilder('Indices\Flush');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+        $endpoint->setSynced(true);
+
+        return $this->performRequest($endpoint);
+    }
+
+
+    /**
+     * $params['index']               = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *        ['operation_threading'] = () TODO: ?
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function refresh($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Refresh $endpoint */
+        $endpoint = $endpointBuilder('Indices\Refresh');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']       = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+     *        ['detailed']    = (bool) Whether to display detailed information about shard recovery
+     *        ['active_only'] = (bool) Display only those recoveries that are currently on-going
+     *        ['human']       = (bool) Whether to return time and byte values in human-readable format.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function recovery($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Flush $endpoint */
+        $endpoint = $endpointBuilder('Indices\Recovery');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of index names; use `_all` to check the types across all indices (Required)
+     *        ['type']               = (list) A comma-separated list of document types to check (Required)
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return boolean
+     */
+    public function existsType($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $type = $this->extractArgument($params, 'type');
+
+        //manually make this verbose so we can check status code
+        $params['client']['verbose'] = true;
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Type\Exists $endpoint */
+        $endpoint = $endpointBuilder('Indices\Type\Exists');
+        $endpoint->setIndex($index)
+                 ->setType($type);
+        $endpoint->setParams($params);
+
+        return BooleanRequestWrapper::performRequest($endpoint, $this->transport);
+    }
+
+    /**
+     * $params['index']   = (string) The name of the index with an alias
+     *        ['name']    = (string) The name of the alias to be created or updated
+     *        ['timeout'] = (time) Explicit timestamp for the document
+     *        ['body']    = (time) Explicit timestamp for the document
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function putAlias($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $name = $this->extractArgument($params, 'name');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Alias\Put $endpoint */
+        $endpoint = $endpointBuilder('Indices\Alias\Put');
+        $endpoint->setIndex($index)
+                 ->setName($name)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['name']    = (string) The name of the template (Required)
+     *        ['order']   = (number) The order for this template when merging multiple matching ones (higher numbers are merged later, overriding the lower numbers)
+     *        ['timeout'] = (time) Explicit operation timeout
+     *        ['body']    = (time) Explicit operation timeout
+     *        ['create']  = (bool) Whether the index template should only be added if new or can also replace an existing one
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function putTemplate($params)
+    {
+        $name = $this->extractArgument($params, 'name');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Template\Put $endpoint */
+        $endpoint = $endpointBuilder('Indices\Template\Put');
+        $endpoint->setName($name)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']               = (list) A comma-separated list of index names to restrict the operation; use `_all` or empty string to perform the operation on all indices
+     *        ['type']                = (list) A comma-separated list of document types to restrict the operation; leave empty to perform the operation on all types
+     *        ['explain']             = (boolean) Return detailed information about the error
+     *        ['ignore_indices']      = (enum) When performed on multiple indices, allows to ignore `missing` ones
+     *        ['operation_threading'] = () TODO: ?
+     *        ['source']              = (string) The URL-encoded query definition (instead of using the request body)
+     *        ['body']                = (string) The URL-encoded query definition (instead of using the request body)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function validateQuery($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $type = $this->extractArgument($params, 'type');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Validate\Query $endpoint */
+        $endpoint = $endpointBuilder('Indices\Validate\Query');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['name']           = (list) A comma-separated list of alias names to return (Required)
+     *        ['index']          = (list) A comma-separated list of index names to filter aliases
+     *        ['ignore_indices'] = (enum) When performed on multiple indices, allows to ignore `missing` ones
+     *        ['name']           = (list) A comma-separated list of alias names to return
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getAlias($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $name = $this->extractArgument($params, 'name');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Alias\Get $endpoint */
+        $endpoint = $endpointBuilder('Indices\Alias\Get');
+        $endpoint->setIndex($index)
+                 ->setName($name);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']            = (list) A comma-separated list of index names; use `_all` to perform the operation on all indices (Required)
+     *        ['type']             = (string) The name of the document type
+     *        ['ignore_conflicts'] = (boolean) Specify whether to ignore conflicts while updating the mapping (default: false)
+     *        ['timeout']          = (time) Explicit operation timeout
+     *        ['body']             = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function putMapping($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $type = $this->extractArgument($params, 'type');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Mapping\Put $endpoint */
+        $endpoint = $endpointBuilder('Indices\Mapping\Put');
+        $endpoint->setIndex($index)
+                 ->setType($type)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index'] = (list) A comma-separated list of index names; use `_all` for all indices (Required)
+     *        ['type']  = (string) The name of the document type to delete (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function deleteMapping($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $type = $this->extractArgument($params, 'type');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Mapping\Delete $endpoint */
+        $endpoint = $endpointBuilder('Indices\Mapping\Delete');
+        $endpoint->setIndex($index)
+                 ->setType($type);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['name'] = (string) The name of the template (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getTemplate($params)
+    {
+        $name = $this->extractArgument($params, 'name');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Template\Get $endpoint */
+        $endpoint = $endpointBuilder('Indices\Template\Get');
+        $endpoint->setName($name);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['name'] = (string) The name of the template (Required)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return boolean
+     */
+    public function existsTemplate($params)
+    {
+        $name = $this->extractArgument($params, 'name');
+
+        //manually make this verbose so we can check status code
+        $params['client']['verbose'] = true;
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Template\Exists $endpoint */
+        $endpoint = $endpointBuilder('Indices\Template\Exists');
+        $endpoint->setName($name);
+        $endpoint->setParams($params);
+
+        return BooleanRequestWrapper::performRequest($endpoint, $this->transport);
+    }
+
+    /**
+     * $params['index']   = (string) The name of the index (Required)
+     *        ['timeout'] = (time) Explicit operation timeout
+     *        ['body']    = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function create($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Create $endpoint */
+        $endpoint = $endpointBuilder('Indices\Create');
+        $endpoint->setIndex($index)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']                = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *        ['flush']                = (boolean) Specify whether the index should be flushed after performing the operation (default: true)
+     *        ['max_num_segments']     = (number) The number of segments the index should be merged into (default: dynamic)
+     *        ['only_expunge_deletes'] = (boolean) Specify whether the operation should only expunge deleted documents
+     *        ['operation_threading']  = () TODO: ?
+     *        ['refresh']              = (boolean) Specify whether the index should be refreshed after performing the operation (default: true)
+     *        ['wait_for_merge']       = (boolean) Specify whether the request should block until the merge process is finished (default: true)
+     *        ['ignore_unavailable']   = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']     = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']     = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function forceMerge($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\ForceMerge $endpoint */
+        $endpoint = $endpointBuilder('Indices\ForceMerge');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']   = (string) The name of the index with an alias (Required)
+     *        ['name']    = (string) The name of the alias to be deleted (Required)
+     *        ['timeout'] = (time) Explicit timestamp for the document
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function deleteAlias($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $name = $this->extractArgument($params, 'name');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Alias\Delete $endpoint */
+        $endpoint = $endpointBuilder('Indices\Alias\Delete');
+        $endpoint->setIndex($index)
+                 ->setName($name);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']   = (string) The name of the index (Required)
+     *        ['timeout'] = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function open($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Open $endpoint */
+        $endpoint = $endpointBuilder('Indices\Open');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']        = (string) The name of the index to scope the operation
+     *        ['analyzer']     = (string) The name of the analyzer to use
+     *        ['field']        = (string) Use the analyzer configured for this field (instead of passing the analyzer name)
+     *        ['filter']       = (list) A comma-separated list of filters to use for the analysis
+     *        ['prefer_local'] = (boolean) With `true`, specify that a local shard should be used if available, with `false`, use a random shard (default: true)
+     *        ['text']         = (string) The text on which the analysis should be performed (when request body is not used)
+     *        ['tokenizer']    = (string) The name of the tokenizer to use for the analysis
+     *        ['format']       = (enum) Format of the output
+     *        ['body']         = (enum) Format of the output
+     *        ['char_filter']  = (list) A comma-separated list of character filters to use for the analysis
+     *        ['explain']      = (bool) With `true`, outputs more advanced details. (default: false)
+     *        ['attributes']   = (list) A comma-separated list of token attributes to output, this parameter works only with `explain=true`
+     *        ['format']       = (enum) Format of the output (["detailed", "text"])
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function analyze($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Analyze $endpoint */
+        $endpoint = $endpointBuilder('Indices\Analyze');
+        $endpoint->setIndex($index)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of index name to limit the operation
+     *        ['field_data']         = (boolean) Clear field data
+     *        ['fielddata']          = (boolean) Clear field data
+     *        ['fields']             = (list) A comma-separated list of fields to clear when using the `field_data` parameter (default: all)
+     *        ['filter']             = (boolean) Clear filter caches
+     *        ['filter_cache']       = (boolean) Clear filter caches
+     *        ['filter_keys']        = (boolean) A comma-separated list of keys to clear when using the `filter_cache` parameter (default: all)
+     *        ['id']                 = (boolean) Clear ID caches for parent/child
+     *        ['id_cache']           = (boolean) Clear ID caches for parent/child
+     *        ['recycler']           = (boolean) Clear the recycler cache
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function clearCache($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Cache\Clear $endpoint */
+        $endpoint = $endpointBuilder('Indices\Cache\Clear');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']   = (list) A comma-separated list of index names to filter aliases
+     *        ['timeout'] = (time) Explicit timestamp for the document
+     *        ['body']    = (time) Explicit timestamp for the document
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function updateAliases($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Aliases\Update $endpoint */
+        $endpoint = $endpointBuilder('Indices\Aliases\Update');
+        $endpoint->setIndex($index)
+                 ->setBody($body);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['local']   = (bool) Return local information, do not retrieve the state from master node (default: false)
+     *        ['timeout'] = (time) Explicit timestamp for the document
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getAliases($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $name = $this->extractArgument($params, 'name');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Aliases\Get $endpoint */
+        $endpoint = $endpointBuilder('Indices\Aliases\Get');
+        $endpoint->setIndex($index)
+                 ->setName($name);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['name']               = (list) A comma-separated list of alias names to return (Required)
+     *        ['index']              = (list) A comma-separated list of index names to filter aliases
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return boolean
+     */
+    public function existsAlias($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $name = $this->extractArgument($params, 'name');
+
+        //manually make this verbose so we can check status code
+        $params['client']['verbose'] = true;
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Alias\Exists $endpoint */
+        $endpoint = $endpointBuilder('Indices\Alias\Exists');
+        $endpoint->setIndex($index)
+                 ->setName($name);
+        $endpoint->setParams($params);
+
+        return BooleanRequestWrapper::performRequest($endpoint, $this->transport);
+    }
+
+    /**
+     * $params['index']               = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *        ['ignore_indices']      = (enum) When performed on multiple indices, allows to ignore `missing` ones
+     *        ['operation_threading'] = () TODO: ?
+     *        ['recovery']            = (boolean) Return information about shard recovery
+     *        ['snapshot']            = (boolean) TODO: ?
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function status($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Status $endpoint */
+        $endpoint = $endpointBuilder('Indices\Status');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index'] = (list) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getSettings($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        $name = $this->extractArgument($params, 'name');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Settings\Get $endpoint */
+        $endpoint = $endpointBuilder('Indices\Settings\Get');
+        $endpoint->setIndex($index)
+                 ->setName($name);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']   = (string) The name of the index (Required)
+     *        ['timeout'] = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function close($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Close $endpoint */
+        $endpoint = $endpointBuilder('Indices\Close');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']   = (string) The name of the index
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function seal($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Seal $endpoint */
+        $endpoint = $endpointBuilder('Indices\Seal');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+     *        ['wait_for_completion']= (boolean) Specify whether the request should block until the all segments are upgraded (default: false)
+     *        ['only_ancient_segments'] = (boolean) If true, only ancient (an older Lucene major release) segments will be upgraded
+     *        ['refresh']            = (boolean) Refresh the index after performing the operation
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function upgrade($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Upgrade\Post $endpoint */
+        $endpoint = $endpointBuilder('Indices\Upgrade\Post');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']              = (list) A comma-separated list of index names; use `_all` or empty string for all indices
+     *        ['wait_for_completion']= (boolean) Specify whether the request should block until the all segments are upgraded (default: false)
+     *        ['only_ancient_segments'] = (boolean) If true, only ancient (an older Lucene major release) segments will be upgraded
+     *        ['refresh']            = (boolean) Refresh the index after performing the operation
+     *        ['ignore_unavailable'] = (bool) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices']   = (bool) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards']   = (enum) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getUpgrade($params = array())
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Upgrade\Get $endpoint */
+        $endpoint = $endpointBuilder('Indices\Upgrade\Get');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['index']   = (string) A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
+     *        ['status']   = (list) A comma-separated list of statuses used to filter on shards to get store information for
+     *        ['ignore_unavailable'] = (boolean) Whether specified concrete indices should be ignored when unavailable (missing or closed)
+     *        ['allow_no_indices'] = (boolean) Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
+     *        ['expand_wildcards'] = (boolean) Whether to expand wildcard expression to concrete indices that are open, closed or both.
+     *        ['operation_threading']
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function shardStores($params)
+    {
+        $index = $this->extractArgument($params, 'index');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\ShardStores $endpoint */
+        $endpoint = $endpointBuilder('Indices\ShardStores');
+        $endpoint->setIndex($index);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['newIndex']       = (string) The name of the rollover index
+     *        ['alias']          = (string) The name of the alias to rollover
+     *        ['timeout']        = (time) Explicit operation timeout
+     *        ['master_timeout'] = (time) Specify timeout for connection to master
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function rollover($params)
+    {
+        $newIndex = $this->extractArgument($params, 'newIndex');
+        $alias = $this->extractArgument($params, 'alias');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Indices\Rollover $endpoint */
+        $endpoint = $endpointBuilder('Indices\Rollover');
+        $endpoint->setNewIndex($newIndex)
+            ->setAlias($alias)
+            ->setParams($params)
+            ->setBody($body);
+
+        return $this->performRequest($endpoint);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/IngestNamespace.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/IngestNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..c14313b2f6a38cf4ca801be3d91fb8c015e97552
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/IngestNamespace.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+use Elasticsearch\Endpoints\Ingest\Pipeline\Delete;
+use Elasticsearch\Endpoints\Ingest\Pipeline\Get;
+use Elasticsearch\Endpoints\Ingest\Pipeline\Put;
+use Elasticsearch\Endpoints\Ingest\Simulate;
+
+/**
+ * Class IngestNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces\IngestNamespace
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class IngestNamespace extends AbstractNamespace
+{
+    /**
+     * $params['master_timeout']             = (time) Explicit operation timeout for connection to master node
+     *        ['timeout']                    = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function deletePipeline($params = array())
+    {
+        $id = $this->extractArgument($params, 'id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var Delete $endpoint */
+        $endpoint = $endpointBuilder('Ingest\Pipeline\Delete');
+        $endpoint->setID($id);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout']             = (time) Explicit operation timeout for connection to master node
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getPipeline($params = array())
+    {
+        $id = $this->extractArgument($params, 'id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var Get $endpoint */
+        $endpoint = $endpointBuilder('Ingest\Pipeline\Get');
+        $endpoint->setID($id);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout']             = (time) Explicit operation timeout for connection to master node
+     *        ['timeout']                    = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function putPipeline($params = array())
+    {
+        $body = $this->extractArgument($params, 'body');
+        $id = $this->extractArgument($params, 'id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var Put $endpoint */
+        $endpoint = $endpointBuilder('Ingest\Pipeline\Put');
+        $endpoint->setID($id)
+            ->setBody($body)
+            ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['verbose'] = (bool) Verbose mode. Display data output for each processor in executed pipeline
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function simulate($params = array())
+    {
+        $body = $this->extractArgument($params, 'body');
+        $id = $this->extractArgument($params, 'id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var Simulate $endpoint */
+        $endpoint = $endpointBuilder('Ingest\Simulate');
+        $endpoint->setID($id)
+            ->setBody($body)
+            ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/NamespaceBuilderInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/NamespaceBuilderInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..7171dbbcacc57e0b92577437129d01e0ee1818fe
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/NamespaceBuilderInterface.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Class RegisteredNamespaceInterface
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+namespace Elasticsearch\Namespaces;
+
+
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+
+interface NamespaceBuilderInterface
+{
+    /**
+     * Returns the name of the namespace.  This is what users will call, e.g. the name
+     * "foo" will be invoked by the user as `$client->foo()`
+     * @return string
+     */
+    public function getName();
+
+    /**
+     * Returns the actual namespace object which contains your custom methods. The transport
+     * and serializer objects are provided so that your namespace may do whatever custom
+     * logic is required.
+     *
+     * @param Transport $transport
+     * @param SerializerInterface $serializer
+     * @return Object
+     */
+    public function getObject(Transport $transport, SerializerInterface $serializer);
+}
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/NodesNamespace.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/NodesNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..e8bbaf928b7637c7ab03672c459832473a3176d2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/NodesNamespace.php
@@ -0,0 +1,134 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+/**
+ * Class NodesNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces\NodesNamespace
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class NodesNamespace extends AbstractNamespace
+{
+    /**
+     * $params['fields']        = (list) A comma-separated list of fields for `fielddata` metric (supports wildcards)
+     *        ['metric_family'] = (enum) Limit the information returned to a certain metric family
+     *        ['metric']        = (enum) Limit the information returned for `indices` family to a specific metric
+     *        ['node_id']       = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+     *        ['all']           = (boolean) Return all available information
+     *        ['clear']         = (boolean) Reset the default level of detail
+     *        ['fs']            = (boolean) Return information about the filesystem
+     *        ['http']          = (boolean) Return information about HTTP
+     *        ['indices']       = (boolean) Return information about indices
+     *        ['jvm']           = (boolean) Return information about the JVM
+     *        ['network']       = (boolean) Return information about network
+     *        ['os']            = (boolean) Return information about the operating system
+     *        ['process']       = (boolean) Return information about the Elasticsearch process
+     *        ['thread_pool']   = (boolean) Return information about the thread pool
+     *        ['transport']     = (boolean) Return information about transport
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function stats($params = array())
+    {
+        $nodeID = $this->extractArgument($params, 'node_id');
+
+        $metric = $this->extractArgument($params, 'metric');
+
+        $index_metric = $this->extractArgument($params, 'index_metric');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Nodes\Stats $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Nodes\Stats');
+        $endpoint->setNodeID($nodeID)
+                 ->setMetric($metric)
+                 ->setIndexMetric($index_metric)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['node_id']       = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+     *        ['metric']        = (list) A comma-separated list of metrics you wish returned. Leave empty to return all.
+     *        ['flat_settings'] = (boolean) Return settings in flat format (default: false)
+     *        ['human']         = (boolean) Whether to return time and byte values in human-readable format.
+
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function info($params = array())
+    {
+        $nodeID = $this->extractArgument($params, 'node_id');
+        $metric = $this->extractArgument($params, 'metric');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Nodes\Info $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Nodes\Info');
+        $endpoint->setNodeID($nodeID)->setMetric($metric);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['node_id']   = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+     *        ['interval']  = (time) The interval for the second sampling of threads
+     *        ['snapshots'] = (number) Number of samples of thread stacktrace (default: 10)
+     *        ['threads']   = (number) Specify the number of threads to provide information for (default: 3)
+     *        ['type']      = (enum) The type to sample (default: cpu)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function hotThreads($params = array())
+    {
+        $nodeID = $this->extractArgument($params, 'node_id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Nodes\HotThreads $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Nodes\HotThreads');
+        $endpoint->setNodeID($nodeID);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['node_id'] = (list) A comma-separated list of node IDs or names to perform the operation on; use `_local` to perform the operation on the node you're connected to, leave empty to perform the operation on all nodes
+     *        ['delay']   = (time) Set the delay for the operation (default: 1s)
+     *        ['exit']    = (boolean) Exit the JVM as well (default: true)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function shutdown($params = array())
+    {
+        $nodeID = $this->extractArgument($params, 'node_id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Cluster\Nodes\Shutdown $endpoint */
+        $endpoint = $endpointBuilder('Cluster\Nodes\Shutdown');
+        $endpoint->setNodeID($nodeID);
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/SnapshotNamespace.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/SnapshotNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..6f22d94251f056103ae2aa68a37c9148c274a57a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/SnapshotNamespace.php
@@ -0,0 +1,235 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+/**
+ * Class SnapshotNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces\SnapshotNamespace
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class SnapshotNamespace extends AbstractNamespace
+{
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['wait_for_completion'] = (bool) Should this request wait until the operation has completed before returning
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function create($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+        $snapshot = $this->extractArgument($params, 'snapshot');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Create $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Create');
+        $endpoint->setRepository($repository)
+                 ->setSnapshot($snapshot)
+                 ->setParams($params)
+                 ->setBody($body);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['timeout'] = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function createRepository($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Repository\Create $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Repository\Create');
+        $endpoint->setRepository($repository)
+                 ->setBody($body)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function delete($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+        $snapshot = $this->extractArgument($params, 'snapshot');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Delete $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Delete');
+        $endpoint->setRepository($repository)
+                 ->setSnapshot($snapshot)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['timeout'] = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function deleteRepository($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Repository\Delete $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Repository\Delete');
+        $endpoint->setRepository($repository)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function get($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+        $snapshot = $this->extractArgument($params, 'snapshot');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Get $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Get');
+        $endpoint->setRepository($repository)
+                 ->setSnapshot($snapshot)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['timeout'] = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function getRepository($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Repository\Get $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Repository\Get');
+        $endpoint->setRepository($repository)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['wait_for_completion'] = (bool) Should this request wait until the operation has completed before returning
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function restore($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+        $snapshot = $this->extractArgument($params, 'snapshot');
+        $body = $this->extractArgument($params, 'body');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Restore $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Restore');
+        $endpoint->setRepository($repository)
+                 ->setSnapshot($snapshot)
+                 ->setParams($params)
+                 ->setBody($body);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function status($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+        $snapshot = $this->extractArgument($params, 'snapshot');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Status $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Status');
+        $endpoint->setRepository($repository)
+                 ->setSnapshot($snapshot)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['master_timeout'] = (time) Explicit operation timeout for connection to master node
+     *        ['timeout'] = (time) Explicit operation timeout
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function verifyRepository($params = array())
+    {
+        $repository = $this->extractArgument($params, 'repository');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var \Elasticsearch\Endpoints\Snapshot\Repository\Verify $endpoint */
+        $endpoint = $endpointBuilder('Snapshot\Repository\Verify');
+        $endpoint->setRepository($repository)
+                 ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/TasksNamespace.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/TasksNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..6782292e2a8e42fccea272808f28d16536622af8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Namespaces/TasksNamespace.php
@@ -0,0 +1,91 @@
+<?php
+
+namespace Elasticsearch\Namespaces;
+
+use Elasticsearch\Endpoints\Tasks\Cancel;
+use Elasticsearch\Endpoints\Tasks\Get;
+
+/**
+ * Class TasksNamespace
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Namespaces\TasksNamespace
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class TasksNamespace extends AbstractNamespace
+{
+    /**
+     * $params['wait_for_completion'] = (bool) Wait for the matching tasks to complete (default: false)
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function get($params = array())
+    {
+        $id = $this->extractArgument($params, 'task_id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var Get $endpoint */
+        $endpoint = $endpointBuilder('Tasks\Get');
+        $endpoint->setTaskId($id)
+            ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['node_id'] = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+     *        ['actions'] = (list) A comma-separated list of actions that should be cancelled. Leave empty to cancel all.
+     *        ['parent_node'] = (string) Cancel tasks with specified parent node
+     *        ['parent_task'] = (string) Cancel tasks with specified parent task id (node_id:task_number). Set to -1 to cancel all.
+     *        ['detailed'] = (bool) Return detailed task information (default: false)
+     *        ['wait_for_completion'] = (bool) Wait for the matching tasks to complete (default: false)
+     *        ['group_by'] = (enum) Group tasks by nodes or parent/child relationships
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function tasksList($params = array())
+    {
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var Get $endpoint */
+        $endpoint = $endpointBuilder('Tasks\TasksList');
+        $endpoint->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+
+    /**
+     * $params['node_id'] = (list) A comma-separated list of node IDs or names to limit the returned information; use `_local` to return information from the node you're connecting to, leave empty to get information from all nodes
+     *        ['actions'] = (list) A comma-separated list of actions that should be cancelled. Leave empty to cancel all.
+     *        ['parent_node'] = (string) Cancel tasks with specified parent node
+     *        ['parent_task'] = (string) Cancel tasks with specified parent task id (node_id:task_number). Set to -1 to cancel all.
+     *
+     * @param $params array Associative array of parameters
+     *
+     * @return array
+     */
+    public function cancel($params = array())
+    {
+        $id = $this->extractArgument($params, 'id');
+
+        /** @var callback $endpointBuilder */
+        $endpointBuilder = $this->endpoints;
+
+        /** @var Cancel $endpoint */
+        $endpoint = $endpointBuilder('Tasks\Cancel');
+        $endpoint->setTaskId($id)
+            ->setParams($params);
+
+        return $this->performRequest($endpoint);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/ArrayToJSONSerializer.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/ArrayToJSONSerializer.php
new file mode 100644
index 0000000000000000000000000000000000000000..1290b6b6365329226bd245c153a210260d16b347
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/ArrayToJSONSerializer.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Elasticsearch\Serializers;
+
+/**
+ * Class JSONSerializer
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Serializers\JSONSerializer
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class ArrayToJSONSerializer implements SerializerInterface
+{
+    /**
+     * Serialize assoc array into JSON string
+     *
+     * @param string|array $data Assoc array to encode into JSON
+     *
+     * @return string
+     */
+    public function serialize($data)
+    {
+        if (is_string($data) === true) {
+            return $data;
+        } else {
+            $data = json_encode($data, JSON_PRESERVE_ZERO_FRACTION);
+            if ($data === '[]') {
+                return '{}';
+            } else {
+                return $data;
+            }
+        }
+    }
+
+    /**
+     * Deserialize JSON into an assoc array
+     *
+     * @param string $data JSON encoded string
+     * @param array  $headers Response Headers
+     *
+     * @return array
+     */
+    public function deserialize($data, $headers)
+    {
+        return json_decode($data, true);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/EverythingToJSONSerializer.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/EverythingToJSONSerializer.php
new file mode 100644
index 0000000000000000000000000000000000000000..b93b1bbe546a182a46b55f37eaa5b1682b036b0b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/EverythingToJSONSerializer.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Elasticsearch\Serializers;
+
+/**
+ * Class EverythingToJSONSerializer
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Serializers
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class EverythingToJSONSerializer implements SerializerInterface
+{
+    /**
+     * Serialize assoc array into JSON string
+     *
+     * @param string|array $data Assoc array to encode into JSON
+     *
+     * @return string
+     */
+    public function serialize($data)
+    {
+        $data = json_encode($data, JSON_PRESERVE_ZERO_FRACTION);
+        if ($data === '[]') {
+            return '{}';
+        } else {
+            return $data;
+        }
+    }
+
+    /**
+     * Deserialize JSON into an assoc array
+     *
+     * @param string $data JSON encoded string
+     * @param array  $headers Response headers
+     *
+     * @return array
+     */
+    public function deserialize($data, $headers)
+    {
+        return json_decode($data, true);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/SerializerInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/SerializerInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..a23796309300e8feeb0dbad5b577fddd7cbdd6a5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/SerializerInterface.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Elasticsearch\Serializers;
+
+/**
+ * Interface SerializerInterface
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Serializers
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+interface SerializerInterface
+{
+    /**
+     * Serialize a complex data-structure into a json encoded string
+     *
+     * @param mixed   The data to encode
+     *
+     * @return string
+     */
+    public function serialize($data);
+
+    /**
+     * Deserialize json encoded string into an associative array
+     *
+     * @param string $data    JSON encoded string
+     * @param array  $headers Response Headers
+     *
+     * @return array
+     */
+    public function deserialize($data, $headers);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/SmartSerializer.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/SmartSerializer.php
new file mode 100644
index 0000000000000000000000000000000000000000..bdae9f85256d75675719e5ef389cd08b2529b623
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Serializers/SmartSerializer.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Elasticsearch\Serializers;
+
+use Elasticsearch\Common\Exceptions\Serializer\JsonErrorException;
+
+/**
+ * Class SmartSerializer
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch\Serializers\JSONSerializer
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class SmartSerializer implements SerializerInterface
+{
+    /**
+     * Serialize assoc array into JSON string
+     *
+     * @param string|array $data Assoc array to encode into JSON
+     *
+     * @return string
+     */
+    public function serialize($data)
+    {
+        if (is_string($data) === true) {
+            return $data;
+        } else {
+            $data = json_encode($data, JSON_PRESERVE_ZERO_FRACTION);
+            if ($data === '[]') {
+                return '{}';
+            } else {
+                return $data;
+            }
+        }
+    }
+
+    /**
+     * Deserialize by introspecting content_type. Tries to deserialize JSON,
+     * otherwise returns string
+     *
+     * @param string $data JSON encoded string
+     * @param array  $headers Response Headers
+     *
+     * @throws JsonErrorException
+     * @return array
+     */
+    public function deserialize($data, $headers)
+    {
+        if (isset($headers['content_type']) === true) {
+            if (strpos($headers['content_type'], 'json') !== false) {
+                return $this->decode($data);
+            } else {
+                //Not json, return as string
+                return $data;
+            }
+        } else {
+            //No content headers, assume json
+            return $this->decode($data);
+        }
+    }
+
+    /**
+     * @todo For 2.0, remove the E_NOTICE check before raising the exception.
+     *
+     * @param $data
+     *
+     * @return array
+     * @throws JsonErrorException
+     */
+    private function decode($data)
+    {
+        if ($data === null || strlen($data) === 0) {
+            return "";
+        }
+
+        $result = @json_decode($data, true);
+
+        // Throw exception only if E_NOTICE is on to maintain backwards-compatibility on systems that silently ignore E_NOTICEs.
+        if (json_last_error() !== JSON_ERROR_NONE && (error_reporting() & E_NOTICE) === E_NOTICE) {
+            $e = new JsonErrorException(json_last_error(), $data, $result);
+            throw $e;
+        }
+
+        return $result;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Transport.php b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Transport.php
new file mode 100644
index 0000000000000000000000000000000000000000..07323f7862bc086770e1d1cb82fadcde41193388
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/src/Elasticsearch/Transport.php
@@ -0,0 +1,172 @@
+<?php
+
+namespace Elasticsearch;
+
+use Elasticsearch\Common\Exceptions;
+use Elasticsearch\ConnectionPool\AbstractConnectionPool;
+use Elasticsearch\Connections\Connection;
+use Elasticsearch\Connections\ConnectionInterface;
+use GuzzleHttp\Ring\Future\FutureArrayInterface;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Class Transport
+ *
+ * @category Elasticsearch
+ * @package  Elasticsearch
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+class Transport
+{
+    /**
+     * @var AbstractConnectionPool
+     */
+    public $connectionPool;
+
+    /**
+     * @var LoggerInterface
+     */
+    private $log;
+
+    /** @var  int */
+    public $retryAttempts = 0;
+
+    /** @var  Connection */
+    public $lastConnection;
+
+    /** @var int  */
+    public $retries;
+
+    /**
+     * Transport class is responsible for dispatching requests to the
+     * underlying cluster connections
+     *
+     * @param $retries
+     * @param bool $sniffOnStart
+     * @param ConnectionPool\AbstractConnectionPool $connectionPool
+     * @param \Psr\Log\LoggerInterface $log    Monolog logger object
+     */
+    public function __construct($retries, $sniffOnStart = false, AbstractConnectionPool $connectionPool, LoggerInterface $log)
+    {
+        $this->log            = $log;
+        $this->connectionPool = $connectionPool;
+        $this->retries        = $retries;
+
+        if ($sniffOnStart === true) {
+            $this->log->notice('Sniff on Start.');
+            $this->connectionPool->scheduleCheck();
+        }
+    }
+
+    /**
+     * Returns a single connection from the connection pool
+     * Potentially performs a sniffing step before returning
+     *
+     * @return ConnectionInterface Connection
+     */
+
+    public function getConnection()
+    {
+        return $this->connectionPool->nextConnection();
+    }
+
+    /**
+     * Perform a request to the Cluster
+     *
+     * @param string $method     HTTP method to use
+     * @param string $uri        HTTP URI to send request to
+     * @param null $params     Optional query parameters
+     * @param null $body       Optional query body
+     * @param array $options
+     *
+     * @throws Common\Exceptions\NoNodesAvailableException|\Exception
+     * @return FutureArrayInterface
+     */
+    public function performRequest($method, $uri, $params = null, $body = null, $options = [])
+    {
+        try {
+            $connection  = $this->getConnection();
+        } catch (Exceptions\NoNodesAvailableException $exception) {
+            $this->log->critical('No alive nodes found in cluster');
+            throw $exception;
+        }
+
+        $response             = array();
+        $caughtException      = null;
+        $this->lastConnection = $connection;
+
+        $future = $connection->performRequest(
+            $method,
+            $uri,
+            $params,
+            $body,
+            $options,
+            $this
+        );
+
+        $future->promise()->then(
+            //onSuccess
+            function ($response) {
+                $this->retryAttempts = 0;
+                // Note, this could be a 4xx or 5xx error
+            },
+            //onFailure
+            function ($response) {
+                //some kind of real faiure here, like a timeout
+                $this->connectionPool->scheduleCheck();
+                // log stuff
+            });
+
+        return $future;
+    }
+
+    /**
+     * @param FutureArrayInterface $result  Response of a request (promise)
+     * @param array                $options Options for transport
+     *
+     * @return callable|array
+     */
+    public function resultOrFuture($result, $options = [])
+    {
+        $response = null;
+        $async = isset($options['client']['future']) ? $options['client']['future'] : null;
+        if (is_null($async) || $async === false) {
+            do {
+                $result = $result->wait();
+            } while ($result instanceof FutureArrayInterface);
+
+            return $result;
+        } elseif ($async === true || $async === 'lazy') {
+            return $result;
+        }
+    }
+
+    /**
+     * @param $request
+     *
+     * @return bool
+     */
+    public function shouldRetry($request)
+    {
+        if ($this->retryAttempts < $this->retries) {
+            $this->retryAttempts += 1;
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns the last used connection so that it may be inspected.  Mainly
+     * for debugging/testing purposes.
+     *
+     * @return Connection
+     */
+    public function getLastConnection()
+    {
+        return $this->lastConnection;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ClientTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ClientTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..da4cc8c17c4f8582ed39e0090aacca93144e8e1d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ClientTest.php
@@ -0,0 +1,420 @@
+<?php
+
+namespace Elasticsearch\Tests;
+
+use Elasticsearch;
+use Elasticsearch\ClientBuilder;
+use Elasticsearch\Connections\Connection;
+use Mockery as m;
+
+/**
+ * Class ClientTest
+ *
+ * @category   Tests
+ * @package    Elasticsearch
+ * @subpackage Tests
+ * @author     Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link       http://elasticsearch.org
+ */
+class ClientTest extends \PHPUnit_Framework_TestCase
+{
+    public function tearDown()
+    {
+        m::close();
+    }
+
+    /**
+     * @expectedException \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     */
+    public function testConstructorIllegalPort()
+    {
+        $client = Elasticsearch\ClientBuilder::create()->setHosts(['localhost:abc'])->build();
+    }
+
+    public function testCustomQueryParams()
+    {
+        $params = array();
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([$_SERVER['ES_TEST_HOST']])->build();
+
+        $getParams = array(
+            'index' => 'test',
+            'type' => 'test',
+            'id' => 1,
+            'parent' => 'abc',
+            'custom' => array('customToken' => 'abc', 'otherToken' => 123),
+            'client' => ['ignore' => 400]
+        );
+        $exists = $client->exists($getParams);
+    }
+
+    public function testFromConfig()
+    {
+        $params = [
+            'hosts' => [
+                'localhost:9200'
+            ],
+            'retries' => 2,
+            'handler' => ClientBuilder::multiHandler()
+        ];
+        $client = ClientBuilder::fromConfig($params);
+    }
+
+    /**
+     * @expectedException \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    public function testFromConfigBadParam()
+    {
+        $params = [
+            'hosts' => [
+                'localhost:9200'
+            ],
+            'retries' => 2,
+            'imNotReal' => 5
+        ];
+        $client = ClientBuilder::fromConfig($params);
+    }
+
+    public function testFromConfigBadParamQuiet()
+    {
+        $params = [
+            'hosts' => [
+                'localhost:9200'
+            ],
+            'retries' => 2,
+            'imNotReal' => 5
+        ];
+        $client = ClientBuilder::fromConfig($params, true);
+    }
+
+    public function testNullDelete()
+    {
+        $client = ClientBuilder::create()->build();
+
+        try {
+            $client->delete([
+                'index' => null,
+                'type' => 'test',
+                'id' => 'test'
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+
+        try {
+            $client->delete([
+                'index' => 'test',
+                'type' => null,
+                'id' => 'test'
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+
+        try {
+            $client->delete([
+                'index' => 'test',
+                'type' => 'test',
+                'id' => null
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+    }
+
+    public function testEmptyStringDelete()
+    {
+        $client = ClientBuilder::create()->build();
+
+        try {
+            $client->delete([
+                'index' => '',
+                'type' => 'test',
+                'id' => 'test'
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+
+        try {
+            $client->delete([
+                'index' => 'test',
+                'type' => '',
+                'id' => 'test'
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+
+        try {
+            $client->delete([
+                'index' => 'test',
+                'type' => 'test',
+                'id' => ''
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+    }
+
+    public function testArrayOfEmptyStringDelete()
+    {
+        $client = ClientBuilder::create()->build();
+
+        try {
+            $client->delete([
+                'index' => ['', '', ''],
+                'type' => 'test',
+                'id' => 'test'
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+
+        try {
+            $client->delete([
+                'index' => 'test',
+                'type' => ['', '', ''],
+                'id' => 'test'
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+    }
+
+    public function testArrayOfNullDelete()
+    {
+        $client = ClientBuilder::create()->build();
+
+        try {
+            $client->delete([
+                'index' => [null, null, null],
+                'type' => 'test',
+                'id' => 'test'
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+
+        try {
+            $client->delete([
+                'index' => 'test',
+                'type' => [null, null, null],
+                'id' => 'test'
+            ]);
+            $this->fail("InvalidArgumentException was not thrown");
+        } catch (Elasticsearch\Common\Exceptions\InvalidArgumentException $e) {
+            // all good
+        }
+    }
+
+    public function testMaxRetriesException()
+    {
+        $client = Elasticsearch\ClientBuilder::create()
+            ->setHosts(["localhost:1"])
+            ->setRetries(0)
+            ->build();
+
+        $searchParams = array(
+            'index' => 'test',
+            'type' => 'test',
+            'body' => [
+                'query' => [
+                    'match_all' => []
+                ]
+            ]
+        );
+
+        $client = Elasticsearch\ClientBuilder::create()
+            ->setHosts(["localhost:1"])
+            ->setRetries(0)
+            ->build();
+
+        try {
+            $client->search($searchParams);
+            $this->fail("Should have thrown CouldNotConnectToHost");
+        } catch (Elasticsearch\Common\Exceptions\Curl\CouldNotConnectToHost $e) {
+            // All good
+            $previous = $e->getPrevious();
+            $this->assertInstanceOf('Elasticsearch\Common\Exceptions\MaxRetriesException', $previous);
+        } catch (\Exception $e) {
+            throw $e;
+        }
+
+
+        $client = Elasticsearch\ClientBuilder::create()
+            ->setHosts(["localhost:1"])
+            ->setRetries(0)
+            ->build();
+
+        try {
+            $client->search($searchParams);
+            $this->fail("Should have thrown TransportException");
+        } catch (Elasticsearch\Common\Exceptions\TransportException $e) {
+            // All good
+            $previous = $e->getPrevious();
+            $this->assertInstanceOf('Elasticsearch\Common\Exceptions\MaxRetriesException', $previous);
+        } catch (\Exception $e) {
+            throw $e;
+        }
+    }
+
+    public function testInlineHosts()
+    {
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            'localhost:9200'
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("localhost:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            'http://localhost:9200'
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("localhost:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            'http://foo.com:9200'
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            'https://foo.com:9200'
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9200", $host->getHost());
+        $this->assertEquals("https", $host->getTransportSchema());
+
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            'https://user:pass@foo.com:9200'
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9200", $host->getHost());
+        $this->assertEquals("https", $host->getTransportSchema());
+        $this->assertEquals("user:pass", $host->getUserPass());
+    }
+
+    public function testExtendedHosts()
+    {
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            [
+                'host' => 'localhost',
+                'port' => 9200,
+                'scheme' => 'http'
+            ]
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("localhost:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            [
+                'host' => 'foo.com',
+                'port' => 9200,
+                'scheme' => 'http'
+            ]
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            [
+                'host' => 'foo.com',
+                'port' => 9200,
+                'scheme' => 'https'
+            ]
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9200", $host->getHost());
+        $this->assertEquals("https", $host->getTransportSchema());
+
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            [
+                'host' => 'foo.com',
+                'scheme' => 'http'
+            ]
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            [
+                'host' => 'foo.com'
+            ]
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+
+
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            [
+                'host' => 'foo.com',
+                'port' => 9500,
+                'scheme' => 'https'
+            ]
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9500", $host->getHost());
+        $this->assertEquals("https", $host->getTransportSchema());
+
+
+        try {
+            $client = Elasticsearch\ClientBuilder::create()->setHosts([
+                [
+                    'port' => 9200,
+                    'scheme' => 'http'
+                ]
+            ])->build();
+            $this->fail("Expected RuntimeException from missing host, none thrown");
+        } catch (Elasticsearch\Common\Exceptions\RuntimeException $e) {
+            // good
+        }
+
+        // Underscore host, questionably legal, but inline method would break
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            [
+                'host' => 'the_foo.com'
+            ]
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("the_foo.com:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+
+
+        // Special characters in user/pass, would break inline
+        $client = Elasticsearch\ClientBuilder::create()->setHosts([
+            [
+                'host' => 'foo.com',
+                'user' => 'user',
+                'pass' => 'abc#$@?%!abc'
+            ]
+        ])->build();
+        $host = $client->transport->getConnection();
+        $this->assertEquals("foo.com:9200", $host->getHost());
+        $this->assertEquals("http", $host->getTransportSchema());
+        $this->assertEquals("user:abc#$@?%!abc", $host->getUserPass());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/Selectors/RoundRobinSelectorTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/Selectors/RoundRobinSelectorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e5de4fc528e23496a84dc3b34dd4cb022e11c3b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/Selectors/RoundRobinSelectorTest.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace Elasticsearch\Tests\ConnectionPool\Selectors;
+
+use Elasticsearch;
+
+/**
+ * Class SnifferTest
+ *
+ * @category   Tests
+ * @package    Elasticsearch
+ * @subpackage Tests\ConnectionPool\RoundRobinSelectorTest
+ * @author     Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link       http://elasticsearch.org
+ */
+class RoundRobinSelectorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * Add Ten connections, select 15 to verify round robin
+     *
+     * @covers \Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector::select
+     *
+     * @return void
+     */
+    public function testTenConnections()
+    {
+        $roundRobin = new Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector();
+
+        $mockConnections = array();
+        foreach (range(0, 10) as $index) {
+            $mockConnections[$index] = $this->getMockBuilder('\Elasticsearch\Connections\CurlMultiConnection')
+                ->disableOriginalConstructor()
+                ->getMock();
+        }
+
+        foreach (range(0, 15) as $index) {
+            $retConnection = $roundRobin->select($mockConnections);
+
+            $nextIndex = ($index % 10) + 1;
+            $this->assertEquals($mockConnections[$nextIndex], $retConnection);
+        }
+    }
+
+    /**
+     * Add Ten connections, select five, remove thre, test another 10 to check
+     * that the round-robining works after removing connections
+     *
+     * @covers \Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector::select
+     *
+     * @return void
+     */
+    public function testAddTenConnectionsestFiveTRemoveThree()
+    {
+        $roundRobin = new Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector();
+
+        $mockConnections = array();
+        foreach (range(0, 10) as $index) {
+            $mockConnections[$index] = $this->getMockBuilder('\Elasticsearch\Connections\CurlMultiConnection')
+                ->disableOriginalConstructor()
+                ->getMock();
+        }
+
+        foreach (range(0, 4) as $index) {
+            $retConnection = $roundRobin->select($mockConnections);
+
+            $nextIndex = ($index % (count($mockConnections)-1)) + 1;
+            $this->assertEquals($mockConnections[$nextIndex], $retConnection);
+        }
+
+        unset($mockConnections[8]);
+        unset($mockConnections[9]);
+        unset($mockConnections[10]);
+
+        foreach (range(5, 15) as $index) {
+            $retConnection = $roundRobin->select($mockConnections);
+
+            $nextIndex = ($index % (count($mockConnections)-1)) + 1;
+            $this->assertEquals($mockConnections[$nextIndex], $retConnection);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/Selectors/StickyRoundRobinSelectorTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/Selectors/StickyRoundRobinSelectorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d93ec7908f624aa2c4322767048905b976a2805
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/Selectors/StickyRoundRobinSelectorTest.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Elasticsearch\Tests\ConnectionPool\Selectors;
+
+use Elasticsearch;
+use Mockery as m;
+
+/**
+ * Class StickyRoundRobinSelectorTest
+ *
+ * @category   Tests
+ * @package    Elasticsearch
+ * @subpackage Tests\ConnectionPool\StickyRoundRobinSelectorTest
+ * @author     Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link       http://elasticsearch.org
+ */
+class StickyRoundRobinSelectorTest extends \PHPUnit_Framework_TestCase
+{
+    public function tearDown()
+    {
+        m::close();
+    }
+
+    public function testTenConnections()
+    {
+        $roundRobin = new Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector();
+
+        $mockConnections = array();
+        $mockConnections[] = m::mock('\Elasticsearch\Connections\GuzzleConnection')
+                             ->shouldReceive('isAlive')->times(16)->andReturn(true)->getMock();
+
+        foreach (range(0, 9) as $index) {
+            $mockConnections[] = m::mock('\Elasticsearch\Connections\GuzzleConnection');
+        }
+
+        foreach (range(0, 15) as $index) {
+            $retConnection = $roundRobin->select($mockConnections);
+
+            $this->assertEquals($mockConnections[0], $retConnection);
+        }
+    }
+
+    public function testTenConnectionsFirstDies()
+    {
+        $roundRobin = new Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector();
+
+        $mockConnections = array();
+        $mockConnections[] = m::mock('\Elasticsearch\Connections\GuzzleConnection')
+                             ->shouldReceive('isAlive')->once()->andReturn(false)->getMock();
+
+        $mockConnections[] = m::mock('\Elasticsearch\Connections\GuzzleConnection')
+                             ->shouldReceive('isAlive')->times(15)->andReturn(true)->getMock();
+
+        foreach (range(0, 8) as $index) {
+            $mockConnections[] = m::mock('\Elasticsearch\Connections\GuzzleConnection');
+        }
+
+        foreach (range(0, 15) as $index) {
+            $retConnection = $roundRobin->select($mockConnections);
+
+            $this->assertEquals($mockConnections[1], $retConnection);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/SniffingConnectionPoolIntegrationTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/SniffingConnectionPoolIntegrationTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6f3de922e9efb7e60f0c6c968d9a6b580c5e5c3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/SniffingConnectionPoolIntegrationTest.php
@@ -0,0 +1,25 @@
+<?php
+use Elasticsearch\ClientBuilder;
+
+/**
+ * Class SniffingConnectionPoolIntegrationTest
+ *
+ * @category   Tests
+ * @package    Elasticsearch
+ * @subpackage Tests/SniffingConnectionPoolTest
+ * @author     Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link       http://elasticsearch.org
+ */
+class SniffingConnectionPoolIntegrationTest extends \PHPUnit_Framework_TestCase
+{
+    public function testSniff()
+    {
+        $client = ClientBuilder::create()
+            ->setHosts([$_SERVER['ES_TEST_HOST']])
+            ->setConnectionPool('\Elasticsearch\ConnectionPool\SniffingConnectionPool', ['sniffingInterval' => -10])
+            ->build();
+
+        $client->ping();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/SniffingConnectionPoolTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/SniffingConnectionPoolTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d38c87a29638f7d039d07877a21330729e4cec6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/SniffingConnectionPoolTest.php
@@ -0,0 +1,426 @@
+<?php
+
+use Elasticsearch\Common\Exceptions\NoNodesAvailableException;
+use Elasticsearch\ConnectionPool\SniffingConnectionPool;
+use Mockery as m;
+
+/**
+ * Class SniffingConnectionPoolTest
+ *
+ * @category   Tests
+ * @package    Elasticsearch
+ * @subpackage Tests/SniffingConnectionPoolTest
+ * @author     Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link       http://elasticsearch.org
+ */
+class SniffingConnectionPoolTest extends \PHPUnit_Framework_TestCase
+{
+    public function tearDown()
+    {
+        m::close();
+    }
+
+    public function testAddOneHostThenGetConnection()
+    {
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')
+                          ->andReturn(true)
+                          ->getMock()
+                          ->shouldReceive('isAlive')
+                          ->andReturn(true)
+                          ->getMock();
+
+        $connections = array($mockConnection);
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturn($connections[0])
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $connectionPoolParams = array('randomizeHosts' => false);
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+
+        $this->assertEquals($mockConnection, $retConnection);
+    }
+
+    public function testAddOneHostAndTriggerSniff()
+    {
+        $clusterState = json_decode('{"ok":true,"cluster_name":"elasticsearch_zach","nodes":{"Bl2ihSr7TcuUHxhu1GA_YQ":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9300]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9200]"}}}', true);
+
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')->andReturn(true)->getMock()
+                          ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                          ->shouldReceive('getTransportSchema')->once()->andReturn('http')->getMock()
+                          ->shouldReceive('sniff')->once()->andReturn($clusterState)->getMock();
+
+        $connections = array($mockConnection);
+        $mockNewConnection = m::mock('\Elasticsearch\Connections\Connection')
+                             ->shouldReceive('isAlive')->andReturn(true)->getMock();
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')->twice()
+                    ->andReturn($mockNewConnection)
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory')
+                    ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9200))->andReturn($mockNewConnection)->getMock();
+
+        $connectionPoolParams = array(
+            'randomizeHosts' => false,
+            'sniffingInterval'  => -1
+        );
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+
+        $this->assertEquals($mockNewConnection, $retConnection);
+    }
+
+    public function testAddOneHostAndForceNext()
+    {
+        $clusterState = json_decode('{"ok":true,"cluster_name":"elasticsearch_zach","nodes":{"Bl2ihSr7TcuUHxhu1GA_YQ":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9300]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9200]"}}}', true);
+
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')->andReturn(true)->getMock()
+                          ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                          ->shouldReceive('getTransportSchema')->once()->andReturn('http')->getMock()
+                          ->shouldReceive('sniff')->once()->andReturn($clusterState)->getMock();
+
+        $connections = array($mockConnection);
+        $mockNewConnection = m::mock('\Elasticsearch\Connections\Connection')
+                             ->shouldReceive('isAlive')->andReturn(true)->getMock();
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')->once()->andReturn($mockConnection)->getMock()
+                    ->shouldReceive('select')->once()->andReturn($mockNewConnection)->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory')
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9200))->andReturn($mockNewConnection)->getMock();
+
+        $connectionPoolParams = array(
+            'randomizeHosts' => false
+        );
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection(true);
+
+        $this->assertEquals($mockNewConnection, $retConnection);
+    }
+
+    public function testAddTenNodesThenGetConnection()
+    {
+        $connections = array();
+
+        foreach (range(1, 10) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')
+                              ->andReturn(true)
+                              ->getMock()
+                              ->shouldReceive('isAlive')
+                              ->andReturn(true)
+                              ->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturn($connections[0])
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $connectionPoolParams = array('randomizeHosts' => false);
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+
+        $this->assertEquals($connections[0], $retConnection);
+    }
+
+    public function testAddTenNodesTimeoutAllButLast()
+    {
+        $connections = array();
+
+        foreach (range(1, 9) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')
+                              ->andReturn(false)
+                              ->getMock()
+                              ->shouldReceive('isAlive')
+                              ->andReturn(false)
+                              ->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')
+                          ->andReturn(true)
+                          ->getMock()
+                          ->shouldReceive('isAlive')
+                          ->andReturn(true)
+                          ->getMock();
+
+        $connections[] = $mockConnection;
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues($connections)
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $connectionPoolParams = array('randomizeHosts' => false);
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+
+        $this->assertEquals($connections[9], $retConnection);
+    }
+
+    /**
+     * @expectedException Elasticsearch\Common\Exceptions\NoNodesAvailableException
+     */
+    public function testAddTenNodesAllTimeout()
+    {
+        $connections = array();
+
+        foreach (range(1, 10) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')
+                              ->andReturn(false)
+                              ->getMock()
+                              ->shouldReceive('isAlive')
+                              ->andReturn(false)
+                              ->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues($connections)
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $connectionPoolParams = array('randomizeHosts' => false);
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+    }
+
+    public function testAddOneHostSniffTwo()
+    {
+        $clusterState = json_decode('{"ok":true,"cluster_name":"elasticsearch_zach","nodes":{"node1":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9300]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9200]"}, "node2":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9301]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9201]"}}}', true);
+
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')->andReturn(true)->getMock()
+                          ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                          ->shouldReceive('getTransportSchema')->twice()->andReturn('http')->getMock()
+                          ->shouldReceive('sniff')->twice()->andReturn($clusterState)->getMock();
+
+        $connections = array($mockConnection);
+
+        $newConnections = array();
+        $newConnections[] = m::mock('\Elasticsearch\Connections\Connection')
+                             ->shouldReceive('isAlive')->andReturn(true)->getMock();
+
+        $newConnections[] = m::mock('\Elasticsearch\Connections\Connection')
+                             ->shouldReceive('isAlive')->andReturn(true)->getMock();
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues(array(        //selects provided node first, then the new cluster list
+                            $mockConnection,
+                            $newConnections[0],
+                            $newConnections[1]
+                    ))
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory')
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9200))->andReturn($newConnections[0])->getMock()
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9201))->andReturn($newConnections[1])->getMock();
+
+        $connectionPoolParams = array(
+            'randomizeHosts' => false,
+            'sniffingInterval'  => -1
+        );
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+        $this->assertEquals($newConnections[0], $retConnection);
+
+        $retConnection = $connectionPool->nextConnection();
+        $this->assertEquals($newConnections[1], $retConnection);
+    }
+
+    /**
+     * @expectedException Elasticsearch\Common\Exceptions\NoNodesAvailableException
+     */
+    public function testAddSeed_SniffTwo_TimeoutTwo()
+    {
+        $clusterState = json_decode('{"ok":true,"cluster_name":"elasticsearch_zach","nodes":{"node1":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9300]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9200]"}, "node2":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9301]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9201]"}}}', true);
+
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')->andReturn(true)->getMock()
+                          ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                          ->shouldReceive('getTransportSchema')->once()->andReturn('http')->getMock()
+                          ->shouldReceive('sniff')->once()->andReturn($clusterState)->getMock();
+
+        $connections = array($mockConnection);
+
+        $newConnections = array();
+        $newConnections[] = m::mock('\Elasticsearch\Connections\Connection')
+                            ->shouldReceive('isAlive')->andReturn(false)->getMock()
+                            ->shouldReceive('ping')->andReturn(false)->getMock();
+
+        $newConnections[] = m::mock('\Elasticsearch\Connections\Connection')
+                            ->shouldReceive('isAlive')->andReturn(false)->getMock()
+                            ->shouldReceive('ping')->andReturn(false)->getMock();
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues(array(        //selects provided node first, then the new cluster list
+                    $mockConnection,
+                    $newConnections[0],
+                    $newConnections[1]
+                ))
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory')
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9200))->andReturn($newConnections[0])->getMock()
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9201))->andReturn($newConnections[1])->getMock();
+
+        $connectionPoolParams = array(
+            'randomizeHosts' => false,
+            'sniffingInterval'  => -1
+        );
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+        $this->assertEquals($mockConnection, $retConnection);
+    }
+
+    public function testTen_TimeoutNine_SniffTenth_AddTwoAlive()
+    {
+        $clusterState = json_decode('{"ok":true,"cluster_name":"elasticsearch_zach","nodes":{"node1":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9300]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9200]"}, "node2":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9301]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9201]"}}}', true);
+
+        $connections = array();
+
+        foreach (range(1, 10) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')->andReturn(false)->getMock()
+                              ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                              ->shouldReceive('sniff')->andThrow('Elasticsearch\Common\Exceptions\Curl\OperationTimeoutException')->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')->andReturn(true)->getMock()
+                          ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                          ->shouldReceive('sniff')->andReturn($clusterState)->getMock()
+                          ->shouldReceive('getTransportSchema')->twice()->andReturn('http')->getMock();
+
+        $connections[] = $mockConnection;
+
+        $newConnections = $connections;
+        $newConnections[] = m::mock('\Elasticsearch\Connections\Connection')
+                            ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                            ->shouldReceive('ping')->andReturn(true)->getMock();
+
+        $newConnections[] = m::mock('\Elasticsearch\Connections\Connection')
+                            ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                            ->shouldReceive('ping')->andReturn(true)->getMock();
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues($newConnections)
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory')
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9200))->andReturn($newConnections[10])->getMock()
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9201))->andReturn($newConnections[11])->getMock();
+
+        $connectionPoolParams = array(
+            'randomizeHosts' => false,
+            'sniffingInterval'  => -1
+        );
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+        $this->assertEquals($newConnections[11], $retConnection);
+
+        $retConnection = $connectionPool->nextConnection();
+        $this->assertEquals($newConnections[12], $retConnection);
+    }
+
+    /**
+     * @expectedException Elasticsearch\Common\Exceptions\NoNodesAvailableException
+     */
+    public function testTen_TimeoutNine_SniffTenth_AddTwoDead_TimeoutEveryone()
+    {
+        $clusterState = json_decode('{"ok":true,"cluster_name":"elasticsearch_zach","nodes":{"node1":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9300]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9200]"}, "node2":{"name":"Vesta","transport_address":"inet[/192.168.1.119:9301]","hostname":"zach-ThinkPad-W530","version":"0.90.5","http_address":"inet[/192.168.1.119:9201]"}}}', true);
+
+        $connections = array();
+
+        foreach (range(1, 10) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')->andReturn(false)->getMock()
+                              ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                              ->shouldReceive('sniff')->andThrow('Elasticsearch\Common\Exceptions\Curl\OperationTimeoutException')->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')->andReturn(true)->getMock()
+                          ->shouldReceive('isAlive')->andReturn(true)->getMock()
+                          ->shouldReceive('sniff')->andReturn($clusterState)->getMock()
+                          ->shouldReceive('getTransportSchema')->once()->andReturn('http')->getMock()
+                          ->shouldReceive('sniff')->andThrow('Elasticsearch\Common\Exceptions\Curl\OperationTimeoutException')->getMock();
+
+        $connections[] = $mockConnection;
+
+        $newConnections = $connections;
+        $newConnections[] = m::mock('\Elasticsearch\Connections\Connection')
+                            ->shouldReceive('isAlive')->andReturn(false)->getMock()
+                            ->shouldReceive('ping')->andReturn(false)->getMock()
+                            ->shouldReceive('sniff')->andThrow('Elasticsearch\Common\Exceptions\Curl\OperationTimeoutException')->getMock();
+
+        $newConnections[] = m::mock('\Elasticsearch\Connections\Connection')
+                            ->shouldReceive('isAlive')->andReturn(false)->getMock()
+                            ->shouldReceive('ping')->andReturn(false)->getMock()
+                            ->shouldReceive('sniff')->andThrow('Elasticsearch\Common\Exceptions\Curl\OperationTimeoutException')->getMock();
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues($newConnections)
+                    ->getMock();
+
+        $RRConnections = $newConnections;
+        //array_push($connections);
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory')
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9200))->andReturn($newConnections[10])->getMock()
+                             ->shouldReceive('create')->with(array('host' => '192.168.1.119', 'port' => 9201))->andReturn($newConnections[11])->getMock();
+
+        $connectionPoolParams = array(
+            'randomizeHosts' => false,
+            'sniffingInterval'  => -1
+        );
+        $connectionPool = new SniffingConnectionPool($connections, $selector, $connectionFactory, $connectionPoolParams);
+
+        $retConnection = $connectionPool->nextConnection();
+        $this->assertEquals($newConnections[11], $retConnection);
+
+        $retConnection = $connectionPool->nextConnection();
+        $this->assertEquals($newConnections[12], $retConnection);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/StaticConnectionPoolTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/StaticConnectionPoolTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8466db9b893798dd3da9f757bbe4366b620b97a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/ConnectionPool/StaticConnectionPoolTest.php
@@ -0,0 +1,231 @@
+<?php
+
+namespace Elasticsearch\Tests\ConnectionPool;
+
+use Elasticsearch;
+use Elasticsearch\Common\Exceptions\NoNodesAvailableException;
+use Mockery as m;
+
+/**
+ * Class StaticConnectionPoolTest
+ *
+ * @category   Tests
+ * @package    Elasticsearch
+ * @subpackage Tests/StaticConnectionPoolTest
+ * @author     Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link       http://elasticsearch.org
+ */
+class StaticConnectionPoolTest extends \PHPUnit_Framework_TestCase
+{
+    public function tearDown()
+    {
+        m::close();
+    }
+
+    public function testAddOneHostThenGetConnection()
+    {
+        $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')
+                          ->andReturn(true)
+                          ->getMock()
+                          ->shouldReceive('isAlive')
+                          ->andReturn(true)
+                          ->getMock()
+                          ->shouldReceive('markDead')->once()->getMock();
+
+        $connections = array($mockConnection);
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturn($connections[0])
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $randomizeHosts = false;
+        $connectionPool = new Elasticsearch\ConnectionPool\StaticConnectionPool($connections, $selector, $connectionFactory, $randomizeHosts);
+
+        $retConnection = $connectionPool->nextConnection();
+
+        $this->assertEquals($mockConnection, $retConnection);
+    }
+
+    public function testAddMultipleHostsThenGetFirst()
+    {
+        $connections = array();
+
+        foreach (range(1, 10) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')
+                              ->andReturn(true)
+                              ->getMock()
+                              ->shouldReceive('isAlive')
+                              ->andReturn(true)
+                              ->getMock()
+                              ->shouldReceive('markDead')->once()->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+            ->shouldReceive('select')
+            ->andReturn($connections[0])
+            ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $randomizeHosts = false;
+        $connectionPool = new Elasticsearch\ConnectionPool\StaticConnectionPool($connections, $selector, $connectionFactory, $randomizeHosts);
+
+        $retConnection = $connectionPool->nextConnection();
+
+        $this->assertEquals($connections[0], $retConnection);
+    }
+
+    /**
+     * @expectedException Elasticsearch\Common\Exceptions\NoNodesAvailableException
+     */
+    public function testAllHostsFailPing()
+    {
+        $connections = array();
+
+        foreach (range(1, 10) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')
+                              ->andReturn(false)
+                              ->getMock()
+                              ->shouldReceive('isAlive')
+                              ->andReturn(false)
+                              ->getMock()
+                              ->shouldReceive('markDead')->once()->getMock()
+                              ->shouldReceive('getPingFailures')->andReturn(0)->once()->getMock()
+                              ->shouldReceive('getLastPing')->andReturn(time())->once()->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues($connections)
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $randomizeHosts = false;
+        $connectionPool = new Elasticsearch\ConnectionPool\StaticConnectionPool($connections, $selector, $connectionFactory, $randomizeHosts);
+
+        $connectionPool->nextConnection();
+    }
+
+    public function testAllExceptLastHostFailPingRevivesInSkip()
+    {
+        $connections = array();
+
+        foreach (range(1, 9) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')
+                              ->andReturn(false)
+                              ->getMock()
+                              ->shouldReceive('isAlive')
+                              ->andReturn(false)
+                              ->getMock()
+                              ->shouldReceive('markDead')->once()->getMock()
+                              ->shouldReceive('getPingFailures')->andReturn(0)->once()->getMock()
+                              ->shouldReceive('getLastPing')->andReturn(time())->once()->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $goodConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')->once()
+                          ->andReturn(true)
+                          ->getMock()
+                          ->shouldReceive('isAlive')->once()
+                          ->andReturn(false)
+                          ->getMock()
+                          ->shouldReceive('markDead')->once()->getMock()
+                          ->shouldReceive('getPingFailures')->andReturn(0)->once()->getMock()
+                          ->shouldReceive('getLastPing')->andReturn(time())->once()->getMock();
+
+        $connections[] = $goodConnection;
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues($connections)
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $randomizeHosts = false;
+        $connectionPool = new Elasticsearch\ConnectionPool\StaticConnectionPool($connections, $selector, $connectionFactory, $randomizeHosts);
+
+        $ret = $connectionPool->nextConnection();
+        $this->assertEquals($goodConnection, $ret);
+    }
+
+    public function testAllExceptLastHostFailPingRevivesPreSkip()
+    {
+        $connections = array();
+
+        foreach (range(1, 9) as $index) {
+            $mockConnection = m::mock('\Elasticsearch\Connections\Connection')
+                              ->shouldReceive('ping')
+                              ->andReturn(false)
+                              ->getMock()
+                              ->shouldReceive('isAlive')
+                              ->andReturn(false)
+                              ->getMock()
+                              ->shouldReceive('markDead')->once()->getMock()
+                              ->shouldReceive('getPingFailures')->andReturn(0)->once()->getMock()
+                              ->shouldReceive('getLastPing')->andReturn(time())->once()->getMock();
+
+            $connections[] = $mockConnection;
+        }
+
+        $goodConnection = m::mock('\Elasticsearch\Connections\Connection')
+                          ->shouldReceive('ping')->once()
+                          ->andReturn(true)
+                          ->getMock()
+                          ->shouldReceive('isAlive')->once()
+                          ->andReturn(false)
+                          ->getMock()
+                          ->shouldReceive('markDead')->once()->getMock()
+                          ->shouldReceive('getPingFailures')->andReturn(0)->once()->getMock()
+                          ->shouldReceive('getLastPing')->andReturn(time()-10000)->once()->getMock();
+
+        $connections[] = $goodConnection;
+
+        $selector = m::mock('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
+                    ->shouldReceive('select')
+                    ->andReturnValues($connections)
+                    ->getMock();
+
+        $connectionFactory = m::mock('\Elasticsearch\Connections\ConnectionFactory');
+
+        $randomizeHosts = false;
+        $connectionPool = new Elasticsearch\ConnectionPool\StaticConnectionPool($connections, $selector, $connectionFactory, $randomizeHosts);
+
+        $ret = $connectionPool->nextConnection();
+        $this->assertEquals($goodConnection, $ret);
+    }
+
+    public function testCustomConnectionPoolIT()
+    {
+        $clientBuilder = \Elasticsearch\ClientBuilder::create();
+        $clientBuilder->setHosts(['localhost:1']);
+        $client = $clientBuilder
+            ->setRetries(0)
+            ->setConnectionPool('\Elasticsearch\ConnectionPool\StaticConnectionPool', [])
+            ->build();
+
+        try {
+            $client->search([]);
+            $this->fail("Should have thrown NoNodesAvailableException");
+        } catch (Elasticsearch\Common\Exceptions\NoNodesAvailableException $e) {
+            // All good
+        } catch (\Exception $e) {
+            throw $e;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Endpoints/AbstractEndpointTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Endpoints/AbstractEndpointTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..51701e37ee135167747db3daa7b5374629a12389
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Endpoints/AbstractEndpointTest.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Elasticsearch\Tests\Endpoints;
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+
+class AbstractEndpointTest extends \PHPUnit_Framework_TestCase
+{
+    private $endpoint;
+
+    public static function invalidParameters()
+    {
+        return [
+            [['invalid' => 10]],
+            [['invalid' => 10, 'invalid2' => 'another']],
+        ];
+    }
+
+    /**
+     * @dataProvider invalidParameters
+     * @expectedException Elasticsearch\Common\Exceptions\UnexpectedValueException
+     */
+    public function testInvalidParamsCauseErrorsWhenProvidedToSetParams(array $params)
+    {
+        $this->endpoint->expects($this->once())
+            ->method('getParamWhitelist')
+            ->willReturn(['one', 'two']);
+
+        $this->endpoint->setParams($params);
+    }
+
+    protected function setUp()
+    {
+        $this->endpoint = $this->getMockForAbstractClass(AbstractEndpoint::class);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Helper/Iterators/SearchResponseIteratorTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Helper/Iterators/SearchResponseIteratorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2570dd8594b65e08bbba0d467e835846880d2f5a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Helper/Iterators/SearchResponseIteratorTest.php
@@ -0,0 +1,167 @@
+<?php
+
+namespace Elasticsearch\Tests\Helper\Iterators;
+
+use Elasticsearch\Helper\Iterators\SearchResponseIterator;
+use Mockery as m;
+
+/**
+ * Class SearchResponseIteratorTest
+ * @package Elasticsearch\Tests\Helper\Iterators
+ * @author  Arturo Mejia <arturo.mejia@kreatetechnology.com>
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link    http://Elasticsearch.org
+ */
+class SearchResponseIteratorTest extends \PHPUnit_Framework_TestCase
+{
+
+    public function tearDown()
+    {
+        m::close();
+    }
+
+    public function testWithNoResults()
+    {
+        $search_params = array(
+            'scroll'      => '5m',
+            'index'       => 'twitter',
+            'size'        => 1000,
+            'body'        => array(
+                'query' => array(
+                    'match_all' => new \StdClass
+                )
+            )
+        );
+
+        $mock_client = m::mock('\Elasticsearch\Client');
+
+        $mock_client->shouldReceive('search')
+            ->once()
+            ->ordered()
+            ->with($search_params)
+            ->andReturn(array('_scroll_id' => 'scroll_id_01'));
+
+        $mock_client->shouldReceive('scroll')
+            ->never();
+
+        $mock_client->shouldReceive('clearScroll')
+            ->once()
+            ->ordered()
+            ->withAnyArgs();
+
+
+        $responses = new SearchResponseIterator($mock_client, $search_params);
+
+        $this->assertCount(0, $responses);
+    }
+
+    public function testWithHits()
+    {
+        $search_params = array(
+            'scroll'      => '5m',
+            'index'       => 'twitter',
+            'size'        => 1000,
+            'body'        => array(
+                'query' => array(
+                    'match_all' => new \StdClass
+                )
+            )
+        );
+
+        $mock_client = m::mock('\Elasticsearch\Client');
+
+        $mock_client->shouldReceive('search')
+            ->once()
+            ->ordered()
+            ->with($search_params)
+            ->andReturn([
+                '_scroll_id' => 'scroll_id_01',
+                'hits' => [
+                    'hits' => [
+                        [
+                            'foo' => 'bar'
+                        ]
+                    ]
+                ]
+            ]);
+
+        $mock_client->shouldReceive('scroll')
+            ->once()
+            ->ordered()
+            ->with(
+                [
+                    'scroll_id'  => 'scroll_id_01',
+                    'scroll' => '5m'
+                ]
+            )
+            ->andReturn(
+                [
+                    '_scroll_id' => 'scroll_id_02',
+                    'hits' => [
+                        'hits' => [
+                            [
+                                'foo' => 'bar'
+                            ]
+                        ]
+                    ]
+                ]);
+
+        $mock_client->shouldReceive('scroll')
+            ->once()
+            ->ordered()
+            ->with(
+                [
+                    'scroll_id'  => 'scroll_id_02',
+                    'scroll' => '5m'
+                ]
+            )
+            ->andReturn(
+                [
+                    '_scroll_id' => 'scroll_id_03',
+                    'hits' => [
+                        'hits' => [
+                            [
+                                'foo' => 'bar'
+                            ]
+                        ]
+                    ]
+                ]
+            );
+
+        $mock_client->shouldReceive('scroll')
+            ->once()
+            ->ordered()
+            ->with(
+                [
+                    'scroll_id'  => 'scroll_id_03',
+                    'scroll' => '5m'
+                ]
+            )
+            ->andReturn(
+                [
+                    '_scroll_id' => 'scroll_id_04',
+                    'hits' => [
+                        'hits' => []
+                    ]
+                ]
+            );
+
+        $mock_client->shouldReceive('scroll')
+            ->never()
+            ->with(
+                [
+                    'scroll_id'  => 'scroll_id_04',
+                    'scroll' => '5m'
+                ]
+            );
+
+        $mock_client->shouldReceive('clearScroll')
+            ->once()
+            ->ordered()
+            ->withAnyArgs();
+
+        $responses = new SearchResponseIterator($mock_client, $search_params);
+
+        $this->assertCount(4, $responses);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/RegisteredNamespaceTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/RegisteredNamespaceTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f40430f0cd54ae577617a3cdf1b312c9b94dd1c9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/RegisteredNamespaceTest.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Elasticsearch\Tests;
+
+use Elasticsearch;
+use Elasticsearch\ClientBuilder;
+use Elasticsearch\Serializers\SerializerInterface;
+use Elasticsearch\Transport;
+use Mockery as m;
+
+/**
+ * Class RegisteredNamespaceTest
+ *
+ * @category   Tests
+ * @package    Elasticsearch
+ * @subpackage Tests
+ * @author     Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link       http://elasticsearch.org
+ */
+class RegisteredNamespaceTest extends \PHPUnit_Framework_TestCase
+{
+    public function tearDown()
+    {
+        m::close();
+    }
+
+    public function testRegisteringNamespace()
+    {
+        $builder = new FooNamespaceBuilder();
+        $client = ClientBuilder::create()->registerNamespace($builder)->build();
+        $this->assertEquals("123", $client->foo()->fooMethod());
+    }
+
+    /**
+     * @expectedException \Elasticsearch\Common\Exceptions\BadMethodCallException
+     */
+    public function testNonExistingNamespace()
+    {
+        $builder = new FooNamespaceBuilder();
+        $client = ClientBuilder::create()->registerNamespace($builder)->build();
+        $this->assertEquals("123", $client->bar()->fooMethod());
+    }
+}
+
+class FooNamespaceBuilder implements Elasticsearch\Namespaces\NamespaceBuilderInterface
+{
+    public function getName()
+    {
+        return "foo";
+    }
+
+    public function getObject(Transport $transport, SerializerInterface $serializer)
+    {
+        return new FooNamespace();
+    }
+}
+
+class FooNamespace
+{
+    public function fooMethod()
+    {
+        return "123";
+    }
+}
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Serializers/ArrayToJSONSerializerTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Serializers/ArrayToJSONSerializerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0010f86aebc5de69e5316a887fdd13f1e14b2211
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Serializers/ArrayToJSONSerializerTest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Elasticsearch\Tests\Serializers;
+
+use Elasticsearch\Serializers\ArrayToJSONSerializer;
+use PHPUnit_Framework_TestCase;
+use Mockery as m;
+
+/**
+ * Class ArrayToJSONSerializerTest
+ * @package Elasticsearch\Tests\Serializers
+ */
+class ArrayToJSONSerializerTest extends PHPUnit_Framework_TestCase
+{
+    public function tearDown()
+    {
+        m::close();
+    }
+
+    public function testSerializeArray()
+    {
+        $serializer = new ArrayToJSONSerializer();
+        $body = array('value' => 'field');
+
+        $ret = $serializer->serialize($body);
+
+        $body = json_encode($body, JSON_PRESERVE_ZERO_FRACTION);
+        $this->assertEquals($body, $ret);
+    }
+
+    public function testSerializeString()
+    {
+        $serializer = new ArrayToJSONSerializer();
+        $body = 'abc';
+
+        $ret = $serializer->serialize($body);
+
+        $this->assertEquals($body, $ret);
+    }
+
+    public function testDeserializeJSON()
+    {
+        $serializer = new ArrayToJSONSerializer();
+        $body = '{"field":"value"}';
+
+        $ret = $serializer->deserialize($body, array());
+
+        $body = json_decode($body, true);
+        $this->assertEquals($body, $ret);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Serializers/EverythingToJSONSerializerTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Serializers/EverythingToJSONSerializerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d0c6a913eeb97bcef6aacf838b02997e0884b455
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/Serializers/EverythingToJSONSerializerTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Elasticsearch\Tests\Serializers;
+
+use Elasticsearch\Serializers\EverythingToJSONSerializer;
+use PHPUnit_Framework_TestCase;
+use Mockery as m;
+
+/**
+ * Class EverythingToJSONSerializerTest
+ * @package Elasticsearch\Tests\Serializers
+ */
+class EverythingToJSONSerializerTest extends PHPUnit_Framework_TestCase
+{
+    public function tearDown()
+    {
+        m::close();
+    }
+
+    public function testSerializeArray()
+    {
+        $serializer = new EverythingToJSONSerializer();
+        $body = array('value' => 'field');
+
+        $ret = $serializer->serialize($body);
+
+        $body = json_encode($body, JSON_PRESERVE_ZERO_FRACTION);
+        $this->assertEquals($body, $ret);
+    }
+
+    public function testSerializeString()
+    {
+        $serializer = new EverythingToJSONSerializer();
+        $body = 'abc';
+
+        $ret = $serializer->serialize($body);
+
+        $body = '"abc"';
+        $this->assertEquals($body, $ret);
+    }
+
+    public function testDeserializeJSON()
+    {
+        $serializer = new EverythingToJSONSerializer();
+        $body = '{"field":"value"}';
+
+        $ret = $serializer->deserialize($body, array());
+
+        $body = json_decode($body, true);
+        $this->assertEquals($body, $ret);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/YamlRunnerTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/YamlRunnerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c22d5e4bf20fdbaf91e121dc6626e0b886ac577d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/Elasticsearch/Tests/YamlRunnerTest.php
@@ -0,0 +1,959 @@
+<?php
+
+namespace Elasticsearch\Tests;
+
+use Doctrine\Common\Inflector\Inflector;
+use Elasticsearch;
+use Elasticsearch\Common\Exceptions\BadRequest400Exception;
+use Elasticsearch\Common\Exceptions\Conflict409Exception;
+use Elasticsearch\Common\Exceptions\Forbidden403Exception;
+use Elasticsearch\Common\Exceptions\Missing404Exception;
+use Elasticsearch\Common\Exceptions\RequestTimeout408Exception;
+use Elasticsearch\Common\Exceptions\ServerErrorResponseException;
+use Elasticsearch\Common\Exceptions\RoutingMissingException;
+use GuzzleHttp\Ring\Future\FutureArrayInterface;
+use stdClass;
+use Symfony\Component\Finder\Finder;
+use Symfony\Component\Finder\SplFileInfo;
+use Symfony\Component\Yaml\Exception\ParseException;
+use Symfony\Component\Yaml\Parser;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * Class YamlRunnerTest
+ *
+ * @category   Tests
+ * @package    Elasticsearch
+ * @subpackage Tests
+ * @author     Zachary Tong <zachary.tong@elasticsearch.com>
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link       http://elasticsearch.org
+ */
+class YamlRunnerTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var Parser Yaml parser for reading integrations tests */
+    private $yaml;
+
+    /** @var Elasticsearch\Client client used by elasticsearch */
+    private $client;
+
+    /** @var string Es version */
+    private static $esVersion;
+
+    /** @var array A list of supported features */
+    private static $supportedFeatures = [
+        'stash_in_path', 'warnings'
+    ];
+
+    /** @var array A mapping for endpoint when there is a reserved keywords for the method / namespace name */
+    private static $endpointMapping = [
+        'tasks' => [
+            'list' => ['tasksList', 'tasks'],
+        ],
+    ];
+
+    /** @var array A list of skipped test with their reasons */
+    private static $skippedTest = [
+        'cat.nodeattrs/10_basic.yaml' => 'Using java regex fails in PHP',
+        'cat.repositories/10_basic.yaml' => 'Using java regex fails in PHP',
+        'indices.shrink/10_basic.yaml' => 'Shrink tests seem to require multiple nodes',
+        'indices.rollover/10_basic.yaml' => 'Rollover test seems buggy atm'
+    ];
+
+    /** @var array A list of files to skip completely, due to fatal parsing errors */
+    private static $skippedFiles = [
+        'indices.create/10_basic.yaml' => 'Temporary: Yaml parser doesnt support "inline" empty keys',
+        'indices.put_mapping/10_basic.yaml' => 'Temporary: Yaml parser doesnt support "inline" empty keys',
+    ];
+
+    /**
+     * Return the elasticsearch host
+     *
+     * @return string
+     */
+    public static function getHost()
+    {
+        if (isset($_SERVER['ES_TEST_HOST']) === true) {
+            return $_SERVER['ES_TEST_HOST'];
+        }
+
+        echo 'Environment variable for elasticsearch test cluster (ES_TEST_HOST) not defined. Exiting yaml test';
+        exit;
+    }
+
+
+    public static function setUpBeforeClass()
+    {
+        $host = static::getHost();
+        echo "Test Host: $host\n";
+
+        $ch = curl_init($host);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
+        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+        $response = curl_exec($ch);
+        curl_close($ch);
+
+        $response = json_decode($response, true);
+        static::$esVersion = $response['version']['number'];
+        echo "ES Version: ".static::$esVersion."\n";
+    }
+
+    public function setUp()
+    {
+        $this->clean();
+        $this->client = Elasticsearch\ClientBuilder::create()->setHosts([self::getHost()])->build();
+    }
+
+    /**
+     * @dataProvider yamlProvider
+     * @group sync
+     */
+    public function testIntegration($testProcedure, $skip, $setupProcedure, $fileName)
+    {
+        if ($skip) {
+            static::markTestIncomplete($testProcedure);
+        }
+
+        if (array_key_exists($fileName, static::$skippedTest)) {
+            static::markTestSkipped(static::$skippedTest[$fileName]);
+        }
+
+        if (null !== $setupProcedure) {
+            $this->processProcedure(current($setupProcedure), 'setup');
+            $this->waitForYellow();
+        }
+
+        $this->processProcedure(current($testProcedure), key($testProcedure));
+    }
+
+    /**
+     * @dataProvider yamlProvider
+     * @group async
+     */
+    public function testAsyncIntegration($testProcedure, $skip, $setupProcedure, $fileName)
+    {
+        if ($skip) {
+            static::markTestIncomplete($testProcedure);
+        }
+
+        if (array_key_exists($fileName, static::$skippedTest)) {
+            static::markTestSkipped(static::$skippedTest[$fileName]);
+        }
+
+        if (null !== $setupProcedure) {
+            $this->processProcedure(current($setupProcedure), 'setup');
+            $this->waitForYellow();
+        }
+
+        $this->processProcedure(current($testProcedure), key($testProcedure), true);
+    }
+
+    /**
+     * Process a procedure
+     *
+     * @param $procedure
+     * @param $name
+     * @param bool $async
+     */
+    public function processProcedure($procedure, $name, $async = false)
+    {
+        $lastOperationResult = null;
+        $context = [];
+
+        foreach ($procedure as $operation) {
+            $lastOperationResult = $this->processOperation($operation, $lastOperationResult, $context, $name, $async);
+        }
+    }
+
+    /**
+     * Process an operation
+     *
+     * @param      $operation
+     * @param      $lastOperationResult
+     * @param      $testName
+     * @param array $context 
+     * @param bool $async
+     *
+     * @return mixed
+     */
+    public function processOperation($operation, $lastOperationResult, &$context, $testName, $async = false)
+    {
+        $operationName = array_keys((array)$operation)[0];
+
+        if ('do' === $operationName) {
+            return $this->operationDo($operation->{$operationName}, $lastOperationResult, $context, $testName, $async);
+        }
+
+        if ('is_false' === $operationName) {
+            return $this->operationIsFalse($operation->{$operationName}, $lastOperationResult, $context, $testName);
+        }
+
+        if ('is_true' === $operationName) {
+            return $this->operationIsTrue($operation->{$operationName}, $lastOperationResult, $context, $testName);
+        }
+
+        if ('match' === $operationName) {
+            return $this->operationMatch($operation->{$operationName}, $lastOperationResult, $context, $testName);
+        }
+
+        if ('gte' === $operationName) {
+            return $this->operationGreaterThanOrEqual($operation->{$operationName}, $lastOperationResult, $context, $testName);
+        }
+
+        if ('gt' === $operationName) {
+            return $this->operationGreaterThan($operation->{$operationName}, $lastOperationResult, $context, $testName);
+        }
+
+        if ('length' === $operationName) {
+            return $this->operationLength($operation->{$operationName}, $lastOperationResult, $context, $testName);
+        }
+
+        if ('set' === $operationName) {
+            return $this->operationSet($operation->{$operationName}, $lastOperationResult, $context, $testName);
+        }
+
+        if ('skip' === $operationName) {
+            return $this->operationSkip($operation->{$operationName}, $lastOperationResult, $testName);
+        }
+
+        self::markTestIncomplete(sprintf('Operation %s not supported for test "%s"', $operationName, $testName));
+    }
+
+    /**
+     * Do something on the client
+     *
+     * @param      $operation
+     * @param      $lastOperationResult
+     * @param array $context
+     * @param      $testName
+     * @param bool $async
+     *
+     * @throws \Exception
+     *
+     * @return mixed
+     */
+    public function operationDo($operation, $lastOperationResult, &$context, $testName, $async = false)
+    {
+        $expectedError = null;
+        $expectedWarnings = null;
+
+        // Check if a error must be caught
+        if ('catch' === key($operation)) {
+            $expectedError = current($operation);
+            next($operation);
+        }
+
+        // Check if a warning must be caught
+        if ('warnings' === key($operation)) {
+            $expectedWarnings = current($operation);
+            next($operation);
+        }
+
+        $endpointInfo = explode('.', key($operation));
+        $endpointParams = $this->replaceWithContext(current($operation), $context);
+        $caller = $this->client;
+        $namespace = null;
+        $method = null;
+
+        if (count($endpointInfo) === 1) {
+            $method = Inflector::camelize($endpointInfo[0]);
+        }
+
+        if (count($endpointInfo) === 2) {
+            $namespace = $endpointInfo[0];
+            $method = Inflector::camelize($endpointInfo[1]);
+        }
+
+        if (is_object($endpointParams) === true && property_exists($endpointParams, 'ignore')) {
+            $ignore = $endpointParams->ignore;
+            unset($endpointParams->ignore);
+
+            $endpointParams->client['ignore'] = $ignore;
+        }
+
+        if ($async) {
+            $endpointParams->client['future'] = true;
+        }
+
+        list($method, $namespace) = $this->mapEndpoint($method, $namespace);
+
+        if (null !== $namespace) {
+            $caller = $caller->$namespace();
+        }
+
+        if (null === $method) {
+            self::markTestIncomplete(sprintf('Invalid do operation for test "%s"', $testName));
+        }
+
+        if (!method_exists($caller, $method)) {
+            self::markTestIncomplete(sprintf('Method "%s" not implement in "%s"', $method, get_class($caller)));
+        }
+
+        // Exist* methods have to be manually 'unwrapped' into true/false for async
+        if (strpos($method, "exist") !== false && $async === true) {
+            return $this->executeAsyncExistRequest($caller, $method, $endpointParams, $expectedError, $expectedWarnings, $testName);
+        }
+
+        return $this->executeRequest($caller, $method, $endpointParams, $expectedError, $expectedWarnings, $testName);
+    }
+
+    /**
+     * Obtain the response from the server
+     *
+     * @param $caller
+     * @param $method
+     * @param $endpointParams
+     * @param $expectedError
+     * @param $testName
+     *
+     * @throws \Exception
+     *
+     * @return array|mixed
+     */
+    public function executeRequest($caller, $method, $endpointParams, $expectedError, $expectedWarnings, $testName)
+    {
+        try {
+            $response = $caller->$method($endpointParams);
+
+            while ($response instanceof FutureArrayInterface) {
+                $response = $response->wait();
+            }
+
+            $this->checkForWarnings($expectedWarnings);
+
+            return $response;
+        } catch (\Exception $exception) {
+            if (null !== $expectedError) {
+                return $this->assertException($exception, $expectedError, $testName);
+            }
+
+            $msg = $exception->getMessage()
+                ."\nException in ".get_class($caller)." with [$method].\n Context:\n"
+                .var_export($endpointParams, true);
+            throw new \Exception($msg, 0, $exception);
+        }
+    }
+
+    /**
+     * Obtain the response when it is an Exists* method.  These are converted into
+     * true/false responses
+     *
+     * @param $caller
+     * @param $method
+     * @param $endpointParams
+     * @param $expectedError
+     * @param $testName
+     *
+     * @throws \Exception
+     *
+     * @return bool
+     */
+    public function executeAsyncExistRequest($caller, $method, $endpointParams, $expectedError, $expectedWarnings, $testName)
+    {
+        try {
+
+            $response = $caller->$method($endpointParams);
+
+            while ($response instanceof FutureArrayInterface) {
+                $response = $response->wait();
+            }
+
+            $this->checkForWarnings($expectedWarnings);
+
+            if ($response['status'] === 200) {
+                return true;
+            } else {
+                return false;
+            }
+        } catch (Missing404Exception $exception) {
+            return false;
+        } catch (RoutingMissingException $exception) {
+            return false;
+        } catch (\Exception $exception) {
+            if (null !== $expectedError) {
+                return $this->assertException($exception, $expectedError, $testName);
+            }
+
+            throw $exception;
+        }
+    }
+
+    public function checkForWarnings($expectedWarnings) {
+        $last = $this->client->transport->getLastConnection()->getLastRequestInfo();
+
+
+            // We have some warnings to check
+            if ($expectedWarnings !== null) {
+                if (isset($last['response']['headers']['Warning']) === true) {
+                    foreach ($last['response']['headers']['Warning'] as $warning) {
+                        $position = array_search($warning, $expectedWarnings);
+                        if ($position !== false) {
+                            // found the warning
+                            unset($expectedWarnings[$position]);
+                        } else {
+                            // didn't find, throw error
+                            //throw new \Exception("Expected to find warning [$warning] but did not.");
+                        }
+                    }
+                    if (count($expectedWarnings) > 0) {
+                        throw new \Exception("Expected to find more warnings: ". print_r($expectedWarnings, true));
+                    }
+                }
+            }
+            /* else {
+                // no expected warnings, make sure we have none returned
+                if (isset($last['response']['headers']['Warning']) === true) {
+                    throw new \Exception("Did not expect to find warnings, found some instead: "
+                        . print_r($last['response']['headers']['Warning'], true));
+                }
+            }
+            */
+    }
+
+    /**
+     * Check if a field in the last operation is false
+     *
+     * @param $operation
+     * @param $lastOperationResult
+     * @param $testName
+     */
+    public function operationIsFalse($operation, $lastOperationResult, &$context, $testName)
+    {
+        $value = (bool)$this->resolveValue($lastOperationResult, $operation, $context);
+        $msg = "Failed to assert that a value is false in test \"$testName\"\n"
+            ."$operation was [".print_r($value, true)."]"
+            .var_export($lastOperationResult, true);
+        static::assertFalse($value, $msg);
+
+        return $lastOperationResult;
+    }
+
+    /**
+     * Check if a field in the last operation is true
+     *
+     * @param $operation
+     * @param $lastOperationResult
+     * @param $testName
+     */
+    public function operationIsTrue($operation, $lastOperationResult, &$context, $testName)
+    {
+        $value = $this->resolveValue($lastOperationResult, $operation, $context);
+
+        $msg = "Failed to assert that a value is true in test \"$testName\"\n"
+            ."$operation was [".print_r($value, true)."]"
+            .var_export($lastOperationResult, true);
+        static::assertNotEquals(0, $value, $msg);
+        static::assertNotFalse($value, $msg);
+        static::assertNotNull($value, $msg);
+        static::assertNotEquals('', $msg);
+
+        return $lastOperationResult;
+    }
+
+    /**
+     * Check if a field in the last operation match an expected value
+     *
+     * @param $operation
+     * @param $lastOperationResult
+     * @param $testName
+     */
+    public function operationMatch($operation, $lastOperationResult, &$context, $testName)
+    {
+        $key = key($operation);
+
+        if ($key === '$body') {
+            $match = $lastOperationResult;
+        } else {
+            $match = $this->resolveValue($lastOperationResult, $key, $context);
+        }
+
+        $expected = $this->replaceWithContext(current($operation), $context);
+        $msg = "Failed to match in test \"$testName\". Expected ["
+            .var_export($expected, true)."] does not match [".var_export($match, true)."]\n".var_export($lastOperationResult, true);
+
+        if ($expected instanceof \stdClass) {
+            // Avoid stdClass / array mismatch
+            $expected = json_decode(json_encode($expected), true);
+            $match = json_decode(json_encode($match), true);
+
+            static::assertEquals($expected, $match, $msg);
+        } elseif (is_string($expected) && preg_match('#^/.+?/$#s', $expected)) {
+            static::assertRegExp($this->formatRegex($expected), $match, $msg);
+        } else {
+            static::assertEquals($expected, $match, $msg);
+        }
+
+        return $lastOperationResult;
+    }
+
+    /**
+     * Check if a field in the last operation is greater than or equal a value
+     *
+     * @param $operation
+     * @param $lastOperationResult
+     * @param $testName
+     */
+    public function operationGreaterThanOrEqual($operation, $lastOperationResult, &$context, $testName)
+    {
+        $value = $this->resolveValue($lastOperationResult, key($operation), $context);
+        $expected = current($operation);
+
+        static::assertGreaterThanOrEqual($expected, $value, 'Failed to gte in test ' . $testName);
+
+        return $lastOperationResult;
+    }
+
+    /**
+     * Check if a field in the last operation is greater than a value
+     *
+     * @param $operation
+     * @param $lastOperationResult
+     * @param $testName
+     */
+    public function operationGreaterThan($operation, $lastOperationResult, &$context, $testName)
+    {
+        $value = $this->resolveValue($lastOperationResult, key($operation), $context);
+        $expected = current($operation);
+
+        static::assertGreaterThan($expected, $value, 'Failed to gt in test ' . $testName);
+
+        return $lastOperationResult;
+    }
+
+    /**
+     * Check if a field in the last operation has length of a value
+     *
+     * @param $operation
+     * @param $lastOperationResult
+     * @param $testName
+     */
+    public function operationLength($operation, $lastOperationResult, &$context, $testName)
+    {
+        $value = $this->resolveValue($lastOperationResult, key($operation), $context);
+        $expected = current($operation);
+
+        static::assertCount($expected, $value, 'Failed to gte in test ' . $testName);
+
+        return $lastOperationResult;
+    }
+
+    /**
+     * Set a variable into context from last operation
+     *
+     * @param $operation
+     * @param $lastOperationResult
+     * @param $context
+     * @param $testName
+     */
+    public function operationSet($operation, $lastOperationResult, &$context, $testName)
+    {
+        $key = key($operation);
+        $value = $this->resolveValue($lastOperationResult, $key, $context);
+        $variable = current($operation);
+
+        $context['$' . $variable] = $value;
+
+        return $lastOperationResult;
+    }
+
+    /**
+     * Skip an operation depending on Elasticsearch Version
+     *
+     * @param $operation
+     * @param $lastOperationResult
+     * @param $testName
+     */
+    public function operationSkip($operation, $lastOperationResult, $testName)
+    {
+        if (is_object($operation) !== true ) {
+            return $lastOperationResult;
+        }
+
+        if (property_exists($operation, 'features') && !in_array($operation->features, static::$supportedFeatures, true)) {
+            static::markTestSkipped(sprintf('Feature(s) %s not supported in test "%s"', json_encode($operation->features), $testName));
+        }
+
+        if (property_exists($operation, 'version')) {
+            $version = $operation->version;
+            $version = str_replace(" ", "", $version);
+            $version = explode("-", $version);
+
+            if (isset($version[0]) && $version[0] == 'all') {
+                static::markTestSkipped(sprintf('Skip test "%s", as all versions should be skipped (%s)', $testName, $operation->reason));
+            }
+
+            if (!isset($version[0]) || $version[0] === "") {
+                $version[0] = ~PHP_INT_MAX;
+            }
+
+            if (!isset($version[1]) || $version[1] === "" ) {
+                $version[1] = PHP_INT_MAX;
+            }
+
+            if (version_compare(static::$esVersion, $version[0], '>=')  && version_compare(static::$esVersion, $version[1], '<=')) {
+                static::markTestSkipped(sprintf('Skip test "%s", as version %s should be skipped (%s)', $testName, static::$esVersion, $operation->reason));
+            }
+        }
+
+        return $lastOperationResult;
+    }
+
+    /**
+     * Assert an expected error
+     *
+     * @param \Exception $exception
+     * @param            $expectedError
+     * @param            $testName
+     *
+     * @return array
+     */
+    private function assertException(\Exception $exception, $expectedError, $testName)
+    {
+        if (is_string($expectedError) && preg_match('#^/.+?/$#', $expectedError)) {
+            static::assertRegExp($expectedError, $exception->getMessage(), 'Failed to catch error in test ' . $testName);
+        } elseif ($exception instanceof Missing404Exception && $expectedError === 'missing') {
+            static::assertTrue(true);
+        } elseif ($exception instanceof Conflict409Exception && $expectedError === 'conflict') {
+            static::assertTrue(true);
+        } elseif ($exception instanceof Forbidden403Exception && $expectedError === 'forbidden') {
+            static::assertTrue(true);
+        } elseif ($exception instanceof RequestTimeout408Exception && $expectedError === 'request_timeout') {
+            static::assertTrue(true);
+        } elseif ($exception instanceof BadRequest400Exception && $expectedError === 'request') {
+            static::assertTrue(true);
+        } elseif ($exception instanceof ServerErrorResponseException && $expectedError === 'request') {
+            static::assertTrue(true);
+        } elseif ($exception instanceof \RuntimeException && $expectedError === 'param') {
+            static::assertTrue(true);
+        } else {
+            static::assertContains($expectedError, $exception->getMessage());
+        }
+
+        if ($exception->getPrevious() !== null) {
+            return json_decode($exception->getPrevious()->getMessage(), true);
+        }
+
+        return json_decode($exception->getMessage(), true);
+    }
+
+    /**
+     * Provider list of document to test
+     *
+     * @return array
+     */
+    public function yamlProvider()
+    {
+        $this->yaml = new Yaml();
+        $path = __DIR__ . '/../../../util/elasticsearch/rest-api-spec/src/main/resources/rest-api-spec/test';
+        $files = [];
+
+        $finder = new Finder();
+        $finder->in($path);
+        $finder->files();
+        $finder->name('*.yaml');
+
+        $filter = isset($_SERVER['TEST_CASE']) ? $_SERVER['TEST_CASE'] : null;
+
+        /** @var SplFileInfo $file */
+        foreach ($finder as $file) {
+            $files = array_merge($files, $this->splitDocument($file, $path, $filter));
+        }
+
+        return $files;
+    }
+
+    /**
+     * Return the real namespace / method couple for elasticsearch php
+     *
+     * @param string      $method
+     * @param string|null $namespace
+     *
+     * @return array
+     */
+    private function mapEndpoint($method, $namespace = null)
+    {
+        if (null === $namespace && array_key_exists($method, static::$endpointMapping)) {
+            return static::$endpointMapping[$method];
+        }
+
+        if (null !== $namespace && array_key_exists($namespace, static::$endpointMapping) && array_key_exists($method, static::$endpointMapping[$namespace])) {
+            return static::$endpointMapping[$namespace][$method];
+        }
+
+        return [$method, $namespace];
+    }
+
+    /**
+     * Replace contextual variable into a bunch of data
+     *
+     * @param $data
+     * @param $context
+     *
+     * @return mixed
+     */
+    private function replaceWithContext($data, $context)
+    {
+        if (empty($context)) {
+            return $data;
+        }
+
+        if (is_string($data)) {
+            if (array_key_exists($data, $context)) {
+                return $context[$data];
+            }
+        }
+
+        if (!is_array($data) && !$data instanceof \stdClass) {
+            return $data;
+        }
+
+        foreach ($data as $key => &$value) {
+            $value = $this->replaceWithContext($value, $context);
+        }
+
+        return $data;
+    }
+
+    /**
+     * Resolve a value into an array given a specific field
+     *
+     * @param $result
+     * @param $field
+     *
+     * @return mixed
+     */
+    private function resolveValue($result, $field, &$context)
+    {
+        if (empty($field)) {
+            return $result;
+        }
+
+        foreach ($context as $key => $value) {
+            $field = preg_replace('/('.preg_quote($key, '/').')/', $value, $field);
+        }
+
+        $operationSplit = explode('.', $field);
+        $value = $result;
+
+        do {
+            $key = array_shift($operationSplit);
+
+            if (substr($key, -1) === '\\') {
+                $key = substr($key, 0, -1) . '.' . array_shift($operationSplit);
+            }
+
+            if (!is_array($value)) {
+                return $value;
+            }
+
+            if (!array_key_exists($key, $value)) {
+                return false;
+            }
+
+            $value = $value[$key];
+        } while (count($operationSplit) > 0);
+
+        return $value;
+    }
+
+    /**
+     * Format a regex for PHP
+     *
+     * @param $regex
+     *
+     * @return string
+     */
+    private function formatRegex($regex)
+    {
+        $regex = trim($regex);
+        $regex = substr($regex, 1, -1);
+        $regex = str_replace('/', '\\/', $regex);
+        $regex = '/' . $regex . '/mx';
+
+        return $regex;
+    }
+
+    /**
+     * Split file content into multiple document
+     *
+     * @param SplFileInfo $file
+     * @param string      $path;
+     *
+     * @return array
+     */
+    private function splitDocument($file, $path, $filter = null)
+    {
+        $fileContent = file_get_contents($file);
+        $documents = explode("---\n", $fileContent);
+        $documents = array_filter($documents, function ($item) {
+            return trim($item) !== '';
+        });
+
+        $documentsParsed = [];
+        $setup = null;
+        $setupSkip = false;
+        $fileName = str_replace($path . '/', '', $file);
+
+        if (array_key_exists($fileName, static::$skippedFiles)) {
+            echo "Skipping: $fileName.  ".static::$skippedFiles[$fileName]."\n";
+            return [];
+        }
+
+        if (null !== $filter && !preg_match('/'.preg_quote($filter, '/').'/', $fileName)) {
+            return [];
+        }
+        $skip = false;
+        $documentParsed = null;
+        foreach ($documents as $documentString) {
+            try {
+                if (!$setupSkip) {
+                    $documentParsed = $this->yaml->parse($documentString, false, false, true);
+                    $skip = false;
+                }
+            } catch (ParseException $exception) {
+                $documentParsed = sprintf(
+                    "[ParseException]Cannot run this test as it cannot be parsed (%s) in file %s",
+                    $exception->getMessage(),
+                    $fileName
+                );
+
+                if (preg_match("#\nsetup:#mx", $documentString)) {
+                    $setupSkip = true;
+                }
+
+                $skip = true;
+            } catch (\Exception $exception) {
+                $documentParsed = sprintf(
+                    "[Exception] Cannot run this test as it generated an exception (%s) in file %s",
+                    $exception->getMessage(),
+                    $fileName
+                );
+
+                if (preg_match("#\nsetup:#mx", $documentString)) {
+                    $setupSkip = true;
+                }
+
+                $skip = true;
+            }
+
+            if (!$skip && key($documentParsed) === 'setup') {
+                $setup = $documentParsed;
+                $setupSkip = $skip;
+            } else {
+                $documentsParsed[] = [$documentParsed, $skip || $setupSkip, $setup, $fileName];
+            }
+        }
+
+        return $documentsParsed;
+    }
+
+    /**
+     * Clean the cluster
+     */
+    private function clean()
+    {
+        $host = static::getHost();
+        $ch = curl_init($host."/*");
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
+        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+        $response = curl_exec($ch);
+        curl_close($ch);
+
+        $ch = curl_init($host."/_template/*");
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
+        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+        $response = curl_exec($ch);
+        curl_close($ch);
+
+        $ch = curl_init($host."/_analyzer/*");
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
+        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+        $response = curl_exec($ch);
+        curl_close($ch);
+
+        $ch = curl_init($host."/_snapshot/_all");
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
+        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+        $response = curl_exec($ch);
+        curl_close($ch);
+        if ($response != "{}") {
+            $response = json_decode($response, true);
+            foreach ($response as $repo => $settings) {
+                if ($settings['type'] == 'fs') {
+                    $ch = curl_init($host."/_snapshot/$repo/_all?ignore_unavailable");
+                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+                    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
+                    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+                    $snapshots = json_decode(curl_exec($ch), true);
+                    curl_close($ch);
+                    foreach ($snapshots['snapshots'] as $snapshot) {
+                        $snapshotName = $snapshot['snapshot'];
+                        $ch = curl_init($host."/_snapshot/$repo/$snapshotName");
+                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+                        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
+                        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+                        $response = curl_exec($ch);
+                        curl_close($ch);
+                    }
+                    $ch = curl_init($host."/_snapshot/$repo");
+                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+                    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
+                    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+                    $response = curl_exec($ch);
+                    curl_close($ch);
+
+                }
+            }
+        }
+
+        // TODO ewwww...
+        shell_exec('rm -rf /tmp/test_repo_create_1_loc');
+        shell_exec('rm -rf /tmp/test_repo_restore_1_loc');
+        shell_exec('rm -rf /tmp/test_cat_repo_1_loc');
+        shell_exec('rm -rf /tmp/test_cat_repo_2_loc');
+        shell_exec('rm -rf /tmp/test_cat_snapshots_1_loc');
+
+        $this->waitForYellow();
+    }
+
+    /**
+     * Wait for cluster to be in a "YELLOW" state
+     */
+    private function waitForYellow()
+    {
+        $host = static::getHost();
+        $ch = curl_init("$host/_cluster/health?wait_for_status=yellow&timeout=50s");
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
+        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+
+        $response = json_decode(curl_exec($ch), true);
+
+        $counter = 0;
+        while ($response['status'] === 'red') {
+            sleep(0.5);
+            $response = json_decode(curl_exec($ch), true);
+            ++$counter;
+
+            if ($counter > 10) {
+                $this->log("Aborting test due to failure in clearing cluster.\n");
+                $this->log(print_r($response, true));
+                exit;
+            }
+        }
+        curl_close($ch);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/tests/bootstrap.php b/apps/maarch_entreprise/tools/elasticsearch-php/tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..dca8a29d0204fa93e24b1a943494333ab9a83dea
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/tests/bootstrap.php
@@ -0,0 +1,16 @@
+<?php
+
+error_reporting(E_ALL | E_STRICT);
+
+// Set the default timezone. While this doesn't cause any tests to fail, PHP
+// complains if it is not set in 'date.timezone' of php.ini.
+date_default_timezone_set('UTC');
+
+// Ensure that composer has installed all dependencies
+if (!file_exists(dirname(__DIR__) . '/composer.lock')) {
+    die("Dependencies must be installed using composer:\n\nphp composer.phar install --dev\n\n"
+        . "See http://getcomposer.org for help with installing composer\n");
+}
+
+// Include the composer autoloader
+$autoloader = require_once dirname(__DIR__) . '/vendor/autoload.php';
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/travis/download_and_run_es.sh b/apps/maarch_entreprise/tools/elasticsearch-php/travis/download_and_run_es.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1ca4c9d295b223ad644b13ff16d6d9ad1930877d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/travis/download_and_run_es.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+if [ -z $ES_VERSION ]; then
+    echo "No ES_VERSION specified";
+    exit 1;
+fi;
+
+
+killall java 2>/dev/null
+
+which java
+java -version
+
+
+echo "Downloading Elasticsearch v${ES_VERSION}-SNAPSHOT..."
+
+ES_URL=$(curl -sS "https://esvm-props.kibana.rocks/builds" | jq -r ".branches[\"$ES_VERSION\"].zip")
+
+curl -L -o elasticsearch-latest-SNAPSHOT.zip $ES_URL
+unzip "elasticsearch-latest-SNAPSHOT.zip"
+
+echo "Adding repo to config..."
+find . -name "elasticsearch.yml" | while read TXT ; do echo 'repositories.url.allowed_urls: ["http://*"]' >> $TXT ; done
+find . -name "elasticsearch.yml" | while read TXT ; do echo 'path.repo: ["/tmp"]' >> $TXT ; done
+
+echo "Starting Elasticsearch v${ES_VERSION}"
+
+./elasticsearch-*/bin/elasticsearch -d
+
+
+sleep 3
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/travis/generate_docs.sh b/apps/maarch_entreprise/tools/elasticsearch-php/travis/generate_docs.sh
new file mode 100644
index 0000000000000000000000000000000000000000..90f39e9dbde52b28795b5bdbe0abcbebf05119da
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/travis/generate_docs.sh
@@ -0,0 +1 @@
+php vendor/sami/sami/sami.php update util/DocsConfig.php
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/EnsureClusterAlive.php b/apps/maarch_entreprise/tools/elasticsearch-php/util/EnsureClusterAlive.php
new file mode 100644
index 0000000000000000000000000000000000000000..e3a4b3a9132be0abdb51a2ac3d592182e638163f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/EnsureClusterAlive.php
@@ -0,0 +1,31 @@
+<?php
+
+error_reporting(E_ALL | E_STRICT);
+
+// Set the default timezone. While this doesn't cause any tests to fail, PHP
+// complains if it is not set in 'date.timezone' of php.ini.
+date_default_timezone_set('UTC');
+
+// Ensure that composer has installed all dependencies
+if (!file_exists(dirname(__DIR__) . '/composer.lock')) {
+    die("Dependencies must be installed using composer:\n\nphp composer.phar install --dev\n\n"
+        . "See http://getcomposer.org for help with installing composer\n");
+}
+
+// Include the composer autoloader
+$autoloader = require_once dirname(__DIR__) . '/vendor/autoload.php';
+
+$client = \Elasticsearch\ClientBuilder::fromConfig([
+    'hosts' => [$_SERVER['ES_TEST_HOST']]
+]);
+
+$count = 0;
+while (!$client->ping()) {
+    $count += 1;
+
+    if ($count > 15) {
+        throw new \Exception("Live cluster could not be found in 15s!");
+    }
+    sleep(1);
+}
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/RestSpecRunner.php b/apps/maarch_entreprise/tools/elasticsearch-php/util/RestSpecRunner.php
new file mode 100644
index 0000000000000000000000000000000000000000..e8f4f2331703bfce5633e936b6996321b88f771a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/RestSpecRunner.php
@@ -0,0 +1,29 @@
+<?php
+
+error_reporting(E_ALL | E_STRICT);
+
+// Set the default timezone. While this doesn't cause any tests to fail, PHP
+// complains if it is not set in 'date.timezone' of php.ini.
+date_default_timezone_set('UTC');
+
+// Ensure that composer has installed all dependencies
+if (!file_exists(dirname(__DIR__) . '/composer.lock')) {
+    die("Dependencies must be installed using composer:\n\nphp composer.phar install --dev\n\n"
+        . "See http://getcomposer.org for help with installing composer\n");
+}
+
+echo "Base directory: ". dirname(__DIR__)."\n";
+
+// Include the composer autoloader
+$autoloader = require_once(dirname(__DIR__) . '/vendor/autoload.php');
+
+$gitWrapper = new \GitWrapper\GitWrapper();
+echo "Git cwd: ".dirname(__DIR__) . "/util/elasticsearch\n";
+$git = $gitWrapper->workingCopy(dirname(__DIR__) . '/util/elasticsearch');
+
+echo "Update elasticsearch submodule\n";
+$git->fetchAll(array('verbose' => true));
+
+$hash = $_SERVER['TEST_BUILD_REF'];
+echo "Checkout yaml tests (hash: $hash)\n";
+$git->checkout($hash, array('force' => true, 'quiet' => true));
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/SpecParser.php b/apps/maarch_entreprise/tools/elasticsearch-php/util/SpecParser.php
new file mode 100644
index 0000000000000000000000000000000000000000..19dfd93216cd9d2743d1075f60a2e92962e1d7c0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/SpecParser.php
@@ -0,0 +1,215 @@
+#!/usr/bin/env php
+<?php
+
+require_once '../vendor/autoload.php';
+
+$loader = new Twig_Loader_Filesystem('templates');
+$twig = new Twig_Environment($loader);
+$template = $twig->loadTemplate('endpoint.twig');
+
+$counter = 0;
+
+
+function getApiPath()
+{
+    $path = dirname(__FILE__).'/elasticsearch/rest-api-spec/api';
+    if (file_exists($path) !== true) {
+        $path = dirname(__FILE__).'/elasticsearch/rest-api-spec/src/main/resources/rest-api-spec/api';
+    }
+    return $path;
+}
+
+
+if ($handle = opendir(getApiPath())) {
+    while (false !== ($entry = readdir($handle))) {
+        if ($entry != "." && $entry != "..") {
+            generateTemplate($entry, $template);
+        }
+    }
+    closedir($handle);
+}
+
+function processURLPaths($data)
+{
+    $final = array();
+
+    $containsType = false;
+    $containsIndex = false;
+    foreach ($data['url']['paths'] as $path) {
+        $params = array();
+        preg_match_all('/{(.*?)}/', $path, $params);
+        $params = $params[1];
+        $count = count($params);
+        $parsedPath = str_replace('}', '', $path);
+        $parsedPath = str_replace('{', '$', $parsedPath);
+
+        if (array_search('index', $params) !== false) {
+            $containsIndex = true;
+        }
+
+        if (array_search('type', $params) !== false) {
+            $containsType = true;
+        }
+
+        $duplicate = false;
+        foreach ($final as $existing) {
+            if ($existing['params'] === $params) {
+                $duplicate = true;
+            }
+        }
+
+        if ($duplicate !== true) {
+            $final[] = array(
+                'path'   => $path,
+                'parsedPath' => $parsedPath,
+                'params' => $params,
+                'count'  => $count
+            );
+        }
+    }
+
+    /*
+    foreach ($final as &$existing) {
+        if ($containsIndex === true && array_search('index', $existing['params']) === false && array_search('type', $existing['params']) !== false) {
+            $existing['parsedPath'] = '/_all'.$existing['parsedPath'];
+        }
+    }
+    */
+
+    usort($final, function ($a, $b) {
+            if ($a['count'] == $b['count']) {
+                return 0;
+            }
+
+            return ($a['count'] > $b['count']) ? -1 : 1;
+        });
+
+    return $final;
+}
+
+function getDefaultPath($path)
+{
+    if ($path['count'] === 0) {
+        return $path['path'];
+    } else {
+        $final = str_replace('}', '', $path['path']);
+        $final = str_replace('{', '$', $final);
+
+        return $final;
+    }
+}
+
+function forbid($key, $value)
+{
+    $forbid = array(
+        'GET' => array(
+            '/_nodes/hotthreads',
+            '/_nodes/{node_id}/hotthreads',
+            '/_nodes/{metric}'
+        ),
+        'HEAD' => array(),
+        'PUT' => array(
+            '/{index}/{type}/_mapping'
+        ),
+        'POST' => array(
+            '/_all/{type}/_bulk',
+            '/_all/{type}/_mget'
+        ),
+        'DELETE' => array(
+            '/{index}/{type}',
+            '/{index}/{type}/_mapping'
+        ),
+        'QS' => array(
+            'operation_threading',
+            'field_data'
+        )
+    );
+
+    if (isset($forbid['key']) && $forbid['key'] === $value) {
+        return true;
+    } else {
+        return false;
+    }
+}
+
+function generateTemplate($path, $template)
+{
+    $ignoreList = array(
+        'index.json', 'bulk.json'
+    );
+
+    if (array_search($path, $ignoreList) !== false) {
+        return;
+    }
+
+    $path = getApiPath().DIRECTORY_SEPARATOR.$path;
+    $json = file_get_contents($path);
+    $data = json_decode($json, true);
+
+    reset($data);
+    $namespace = key($data);
+    $data = $data[$namespace];
+    $namespace = explode('.', $namespace);
+
+    $underscoreNamespace = array(
+        'get',
+        'put',
+        'post',
+        'delete',
+        'exists',
+        'update',
+        'create'
+    );
+
+    $exceptions = array(
+        'delete_by_query',
+        'update_by_query',
+    );
+
+    if (strpos($namespace[count($namespace)-1], '_')) {
+        $temp = explode('_', $namespace[count($namespace)-1]);
+
+        if (array_search($temp[0], $underscoreNamespace) !== false && array_search($namespace[count($namespace)-1], $exceptions) === false) {
+            $namespace[count($namespace)-1] = $temp[1];
+            $namespace[] = $temp[0];
+        } else {
+            $namespace[count($namespace)-1] = str_replace('_', '', $namespace[count($namespace)-1]);
+        }
+    }
+
+    $data['url']['processed'] = processURLPaths($data);
+    $data['url']['default'] = getDefaultPath($data['url']['processed'][count($data['url']['processed'])-1]);
+    if (count($data['methods']) > 1) {
+        if (in_array("GET", $data['methods'])) {
+            $data['methods'] = "GET";
+        } else {
+            $data['methods'] = $data['methods'][0];
+        }
+    }
+    $renderVars = array(
+        'json'      => $json,
+        'data'      => $data,
+        'namespace' => $namespace,
+        'className' => ucfirst($namespace[count($namespace)-1]),
+    );
+
+    $ret = $template->render($renderVars);
+
+    $dir = __DIR__.'/output/'.implode('/', array_map('ucfirst', array_splice($namespace, 0, count($namespace)-1)));
+
+    if (substr($dir, -1) !== '/') {
+        $dir .= '/';
+    }
+    if (!file_exists($dir)) {
+        echo 'making dir: '.$dir."\n\n";
+        $oldumask = umask(0);
+        mkdir($dir, 0777, true);
+        umask($oldumask);
+    }
+
+    echo $dir."\n\n";
+    $path = $dir.$renderVars['className'].'.php';
+    echo $path."\n\n";
+
+    file_put_contents($path, $ret);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/docsConfig.php b/apps/maarch_entreprise/tools/elasticsearch-php/util/docsConfig.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0e05c335f5169fde8fd5d1a7718144167c276af
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/docsConfig.php
@@ -0,0 +1,30 @@
+<?php
+
+// Ensure that composer has installed all dependencies
+if (!file_exists(dirname(__DIR__) . '/composer.lock')) {
+    die("Dependencies must be installed using composer:\n\nphp composer.phar install --dev\n\n"
+        . "See http://getcomposer.org for help with installing composer\n");
+}
+
+// Include the composer autoloader
+$autoloader = require_once dirname(__DIR__) . '/vendor/autoload.php';
+
+
+use Sami\Sami;
+use Symfony\Component\Finder\Finder;
+
+$iterator = Finder::create()
+    ->files()
+    ->name('*Namespace.php')
+    ->name("Client.php")
+    ->name("ClientBuilder.php")
+    ->notName("AbstractNamespace.php")
+    ->in(__DIR__.'/../src/');
+
+return new Sami($iterator, array(
+    'theme'                => 'asciidoc',
+    'template_dirs'        => array(__DIR__.'/docstheme/'),
+    'title'                => 'Elasticsearch-php',
+    'build_dir'            => __DIR__.'/../docs/build',
+    'cache_dir'            => __DIR__.'/cache/',
+));
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/layout/base.twig b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/layout/base.twig
new file mode 100644
index 0000000000000000000000000000000000000000..70610e193887a33db797c3221407a1207dc5fdcc
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/layout/base.twig
@@ -0,0 +1,13 @@
+{% from "macros.twig" import replace_backslash, sanitize %}
+
+{% block title %}
+{% set parts = title|split("\\") %}
+{% set path = parts|slice(0, -1)|join("\\") %}
+{% set name = parts|slice(-1, 1)|join("\\") %}
+
+[[{{ sanitize(replace_backslash(title)) }}]]
+=== {{ title }}
+
+{% endblock %}
+{% block content %}
+{% endblock %}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/macros.twig b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/macros.twig
new file mode 100644
index 0000000000000000000000000000000000000000..9ea1834e8778ef67033d1fe2184b4620cc755bb3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/macros.twig
@@ -0,0 +1,138 @@
+{% macro class_item(class, short = false, indent = "") -%}
+{{ indent }}{{ _self.class_name(class, short) }}{% if class.shortdesc %} -- {{ class.shortdesc }}{% endif %}
+{%- endmacro -%}
+
+{% macro class_name(class, short = false, suffix = "") -%}
+{% spaceless -%}
+{% if class.projectclass or class.phpclass %}
+{% if class.projectclass %}
+<<{{_self.replace_backslash( (short ? class.shortname : class)~suffix) }},{{ class }}>>
+{% else %}
+http://php.net/class.{{ class }}[{{ short ? class.shortname : class }}{{ suffix }}]
+{% endif %})
+{% else %}
+`{{ class }}`
+{% endif %}
+{%- endspaceless %}
+{%- endmacro -%}
+
+{% macro class_type(class, sentence = false) -%}
+{% spaceless %}
+{% if class.interface %}
+{% if sentence %}an {% endif %}
+interface
+{%- else -%}
+{% if sentence %}{% if class.abstract %}an{% else %}a{% endif %} {% endif %}
+{% if class.abstract %}abstract {% endif %}
+class
+{%- endif -%}
+{% endspaceless %}
+{%- endmacro -%}
+
+{% macro hint(hint) -%}
+{% spaceless %}
+{% if hint.class -%}
+{{ _self.class_name(hint.name) }}
+{%- elseif hint.name -%}
+{{ hint.name }}
+{%- endif %}
+{% endspaceless %}
+{%- endmacro -%}
+
+{% macro markdown_path(path) -%}
+{% spaceless %}
+{{- path|replace({".html": ".md"}) -}}
+{% endspaceless %}
+{%- endmacro -%}
+
+{% macro replace_backslash(path) -%}
+    {% spaceless %}
+        {{- path|replace({"\\": "_"}) -}}
+    {% endspaceless %}
+{%- endmacro -%}
+
+{% macro back_to_forward(path) -%}
+    {% spaceless %}
+        {{- path|replace({"\\": "/"}) -}}
+    {% endspaceless %}
+{%- endmacro -%}
+
+{% macro sanitize(path) -%}
+    {% spaceless %}
+        {{- path|replace({"$": "", "::": "", "__": "-"}) -}}
+    {% endspaceless %}
+{%- endmacro -%}
+
+{% macro get_namespace(class) -%}
+    {% spaceless %}
+        {% if class.shortname == 'Client' %}
+            $client
+        {% else %}
+            $client->{{ class.shortname|lower|replace({"namespace": ""}) }}()
+        {% endif %}
+    {% endspaceless %}
+{%- endmacro -%}
+
+
+
+{% macro param_list(member) -%}
+    {% spaceless %}
+        {% for parameter in member.parameters %}${{ parameter.name }},{% endfor %}
+    {% endspaceless %}
+{%- endmacro -%}
+
+{% macro member_signature(type, member) -%}
+* It is a **{{ _self.member_visibility(member) }}{% if member.abstract is defined and member.abstract %} abstract{% endif %}** {{ type }}.
+{% if member.final %}
+* It is a **finalized** {{ type }}.
+{% endif %}
+{% if "property" == type %}
+{% if member.hint|length > 1 %}
+* It can be one of the following types:
+{%- for hint in member.hint %}
+
+    * {{ _self.hint(hint) }}
+{%- endfor -%}
+{%- elseif member.hint|length > 0 %}
+* It is a(n) {{ _self.hint(member.hint[0]) }} value.
+{%- else %}
+* Its type is not specified.
+{% endif %}
+{% elseif "method" == type %}
+{% if member.parameters %}
+* It accepts the following parameter(s):
+{% for parameter in member.parameters %}
+    * `${{ parameter.name }}`{% if parameter.hint %} ({% for hint in parameter.hint %}{{ _self.hint(hint) }}{% if not loop.last %}|{% endif %}{% endfor %}){% endif %}{% if parameter.shortdesc %} -- {{ parameter.shortdesc }}{% endif %}
+
+{% endfor %}
+{% endif %}
+{% if (member.hint|length > 1) or member.hintDesc %}
+{% if member.hintDesc %}
+* _Returns:_ {{ member.hintDesc }}
+{% else %}
+* It can return one of the following values:
+{% endif %}
+{% for hint in member.hint %}
+    * {{ _self.hint(hint) }}
+{% endfor -%}
+{% elseif member.hint|length > 0 %}
+* It returns a(n) {{ _self.hint(member.hint[0]) }} value.
+{% else %}
+* It does not return anything.
+{% endif %}
+{% if member.exceptions %}
+* It throws one of the following exceptions:
+{% for exception in member.exceptions %}
+    * {{ _self.class_name(exception[0]) }}{% if exception[1] is defined and exception[1] is not empty %} -- {{ exception[1] }}{% endif %}
+
+{% endfor %}
+{% endif %}
+{% endif %}
+{%- endmacro -%}
+
+{% macro member_visibility(member) -%}
+{% spaceless %}
+{% if member.private %}private{% elseif member.protected %}protected{% else %}public{% endif %}
+{% if member.static %} static{% endif %}
+{% endspaceless %}
+{%- endmacro -%}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/manifest.yml b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/manifest.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c1b212dc90c963951d137d7d157dc0ca99cc1ace
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/manifest.yml
@@ -0,0 +1,9 @@
+name: asciidoc
+
+global:
+    "pages/namespaces.twig": "namespaces.asciidoc"
+    "pages/interfaces.twig": "interfaces.asciidoc"
+    "pages/classes.twig": "classes.asciidoc"
+
+class:
+    "pages/class.twig": "%s.asciidoc"
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/class.twig b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/class.twig
new file mode 100644
index 0000000000000000000000000000000000000000..633ca12667a7f9d49023fe1b21aa3dafffab74d2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/class.twig
@@ -0,0 +1,82 @@
+{% extends "layout/base.twig" %}
+
+{% from "macros.twig" import class_item, class_name, class_type, member_signature, replace_backslash, sanitize, param_list, get_namespace %}
+
+{% block title %}
+{% set title = class %}
+{{ parent() }}
+{% endblock %}
+
+{% block content %}
+{% if class.shortdesc %}
+
+{{ class.shortdesc|raw }}
+{% endif %}
+{% if class.longdesc %}
+
+*Description*
+
+
+{{ class.longdesc|raw }}
+{% endif %}
+
+{% if class.methods %}
+
+*Methods*
+
+The {{ class_type(class) }} defines the following methods:
+
+{% for method in class.methods %}
+{% if method.name != "__construct" %}
+* <<{{ sanitize(replace_backslash(method)~"_"~method.name) }},`{{ method.name }}()`>>
+{% endif %}
+{% endfor %}
+
+{% for method in class.methods %}
+{% if method.name != "__construct" %}
+
+
+{% if class.shortname != "ClientBuilder" %}
+[[{{ sanitize(replace_backslash(method)~"_"~method.name) }}]]
+.`{{ method.name }}()`
+****
+[source,php]
+----
+/*
+{% if method.shortdesc %}
+{{ method.shortdesc|raw }}
+       ['body']  = (array) Request body
+{% endif %}
+*/
+
+$params = [
+    // ...
+];
+
+$client = ClientBuilder::create()->build();
+$response = {{ get_namespace(class) }}->{{ method.name }}({{ param_list(method)|trim(',') }});
+----
+****
+{% else %}
+[[{{ sanitize(replace_backslash(method)~"_"~method.name) }}]]
+.`{{ method.name }}()`
+****
+[source,php]
+----
+/*
+{% if method.shortdesc %}
+    {{ method.shortdesc|raw }}
+    ['body']  = (array) Request body
+{% endif %}
+*/
+
+----
+****
+{% endif %}
+{% endif %}
+
+{% endfor %}
+{% endif %}
+
+{% endblock %}
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/classes.twig b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/classes.twig
new file mode 100644
index 0000000000000000000000000000000000000000..f8c65217915cbb7eb9bebdbedb67a4c786144700
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/classes.twig
@@ -0,0 +1,27 @@
+{% extends "layout/base.twig" %}
+
+{% from "macros.twig" import class_item, replace_backslash, back_to_forward, sanitize %}
+
+{% block title %}
+[[{{ sanitize(replace_backslash("ElasticsearchPHP_Endpoints")) }}]]
+== {{ "Reference - Endpoints" }}
+{% endblock %}
+
+{% block content %}
+
+This is a complete list of namespaces and their associated endpoints.
+
+NOTE: This is auto-generated documentation
+
+{% for class in classes if not class.interface %}
+* <<{{ replace_backslash(class) }}, {{ class }}>>
+{% else %}
+* There are no endpoints available.
+{% endfor %}
+{% for class in classes if not class.interface %}
+include::{{ back_to_forward(class) }}.asciidoc[]
+{% else %}
+{% endfor %}
+{% endblock %}
+
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/interfaces.twig b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/interfaces.twig
new file mode 100644
index 0000000000000000000000000000000000000000..dfa5a9458319aea610086d02b40c70ec0f9c3fa9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/interfaces.twig
@@ -0,0 +1,23 @@
+{% extends "layout/base.twig" %}
+
+{% from "macros.twig" import class_item, replace_backslash, back_to_forward, sanitize %}
+
+{% block title %}
+[[{{ sanitize(replace_backslash("ElasticsearchPHP_Interfaces")) }}]]
+== {{ "Reference - Interfaces" }}
+{% endblock %}
+
+{% block content %}
+
+This is a complete list of available interfaces:
+
+{% for interface in classes if interface.interface %}
+* <<{{ replace_backslash(interface) }}, {{ interface }}>>
+{% else %}
+* There are no interfaces available.
+{% endfor %}
+{% for interface in classes if interface.interface %}
+include::{{ back_to_forward(interface) }}.asciidoc[]
+{% else %}
+{% endfor %}
+{% endblock %}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/namespaces.twig b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/namespaces.twig
new file mode 100644
index 0000000000000000000000000000000000000000..8b82c2f65f04a9383cb892fd6f34dab1ab7febdb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/docstheme/pages/namespaces.twig
@@ -0,0 +1,23 @@
+{% extends "layout/base.twig" %}
+
+{% from "macros.twig" import markdown_path, replace_backslash, back_to_forward, sanitize %}
+
+{% block title %}
+[[{{ sanitize(replace_backslash("ElasticsearchPHP_Namespaces")) }}]]
+== {{ "Reference - Namespaces" }}
+{% endblock %}
+
+{% block content %}
+
+This is a complete list of available namespaces:
+
+{% for namespace in namespaces %}
+* <<{{ replace_backslash(namespace) }}, {{ namespace }}>>
+{% else %}
+* There are no namespaces available.
+{% endfor %}
+{% for namespace in namespaces %}
+include::{{ back_to_forward(namespace) }}.asciidoc[]
+{% else %}
+{% endfor %}
+{% endblock %}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/util/templates/endpoint.twig b/apps/maarch_entreprise/tools/elasticsearch-php/util/templates/endpoint.twig
new file mode 100644
index 0000000000000000000000000000000000000000..5a704af8e911d5937b4ed4976dd5eb08f1d2f236
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/util/templates/endpoint.twig
@@ -0,0 +1,150 @@
+<?php
+
+namespace Elasticsearch\Endpoints{% for class in namespace %}{{ loop.last ? ';' : '\\' ~ class|title  }}{%  endfor %}
+
+use Elasticsearch\Endpoints\AbstractEndpoint;
+use Elasticsearch\Common\Exceptions;
+
+/**
+ * Class {{ className|title|replace({'.': ""}) }}
+ *
+ * @category Elasticsearch
+ * @package Elasticsearch\Endpoints{% for class in namespace %}{{ loop.last ? '' : '\\' ~ class|title  }}{%  endfor %}
+
+ *
+ * @author   Zachary Tong <zach@elastic.co>
+ * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache2
+ * @link     http://elastic.co
+ */
+
+class {{ className|title }} extends AbstractEndpoint
+{
+{% for part, info in data.url.parts %}
+{% if part != 'index' and part != 'type' and part != 'id' %}
+    // {{info.description }}
+    private ${{part}};
+{% endif %}
+{% endfor %}
+{% if data.body is not null %}
+    /**
+     * @param array $body
+     *
+     * @throws \Elasticsearch\Common\Exceptions\InvalidArgumentException
+     * @return $this
+     */
+    public function setBody($body)
+    {
+        if (isset($body) !== true) {
+            return $this;
+        }
+
+        $this->body = $body;
+        return $this;
+    }
+
+
+
+{% endif %}
+{% for part, info in data.url.parts %}
+{% if part != 'index' and part != 'type' and part != 'id' %}
+    /**
+     * @param ${{part}}
+     *
+     * @return $this
+     */
+    public function set{{part|title|replace({'_': ""})}}(${{part}})
+    {
+        if (isset(${{part}}) !== true) {
+            return $this;
+        }
+{% if info.type == 'list' %}
+        if (is_array(${{part}}) === true) {
+            ${{part}} = implode(",", ${{part}});
+        }
+{% endif %}
+        $this->{{part}} = ${{part}};
+        return $this;
+    }
+
+{% endif %}
+{% endfor %}
+{% set exception = '' %}
+    /**
+{% for part, info in data.url.parts %}{% if info.required is not null %}{% set exception = ' * @throws \\Elasticsearch\\Common\\Exceptions\\BadMethodCallException
+    ' %}{% endif %}{% endfor %}
+    {% autoescape false %}{{ exception }}{% endautoescape %}
+ * @return string
+     */
+    protected function getURI()
+    {
+{% for part, info in data.url.parts %}
+{% if info.required == true %}
+        if (isset($this->{{ part }}) !== true) {
+            throw new Exceptions\RuntimeException(
+                '{{ part }} is required for {{ className }}'
+            );
+        }
+{% endif %}
+{% endfor %}
+{% for part, info in data.url.parts %}
+        ${{ part }} = $this->{{ part }};
+{% endfor %}
+        $uri   = "{{ data.url.default }}";
+{% set loopCounter = 0 %}
+{% for part, info in data.url.processed %}
+{% if info.count > 0 %}
+{% set counter = 0 %}
+{% if loopCounter != 0 %}
+    else{% endif %}if ({% for param in info.params %}{% if counter == 0 %}isset(${{ param }}) === true{% else %} && isset(${{ param }}) === true{% endif %}{% set counter = counter + 1 %}{% endfor %})
+        {
+            $uri = "{{ info.parsedPath }}";
+        }
+{% set loopCounter = 1 %}
+{% endif %}
+{% endfor %}
+
+        return $uri;
+    }
+
+
+    /**
+     * @return string[]
+     */
+    protected function getParamWhitelist()
+    {
+        return array(
+{% for param, options in data.url.params %}
+            '{{ param }}',
+{% endfor %}
+        );
+    }
+
+
+{% if data.body.required == true %}
+    /**
+     * @return array
+     * @throws \Elasticsearch\Common\Exceptions\RuntimeException
+     */
+    protected function getBody()
+    {
+        if (isset($this->body) !== true) {
+            throw new Exceptions\RuntimeException('Body is required for {{ className|title }}');
+        }
+        return $this->body;
+    }
+
+
+{% endif %}
+    /**
+     * @return string
+     */
+    protected function getMethod()
+    {
+{% if data.methods|length > 1 %}
+        //TODO Fix Me!
+        return '{{ data.methods|join(',') }}';
+{% else %}
+        return '{{ data.methods[0] }}';
+{% endif %}
+    }
+}
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/autoload.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/autoload.php
new file mode 100644
index 0000000000000000000000000000000000000000..4fcbe30ca7f5fb0dbe544e76dd5d1f90abfd4af8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInit427c9f26014378f0692da90741c3855a::getLoader();
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/ClassLoader.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/ClassLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..4626994fd4d8ac4c5489670d85b09af1b6d8aab0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/ClassLoader.php
@@ -0,0 +1,441 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see    http://www.php-fig.org/psr/psr-0/
+ * @see    http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+    // PSR-4
+    private $prefixLengthsPsr4 = array();
+    private $prefixDirsPsr4 = array();
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    private $prefixesPsr0 = array();
+    private $fallbackDirsPsr0 = array();
+
+    private $useIncludePath = false;
+    private $classMap = array();
+    private $classMapAuthoritative = false;
+    private $missingClasses = array();
+    private $apcuPrefix;
+
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
+    }
+
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param array $classMap Class to filename map
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string       $prefix  The prefix
+     * @param array|string $paths   The PSR-0 root directories
+     * @param bool         $prepend Whether to prepend the directories
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
+     * @param array|string $paths   The PSR-4 base directories
+     * @param bool         $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    (array) $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string       $prefix The prefix
+     * @param array|string $paths  The PSR-0 base directories
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+     *
+     * @param string|null $apcuPrefix
+     */
+    public function setApcuPrefix($apcuPrefix)
+    {
+        $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+    }
+
+    /**
+     * The APCu prefix in use, or null if APCu caching is not enabled.
+     *
+     * @return string|null
+     */
+    public function getApcuPrefix()
+    {
+        return $this->apcuPrefix;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return bool|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            includeFile($file);
+
+            return true;
+        }
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+            return false;
+        }
+        if (null !== $this->apcuPrefix) {
+            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+            if ($hit) {
+                return $file;
+            }
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if (false === $file && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if (null !== $this->apcuPrefix) {
+            apcu_add($this->apcuPrefix.$class, $file);
+        }
+
+        if (false === $file) {
+            // Remember that this class does not exist.
+            $this->missingClasses[$class] = true;
+        }
+
+        return $file;
+    }
+
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+
+        return false;
+    }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/LICENSE b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..1a28124886db89f1ca3e4fa674cb69a9a17585b3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) 2016 Nils Adermann, Jordi Boggiano
+
+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:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+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.
+
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_classmap.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a91153b0d8ea10bc693176a81d8a9eb96883a76
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_classmap.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_files.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_files.php
new file mode 100644
index 0000000000000000000000000000000000000000..80babd7e9cc305a56a5414e5db015a7cf71c78f6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_files.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_files.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'ad155f8f1cf0d418fe49e248db8c661b' => $vendorDir . '/react/promise/src/functions_include.php',
+);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_namespaces.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000000000000000000000000000000000000..b7fc0125dbca56fd7565ad62097672a59473e64e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_psr4.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_psr4.php
new file mode 100644
index 0000000000000000000000000000000000000000..e50c8266b708115c1ee2d448bf034e2c828bb3aa
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_psr4.php
@@ -0,0 +1,14 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'React\\Promise\\' => array($vendorDir . '/react/promise/src'),
+    'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
+    'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
+    'GuzzleHttp\\Ring\\' => array($vendorDir . '/guzzlehttp/ringphp/src'),
+    'Elasticsearch\\' => array($baseDir . '/src/Elasticsearch'),
+);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_real.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_real.php
new file mode 100644
index 0000000000000000000000000000000000000000..d7e5d2b21fd7055730f9b5c8b772a28cc2f6b41b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_real.php
@@ -0,0 +1,70 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInit427c9f26014378f0692da90741c3855a
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        spl_autoload_register(array('ComposerAutoloaderInit427c9f26014378f0692da90741c3855a', 'loadClassLoader'), true, true);
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+        spl_autoload_unregister(array('ComposerAutoloaderInit427c9f26014378f0692da90741c3855a', 'loadClassLoader'));
+
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require_once __DIR__ . '/autoload_static.php';
+
+            call_user_func(\Composer\Autoload\ComposerStaticInit427c9f26014378f0692da90741c3855a::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
+
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
+
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
+            }
+        }
+
+        $loader->register(true);
+
+        if ($useStaticLoader) {
+            $includeFiles = Composer\Autoload\ComposerStaticInit427c9f26014378f0692da90741c3855a::$files;
+        } else {
+            $includeFiles = require __DIR__ . '/autoload_files.php';
+        }
+        foreach ($includeFiles as $fileIdentifier => $file) {
+            composerRequire427c9f26014378f0692da90741c3855a($fileIdentifier, $file);
+        }
+
+        return $loader;
+    }
+}
+
+function composerRequire427c9f26014378f0692da90741c3855a($fileIdentifier, $file)
+{
+    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+        require $file;
+
+        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_static.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_static.php
new file mode 100644
index 0000000000000000000000000000000000000000..df9a8b3a082eb039c69f6809ba00193920b3c576
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/autoload_static.php
@@ -0,0 +1,64 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInit427c9f26014378f0692da90741c3855a
+{
+    public static $files = array (
+        'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
+    );
+
+    public static $prefixLengthsPsr4 = array (
+        'R' => 
+        array (
+            'React\\Promise\\' => 14,
+        ),
+        'P' => 
+        array (
+            'Psr\\Log\\' => 8,
+        ),
+        'G' => 
+        array (
+            'GuzzleHttp\\Stream\\' => 18,
+            'GuzzleHttp\\Ring\\' => 16,
+        ),
+        'E' => 
+        array (
+            'Elasticsearch\\' => 14,
+        ),
+    );
+
+    public static $prefixDirsPsr4 = array (
+        'React\\Promise\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/react/promise/src',
+        ),
+        'Psr\\Log\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
+        ),
+        'GuzzleHttp\\Stream\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/streams/src',
+        ),
+        'GuzzleHttp\\Ring\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/ringphp/src',
+        ),
+        'Elasticsearch\\' => 
+        array (
+            0 => __DIR__ . '/../..' . '/src/Elasticsearch',
+        ),
+    );
+
+    public static function getInitializer(ClassLoader $loader)
+    {
+        return \Closure::bind(function () use ($loader) {
+            $loader->prefixLengthsPsr4 = ComposerStaticInit427c9f26014378f0692da90741c3855a::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit427c9f26014378f0692da90741c3855a::$prefixDirsPsr4;
+
+        }, null, ClassLoader::class);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/installed.json b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/installed.json
new file mode 100644
index 0000000000000000000000000000000000000000..007880ef7498abddfe8a21843eafb843bccc9eca
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/composer/installed.json
@@ -0,0 +1,201 @@
+[
+    {
+        "name": "react/promise",
+        "version": "v2.5.0",
+        "version_normalized": "2.5.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/reactphp/promise.git",
+            "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/reactphp/promise/zipball/2760f3898b7e931aa71153852dcd48a75c9b95db",
+            "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4.0"
+        },
+        "time": "2016-12-22T14:09:01+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "React\\Promise\\": "src/"
+            },
+            "files": [
+                "src/functions_include.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jan Sorgalla",
+                "email": "jsorgalla@gmail.com"
+            }
+        ],
+        "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+        "keywords": [
+            "promise",
+            "promises"
+        ]
+    },
+    {
+        "name": "guzzlehttp/streams",
+        "version": "3.0.0",
+        "version_normalized": "3.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/streams.git",
+            "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+            "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.0"
+        },
+        "time": "2014-10-12T19:18:40+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "3.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Stream\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Provides a simple abstraction over streams of data",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "Guzzle",
+            "stream"
+        ]
+    },
+    {
+        "name": "guzzlehttp/ringphp",
+        "version": "1.1.0",
+        "version_normalized": "1.1.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/RingPHP.git",
+            "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/dbbb91d7f6c191e5e405e900e3102ac7f261bc0b",
+            "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b",
+            "shasum": ""
+        },
+        "require": {
+            "guzzlehttp/streams": "~3.0",
+            "php": ">=5.4.0",
+            "react/promise": "~2.0"
+        },
+        "require-dev": {
+            "ext-curl": "*",
+            "phpunit/phpunit": "~4.0"
+        },
+        "suggest": {
+            "ext-curl": "Guzzle will use specific adapters if cURL is present"
+        },
+        "time": "2015-05-20T03:37:09+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.1-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Ring\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function."
+    },
+    {
+        "name": "psr/log",
+        "version": "1.0.2",
+        "version_normalized": "1.0.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/php-fig/log.git",
+            "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+            "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0"
+        },
+        "time": "2016-10-10T12:19:37+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Psr\\Log\\": "Psr/Log/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "PHP-FIG",
+                "homepage": "http://www.php-fig.org/"
+            }
+        ],
+        "description": "Common interface for logging libraries",
+        "homepage": "https://github.com/php-fig/log",
+        "keywords": [
+            "log",
+            "psr",
+            "psr-3"
+        ]
+    }
+]
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/.travis.yml b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e43fbdd9cda3e0c4a84593ffafa2462c19a22fc3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/.travis.yml
@@ -0,0 +1,22 @@
+language: php
+
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7.0
+  - hhvm
+
+before_script:
+  - composer self-update
+  - composer install --no-interaction --prefer-source --dev
+  - ~/.nvm/nvm.sh install v0.6.14
+  - ~/.nvm/nvm.sh run v0.6.14
+
+script:
+  - make test
+
+matrix:
+  allow_failures:
+    - php: hhvm
+  fast_finish: true
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/CHANGELOG.md b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..d399d826247c5cf0c65bb0d35f8b8f6133fc035c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/CHANGELOG.md
@@ -0,0 +1,54 @@
+# CHANGELOG
+
+## 1.1.0 - 2015-05-19
+
+* Added `CURL_HTTP_VERSION_2_0`
+* The PHP stream wrapper handler now sets `allow_self_signed` to `false` to
+  match the cURL handler when `verify` is set to `true` or a certificate file.
+* Ensuring that a directory exists before using the `save_to` option.
+* Response protocol version is now correctly extracted from a response.
+* Fixed a bug in which the result of `CurlFactory::retryFailedRewind` did not
+  return an array.
+
+## 1.0.7 - 2015-03-29
+
+* PHP 7 fixes.
+
+## 1.0.6 - 2015-02-26
+
+* Bug fix: futures now extend from React's PromiseInterface to ensure that they
+  are properly forwarded down the promise chain.
+* The multi handle of the CurlMultiHandler is now created lazily.
+
+## 1.0.5 - 2014-12-10
+
+* Adding more error information to PHP stream wrapper exceptions.
+* Added digest auth integration test support to test server.
+
+## 1.0.4 - 2014-12-01
+
+* Added support for older versions of cURL that do not have CURLOPT_TIMEOUT_MS.
+* Setting debug to `false` does not enable debug output.
+* Added a fix to the StreamHandler to return a `FutureArrayInterface` when an
+  error occurs.
+
+## 1.0.3 - 2014-11-03
+
+* Setting the `header` stream option as a string to be compatible with GAE.
+* Header parsing now ensures that header order is maintained in the parsed
+  message.
+
+## 1.0.2 - 2014-10-28
+
+* Now correctly honoring a `version` option is supplied in a request.
+  See https://github.com/guzzle/RingPHP/pull/8
+
+## 1.0.1 - 2014-10-26
+
+* Fixed a header parsing issue with the `CurlHandler` and `CurlMultiHandler`
+  that caused cURL requests with multiple responses to merge repsonses together
+  (e.g., requests with digest authentication).
+
+## 1.0.0 - 2014-10-12
+
+* Initial release.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/LICENSE b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..71d3b783cb5b82e732f4555c5b7839036334607b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
+
+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:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+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.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/Makefile b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..21c812e381309d1db478db1e505b6a84ddbbbdeb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/Makefile
@@ -0,0 +1,46 @@
+all: clean coverage docs
+
+docs:
+	cd docs && make html
+
+view-docs:
+	open docs/_build/html/index.html
+
+start-server: stop-server
+	node tests/Client/server.js &> /dev/null &
+
+stop-server:
+	@PID=$(shell ps axo pid,command \
+	  | grep 'tests/Client/server.js' \
+	  | grep -v grep \
+	  | cut -f 1 -d " "\
+	) && [ -n "$$PID" ] && kill $$PID || true
+
+test: start-server
+	vendor/bin/phpunit $(TEST)
+	$(MAKE) stop-server
+
+coverage: start-server
+	vendor/bin/phpunit --coverage-html=build/artifacts/coverage $(TEST)
+	$(MAKE) stop-server
+
+view-coverage:
+	open build/artifacts/coverage/index.html
+
+clean:
+	rm -rf build/artifacts/*
+	cd docs && make clean
+
+tag:
+	$(if $(TAG),,$(error TAG is not defined. Pass via "make tag TAG=4.2.1"))
+	@echo Tagging $(TAG)
+	chag update -m '$(TAG) ()'
+	git add -A
+	git commit -m '$(TAG) release'
+	chag tag
+
+perf: start-server
+	php tests/perf.php
+	$(MAKE) stop-server
+
+.PHONY: docs
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/README.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/README.rst
new file mode 100644
index 0000000000000000000000000000000000000000..10374e813b1f31b2657a9d12e392b8ccd1d2e84c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/README.rst
@@ -0,0 +1,46 @@
+=======
+RingPHP
+=======
+
+Provides a simple API and specification that abstracts away the details of HTTP
+into a single PHP function. RingPHP be used to power HTTP clients and servers
+through a PHP function that accepts a request hash and returns a response hash
+that is fulfilled using a `promise <https://github.com/reactphp/promise>`_,
+allowing RingPHP to support both synchronous and asynchronous workflows.
+
+By abstracting the implementation details of different HTTP clients and
+servers, RingPHP allows you to utilize pluggable HTTP clients and servers
+without tying your application to a specific implementation.
+
+.. code-block:: php
+
+    <?php
+    require 'vendor/autoload.php';
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+
+    $handler = new CurlHandler();
+    $response = $handler([
+        'http_method' => 'GET',
+        'uri'         => '/',
+        'headers'     => [
+            'host'  => ['www.google.com'],
+            'x-foo' => ['baz']
+        ]
+    ]);
+
+    $response->then(function (array $response) {
+        echo $response['status'];
+    });
+
+    $response->wait();
+
+RingPHP is inspired by Clojure's `Ring <https://github.com/ring-clojure/ring>`_,
+which, in turn, was inspired by Python's WSGI and Ruby's Rack. RingPHP is
+utilized as the handler layer in `Guzzle <http://guzzlephp.org>`_ 5.0+ to send
+HTTP requests.
+
+Documentation
+-------------
+
+See http://ringphp.readthedocs.org/ for the full online documentation.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/composer.json b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..22002efca7ab7e9e94e93cac3b5006d48ee353c7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/composer.json
@@ -0,0 +1,39 @@
+{
+    "name": "guzzlehttp/ringphp",
+    "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "guzzlehttp/streams": "~3.0",
+        "react/promise": "~2.0"
+    },
+    "require-dev": {
+        "ext-curl": "*",
+        "phpunit/phpunit": "~4.0"
+    },
+    "suggest": {
+        "ext-curl": "Guzzle will use specific adapters if cURL is present"
+    },
+    "autoload": {
+        "psr-4": {
+            "GuzzleHttp\\Ring\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "GuzzleHttp\\Tests\\Ring\\": "tests/"
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.1-dev"
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/Makefile b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..51270aa5d39fb03f562a2acb09df88f082741b01
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/Makefile
@@ -0,0 +1,153 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
+	@echo "  gettext    to make PO message catalogs"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/GuzzleRing.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/GuzzleRing.qhc"
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/GuzzleRing"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/GuzzleRing"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo
+	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+	@echo "Run \`make' in that directory to run these through makeinfo" \
+	      "(use \`make info' here to do that automatically)."
+
+info:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo "Running Texinfo files through makeinfo..."
+	make -C $(BUILDDIR)/texinfo info
+	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+	@echo
+	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/client_handlers.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/client_handlers.rst
new file mode 100644
index 0000000000000000000000000000000000000000..3151f00216ce0afdd31d2fb0a936c07f61b045de
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/client_handlers.rst
@@ -0,0 +1,173 @@
+===============
+Client Handlers
+===============
+
+Client handlers accept a request array and return a future response array that
+can be used synchronously as an array or asynchronously using a promise.
+
+Built-In Handlers
+-----------------
+
+RingPHP comes with three built-in client handlers.
+
+Stream Handler
+~~~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\StreamHandler`` uses PHP's
+`http stream wrapper <http://php.net/manual/en/wrappers.http.php>`_ to send
+requests.
+
+.. note::
+
+    This handler cannot send requests concurrently.
+
+You can provide an associative array of custom stream context options to the
+StreamHandler using the ``stream_context`` key of the ``client`` request
+option.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\StreamHandler;
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'uri' => '/',
+        'headers' => ['host' => ['httpbin.org']],
+        'client' => [
+            'stream_context' => [
+                'http' => [
+                    'request_fulluri' => true,
+                    'method' => 'HEAD'
+                ],
+                'socket' => [
+                    'bindto' => '127.0.0.1:0'
+                ],
+                'ssl' => [
+                    'verify_peer' => false
+                ]
+            ]
+        ]
+    ]);
+
+    // Even though it's already completed, you can still use a promise
+    $response->then(function ($response) {
+        echo $response['status']; // 200
+    });
+
+    // Or access the response using the future interface
+    echo $response['status']; // 200
+
+cURL Handler
+~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\CurlHandler`` can be used with PHP 5.5+ to send
+requests using cURL easy handles. This handler is great for sending requests
+one at a time because the execute and select loop is implemented in C code
+which executes faster and consumes less memory than using PHP's
+``curl_multi_*`` interface.
+
+.. note::
+
+    This handler cannot send requests concurrently.
+
+When using the CurlHandler, custom curl options can be specified as an
+associative array of `cURL option constants <http://php.net/manual/en/curl.constants.php>`_
+mapping to values in the ``client`` option of a requst using the **curl** key.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+
+    $handler = new CurlHandler();
+
+    $request = [
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]],
+        'client'      => ['curl' => [CURLOPT_LOW_SPEED_LIMIT => 10]]
+    ];
+
+    $response = $handler($request);
+
+    // The response can be used directly as an array.
+    echo $response['status']; // 200
+
+    // Or, it can be used as a promise (that has already fulfilled).
+    $response->then(function ($response) {
+        echo $response['status']; // 200
+    });
+
+cURL Multi Handler
+~~~~~~~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\CurlMultiHandler`` transfers requests using
+cURL's `multi API <http://curl.haxx.se/libcurl/c/libcurl-multi.html>`_. The
+``CurlMultiHandler`` is great for sending requests concurrently.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+    $handler = new CurlMultiHandler();
+
+    $request = [
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]]
+    ];
+
+    // this call returns a future array immediately.
+    $response = $handler($request);
+
+    // Ideally, you should use the promise API to not block.
+    $response
+        ->then(function ($response) {
+            // Got the response at some point in the future
+            echo $response['status']; // 200
+            // Don't break the chain
+            return $response;
+        })->then(function ($response) {
+            // ...
+        });
+
+    // If you really need to block, then you can use the response as an
+    // associative array. This will block until it has completed.
+    echo $response['status']; // 200
+
+Just like the ``CurlHandler``, the ``CurlMultiHandler`` accepts custom curl
+option in the ``curl`` key of the ``client`` request option.
+
+Mock Handler
+~~~~~~~~~~~~
+
+The ``GuzzleHttp\Ring\Client\MockHandler`` is used to return mock responses.
+When constructed, the handler can be configured to return the same response
+array over and over, a future response, or a the evaluation of a callback
+function.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\MockHandler;
+
+    // Return a canned response.
+    $mock = new MockHandler(['status' => 200]);
+    $response = $mock([]);
+    assert(200 == $response['status']);
+    assert([] == $response['headers']);
+
+Implementing Handlers
+---------------------
+
+Client handlers are just PHP callables (functions or classes that have the
+``__invoke`` magic method). The callable accepts a request array and MUST
+return an instance of ``GuzzleHttp\Ring\Future\FutureArrayInterface`` so that
+the response can be used by both blocking and non-blocking consumers.
+
+Handlers need to follow a few simple rules:
+
+1. Do not throw exceptions. If an error is encountered, return an array that
+   contains the ``error`` key that maps to an ``\Exception`` value.
+2. If the request has a ``delay`` client option, then the handler should only
+   send the request after the specified delay time in seconds. Blocking
+   handlers may find it convenient to just let the
+   ``GuzzleHttp\Ring\Core::doSleep($request)`` function handle this for them.
+3. Always return an instance of ``GuzzleHttp\Ring\Future\FutureArrayInterface``.
+4. Complete any outstanding requests when the handler is destructed.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/client_middleware.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/client_middleware.rst
new file mode 100644
index 0000000000000000000000000000000000000000..5a2c1a8abd054b46d804ba4f6bbe62e1c7593205
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/client_middleware.rst
@@ -0,0 +1,165 @@
+=================
+Client Middleware
+=================
+
+Middleware intercepts requests before they are sent over the wire and can be
+used to add functionality to handlers.
+
+Modifying Requests
+------------------
+
+Let's say you wanted to modify requests before they are sent over the wire
+so that they always add specific headers. This can be accomplished by creating
+a function that accepts a handler and returns a new function that adds the
+composed behavior.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+
+    $handler = new CurlHandler();
+
+    $addHeaderHandler = function (callable $handler, array $headers = []) {
+        return function (array $request) use ($handler, $headers) {
+            // Add our custom headers
+            foreach ($headers as $key => $value) {
+                $request['headers'][$key] = $value;
+            }
+
+            // Send the request using the handler and return the response.
+            return $handler($request);
+        }
+    };
+
+    // Create a new handler that adds headers to each request.
+    $handler = $addHeaderHandler($handler, [
+        'X-AddMe'       => 'hello',
+        'Authorization' => 'Basic xyz'
+    ]);
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['httpbin.org']]
+    ]);
+
+Modifying Responses
+-------------------
+
+You can change a response as it's returned from a middleware. Remember that
+responses returned from an handler (including middleware) must implement
+``GuzzleHttp\Ring\Future\FutureArrayInterface``. In order to be a good citizen,
+you should not expect that the responses returned through your middleware will
+be completed synchronously. Instead, you should use the
+``GuzzleHttp\Ring\Core::proxy()`` function to modify the response when the
+underlying promise is resolved. This function is a helper function that makes it
+easy to create a new instance of ``FutureArrayInterface`` that wraps an existing
+``FutureArrayInterface`` object.
+
+Let's say you wanted to add headers to a response as they are returned from
+your middleware, but you want to make sure you aren't causing future
+responses to be dereferenced right away. You can achieve this by modifying the
+incoming request and using the ``Core::proxy`` function.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Core;
+    use GuzzleHttp\Ring\Client\CurlHandler;
+
+    $handler = new CurlHandler();
+
+    $responseHeaderHandler = function (callable $handler, array $headers) {
+        return function (array $request) use ($handler, $headers) {
+            // Send the request using the wrapped handler.
+            return Core::proxy($handler($request), function ($response) use ($headers) {
+                // Add the headers to the response when it is available.
+                foreach ($headers as $key => $value) {
+                    $response['headers'][$key] = (array) $value;
+                }
+                // Note that you can return a regular response array when using
+                // the proxy method.
+                return $response;
+            });
+        }
+    };
+
+    // Create a new handler that adds headers to each response.
+    $handler = $responseHeaderHandler($handler, ['X-Header' => 'hello!']);
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['httpbin.org']]
+    ]);
+
+    assert($response['headers']['X-Header'] == 'hello!');
+
+Built-In Middleware
+-------------------
+
+RingPHP comes with a few basic client middlewares that modify requests
+and responses.
+
+Streaming Middleware
+~~~~~~~~~~~~~~~~~~~~
+
+If you want to send all requests with the ``streaming`` option to a specific
+handler but other requests to a different handler, then use the streaming
+middleware.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+    use GuzzleHttp\Ring\Client\StreamHandler;
+    use GuzzleHttp\Ring\Client\Middleware;
+
+    $defaultHandler = new CurlHandler();
+    $streamingHandler = new StreamHandler();
+    $streamingHandler = Middleware::wrapStreaming(
+        $defaultHandler,
+        $streamingHandler
+    );
+
+    // Send the request using the streaming handler.
+    $response = $streamingHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com']],
+        'stream'      => true
+    ]);
+
+    // Send the request using the default handler.
+    $response = $streamingHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com']]
+    ]);
+
+Future Middleware
+~~~~~~~~~~~~~~~~~
+
+If you want to send all requests with the ``future`` option to a specific
+handler but other requests to a different handler, then use the future
+middleware.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+    use GuzzleHttp\Ring\Client\Middleware;
+
+    $defaultHandler = new CurlHandler();
+    $futureHandler = new CurlMultiHandler();
+    $futureHandler = Middleware::wrapFuture(
+        $defaultHandler,
+        $futureHandler
+    );
+
+    // Send the request using the blocking CurlHandler.
+    $response = $futureHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com']]
+    ]);
+
+    // Send the request using the non-blocking CurlMultiHandler.
+    $response = $futureHandler([
+        'http_method' => 'GET',
+        'headers'     => ['Host' => ['www.google.com']],
+        'future'      => true
+    ]);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/conf.py b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..c6404aa1e1453a433bb4667500aa2cb7edff4d79
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/conf.py
@@ -0,0 +1,23 @@
+import sys, os
+import sphinx_rtd_theme
+from sphinx.highlighting import lexers
+from pygments.lexers.web import PhpLexer
+
+
+lexers['php'] = PhpLexer(startinline=True, linenos=1)
+lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
+primary_domain = 'php'
+
+extensions = []
+templates_path = ['_templates']
+source_suffix = '.rst'
+master_doc = 'index'
+project = u'RingPHP'
+copyright = u'2014, Michael Dowling'
+version = '1.0.0-alpha'
+exclude_patterns = ['_build']
+
+html_title = "RingPHP"
+html_short_title = "RingPHP"
+html_theme = "sphinx_rtd_theme"
+html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/futures.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/futures.rst
new file mode 100644
index 0000000000000000000000000000000000000000..af29cb3780cddffef0534c9c53cbf47d2472e178
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/futures.rst
@@ -0,0 +1,164 @@
+=======
+Futures
+=======
+
+Futures represent a computation that may have not yet completed. RingPHP
+uses hybrid of futures and promises to provide a consistent API that can be
+used for both blocking and non-blocking consumers.
+
+Promises
+--------
+
+You can get the result of a future when it is ready using the promise interface
+of a future. Futures expose a promise API via a ``then()`` method that utilizes
+`React's promise library <https://github.com/reactphp/promise>`_. You should
+use this API when you do not wish to block.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+    $request = [
+        'http_method' => 'GET',
+        'uri'         => '/',
+        'headers'     => ['host' => ['httpbin.org']]
+    ];
+
+    $response = $handler($request);
+
+    // Use the then() method to use the promise API of the future.
+    $response->then(function ($response) {
+        echo $response['status'];
+    });
+
+You can get the promise used by a future, an instance of
+``React\Promise\PromiseInterface``, by calling the ``promise()`` method.
+
+.. code-block:: php
+
+    $response = $handler($request);
+    $promise = $response->promise();
+    $promise->then(function ($response) {
+        echo $response['status'];
+    });
+
+This promise value can be used with React's
+`aggregate promise functions <https://github.com/reactphp/promise#functions>`_.
+
+Waiting
+-------
+
+You can wait on a future to complete and retrieve the value, or *dereference*
+the future, using the ``wait()`` method. Calling the ``wait()`` method of a
+future will block until the result is available. The result is then returned or
+an exception is thrown if and exception was encountered while waiting on the
+the result. Subsequent calls to dereference a future will return the previously
+completed result or throw the previously encountered exception. Futures can be
+cancelled, which stops the computation if possible.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'uri'         => '/',
+        'headers'     => ['host' => ['httpbin.org']]
+    ]);
+
+    // You can explicitly call block to wait on a result.
+    $realizedResponse = $response->wait();
+
+    // Future responses can be used like a regular PHP array.
+    echo $response['status'];
+
+In addition to explicitly calling the ``wait()`` function, using a future like
+a normal value will implicitly trigger the ``wait()`` function.
+
+Future Responses
+----------------
+
+RingPHP uses futures to return asynchronous responses immediately. Client
+handlers always return future responses that implement
+``GuzzleHttp\Ring\Future\ArrayFutureInterface``. These future responses act
+just like normal PHP associative arrays for blocking access and provide a
+promise interface for non-blocking access.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+    $handler = new CurlMultiHandler();
+
+    $request = [
+        'http_method'  => 'GET',
+        'uri'          => '/',
+        'headers'      => ['Host' => ['www.google.com']]
+    ];
+
+    $response = $handler($request);
+
+    // Use the promise API for non-blocking access to the response. The actual
+    // response value will be delivered to the promise.
+    $response->then(function ($response) {
+        echo $response['status'];
+    });
+
+    // You can wait (block) until the future is completed.
+    $response->wait();
+
+    // This will implicitly call wait(), and will block too!
+    $response['status'];
+
+.. important::
+
+    Futures that are not completed by the time the underlying handler is
+    destructed will be completed when the handler is shutting down.
+
+Cancelling
+----------
+
+Futures can be cancelled if they have not already been dereferenced.
+
+RingPHP futures are typically implemented with the
+``GuzzleHttp\Ring\Future\BaseFutureTrait``. This trait provides the cancellation
+functionality that should be common to most implementations. Cancelling a
+future response will try to prevent the request from sending over the wire.
+
+When a future is cancelled, the cancellation function is invoked and performs
+the actual work needed to cancel the request from sending if possible
+(e.g., telling an event loop to stop sending a request or to close a socket).
+If no cancellation function is provided, then a request cannot be cancelled. If
+a cancel function is provided, then it should accept the future as an argument
+and return true if the future was successfully cancelled or false if it could
+not be cancelled.
+
+Wrapping an existing Promise
+----------------------------
+
+You can easily create a future from any existing promise using the
+``GuzzleHttp\Ring\Future\FutureValue`` class. This class's constructor
+accepts a promise as the first argument, a wait function as the second
+argument, and a cancellation function as the third argument. The dereference
+function is used to force the promise to resolve (for example, manually ticking
+an event loop). The cancel function is optional and is used to tell the thing
+that created the promise that it can stop computing the result (for example,
+telling an event loop to stop transferring a request).
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Future\FutureValue;
+    use React\Promise\Deferred;
+
+    $deferred = new Deferred();
+    $promise = $deferred->promise();
+
+    $f = new FutureValue(
+        $promise,
+        function () use ($deferred) {
+            // This function is responsible for blocking and resolving the
+            // promise. Here we pass in a reference to the deferred so that
+            // it can be resolved or rejected.
+            $deferred->resolve('foo');
+        }
+    );
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/index.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..4bbce631c7089a011133baae5571ccba1a44296a
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/index.rst
@@ -0,0 +1,50 @@
+=======
+RingPHP
+=======
+
+Provides a simple API and specification that abstracts away the details of HTTP
+into a single PHP function. RingPHP be used to power HTTP clients and servers
+through a PHP function that accepts a request hash and returns a response hash
+that is fulfilled using a `promise <https://github.com/reactphp/promise>`_,
+allowing RingPHP to support both synchronous and asynchronous workflows.
+
+By abstracting the implementation details of different HTTP clients and
+servers, RingPHP allows you to utilize pluggable HTTP clients and servers
+without tying your application to a specific implementation.
+
+.. toctree::
+   :maxdepth: 2
+
+   spec
+   futures
+   client_middleware
+   client_handlers
+   testing
+
+.. code-block:: php
+
+    <?php
+    require 'vendor/autoload.php';
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+
+    $handler = new CurlHandler();
+    $response = $handler([
+        'http_method' => 'GET',
+        'uri'         => '/',
+        'headers'     => [
+            'host'  => ['www.google.com'],
+            'x-foo' => ['baz']
+        ]
+    ]);
+
+    $response->then(function (array $response) {
+        echo $response['status'];
+    });
+
+    $response->wait();
+
+RingPHP is inspired by Clojure's `Ring <https://github.com/ring-clojure/ring>`_,
+which, in turn, was inspired by Python's WSGI and Ruby's Rack. RingPHP is
+utilized as the handler layer in `Guzzle <http://guzzlephp.org>`_ 5.0+ to send
+HTTP requests.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/requirements.txt b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..483a4e9600bd7a794750dd52ca24503fdf220133
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/requirements.txt
@@ -0,0 +1 @@
+sphinx_rtd_theme
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/spec.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/spec.rst
new file mode 100644
index 0000000000000000000000000000000000000000..bc9107898f4a19e53a760c74259a95960218ebcf
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/spec.rst
@@ -0,0 +1,311 @@
+=============
+Specification
+=============
+
+RingPHP applications consist of handlers, requests, responses, and
+middleware.
+
+Handlers
+--------
+
+Handlers are implemented as a PHP ``callable`` that accept a request array 
+and return a response array (``GuzzleHttp\Ring\Future\FutureArrayInterface``).
+
+For example:
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Future\CompletedFutureArray;
+
+    $mockHandler = function (array $request) {
+        return new CompletedFutureArray([
+            'status'  => 200,
+            'headers' => ['X-Foo' => ['Bar']],
+            'body'    => 'Hello!'
+         ]);
+    };
+
+This handler returns the same response each time it is invoked. All RingPHP
+handlers must return a ``GuzzleHttp\Ring\Future\FutureArrayInterface``. Use
+``GuzzleHttp\Ring\Future\CompletedFutureArray`` when returning a response that
+has already completed.
+
+Requests
+--------
+
+A request array is a PHP associative array that contains the configuration
+settings need to send a request.
+
+.. code-block:: php
+
+    $request = [
+        'http_method' => 'GET',
+        'scheme'      => 'http',
+        'uri'         => '/',
+        'body'        => 'hello!',
+        'client'      => ['timeout' => 1.0],
+        'headers'     => [
+            'host'  => ['httpbin.org'],
+            'X-Foo' => ['baz', 'bar']
+        ]
+    ];
+
+The request array contains the following key value pairs:
+
+request_method
+    (string, required) The HTTP request method, must be all caps corresponding
+    to a HTTP request method, such as ``GET`` or ``POST``.
+
+scheme
+    (string) The transport protocol, must be one of ``http`` or ``https``.
+    Defaults to ``http``.
+
+uri
+    (string, required) The request URI excluding the query string. Must
+    start with "/".
+
+query_string
+    (string) The query string, if present (e.g., ``foo=bar``).
+
+version
+    (string) HTTP protocol version. Defaults to ``1.1``.
+
+headers
+    (required, array) Associative array of headers. Each key represents the
+    header name. Each value contains an array of strings where each entry of
+    the array SHOULD be sent over the wire on a separate header line.
+
+body
+    (string, fopen resource, ``Iterator``, ``GuzzleHttp\Stream\StreamInterface``)
+    The body of the request, if present. Can be a string, resource returned
+    from fopen, an ``Iterator`` that yields chunks of data, an object that
+    implemented ``__toString``, or a ``GuzzleHttp\Stream\StreamInterface``.
+
+future
+    (bool, string) Controls the asynchronous behavior of a response.
+
+    Set to ``true`` or omit the ``future`` option to *request* that a request
+    will be completed asynchronously. Keep in mind that your request might not
+    necessarily be completed asynchronously based on the handler you are using.
+    Set the ``future`` option to ``false`` to request that a synchronous
+    response be provided.
+
+    You can provide a string value to specify fine-tuned future behaviors that
+    may be specific to the underlying handlers you are using. There are,
+    however, some common future options that handlers should implement if
+    possible.
+
+    lazy
+        Requests that the handler does not open and send the request
+        immediately, but rather only opens and sends the request once the
+        future is dereferenced. This option is often useful for sending a large
+        number of requests concurrently to allow handlers to take better
+        advantage of non-blocking transfers by first building up a pool of
+        requests.
+
+    If an handler does not implement or understand a provided string value,
+    then the request MUST be treated as if the user provided ``true`` rather
+    than the string value.
+
+    Future responses created by asynchronous handlers MUST attempt to complete
+    any outstanding future responses when they are destructed. Asynchronous
+    handlers MAY choose to automatically complete responses when the number
+    of outstanding requests reaches an handler-specific threshold.
+
+Client Specific Options
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The following options are only used in ring client handlers.
+
+.. _client-options:
+
+client
+    (array) Associative array of client specific transfer options. The
+    ``client`` request key value pair can contain the following keys:
+
+    cert
+        (string, array) Set to a string to specify the path to a file
+        containing a PEM formatted SSL client side certificate. If a password
+        is required, then set ``cert`` to an array containing the path to the
+        PEM file in the first array element followed by the certificate
+        password in the second array element.
+
+    connect_timeout
+        (float) Float describing the number of seconds to wait while trying to
+        connect to a server. Use ``0`` to wait indefinitely (the default
+        behavior).
+
+    debug
+        (bool, fopen() resource) Set to true or set to a PHP stream returned by
+        fopen() to enable debug output with the handler used to send a request.
+        If set to ``true``, the output is written to PHP's STDOUT. If a PHP
+        ``fopen`` resource handle is provided, the output is written to the
+        stream.
+
+        "Debug output" is handler specific: different handlers will yield
+        different output and various various level of detail. For example, when
+        using cURL to transfer requests, cURL's `CURLOPT_VERBOSE <http://curl.haxx.se/libcurl/c/CURLOPT_VERBOSE.html>`_
+        will be used. When using the PHP stream wrapper, `stream notifications <http://php.net/manual/en/function.stream-notification-callback.php>`_
+        will be emitted.
+
+    decode_content
+        (bool) Specify whether or not ``Content-Encoding`` responses
+        (gzip, deflate, etc.) are automatically decoded. Set to ``true`` to
+        automatically decode encoded responses. Set to ``false`` to not decode
+        responses. By default, content is *not* decoded automatically.
+
+    delay
+        (int) The number of milliseconds to delay before sending the request.
+        This is often used for delaying before retrying a request. Handlers
+        SHOULD implement this if possible, but it is not a strict requirement.
+
+    progress
+        (function) Defines a function to invoke when transfer progress is made.
+        The function accepts the following arguments:
+
+        1. The total number of bytes expected to be downloaded
+        2. The number of bytes downloaded so far
+        3. The number of bytes expected to be uploaded
+        4. The number of bytes uploaded so far
+
+    proxy
+        (string, array) Pass a string to specify an HTTP proxy, or an
+        associative array to specify different proxies for different protocols
+        where the scheme is the key and the value is the proxy address.
+
+        .. code-block:: php
+
+            $request = [
+                'http_method' => 'GET',
+                'headers'     => ['host' => ['httpbin.org']],
+                'client'      => [
+                    // Use different proxies for different URI schemes.
+                    'proxy' => [
+                        'http'  => 'http://proxy.example.com:5100',
+                        'https' => 'https://proxy.example.com:6100'
+                    ]
+                ]
+            ];
+
+    ssl_key
+        (string, array) Specify the path to a file containing a private SSL key
+        in PEM format. If a password is required, then set to an array
+        containing the path to the SSL key in the first array element followed
+        by the password required for the certificate in the second element.
+
+    save_to
+        (string, fopen resource, ``GuzzleHttp\Stream\StreamInterface``)
+        Specifies where the body of the response is downloaded. Pass a string to
+        open a local file on disk and save the output to the file. Pass an fopen
+        resource to save the output to a PHP stream resource. Pass a
+        ``GuzzleHttp\Stream\StreamInterface`` to save the output to a Guzzle
+        StreamInterface. Omitting this option will typically save the body of a
+        response to a PHP temp stream.
+
+    stream
+        (bool) Set to true to stream a response rather than download it all
+        up-front. This option will only be utilized when the corresponding
+        handler supports it.
+
+    timeout
+        (float) Float describing the timeout of the request in seconds. Use 0 to
+        wait indefinitely (the default behavior).
+
+    verify
+        (bool, string) Describes the SSL certificate verification behavior of a
+        request. Set to true to enable SSL certificate verification using the
+        system CA bundle when available (the default). Set to false to disable
+        certificate verification (this is insecure!). Set to a string to provide
+        the path to a CA bundle on disk to enable verification using a custom
+        certificate.
+
+    version
+        (string) HTTP protocol version to use with the request.
+
+Server Specific Options
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The following options are only used in ring server handlers.
+
+server_port
+    (integer) The port on which the request is being handled. This is only
+    used with ring servers, and is required.
+
+server_name
+    (string) The resolved server name, or the server IP address. Required when
+    using a Ring server.
+
+remote_addr
+    (string) The IP address of the client or the last proxy that sent the
+    request. Required when using a Ring server.
+
+Responses
+---------
+
+A response is an array-like object that implements
+``GuzzleHttp\Ring\Future\FutureArrayInterface``. Responses contain the
+following key value pairs:
+
+body
+    (string, fopen resource, ``Iterator``, ``GuzzleHttp\Stream\StreamInterface``)
+    The body of the response, if present. Can be a string, resource returned
+    from fopen, an ``Iterator`` that yields chunks of data, an object that
+    implemented ``__toString``, or a ``GuzzleHttp\Stream\StreamInterface``.
+
+effective_url
+    (string) The URL that returned the resulting response.
+
+error
+    (``\Exception``) Contains an exception describing any errors that were
+    encountered during the transfer.
+
+headers
+    (Required, array) Associative array of headers. Each key represents the
+    header name. Each value contains an array of strings where each entry of
+    the array is a header line. The headers array MAY be an empty array in the
+    event an error occurred before a response was received.
+
+reason
+    (string) Optional reason phrase. This option should be provided when the
+    reason phrase does not match the typical reason phrase associated with the
+    ``status`` code. See `RFC 7231 <http://tools.ietf.org/html/rfc7231#section-6.1>`_
+    for a list of HTTP reason phrases mapped to status codes.
+
+status
+    (Required, integer) The HTTP status code. The status code MAY be set to
+    ``null`` in the event an error occurred before a response was received
+    (e.g., a networking error).
+
+transfer_stats
+    (array) Provides an associative array of arbitrary transfer statistics if
+    provided by the underlying handler.
+
+version
+    (string) HTTP protocol version. Defaults to ``1.1``.
+
+Middleware
+----------
+
+Ring middleware augments the functionality of handlers by invoking them in the
+process of generating responses. Middleware is typically implemented as a
+higher-order function that takes one or more handlers as arguments followed by
+an optional associative array of options as the last argument, returning a new
+handler with the desired compound behavior.
+
+Here's an example of a middleware that adds a Content-Type header to each
+request.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\CurlHandler;
+    use GuzzleHttp\Ring\Core;
+
+    $contentTypeHandler = function(callable $handler, $contentType) {
+        return function (array $request) use ($handler, $contentType) {
+            return $handler(Core::setHeader('Content-Type', $contentType));
+        };
+    };
+
+    $baseHandler = new CurlHandler();
+    $wrappedHandler = $contentTypeHandler($baseHandler, 'text/html');
+    $response = $wrappedHandler([/** request hash **/]);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/testing.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/testing.rst
new file mode 100644
index 0000000000000000000000000000000000000000..9df2562ed42817f4972d6ae57ba2dd86f27587e5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/docs/testing.rst
@@ -0,0 +1,74 @@
+=======
+Testing
+=======
+
+RingPHP tests client handlers using `PHPUnit <https://phpunit.de/>`_ and a
+built-in node.js web server.
+
+Running Tests
+-------------
+
+First, install the dependencies using `Composer <https://getcomposer.org>`_.
+
+    composer.phar install
+
+Next, run the unit tests using ``Make``.
+
+    make test
+
+The tests are also run on Travis-CI on each commit: https://travis-ci.org/guzzle/guzzle-ring
+
+Test Server
+-----------
+
+Testing client handlers usually involves actually sending HTTP requests.
+RingPHP provides a node.js web server that returns canned responses and
+keep a list of the requests that have been received. The server can then
+be queried to get a list of the requests that were sent by the client so that
+you can ensure that the client serialized and transferred requests as intended.
+
+The server keeps a list of queued responses and returns responses that are
+popped off of the queue as HTTP requests are received. When there are not
+more responses to serve, the server returns a 500 error response.
+
+The test server uses the ``GuzzleHttp\Tests\Ring\Client\Server`` class to
+control the server.
+
+.. code-block:: php
+
+    use GuzzleHttp\Ring\Client\StreamHandler;
+    use GuzzleHttp\Tests\Ring\Client\Server;
+
+    // First return a 200 followed by a 404 response.
+    Server::enqueue([
+        ['status' => 200],
+        ['status' => 404]
+    ]);
+
+    $handler = new StreamHandler();
+
+    $response = $handler([
+        'http_method' => 'GET',
+        'headers'     => ['host' => [Server::$host]],
+        'uri'         => '/'
+    ]);
+
+    assert(200 == $response['status']);
+
+    $response = $handler([
+        'http_method' => 'HEAD',
+        'headers'     => ['host' => [Server::$host]],
+        'uri'         => '/'
+    ]);
+
+    assert(404 == $response['status']);
+
+After requests have been sent, you can get a list of the requests as they
+were sent over the wire to ensure they were sent correctly.
+
+.. code-block:: php
+
+    $received = Server::received();
+
+    assert('GET' == $received[0]['http_method']);
+    assert('HEAD' == $received[1]['http_method']);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/phpunit.xml.dist b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..1d192902507b9f1c21f28fbdebdf3ddcbea0167c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/phpunit.xml.dist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit bootstrap="./tests/bootstrap.php"
+         colors="true">
+    <testsuites>
+        <testsuite>
+            <directory>tests</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist>
+            <directory suffix=".php">src</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php
new file mode 100644
index 0000000000000000000000000000000000000000..2acf92eba0d04ecb9c7a1021513039931f47d9b6
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/ClientUtils.php
@@ -0,0 +1,74 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+/**
+ * Client specific utility functions.
+ */
+class ClientUtils
+{
+    /**
+     * Returns the default cacert bundle for the current system.
+     *
+     * First, the openssl.cafile and curl.cainfo php.ini settings are checked.
+     * If those settings are not configured, then the common locations for
+     * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X
+     * and Windows are checked. If any of these file locations are found on
+     * disk, they will be utilized.
+     *
+     * Note: the result of this function is cached for subsequent calls.
+     *
+     * @return string
+     * @throws \RuntimeException if no bundle can be found.
+     */
+    public static function getDefaultCaBundle()
+    {
+        static $cached = null;
+        static $cafiles = [
+            // Red Hat, CentOS, Fedora (provided by the ca-certificates package)
+            '/etc/pki/tls/certs/ca-bundle.crt',
+            // Ubuntu, Debian (provided by the ca-certificates package)
+            '/etc/ssl/certs/ca-certificates.crt',
+            // FreeBSD (provided by the ca_root_nss package)
+            '/usr/local/share/certs/ca-root-nss.crt',
+            // OS X provided by homebrew (using the default path)
+            '/usr/local/etc/openssl/cert.pem',
+            // Windows?
+            'C:\\windows\\system32\\curl-ca-bundle.crt',
+            'C:\\windows\\curl-ca-bundle.crt',
+        ];
+
+        if ($cached) {
+            return $cached;
+        }
+
+        if ($ca = ini_get('openssl.cafile')) {
+            return $cached = $ca;
+        }
+
+        if ($ca = ini_get('curl.cainfo')) {
+            return $cached = $ca;
+        }
+
+        foreach ($cafiles as $filename) {
+            if (file_exists($filename)) {
+                return $cached = $filename;
+            }
+        }
+
+        throw new \RuntimeException(self::CA_ERR);
+    }
+
+    const CA_ERR = "
+No system CA bundle could be found in any of the the common system locations.
+PHP versions earlier than 5.6 are not properly configured to use the system's
+CA bundle by default. In order to verify peer certificates, you will need to
+supply the path on disk to a certificate bundle to the 'verify' request
+option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not
+need a specific certificate bundle, then Mozilla provides a commonly used CA
+bundle which can be downloaded here (provided by the maintainer of cURL):
+https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once
+you have a CA bundle available on disk, you can set the 'openssl.cafile' PHP
+ini setting to point to the path to the file, allowing you to omit the 'verify'
+request option. See http://curl.haxx.se/docs/sslcerts.html for more
+information.";
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..efe4659bf4058376796b58bf7de32a8bc8c4faac
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlFactory.php
@@ -0,0 +1,560 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Exception\ConnectException;
+use GuzzleHttp\Ring\Exception\RingException;
+use GuzzleHttp\Stream\LazyOpenStream;
+use GuzzleHttp\Stream\StreamInterface;
+
+/**
+ * Creates curl resources from a request
+ */
+class CurlFactory
+{
+    /**
+     * Creates a cURL handle, header resource, and body resource based on a
+     * transaction.
+     *
+     * @param array         $request Request hash
+     * @param null|resource $handle  Optionally provide a curl handle to modify
+     *
+     * @return array Returns an array of the curl handle, headers array, and
+     *               response body handle.
+     * @throws \RuntimeException when an option cannot be applied
+     */
+    public function __invoke(array $request, $handle = null)
+    {
+        $headers = [];
+        $options = $this->getDefaultOptions($request, $headers);
+        $this->applyMethod($request, $options);
+
+        if (isset($request['client'])) {
+            $this->applyHandlerOptions($request, $options);
+        }
+
+        $this->applyHeaders($request, $options);
+        unset($options['_headers']);
+
+        // Add handler options from the request's configuration options
+        if (isset($request['client']['curl'])) {
+            $options = $this->applyCustomCurlOptions(
+                $request['client']['curl'],
+                $options
+            );
+        }
+
+        if (!$handle) {
+            $handle = curl_init();
+        }
+
+        $body = $this->getOutputBody($request, $options);
+        curl_setopt_array($handle, $options);
+
+        return [$handle, &$headers, $body];
+    }
+
+    /**
+     * Creates a response hash from a cURL result.
+     *
+     * @param callable $handler  Handler that was used.
+     * @param array    $request  Request that sent.
+     * @param array    $response Response hash to update.
+     * @param array    $headers  Headers received during transfer.
+     * @param resource $body     Body fopen response.
+     *
+     * @return array
+     */
+    public static function createResponse(
+        callable $handler,
+        array $request,
+        array $response,
+        array $headers,
+        $body
+    ) {
+        if (isset($response['transfer_stats']['url'])) {
+            $response['effective_url'] = $response['transfer_stats']['url'];
+        }
+
+        if (!empty($headers)) {
+            $startLine = explode(' ', array_shift($headers), 3);
+            $headerList = Core::headersFromLines($headers);
+            $response['headers'] = $headerList;
+            $response['version'] = isset($startLine[0]) ? substr($startLine[0], 5) : null;
+            $response['status'] = isset($startLine[1]) ? (int) $startLine[1] : null;
+            $response['reason'] = isset($startLine[2]) ? $startLine[2] : null;
+            $response['body'] = $body;
+            Core::rewindBody($response);
+        }
+
+        return !empty($response['curl']['errno']) || !isset($response['status'])
+            ? self::createErrorResponse($handler, $request, $response)
+            : $response;
+    }
+
+    private static function createErrorResponse(
+        callable $handler,
+        array $request,
+        array $response
+    ) {
+        static $connectionErrors = [
+            CURLE_OPERATION_TIMEOUTED  => true,
+            CURLE_COULDNT_RESOLVE_HOST => true,
+            CURLE_COULDNT_CONNECT      => true,
+            CURLE_SSL_CONNECT_ERROR    => true,
+            CURLE_GOT_NOTHING          => true,
+        ];
+
+        // Retry when nothing is present or when curl failed to rewind.
+        if (!isset($response['err_message'])
+            && (empty($response['curl']['errno'])
+                || $response['curl']['errno'] == 65)
+        ) {
+            return self::retryFailedRewind($handler, $request, $response);
+        }
+
+        $message = isset($response['err_message'])
+            ? $response['err_message']
+            : sprintf('cURL error %s: %s',
+                $response['curl']['errno'],
+                isset($response['curl']['error'])
+                    ? $response['curl']['error']
+                    : 'See http://curl.haxx.se/libcurl/c/libcurl-errors.html');
+
+        $error = isset($response['curl']['errno'])
+            && isset($connectionErrors[$response['curl']['errno']])
+            ? new ConnectException($message)
+            : new RingException($message);
+
+        return $response + [
+            'status'  => null,
+            'reason'  => null,
+            'body'    => null,
+            'headers' => [],
+            'error'   => $error,
+        ];
+    }
+
+    private function getOutputBody(array $request, array &$options)
+    {
+        // Determine where the body of the response (if any) will be streamed.
+        if (isset($options[CURLOPT_WRITEFUNCTION])) {
+            return $request['client']['save_to'];
+        }
+
+        if (isset($options[CURLOPT_FILE])) {
+            return $options[CURLOPT_FILE];
+        }
+
+        if ($request['http_method'] != 'HEAD') {
+            // Create a default body if one was not provided
+            return $options[CURLOPT_FILE] = fopen('php://temp', 'w+');
+        }
+
+        return null;
+    }
+
+    private function getDefaultOptions(array $request, array &$headers)
+    {
+        $url = Core::url($request);
+        $startingResponse = false;
+
+        $options = [
+            '_headers'             => $request['headers'],
+            CURLOPT_CUSTOMREQUEST  => $request['http_method'],
+            CURLOPT_URL            => $url,
+            CURLOPT_RETURNTRANSFER => false,
+            CURLOPT_HEADER         => false,
+            CURLOPT_CONNECTTIMEOUT => 150,
+            CURLOPT_HEADERFUNCTION => function ($ch, $h) use (&$headers, &$startingResponse) {
+                $value = trim($h);
+                if ($value === '') {
+                    $startingResponse = true;
+                } elseif ($startingResponse) {
+                    $startingResponse = false;
+                    $headers = [$value];
+                } else {
+                    $headers[] = $value;
+                }
+                return strlen($h);
+            },
+        ];
+
+        if (isset($request['version'])) {
+            if ($request['version'] == 2.0) {
+                $options[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_2_0;
+            } else if ($request['version'] == 1.1) {
+                $options[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1;
+            } else {
+                $options[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_0;
+            }
+        }
+
+        if (defined('CURLOPT_PROTOCOLS')) {
+            $options[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
+        }
+
+        return $options;
+    }
+
+    private function applyMethod(array $request, array &$options)
+    {
+        if (isset($request['body'])) {
+            $this->applyBody($request, $options);
+            return;
+        }
+
+        switch ($request['http_method']) {
+            case 'PUT':
+            case 'POST':
+                // See http://tools.ietf.org/html/rfc7230#section-3.3.2
+                if (!Core::hasHeader($request, 'Content-Length')) {
+                    $options[CURLOPT_HTTPHEADER][] = 'Content-Length: 0';
+                }
+                break;
+            case 'HEAD':
+                $options[CURLOPT_NOBODY] = true;
+                unset(
+                    $options[CURLOPT_WRITEFUNCTION],
+                    $options[CURLOPT_READFUNCTION],
+                    $options[CURLOPT_FILE],
+                    $options[CURLOPT_INFILE]
+                );
+        }
+    }
+
+    private function applyBody(array $request, array &$options)
+    {
+        $contentLength = Core::firstHeader($request, 'Content-Length');
+        $size = $contentLength !== null ? (int) $contentLength : null;
+
+        // Send the body as a string if the size is less than 1MB OR if the
+        // [client][curl][body_as_string] request value is set.
+        if (($size !== null && $size < 1000000) ||
+            isset($request['client']['curl']['body_as_string']) ||
+            is_string($request['body'])
+        ) {
+            $options[CURLOPT_POSTFIELDS] = Core::body($request);
+            // Don't duplicate the Content-Length header
+            $this->removeHeader('Content-Length', $options);
+            $this->removeHeader('Transfer-Encoding', $options);
+        } else {
+            $options[CURLOPT_UPLOAD] = true;
+            if ($size !== null) {
+                // Let cURL handle setting the Content-Length header
+                $options[CURLOPT_INFILESIZE] = $size;
+                $this->removeHeader('Content-Length', $options);
+            }
+            $this->addStreamingBody($request, $options);
+        }
+
+        // If the Expect header is not present, prevent curl from adding it
+        if (!Core::hasHeader($request, 'Expect')) {
+            $options[CURLOPT_HTTPHEADER][] = 'Expect:';
+        }
+
+        // cURL sometimes adds a content-type by default. Prevent this.
+        if (!Core::hasHeader($request, 'Content-Type')) {
+            $options[CURLOPT_HTTPHEADER][] = 'Content-Type:';
+        }
+    }
+
+    private function addStreamingBody(array $request, array &$options)
+    {
+        $body = $request['body'];
+
+        if ($body instanceof StreamInterface) {
+            $options[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) {
+                return (string) $body->read($length);
+            };
+            if (!isset($options[CURLOPT_INFILESIZE])) {
+                if ($size = $body->getSize()) {
+                    $options[CURLOPT_INFILESIZE] = $size;
+                }
+            }
+        } elseif (is_resource($body)) {
+            $options[CURLOPT_INFILE] = $body;
+        } elseif ($body instanceof \Iterator) {
+            $buf = '';
+            $options[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body, &$buf) {
+                if ($body->valid()) {
+                    $buf .= $body->current();
+                    $body->next();
+                }
+                $result = (string) substr($buf, 0, $length);
+                $buf = substr($buf, $length);
+                return $result;
+            };
+        } else {
+            throw new \InvalidArgumentException('Invalid request body provided');
+        }
+    }
+
+    private function applyHeaders(array $request, array &$options)
+    {
+        foreach ($options['_headers'] as $name => $values) {
+            foreach ($values as $value) {
+                $options[CURLOPT_HTTPHEADER][] = "$name: $value";
+            }
+        }
+
+        // Remove the Accept header if one was not set
+        if (!Core::hasHeader($request, 'Accept')) {
+            $options[CURLOPT_HTTPHEADER][] = 'Accept:';
+        }
+    }
+
+    /**
+     * Takes an array of curl options specified in the 'curl' option of a
+     * request's configuration array and maps them to CURLOPT_* options.
+     *
+     * This method is only called when a  request has a 'curl' config setting.
+     *
+     * @param array $config  Configuration array of custom curl option
+     * @param array $options Array of existing curl options
+     *
+     * @return array Returns a new array of curl options
+     */
+    private function applyCustomCurlOptions(array $config, array $options)
+    {
+        $curlOptions = [];
+        foreach ($config as $key => $value) {
+            if (is_int($key)) {
+                $curlOptions[$key] = $value;
+            }
+        }
+
+        return $curlOptions + $options;
+    }
+
+    /**
+     * Remove a header from the options array.
+     *
+     * @param string $name    Case-insensitive header to remove
+     * @param array  $options Array of options to modify
+     */
+    private function removeHeader($name, array &$options)
+    {
+        foreach (array_keys($options['_headers']) as $key) {
+            if (!strcasecmp($key, $name)) {
+                unset($options['_headers'][$key]);
+                return;
+            }
+        }
+    }
+
+    /**
+     * Applies an array of request client options to a the options array.
+     *
+     * This method uses a large switch rather than double-dispatch to save on
+     * high overhead of calling functions in PHP.
+     */
+    private function applyHandlerOptions(array $request, array &$options)
+    {
+        foreach ($request['client'] as $key => $value) {
+            switch ($key) {
+            // Violating PSR-4 to provide more room.
+            case 'verify':
+
+                if ($value === false) {
+                    unset($options[CURLOPT_CAINFO]);
+                    $options[CURLOPT_SSL_VERIFYHOST] = 0;
+                    $options[CURLOPT_SSL_VERIFYPEER] = false;
+                    continue;
+                }
+
+                $options[CURLOPT_SSL_VERIFYHOST] = 2;
+                $options[CURLOPT_SSL_VERIFYPEER] = true;
+
+                if (is_string($value)) {
+                    $options[CURLOPT_CAINFO] = $value;
+                    if (!file_exists($value)) {
+                        throw new \InvalidArgumentException(
+                            "SSL CA bundle not found: $value"
+                        );
+                    }
+                }
+                break;
+
+            case 'decode_content':
+
+                if ($value === false) {
+                    continue;
+                }
+
+                $accept = Core::firstHeader($request, 'Accept-Encoding');
+                if ($accept) {
+                    $options[CURLOPT_ENCODING] = $accept;
+                } else {
+                    $options[CURLOPT_ENCODING] = '';
+                    // Don't let curl send the header over the wire
+                    $options[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
+                }
+                break;
+
+            case 'save_to':
+
+                if (is_string($value)) {
+                    if (!is_dir(dirname($value))) {
+                        throw new \RuntimeException(sprintf(
+                            'Directory %s does not exist for save_to value of %s',
+                            dirname($value),
+                            $value
+                        ));
+                    }
+                    $value = new LazyOpenStream($value, 'w+');
+                }
+
+                if ($value instanceof StreamInterface) {
+                    $options[CURLOPT_WRITEFUNCTION] =
+                        function ($ch, $write) use ($value) {
+                            return $value->write($write);
+                        };
+                } elseif (is_resource($value)) {
+                    $options[CURLOPT_FILE] = $value;
+                } else {
+                    throw new \InvalidArgumentException('save_to must be a '
+                        . 'GuzzleHttp\Stream\StreamInterface or resource');
+                }
+                break;
+
+            case 'timeout':
+
+                if (defined('CURLOPT_TIMEOUT_MS')) {
+                    $options[CURLOPT_TIMEOUT_MS] = $value * 1000;
+                } else {
+                    $options[CURLOPT_TIMEOUT] = $value;
+                }
+                break;
+
+            case 'connect_timeout':
+
+                if (defined('CURLOPT_CONNECTTIMEOUT_MS')) {
+                    $options[CURLOPT_CONNECTTIMEOUT_MS] = $value * 1000;
+                } else {
+                    $options[CURLOPT_CONNECTTIMEOUT] = $value;
+                }
+                break;
+
+            case 'proxy':
+
+                if (!is_array($value)) {
+                    $options[CURLOPT_PROXY] = $value;
+                } elseif (isset($request['scheme'])) {
+                    $scheme = $request['scheme'];
+                    if (isset($value[$scheme])) {
+                        $options[CURLOPT_PROXY] = $value[$scheme];
+                    }
+                }
+                break;
+
+            case 'cert':
+
+                if (is_array($value)) {
+                    $options[CURLOPT_SSLCERTPASSWD] = $value[1];
+                    $value = $value[0];
+                }
+
+                if (!file_exists($value)) {
+                    throw new \InvalidArgumentException(
+                        "SSL certificate not found: {$value}"
+                    );
+                }
+
+                $options[CURLOPT_SSLCERT] = $value;
+                break;
+
+            case 'ssl_key':
+
+                if (is_array($value)) {
+                    $options[CURLOPT_SSLKEYPASSWD] = $value[1];
+                    $value = $value[0];
+                }
+
+                if (!file_exists($value)) {
+                    throw new \InvalidArgumentException(
+                        "SSL private key not found: {$value}"
+                    );
+                }
+
+                $options[CURLOPT_SSLKEY] = $value;
+                break;
+
+            case 'progress':
+
+                if (!is_callable($value)) {
+                    throw new \InvalidArgumentException(
+                        'progress client option must be callable'
+                    );
+                }
+
+                $options[CURLOPT_NOPROGRESS] = false;
+                $options[CURLOPT_PROGRESSFUNCTION] =
+                    function () use ($value) {
+                        $args = func_get_args();
+                        // PHP 5.5 pushed the handle onto the start of the args
+                        if (is_resource($args[0])) {
+                            array_shift($args);
+                        }
+                        call_user_func_array($value, $args);
+                    };
+                break;
+
+            case 'debug':
+
+                if ($value) {
+                    $options[CURLOPT_STDERR] = Core::getDebugResource($value);
+                    $options[CURLOPT_VERBOSE] = true;
+                }
+                break;
+            }
+        }
+    }
+
+    /**
+     * This function ensures that a response was set on a transaction. If one
+     * was not set, then the request is retried if possible. This error
+     * typically means you are sending a payload, curl encountered a
+     * "Connection died, retrying a fresh connect" error, tried to rewind the
+     * stream, and then encountered a "necessary data rewind wasn't possible"
+     * error, causing the request to be sent through curl_multi_info_read()
+     * without an error status.
+     */
+    private static function retryFailedRewind(
+        callable $handler,
+        array $request,
+        array $response
+    ) {
+        // If there is no body, then there is some other kind of issue. This
+        // is weird and should probably never happen.
+        if (!isset($request['body'])) {
+            $response['err_message'] = 'No response was received for a request '
+                . 'with no body. This could mean that you are saturating your '
+                . 'network.';
+            return self::createErrorResponse($handler, $request, $response);
+        }
+
+        if (!Core::rewindBody($request)) {
+            $response['err_message'] = 'The connection unexpectedly failed '
+                . 'without providing an error. The request would have been '
+                . 'retried, but attempting to rewind the request body failed.';
+            return self::createErrorResponse($handler, $request, $response);
+        }
+
+        // Retry no more than 3 times before giving up.
+        if (!isset($request['curl']['retries'])) {
+            $request['curl']['retries'] = 1;
+        } elseif ($request['curl']['retries'] == 2) {
+            $response['err_message'] = 'The cURL request was retried 3 times '
+                . 'and did no succeed. cURL was unable to rewind the body of '
+                . 'the request and subsequent retries resulted in the same '
+                . 'error. Turn on the debug option to see what went wrong. '
+                . 'See https://bugs.php.net/bug.php?id=47204 for more information.';
+            return self::createErrorResponse($handler, $request, $response);
+        } else {
+            $request['curl']['retries']++;
+        }
+
+        return $handler($request);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..e00aa4eaca31e6290985a1a788009758360fe999
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php
@@ -0,0 +1,135 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+use GuzzleHttp\Ring\Core;
+
+/**
+ * HTTP handler that uses cURL easy handles as a transport layer.
+ *
+ * Requires PHP 5.5+
+ *
+ * When using the CurlHandler, custom curl options can be specified as an
+ * associative array of curl option constants mapping to values in the
+ * **curl** key of the "client" key of the request.
+ */
+class CurlHandler
+{
+    /** @var callable */
+    private $factory;
+
+    /** @var array Array of curl easy handles */
+    private $handles = [];
+
+    /** @var array Array of owned curl easy handles */
+    private $ownedHandles = [];
+
+    /** @var int Total number of idle handles to keep in cache */
+    private $maxHandles;
+
+    /**
+     * Accepts an associative array of options:
+     *
+     * - factory: Optional callable factory used to create cURL handles.
+     *   The callable is passed a request hash when invoked, and returns an
+     *   array of the curl handle, headers resource, and body resource.
+     * - max_handles: Maximum number of idle handles (defaults to 5).
+     *
+     * @param array $options Array of options to use with the handler
+     */
+    public function __construct(array $options = [])
+    {
+        $this->handles = $this->ownedHandles = [];
+        $this->factory = isset($options['handle_factory'])
+            ? $options['handle_factory']
+            : new CurlFactory();
+        $this->maxHandles = isset($options['max_handles'])
+            ? $options['max_handles']
+            : 5;
+    }
+
+    public function __destruct()
+    {
+        foreach ($this->handles as $handle) {
+            if (is_resource($handle)) {
+                curl_close($handle);
+            }
+        }
+    }
+
+    /**
+     * @param array $request
+     *
+     * @return CompletedFutureArray
+     */
+    public function __invoke(array $request)
+    {
+        return new CompletedFutureArray(
+            $this->_invokeAsArray($request)
+        );
+    }
+
+    /**
+     * @internal
+     *
+     * @param array $request
+     *
+     * @return array
+     */
+    public function _invokeAsArray(array $request)
+    {
+        $factory = $this->factory;
+
+        // Ensure headers are by reference. They're updated elsewhere.
+        $result = $factory($request, $this->checkoutEasyHandle());
+        $h = $result[0];
+        $hd =& $result[1];
+        $bd = $result[2];
+        Core::doSleep($request);
+        curl_exec($h);
+        $response = ['transfer_stats' => curl_getinfo($h)];
+        $response['curl']['error'] = curl_error($h);
+        $response['curl']['errno'] = curl_errno($h);
+        $response['transfer_stats'] = array_merge($response['transfer_stats'], $response['curl']);
+        $this->releaseEasyHandle($h);
+
+        return CurlFactory::createResponse([$this, '_invokeAsArray'], $request, $response, $hd, $bd);
+    }
+
+    private function checkoutEasyHandle()
+    {
+        // Find an unused handle in the cache
+        if (false !== ($key = array_search(false, $this->ownedHandles, true))) {
+            $this->ownedHandles[$key] = true;
+            return $this->handles[$key];
+        }
+
+        // Add a new handle
+        $handle = curl_init();
+        $id = (int) $handle;
+        $this->handles[$id] = $handle;
+        $this->ownedHandles[$id] = true;
+
+        return $handle;
+    }
+
+    private function releaseEasyHandle($handle)
+    {
+        $id = (int) $handle;
+        if (count($this->ownedHandles) > $this->maxHandles) {
+            curl_close($this->handles[$id]);
+            unset($this->handles[$id], $this->ownedHandles[$id]);
+        } else {
+            // curl_reset doesn't clear these out for some reason
+            static $unsetValues = [
+                CURLOPT_HEADERFUNCTION   => null,
+                CURLOPT_WRITEFUNCTION    => null,
+                CURLOPT_READFUNCTION     => null,
+                CURLOPT_PROGRESSFUNCTION => null,
+            ];
+            curl_setopt_array($handle, $unsetValues);
+            curl_reset($handle);
+            $this->ownedHandles[$id] = false;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..b45f6c3979a9db53e2aeb153ed3df1388c74b676
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php
@@ -0,0 +1,250 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Future\FutureArray;
+use React\Promise\Deferred;
+
+/**
+ * Returns an asynchronous response using curl_multi_* functions.
+ *
+ * This handler supports future responses and the "delay" request client
+ * option that can be used to delay before sending a request.
+ *
+ * When using the CurlMultiHandler, custom curl options can be specified as an
+ * associative array of curl option constants mapping to values in the
+ * **curl** key of the "client" key of the request.
+ *
+ * @property resource $_mh Internal use only. Lazy loaded multi-handle.
+ */
+class CurlMultiHandler
+{
+    /** @var callable */
+    private $factory;
+    private $selectTimeout;
+    private $active;
+    private $handles = [];
+    private $delays = [];
+    private $maxHandles;
+
+    /**
+     * This handler accepts the following options:
+     *
+     * - mh: An optional curl_multi resource
+     * - handle_factory: An optional callable used to generate curl handle
+     *   resources. the callable accepts a request hash and returns an array
+     *   of the handle, headers file resource, and the body resource.
+     * - select_timeout: Optional timeout (in seconds) to block before timing
+     *   out while selecting curl handles. Defaults to 1 second.
+     * - max_handles: Optional integer representing the maximum number of
+     *   open requests. When this number is reached, the queued futures are
+     *   flushed.
+     *
+     * @param array $options
+     */
+    public function __construct(array $options = [])
+    {
+        if (isset($options['mh'])) {
+            $this->_mh = $options['mh'];
+        }
+        $this->factory = isset($options['handle_factory'])
+            ? $options['handle_factory'] : new CurlFactory();
+        $this->selectTimeout = isset($options['select_timeout'])
+            ? $options['select_timeout'] : 1;
+        $this->maxHandles = isset($options['max_handles'])
+            ? $options['max_handles'] : 100;
+    }
+
+    public function __get($name)
+    {
+        if ($name === '_mh') {
+            return $this->_mh = curl_multi_init();
+        }
+
+        throw new \BadMethodCallException();
+    }
+
+    public function __destruct()
+    {
+        // Finish any open connections before terminating the script.
+        if ($this->handles) {
+            $this->execute();
+        }
+
+        if (isset($this->_mh)) {
+            curl_multi_close($this->_mh);
+            unset($this->_mh);
+        }
+    }
+
+    public function __invoke(array $request)
+    {
+        $factory = $this->factory;
+        $result = $factory($request);
+        $entry = [
+            'request'  => $request,
+            'response' => [],
+            'handle'   => $result[0],
+            'headers'  => &$result[1],
+            'body'     => $result[2],
+            'deferred' => new Deferred(),
+        ];
+
+        $id = (int) $result[0];
+
+        $future = new FutureArray(
+            $entry['deferred']->promise(),
+            [$this, 'execute'],
+            function () use ($id) {
+                return $this->cancel($id);
+            }
+        );
+
+        $this->addRequest($entry);
+
+        // Transfer outstanding requests if there are too many open handles.
+        if (count($this->handles) >= $this->maxHandles) {
+            $this->execute();
+        }
+
+        return $future;
+    }
+
+    /**
+     * Runs until all outstanding connections have completed.
+     */
+    public function execute()
+    {
+        do {
+
+            if ($this->active &&
+                curl_multi_select($this->_mh, $this->selectTimeout) === -1
+            ) {
+                // Perform a usleep if a select returns -1.
+                // See: https://bugs.php.net/bug.php?id=61141
+                usleep(250);
+            }
+
+            // Add any delayed futures if needed.
+            if ($this->delays) {
+                $this->addDelays();
+            }
+
+            do {
+                $mrc = curl_multi_exec($this->_mh, $this->active);
+            } while ($mrc === CURLM_CALL_MULTI_PERFORM);
+
+            $this->processMessages();
+
+            // If there are delays but no transfers, then sleep for a bit.
+            if (!$this->active && $this->delays) {
+                usleep(500);
+            }
+
+        } while ($this->active || $this->handles);
+    }
+
+    private function addRequest(array &$entry)
+    {
+        $id = (int) $entry['handle'];
+        $this->handles[$id] = $entry;
+
+        // If the request is a delay, then add the reques to the curl multi
+        // pool only after the specified delay.
+        if (isset($entry['request']['client']['delay'])) {
+            $this->delays[$id] = microtime(true) + ($entry['request']['client']['delay'] / 1000);
+        } elseif (empty($entry['request']['future'])) {
+            curl_multi_add_handle($this->_mh, $entry['handle']);
+        } else {
+            curl_multi_add_handle($this->_mh, $entry['handle']);
+            // "lazy" futures are only sent once the pool has many requests.
+            if ($entry['request']['future'] !== 'lazy') {
+                do {
+                    $mrc = curl_multi_exec($this->_mh, $this->active);
+                } while ($mrc === CURLM_CALL_MULTI_PERFORM);
+                $this->processMessages();
+            }
+        }
+    }
+
+    private function removeProcessed($id)
+    {
+        if (isset($this->handles[$id])) {
+            curl_multi_remove_handle(
+                $this->_mh,
+                $this->handles[$id]['handle']
+            );
+            curl_close($this->handles[$id]['handle']);
+            unset($this->handles[$id], $this->delays[$id]);
+        }
+    }
+
+    /**
+     * Cancels a handle from sending and removes references to it.
+     *
+     * @param int $id Handle ID to cancel and remove.
+     *
+     * @return bool True on success, false on failure.
+     */
+    private function cancel($id)
+    {
+        // Cannot cancel if it has been processed.
+        if (!isset($this->handles[$id])) {
+            return false;
+        }
+
+        $handle = $this->handles[$id]['handle'];
+        unset($this->delays[$id], $this->handles[$id]);
+        curl_multi_remove_handle($this->_mh, $handle);
+        curl_close($handle);
+
+        return true;
+    }
+
+    private function addDelays()
+    {
+        $currentTime = microtime(true);
+
+        foreach ($this->delays as $id => $delay) {
+            if ($currentTime >= $delay) {
+                unset($this->delays[$id]);
+                curl_multi_add_handle(
+                    $this->_mh,
+                    $this->handles[$id]['handle']
+                );
+            }
+        }
+    }
+
+    private function processMessages()
+    {
+        while ($done = curl_multi_info_read($this->_mh)) {
+            $id = (int) $done['handle'];
+
+            if (!isset($this->handles[$id])) {
+                // Probably was cancelled.
+                continue;
+            }
+
+            $entry = $this->handles[$id];
+            $entry['response']['transfer_stats'] = curl_getinfo($done['handle']);
+
+            if ($done['result'] !== CURLM_OK) {
+                $entry['response']['curl']['errno'] = $done['result'];
+                if (function_exists('curl_strerror')) {
+                    $entry['response']['curl']['error'] = curl_strerror($done['result']);
+                }
+            }
+
+            $result = CurlFactory::createResponse(
+                $this,
+                $entry['request'],
+                $entry['response'],
+                $entry['headers'],
+                $entry['body']
+            );
+
+            $this->removeProcessed($id);
+            $entry['deferred']->resolve($result);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/Middleware.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/Middleware.php
new file mode 100644
index 0000000000000000000000000000000000000000..6fa7318abae26d673d91626243f9ff0e43c443b7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/Middleware.php
@@ -0,0 +1,58 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+/**
+ * Provides basic middleware wrappers.
+ *
+ * If a middleware is more complex than a few lines of code, then it should
+ * be implemented in a class rather than a static method.
+ */
+class Middleware
+{
+    /**
+     * Sends future requests to a future compatible handler while sending all
+     * other requests to a default handler.
+     *
+     * When the "future" option is not provided on a request, any future responses
+     * are automatically converted to synchronous responses and block.
+     *
+     * @param callable $default Handler used for non-streaming responses
+     * @param callable $future  Handler used for future responses
+     *
+     * @return callable Returns the composed handler.
+     */
+    public static function wrapFuture(
+        callable $default,
+        callable $future
+    ) {
+        return function (array $request) use ($default, $future) {
+            return empty($request['client']['future'])
+                ? $default($request)
+                : $future($request);
+        };
+    }
+
+    /**
+     * Sends streaming requests to a streaming compatible handler while sendin
+     * all other requests to a default handler.
+     *
+     * This, for example, could be useful for taking advantage of the
+     * performance benefits of curl while still supporting true streaming
+     * through the StreamHandler.
+     *
+     * @param callable $default   Handler used for non-streaming responses
+     * @param callable $streaming Handler used for streaming responses
+     *
+     * @return callable Returns the composed handler.
+     */
+    public static function wrapStreaming(
+        callable $default,
+        callable $streaming
+    ) {
+        return function (array $request) use ($default, $streaming) {
+            return empty($request['client']['stream'])
+                ? $default($request)
+                : $streaming($request);
+        };
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..56cc32da77f4b7fca6dc433709355b3d112aa38e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/MockHandler.php
@@ -0,0 +1,52 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+use GuzzleHttp\Ring\Future\FutureArrayInterface;
+
+/**
+ * Ring handler that returns a canned response or evaluated function result.
+ */
+class MockHandler
+{
+    /** @var callable|array|FutureArrayInterface */
+    private $result;
+
+    /**
+     * Provide an array or future to always return the same value. Provide a
+     * callable that accepts a request object and returns an array or future
+     * to dynamically create a response.
+     *
+     * @param array|FutureArrayInterface|callable $result Mock return value.
+     */
+    public function __construct($result)
+    {
+        $this->result = $result;
+    }
+
+    public function __invoke(array $request)
+    {
+        Core::doSleep($request);
+        $response = is_callable($this->result)
+            ? call_user_func($this->result, $request)
+            : $this->result;
+
+        if (is_array($response)) {
+            $response = new CompletedFutureArray($response + [
+                'status'        => null,
+                'body'          => null,
+                'headers'       => [],
+                'reason'        => null,
+                'effective_url' => null,
+            ]);
+        } elseif (!$response instanceof FutureArrayInterface) {
+            throw new \InvalidArgumentException(
+                'Response must be an array or FutureArrayInterface. Found '
+                . Core::describeType($request)
+            );
+        }
+
+        return $response;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..4bacec133714a94debc940e9a74591964bfe46b7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php
@@ -0,0 +1,414 @@
+<?php
+namespace GuzzleHttp\Ring\Client;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Exception\ConnectException;
+use GuzzleHttp\Ring\Exception\RingException;
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+use GuzzleHttp\Stream\InflateStream;
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\Utils;
+
+/**
+ * RingPHP client handler that uses PHP's HTTP stream wrapper.
+ */
+class StreamHandler
+{
+    private $options;
+    private $lastHeaders;
+
+    public function __construct(array $options = [])
+    {
+        $this->options = $options;
+    }
+
+    public function __invoke(array $request)
+    {
+        $url = Core::url($request);
+        Core::doSleep($request);
+
+        try {
+            // Does not support the expect header.
+            $request = Core::removeHeader($request, 'Expect');
+            $stream = $this->createStream($url, $request);
+            return $this->createResponse($request, $url, $stream);
+        } catch (RingException $e) {
+            return $this->createErrorResponse($url, $e);
+        }
+    }
+
+    private function createResponse(array $request, $url, $stream)
+    {
+        $hdrs = $this->lastHeaders;
+        $this->lastHeaders = null;
+        $parts = explode(' ', array_shift($hdrs), 3);
+        $response = [
+            'version'        => substr($parts[0], 5),
+            'status'         => $parts[1],
+            'reason'         => isset($parts[2]) ? $parts[2] : null,
+            'headers'        => Core::headersFromLines($hdrs),
+            'effective_url'  => $url,
+        ];
+
+        $stream = $this->checkDecode($request, $response, $stream);
+
+        // If not streaming, then drain the response into a stream.
+        if (empty($request['client']['stream'])) {
+            $dest = isset($request['client']['save_to'])
+                ? $request['client']['save_to']
+                : fopen('php://temp', 'r+');
+            $stream = $this->drain($stream, $dest);
+        }
+
+        $response['body'] = $stream;
+
+        return new CompletedFutureArray($response);
+    }
+
+    private function checkDecode(array $request, array $response, $stream)
+    {
+        // Automatically decode responses when instructed.
+        if (!empty($request['client']['decode_content'])) {
+            switch (Core::firstHeader($response, 'Content-Encoding', true)) {
+                case 'gzip':
+                case 'deflate':
+                    $stream = new InflateStream(Stream::factory($stream));
+                    break;
+            }
+        }
+
+        return $stream;
+    }
+
+    /**
+     * Drains the stream into the "save_to" client option.
+     *
+     * @param resource                        $stream
+     * @param string|resource|StreamInterface $dest
+     *
+     * @return Stream
+     * @throws \RuntimeException when the save_to option is invalid.
+     */
+    private function drain($stream, $dest)
+    {
+        if (is_resource($stream)) {
+            if (!is_resource($dest)) {
+                $stream = Stream::factory($stream);
+            } else {
+                stream_copy_to_stream($stream, $dest);
+                fclose($stream);
+                rewind($dest);
+                return $dest;
+            }
+        }
+
+        // Stream the response into the destination stream
+        $dest = is_string($dest)
+            ? new Stream(Utils::open($dest, 'r+'))
+            : Stream::factory($dest);
+
+        Utils::copyToStream($stream, $dest);
+        $dest->seek(0);
+        $stream->close();
+
+        return $dest;
+    }
+
+    /**
+     * Creates an error response for the given stream.
+     *
+     * @param string        $url
+     * @param RingException $e
+     *
+     * @return array
+     */
+    private function createErrorResponse($url, RingException $e)
+    {
+        // Determine if the error was a networking error.
+        $message = $e->getMessage();
+
+        // This list can probably get more comprehensive.
+        if (strpos($message, 'getaddrinfo') // DNS lookup failed
+            || strpos($message, 'Connection refused')
+        ) {
+            $e = new ConnectException($e->getMessage(), 0, $e);
+        }
+
+        return new CompletedFutureArray([
+            'status'        => null,
+            'body'          => null,
+            'headers'       => [],
+            'effective_url' => $url,
+            'error'         => $e
+        ]);
+    }
+
+    /**
+     * Create a resource and check to ensure it was created successfully
+     *
+     * @param callable $callback Callable that returns stream resource
+     *
+     * @return resource
+     * @throws \RuntimeException on error
+     */
+    private function createResource(callable $callback)
+    {
+        $errors = null;
+        set_error_handler(function ($_, $msg, $file, $line) use (&$errors) {
+            $errors[] = [
+                'message' => $msg,
+                'file'    => $file,
+                'line'    => $line
+            ];
+            return true;
+        });
+
+        $resource = $callback();
+        restore_error_handler();
+
+        if (!$resource) {
+            $message = 'Error creating resource: ';
+            foreach ($errors as $err) {
+                foreach ($err as $key => $value) {
+                    $message .= "[$key] $value" . PHP_EOL;
+                }
+            }
+            throw new RingException(trim($message));
+        }
+
+        return $resource;
+    }
+
+    private function createStream($url, array $request)
+    {
+        static $methods;
+        if (!$methods) {
+            $methods = array_flip(get_class_methods(__CLASS__));
+        }
+
+        // HTTP/1.1 streams using the PHP stream wrapper require a
+        // Connection: close header
+        if ((!isset($request['version']) || $request['version'] == '1.1')
+            && !Core::hasHeader($request, 'Connection')
+        ) {
+            $request['headers']['Connection'] = ['close'];
+        }
+
+        // Ensure SSL is verified by default
+        if (!isset($request['client']['verify'])) {
+            $request['client']['verify'] = true;
+        }
+
+        $params = [];
+        $options = $this->getDefaultOptions($request);
+
+        if (isset($request['client'])) {
+            foreach ($request['client'] as $key => $value) {
+                $method = "add_{$key}";
+                if (isset($methods[$method])) {
+                    $this->{$method}($request, $options, $value, $params);
+                }
+            }
+        }
+
+        return $this->createStreamResource(
+            $url,
+            $request,
+            $options,
+            $this->createContext($request, $options, $params)
+        );
+    }
+
+    private function getDefaultOptions(array $request)
+    {
+        $headers = "";
+        foreach ($request['headers'] as $name => $value) {
+            foreach ((array) $value as $val) {
+                $headers .= "$name: $val\r\n";
+            }
+        }
+
+        $context = [
+            'http' => [
+                'method'           => $request['http_method'],
+                'header'           => $headers,
+                'protocol_version' => isset($request['version']) ? $request['version'] : 1.1,
+                'ignore_errors'    => true,
+                'follow_location'  => 0,
+            ],
+        ];
+
+        $body = Core::body($request);
+        if (isset($body)) {
+            $context['http']['content'] = $body;
+            // Prevent the HTTP handler from adding a Content-Type header.
+            if (!Core::hasHeader($request, 'Content-Type')) {
+                $context['http']['header'] .= "Content-Type:\r\n";
+            }
+        }
+
+        $context['http']['header'] = rtrim($context['http']['header']);
+
+        return $context;
+    }
+
+    private function add_proxy(array $request, &$options, $value, &$params)
+    {
+        if (!is_array($value)) {
+            $options['http']['proxy'] = $value;
+        } else {
+            $scheme = isset($request['scheme']) ? $request['scheme'] : 'http';
+            if (isset($value[$scheme])) {
+                $options['http']['proxy'] = $value[$scheme];
+            }
+        }
+    }
+
+    private function add_timeout(array $request, &$options, $value, &$params)
+    {
+        $options['http']['timeout'] = $value;
+    }
+
+    private function add_verify(array $request, &$options, $value, &$params)
+    {
+        if ($value === true) {
+            // PHP 5.6 or greater will find the system cert by default. When
+            // < 5.6, use the Guzzle bundled cacert.
+            if (PHP_VERSION_ID < 50600) {
+                $options['ssl']['cafile'] = ClientUtils::getDefaultCaBundle();
+            }
+        } elseif (is_string($value)) {
+            $options['ssl']['cafile'] = $value;
+            if (!file_exists($value)) {
+                throw new RingException("SSL CA bundle not found: $value");
+            }
+        } elseif ($value === false) {
+            $options['ssl']['verify_peer'] = false;
+            $options['ssl']['allow_self_signed'] = true;
+            return;
+        } else {
+            throw new RingException('Invalid verify request option');
+        }
+
+        $options['ssl']['verify_peer'] = true;
+        $options['ssl']['allow_self_signed'] = false;
+    }
+
+    private function add_cert(array $request, &$options, $value, &$params)
+    {
+        if (is_array($value)) {
+            $options['ssl']['passphrase'] = $value[1];
+            $value = $value[0];
+        }
+
+        if (!file_exists($value)) {
+            throw new RingException("SSL certificate not found: {$value}");
+        }
+
+        $options['ssl']['local_cert'] = $value;
+    }
+
+    private function add_progress(array $request, &$options, $value, &$params)
+    {
+        $fn = function ($code, $_1, $_2, $_3, $transferred, $total) use ($value) {
+            if ($code == STREAM_NOTIFY_PROGRESS) {
+                $value($total, $transferred, null, null);
+            }
+        };
+
+        // Wrap the existing function if needed.
+        $params['notification'] = isset($params['notification'])
+            ? Core::callArray([$params['notification'], $fn])
+            : $fn;
+    }
+
+    private function add_debug(array $request, &$options, $value, &$params)
+    {
+        if ($value === false) {
+            return;
+        }
+
+        static $map = [
+            STREAM_NOTIFY_CONNECT       => 'CONNECT',
+            STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
+            STREAM_NOTIFY_AUTH_RESULT   => 'AUTH_RESULT',
+            STREAM_NOTIFY_MIME_TYPE_IS  => 'MIME_TYPE_IS',
+            STREAM_NOTIFY_FILE_SIZE_IS  => 'FILE_SIZE_IS',
+            STREAM_NOTIFY_REDIRECTED    => 'REDIRECTED',
+            STREAM_NOTIFY_PROGRESS      => 'PROGRESS',
+            STREAM_NOTIFY_FAILURE       => 'FAILURE',
+            STREAM_NOTIFY_COMPLETED     => 'COMPLETED',
+            STREAM_NOTIFY_RESOLVE       => 'RESOLVE',
+        ];
+
+        static $args = ['severity', 'message', 'message_code',
+            'bytes_transferred', 'bytes_max'];
+
+        $value = Core::getDebugResource($value);
+        $ident = $request['http_method'] . ' ' . Core::url($request);
+        $fn = function () use ($ident, $value, $map, $args) {
+            $passed = func_get_args();
+            $code = array_shift($passed);
+            fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
+            foreach (array_filter($passed) as $i => $v) {
+                fwrite($value, $args[$i] . ': "' . $v . '" ');
+            }
+            fwrite($value, "\n");
+        };
+
+        // Wrap the existing function if needed.
+        $params['notification'] = isset($params['notification'])
+            ? Core::callArray([$params['notification'], $fn])
+            : $fn;
+    }
+
+    private function applyCustomOptions(array $request, array &$options)
+    {
+        if (!isset($request['client']['stream_context'])) {
+            return;
+        }
+
+        if (!is_array($request['client']['stream_context'])) {
+            throw new RingException('stream_context must be an array');
+        }
+
+        $options = array_replace_recursive(
+            $options,
+            $request['client']['stream_context']
+        );
+    }
+
+    private function createContext(array $request, array $options, array $params)
+    {
+        $this->applyCustomOptions($request, $options);
+        return $this->createResource(
+            function () use ($request, $options, $params) {
+                return stream_context_create($options, $params);
+            },
+            $request,
+            $options
+        );
+    }
+
+    private function createStreamResource(
+        $url,
+        array $request,
+        array $options,
+        $context
+    ) {
+        return $this->createResource(
+            function () use ($url, $context) {
+                if (false === strpos($url, 'http')) {
+                    trigger_error("URL is invalid: {$url}", E_USER_WARNING);
+                    return null;
+                }
+                $resource = fopen($url, 'r', null, $context);
+                $this->lastHeaders = $http_response_header;
+                return $resource;
+            },
+            $request,
+            $options
+        );
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Core.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Core.php
new file mode 100644
index 0000000000000000000000000000000000000000..dd7d1a0c5a7f6ccab0e496e8774358aed785556f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Core.php
@@ -0,0 +1,364 @@
+<?php
+namespace GuzzleHttp\Ring;
+
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Ring\Future\FutureArrayInterface;
+use GuzzleHttp\Ring\Future\FutureArray;
+
+/**
+ * Provides core functionality of Ring handlers and middleware.
+ */
+class Core
+{
+    /**
+     * Returns a function that calls all of the provided functions, in order,
+     * passing the arguments provided to the composed function to each function.
+     *
+     * @param callable[] $functions Array of functions to proxy to.
+     *
+     * @return callable
+     */
+    public static function callArray(array $functions)
+    {
+        return function () use ($functions) {
+            $args = func_get_args();
+            foreach ($functions as $fn) {
+                call_user_func_array($fn, $args);
+            }
+        };
+    }
+
+    /**
+     * Gets an array of header line values from a message for a specific header
+     *
+     * This method searches through the "headers" key of a message for a header
+     * using a case-insensitive search.
+     *
+     * @param array  $message Request or response hash.
+     * @param string $header  Header to retrieve
+     *
+     * @return array
+     */
+    public static function headerLines($message, $header)
+    {
+        $result = [];
+
+        if (!empty($message['headers'])) {
+            foreach ($message['headers'] as $name => $value) {
+                if (!strcasecmp($name, $header)) {
+                    $result = array_merge($result, $value);
+                }
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Gets a header value from a message as a string or null
+     *
+     * This method searches through the "headers" key of a message for a header
+     * using a case-insensitive search. The lines of the header are imploded
+     * using commas into a single string return value.
+     *
+     * @param array  $message Request or response hash.
+     * @param string $header  Header to retrieve
+     *
+     * @return string|null Returns the header string if found, or null if not.
+     */
+    public static function header($message, $header)
+    {
+        $match = self::headerLines($message, $header);
+        return $match ? implode(', ', $match) : null;
+    }
+
+    /**
+     * Returns the first header value from a message as a string or null. If
+     * a header line contains multiple values separated by a comma, then this
+     * function will return the first value in the list.
+     *
+     * @param array  $message Request or response hash.
+     * @param string $header  Header to retrieve
+     *
+     * @return string|null Returns the value as a string if found.
+     */
+    public static function firstHeader($message, $header)
+    {
+        if (!empty($message['headers'])) {
+            foreach ($message['headers'] as $name => $value) {
+                if (!strcasecmp($name, $header)) {
+                    // Return the match itself if it is a single value.
+                    $pos = strpos($value[0], ',');
+                    return $pos ? substr($value[0], 0, $pos) : $value[0];
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns true if a message has the provided case-insensitive header.
+     *
+     * @param array  $message Request or response hash.
+     * @param string $header  Header to check
+     *
+     * @return bool
+     */
+    public static function hasHeader($message, $header)
+    {
+        if (!empty($message['headers'])) {
+            foreach ($message['headers'] as $name => $value) {
+                if (!strcasecmp($name, $header)) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Parses an array of header lines into an associative array of headers.
+     *
+     * @param array $lines Header lines array of strings in the following
+     *                     format: "Name: Value"
+     * @return array
+     */
+    public static function headersFromLines($lines)
+    {
+        $headers = [];
+
+        foreach ($lines as $line) {
+            $parts = explode(':', $line, 2);
+            $headers[trim($parts[0])][] = isset($parts[1])
+                ? trim($parts[1])
+                : null;
+        }
+
+        return $headers;
+    }
+
+    /**
+     * Removes a header from a message using a case-insensitive comparison.
+     *
+     * @param array  $message Message that contains 'headers'
+     * @param string $header  Header to remove
+     *
+     * @return array
+     */
+    public static function removeHeader(array $message, $header)
+    {
+        if (isset($message['headers'])) {
+            foreach (array_keys($message['headers']) as $key) {
+                if (!strcasecmp($header, $key)) {
+                    unset($message['headers'][$key]);
+                }
+            }
+        }
+
+        return $message;
+    }
+
+    /**
+     * Replaces any existing case insensitive headers with the given value.
+     *
+     * @param array  $message Message that contains 'headers'
+     * @param string $header  Header to set.
+     * @param array  $value   Value to set.
+     *
+     * @return array
+     */
+    public static function setHeader(array $message, $header, array $value)
+    {
+        $message = self::removeHeader($message, $header);
+        $message['headers'][$header] = $value;
+
+        return $message;
+    }
+
+    /**
+     * Creates a URL string from a request.
+     *
+     * If the "url" key is present on the request, it is returned, otherwise
+     * the url is built up based on the scheme, host, uri, and query_string
+     * request values.
+     *
+     * @param array $request Request to get the URL from
+     *
+     * @return string Returns the request URL as a string.
+     * @throws \InvalidArgumentException if no Host header is present.
+     */
+    public static function url(array $request)
+    {
+        if (isset($request['url'])) {
+            return $request['url'];
+        }
+
+        $uri = (isset($request['scheme'])
+                ? $request['scheme'] : 'http') . '://';
+
+        if ($host = self::header($request, 'host')) {
+            $uri .= $host;
+        } else {
+            throw new \InvalidArgumentException('No Host header was provided');
+        }
+
+        if (isset($request['uri'])) {
+            $uri .= $request['uri'];
+        }
+
+        if (isset($request['query_string'])) {
+            $uri .= '?' . $request['query_string'];
+        }
+
+        return $uri;
+    }
+
+    /**
+     * Reads the body of a message into a string.
+     *
+     * @param array|FutureArrayInterface $message Array containing a "body" key
+     *
+     * @return null|string Returns the body as a string or null if not set.
+     * @throws \InvalidArgumentException if a request body is invalid.
+     */
+    public static function body($message)
+    {
+        if (!isset($message['body'])) {
+            return null;
+        }
+
+        if ($message['body'] instanceof StreamInterface) {
+            return (string) $message['body'];
+        }
+
+        switch (gettype($message['body'])) {
+            case 'string':
+                return $message['body'];
+            case 'resource':
+                return stream_get_contents($message['body']);
+            case 'object':
+                if ($message['body'] instanceof \Iterator) {
+                    return implode('', iterator_to_array($message['body']));
+                } elseif (method_exists($message['body'], '__toString')) {
+                    return (string) $message['body'];
+                }
+            default:
+                throw new \InvalidArgumentException('Invalid request body: '
+                    . self::describeType($message['body']));
+        }
+    }
+
+    /**
+     * Rewind the body of the provided message if possible.
+     *
+     * @param array $message Message that contains a 'body' field.
+     *
+     * @return bool Returns true on success, false on failure
+     */
+    public static function rewindBody($message)
+    {
+        if ($message['body'] instanceof StreamInterface) {
+            return $message['body']->seek(0);
+        }
+
+        if ($message['body'] instanceof \Generator) {
+            return false;
+        }
+
+        if ($message['body'] instanceof \Iterator) {
+            $message['body']->rewind();
+            return true;
+        }
+
+        if (is_resource($message['body'])) {
+            return rewind($message['body']);
+        }
+
+        return is_string($message['body'])
+            || (is_object($message['body'])
+                && method_exists($message['body'], '__toString'));
+    }
+
+    /**
+     * Debug function used to describe the provided value type and class.
+     *
+     * @param mixed $input
+     *
+     * @return string Returns a string containing the type of the variable and
+     *                if a class is provided, the class name.
+     */
+    public static function describeType($input)
+    {
+        switch (gettype($input)) {
+            case 'object':
+                return 'object(' . get_class($input) . ')';
+            case 'array':
+                return 'array(' . count($input) . ')';
+            default:
+                ob_start();
+                var_dump($input);
+                // normalize float vs double
+                return str_replace('double(', 'float(', rtrim(ob_get_clean()));
+        }
+    }
+
+    /**
+     * Sleep for the specified amount of time specified in the request's
+     * ['client']['delay'] option if present.
+     *
+     * This function should only be used when a non-blocking sleep is not
+     * possible.
+     *
+     * @param array $request Request to sleep
+     */
+    public static function doSleep(array $request)
+    {
+        if (isset($request['client']['delay'])) {
+            usleep($request['client']['delay'] * 1000);
+        }
+    }
+
+    /**
+     * Returns a proxied future that modifies the dereferenced value of another
+     * future using a promise.
+     *
+     * @param FutureArrayInterface $future      Future to wrap with a new future
+     * @param callable    $onFulfilled Invoked when the future fulfilled
+     * @param callable    $onRejected  Invoked when the future rejected
+     * @param callable    $onProgress  Invoked when the future progresses
+     *
+     * @return FutureArray
+     */
+    public static function proxy(
+        FutureArrayInterface $future,
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    ) {
+        return new FutureArray(
+            $future->then($onFulfilled, $onRejected, $onProgress),
+            [$future, 'wait'],
+            [$future, 'cancel']
+        );
+    }
+
+    /**
+     * Returns a debug stream based on the provided variable.
+     *
+     * @param mixed $value Optional value
+     *
+     * @return resource
+     */
+    public static function getDebugResource($value = null)
+    {
+        if (is_resource($value)) {
+            return $value;
+        } elseif (defined('STDOUT')) {
+            return STDOUT;
+        } else {
+            return fopen('php://output', 'w');
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php
new file mode 100644
index 0000000000000000000000000000000000000000..95b353acfde5f628daeb4ad3c50e48ebecc14a66
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/CancelledException.php
@@ -0,0 +1,7 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+/**
+ * Marker interface for cancelled exceptions.
+ */
+interface CancelledException {}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php
new file mode 100644
index 0000000000000000000000000000000000000000..4a14574df886c8937beb046709ae62f33e41542e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+class CancelledFutureAccessException extends RingException implements CancelledException {}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php
new file mode 100644
index 0000000000000000000000000000000000000000..925cd133c83936dda16351881afebafd03ba6ae3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/ConnectException.php
@@ -0,0 +1,7 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+/**
+ * Occurs when the connection failed.
+ */
+class ConnectException extends RingException {}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/RingException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/RingException.php
new file mode 100644
index 0000000000000000000000000000000000000000..eed0daf7dd097bc3c5c7b517194fc08fbc2a1c50
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Exception/RingException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Ring\Exception;
+
+class RingException extends \RuntimeException {};
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6a7ca77c3d9f406006ff2bbbc7849aeb78fde48
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php
@@ -0,0 +1,125 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+use GuzzleHttp\Ring\Exception\RingException;
+use React\Promise\PromiseInterface;
+
+/**
+ * Implements common future functionality built on top of promises.
+ */
+trait BaseFutureTrait
+{
+    /** @var callable */
+    private $waitfn;
+
+    /** @var callable */
+    private $cancelfn;
+
+    /** @var PromiseInterface */
+    private $wrappedPromise;
+
+    /** @var \Exception Error encountered. */
+    private $error;
+
+    /** @var mixed Result of the future */
+    private $result;
+
+    private $isRealized = false;
+
+    /**
+     * @param PromiseInterface $promise Promise to shadow with the future.
+     * @param callable         $wait    Function that blocks until the deferred
+     *                                  computation has been resolved. This
+     *                                  function MUST resolve the deferred value
+     *                                  associated with the supplied promise.
+     * @param callable         $cancel  If possible and reasonable, provide a
+     *                                  function that can be used to cancel the
+     *                                  future from completing.
+     */
+    public function __construct(
+        PromiseInterface $promise,
+        callable $wait = null,
+        callable $cancel = null
+    ) {
+        $this->wrappedPromise = $promise;
+        $this->waitfn = $wait;
+        $this->cancelfn = $cancel;
+    }
+
+    public function wait()
+    {
+        if (!$this->isRealized) {
+            $this->addShadow();
+            if (!$this->isRealized && $this->waitfn) {
+                $this->invokeWait();
+            }
+            if (!$this->isRealized) {
+                $this->error = new RingException('Waiting did not resolve future');
+            }
+        }
+
+        if ($this->error) {
+            throw $this->error;
+        }
+
+        return $this->result;
+    }
+
+    public function promise()
+    {
+        return $this->wrappedPromise;
+    }
+
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    ) {
+        return $this->wrappedPromise->then($onFulfilled, $onRejected, $onProgress);
+    }
+
+    public function cancel()
+    {
+        if (!$this->isRealized) {
+            $cancelfn = $this->cancelfn;
+            $this->waitfn = $this->cancelfn = null;
+            $this->isRealized = true;
+            $this->error = new CancelledFutureAccessException();
+            if ($cancelfn) {
+                $cancelfn($this);
+            }
+        }
+    }
+
+    private function addShadow()
+    {
+        // Get the result and error when the promise is resolved. Note that
+        // calling this function might trigger the resolution immediately.
+        $this->wrappedPromise->then(
+            function ($value) {
+                $this->isRealized = true;
+                $this->result = $value;
+                $this->waitfn = $this->cancelfn = null;
+            },
+            function ($error) {
+                $this->isRealized = true;
+                $this->error = $error;
+                $this->waitfn = $this->cancelfn = null;
+            }
+        );
+    }
+
+    private function invokeWait()
+    {
+        try {
+            $wait = $this->waitfn;
+            $this->waitfn = null;
+            $wait();
+        } catch (\Exception $e) {
+            // Defer can throw to reject.
+            $this->error = $e;
+            $this->isRealized = true;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php
new file mode 100644
index 0000000000000000000000000000000000000000..0a90c939f7b981155089dbc4e7fa437310ba5efd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php
@@ -0,0 +1,43 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Represents a future array that has been completed successfully.
+ */
+class CompletedFutureArray extends CompletedFutureValue implements FutureArrayInterface
+{
+    public function __construct(array $result)
+    {
+        parent::__construct($result);
+    }
+
+    public function offsetExists($offset)
+    {
+        return isset($this->result[$offset]);
+    }
+
+    public function offsetGet($offset)
+    {
+        return $this->result[$offset];
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        $this->result[$offset] = $value;
+    }
+
+    public function offsetUnset($offset)
+    {
+        unset($this->result[$offset]);
+    }
+
+    public function count()
+    {
+        return count($this->result);
+    }
+
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->result);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d25af72d4d8d37e119065a1da30b0d8132a5a91
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php
@@ -0,0 +1,57 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+use React\Promise\FulfilledPromise;
+use React\Promise\RejectedPromise;
+
+/**
+ * Represents a future value that has been resolved or rejected.
+ */
+class CompletedFutureValue implements FutureInterface
+{
+    protected $result;
+    protected $error;
+
+    private $cachedPromise;
+
+    /**
+     * @param mixed      $result Resolved result
+     * @param \Exception $e      Error. Pass a GuzzleHttp\Ring\Exception\CancelledFutureAccessException
+     *                           to mark the future as cancelled.
+     */
+    public function __construct($result, \Exception $e = null)
+    {
+        $this->result = $result;
+        $this->error = $e;
+    }
+
+    public function wait()
+    {
+        if ($this->error) {
+            throw $this->error;
+        }
+
+        return $this->result;
+    }
+
+    public function cancel() {}
+
+    public function promise()
+    {
+        if (!$this->cachedPromise) {
+            $this->cachedPromise = $this->error
+                ? new RejectedPromise($this->error)
+                : new FulfilledPromise($this->result);
+        }
+
+        return $this->cachedPromise;
+    }
+
+    public function then(
+        callable $onFulfilled = null,
+        callable $onRejected = null,
+        callable $onProgress = null
+    ) {
+        return $this->promise()->then($onFulfilled, $onRejected, $onProgress);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d64c9643ac154e25c0fedfac241f54e2e9148c2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureArray.php
@@ -0,0 +1,40 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Represents a future array value that when dereferenced returns an array.
+ */
+class FutureArray implements FutureArrayInterface
+{
+    use MagicFutureTrait;
+
+    public function offsetExists($offset)
+    {
+        return isset($this->_value[$offset]);
+    }
+
+    public function offsetGet($offset)
+    {
+        return $this->_value[$offset];
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        $this->_value[$offset] = $value;
+    }
+
+    public function offsetUnset($offset)
+    {
+        unset($this->_value[$offset]);
+    }
+
+    public function count()
+    {
+        return count($this->_value);
+    }
+
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->_value);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..58f5f7367069b10043a7e3661025ab788673b172
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php
@@ -0,0 +1,11 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Future that provides array-like access.
+ */
+interface FutureArrayInterface extends
+    FutureInterface,
+    \ArrayAccess,
+    \Countable,
+    \IteratorAggregate {};
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..43d18117b1656a4643ce029ce6ebfee077052df8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php
@@ -0,0 +1,40 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+use React\Promise\PromiseInterface;
+use React\Promise\PromisorInterface;
+
+/**
+ * Represents the result of a computation that may not have completed yet.
+ *
+ * You can use the future in a blocking manner using the wait() function, or
+ * you can use a promise from the future to receive the result when the future
+ * has been resolved.
+ *
+ * When the future is dereferenced using wait(), the result of the computation
+ * is cached and returned for subsequent calls to wait(). If the result of the
+ * computation has not yet completed when wait() is called, the call to wait()
+ * will block until the future has completed.
+ */
+interface FutureInterface extends PromiseInterface, PromisorInterface
+{
+    /**
+     * Returns the result of the future either from cache or by blocking until
+     * it is complete.
+     *
+     * This method must block until the future has a result or is cancelled.
+     * Throwing an exception in the wait() method will mark the future as
+     * realized and will throw the exception each time wait() is called.
+     * Throwing an instance of GuzzleHttp\Ring\CancelledException will mark
+     * the future as realized, will not throw immediately, but will throw the
+     * exception if the future's wait() method is called again.
+     *
+     * @return mixed
+     */
+    public function wait();
+
+    /**
+     * Cancels the future, if possible.
+     */
+    public function cancel();
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php
new file mode 100644
index 0000000000000000000000000000000000000000..4cac9281b94cb3109f61d2ff045dd8a3dcb6fce1
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/FutureValue.php
@@ -0,0 +1,12 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Represents a future value that responds to wait() to retrieve the promised
+ * value, but can also return promises that are delivered the value when it is
+ * available.
+ */
+class FutureValue implements FutureInterface
+{
+    use BaseFutureTrait;
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..58d779db49bf475fe06fc49ad831714f11054663
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php
@@ -0,0 +1,32 @@
+<?php
+namespace GuzzleHttp\Ring\Future;
+
+/**
+ * Implements common future functionality that is triggered when the result
+ * property is accessed via a magic __get method.
+ *
+ * @property mixed $_value Actual data used by the future. Accessing this
+ *     property will cause the future to block if needed.
+ */
+trait MagicFutureTrait
+{
+    use BaseFutureTrait;
+
+    /**
+     * This function handles retrieving the dereferenced result when requested.
+     *
+     * @param string $name Should always be "data" or an exception is thrown.
+     *
+     * @return mixed Returns the dereferenced data.
+     * @throws \RuntimeException
+     * @throws \GuzzleHttp\Ring\Exception\CancelledException
+     */
+    public function __get($name)
+    {
+        if ($name !== '_value') {
+            throw new \RuntimeException("Class has no {$name} property");
+        }
+
+        return $this->_value = $this->wait();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ebde187cfa84bddacea320eb57c76776070d5f07
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlFactoryTest.php
@@ -0,0 +1,821 @@
+<?php
+// Override curl_setopt_array() to get the last set curl options
+namespace GuzzleHttp\Ring\Client {
+    function curl_setopt_array($handle, array $options) {
+        if (!empty($_SERVER['curl_test'])) {
+            $_SERVER['_curl'] = $options;
+        } else {
+            unset($_SERVER['_curl']);
+        }
+        \curl_setopt_array($handle, $options);
+    }
+}
+
+namespace GuzzleHttp\Tests\Ring\Client {
+
+use GuzzleHttp\Ring\Client\CurlFactory;
+use GuzzleHttp\Ring\Client\CurlMultiHandler;
+use GuzzleHttp\Ring\Client\MockHandler;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Stream\NoSeekStream;
+use GuzzleHttp\Stream\Stream;
+
+class CurlFactoryTest extends \PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass()
+    {
+        $_SERVER['curl_test'] = true;
+        unset($_SERVER['_curl']);
+    }
+
+    public static function tearDownAfterClass()
+    {
+        unset($_SERVER['_curl'], $_SERVER['curl_test']);
+    }
+
+    public function testCreatesCurlHandle()
+    {
+        Server::flush();
+        Server::enqueue([[
+            'status' => 200,
+            'headers' => [
+                'Foo' => ['Bar'],
+                'Baz' => ['bam'],
+                'Content-Length' => [2],
+            ],
+            'body' => 'hi',
+        ]]);
+
+        $stream = Stream::factory();
+
+        $request = [
+            'http_method' => 'PUT',
+            'headers' => [
+                'host' => [Server::$url],
+                'Hi'   => [' 123'],
+            ],
+            'body' => 'testing',
+            'client' => ['save_to' => $stream],
+        ];
+
+        $f = new CurlFactory();
+        $result = $f($request);
+        $this->assertInternalType('array', $result);
+        $this->assertCount(3, $result);
+        $this->assertInternalType('resource', $result[0]);
+        $this->assertInternalType('array', $result[1]);
+        $this->assertSame($stream, $result[2]);
+        curl_close($result[0]);
+
+        $this->assertEquals('PUT', $_SERVER['_curl'][CURLOPT_CUSTOMREQUEST]);
+        $this->assertEquals(
+            'http://http://127.0.0.1:8125/',
+            $_SERVER['_curl'][CURLOPT_URL]
+        );
+        // Sends via post fields when the request is small enough
+        $this->assertEquals('testing', $_SERVER['_curl'][CURLOPT_POSTFIELDS]);
+        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_RETURNTRANSFER]);
+        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_HEADER]);
+        $this->assertEquals(150, $_SERVER['_curl'][CURLOPT_CONNECTTIMEOUT]);
+        $this->assertInstanceOf('Closure', $_SERVER['_curl'][CURLOPT_HEADERFUNCTION]);
+
+        if (defined('CURLOPT_PROTOCOLS')) {
+            $this->assertEquals(
+                CURLPROTO_HTTP | CURLPROTO_HTTPS,
+                $_SERVER['_curl'][CURLOPT_PROTOCOLS]
+            );
+        }
+
+        $this->assertContains('Expect:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+        $this->assertContains('Accept:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+        $this->assertContains('Content-Type:', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+        $this->assertContains('Hi:  123', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+        $this->assertContains('host: http://127.0.0.1:8125/', $_SERVER['_curl'][CURLOPT_HTTPHEADER]);
+    }
+
+    public function testSendsHeadRequests()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers' => ['host' => [Server::$host]],
+        ]);
+        $response->wait();
+        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_NOBODY]);
+        $checks = [CURLOPT_WRITEFUNCTION, CURLOPT_READFUNCTION, CURLOPT_FILE, CURLOPT_INFILE];
+        foreach ($checks as $check) {
+            $this->assertArrayNotHasKey($check, $_SERVER['_curl']);
+        }
+        $this->assertEquals('HEAD', Server::received()[0]['http_method']);
+    }
+
+    public function testCanAddCustomCurlOptions()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['curl' => [CURLOPT_LOW_SPEED_LIMIT => 10]],
+        ]);
+        $this->assertEquals(10, $_SERVER['_curl'][CURLOPT_LOW_SPEED_LIMIT]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage SSL CA bundle not found: /does/not/exist
+     */
+    public function testValidatesVerify()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['verify' => '/does/not/exist'],
+        ]);
+    }
+
+    public function testCanSetVerifyToFile()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['verify' => __FILE__],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_CAINFO]);
+        $this->assertEquals(2, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
+        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
+    }
+
+    public function testAddsVerifyAsTrue()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['verify' => true],
+        ]);
+        $this->assertEquals(2, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
+        $this->assertEquals(true, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
+        $this->assertArrayNotHasKey(CURLOPT_CAINFO, $_SERVER['_curl']);
+    }
+
+    public function testCanDisableVerify()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['verify' => false],
+        ]);
+        $this->assertEquals(0, $_SERVER['_curl'][CURLOPT_SSL_VERIFYHOST]);
+        $this->assertEquals(false, $_SERVER['_curl'][CURLOPT_SSL_VERIFYPEER]);
+    }
+
+    public function testAddsProxy()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['proxy' => 'http://bar.com'],
+        ]);
+        $this->assertEquals('http://bar.com', $_SERVER['_curl'][CURLOPT_PROXY]);
+    }
+
+    public function testAddsViaScheme()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'scheme' => 'http',
+            'headers' => ['host' => ['foo.com']],
+            'client' => [
+                'proxy' => ['http' => 'http://bar.com', 'https' => 'https://t'],
+            ],
+        ]);
+        $this->assertEquals('http://bar.com', $_SERVER['_curl'][CURLOPT_PROXY]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage SSL private key not found: /does/not/exist
+     */
+    public function testValidatesSslKey()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['ssl_key' => '/does/not/exist'],
+        ]);
+    }
+
+    public function testAddsSslKey()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['ssl_key' => __FILE__],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLKEY]);
+    }
+
+    public function testAddsSslKeyWithPassword()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['ssl_key' => [__FILE__, 'test']],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLKEY]);
+        $this->assertEquals('test', $_SERVER['_curl'][CURLOPT_SSLKEYPASSWD]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage SSL certificate not found: /does/not/exist
+     */
+    public function testValidatesCert()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['cert' => '/does/not/exist'],
+        ]);
+    }
+
+    public function testAddsCert()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['cert' => __FILE__],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLCERT]);
+    }
+
+    public function testAddsCertWithPassword()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['cert' => [__FILE__, 'test']],
+        ]);
+        $this->assertEquals(__FILE__, $_SERVER['_curl'][CURLOPT_SSLCERT]);
+        $this->assertEquals('test', $_SERVER['_curl'][CURLOPT_SSLCERTPASSWD]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage progress client option must be callable
+     */
+    public function testValidatesProgress()
+    {
+        $f = new CurlFactory();
+        $f([
+            'http_method' => 'GET',
+            'headers' => ['host' => ['foo.com']],
+            'client' => ['progress' => 'foo'],
+        ]);
+    }
+
+    public function testEmitsDebugInfoToStream()
+    {
+        $res = fopen('php://memory', 'r+');
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['debug' => $res],
+        ]);
+        $response->wait();
+        rewind($res);
+        $output = str_replace("\r", '', stream_get_contents($res));
+        $this->assertContains(
+            "> HEAD / HTTP/1.1\nhost: 127.0.0.1:8125\n\n",
+            $output
+        );
+        $this->assertContains("< HTTP/1.1 200", $output);
+        fclose($res);
+    }
+
+    public function testEmitsProgressToFunction()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $called = [];
+        $response = $a([
+            'http_method' => 'HEAD',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => [
+                'progress' => function () use (&$called) {
+                    $called[] = func_get_args();
+                },
+            ],
+        ]);
+        $response->wait();
+        $this->assertNotEmpty($called);
+        foreach ($called as $call) {
+            $this->assertCount(4, $call);
+        }
+    }
+
+    private function addDecodeResponse($withEncoding = true)
+    {
+        $content = gzencode('test');
+        $response  = [
+            'status'  => 200,
+            'reason'  => 'OK',
+            'headers' => ['Content-Length' => [strlen($content)]],
+            'body'    => $content,
+        ];
+
+        if ($withEncoding) {
+            $response['headers']['Content-Encoding'] = ['gzip'];
+        }
+
+        Server::flush();
+        Server::enqueue([$response]);
+
+        return $content;
+    }
+
+    public function testDecodesGzippedResponses()
+    {
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['decode_content' => true],
+        ]);
+        $response->wait();
+        $this->assertEquals('test', Core::body($response));
+        $this->assertEquals('', $_SERVER['_curl'][CURLOPT_ENCODING]);
+        $sent = Server::received()[0];
+        $this->assertNull(Core::header($sent, 'Accept-Encoding'));
+    }
+
+    public function testDecodesGzippedResponsesWithHeader()
+    {
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'            => [Server::$host],
+                'Accept-Encoding' => ['gzip'],
+            ],
+            'client' => ['decode_content' => true],
+        ]);
+        $response->wait();
+        $this->assertEquals('gzip', $_SERVER['_curl'][CURLOPT_ENCODING]);
+        $sent = Server::received()[0];
+        $this->assertEquals('gzip', Core::header($sent, 'Accept-Encoding'));
+        $this->assertEquals('test', Core::body($response));
+    }
+
+    public function testDoesNotForceDecode()
+    {
+        $content = $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['decode_content' => false],
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertNull(Core::header($sent, 'Accept-Encoding'));
+        $this->assertEquals($content, Core::body($response));
+    }
+
+    public function testProtocolVersion()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'version'     => 1.0,
+        ]);
+        $this->assertEquals(CURL_HTTP_VERSION_1_0, $_SERVER['_curl'][CURLOPT_HTTP_VERSION]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesSaveTo()
+    {
+        $handler = new CurlMultiHandler();
+        $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['save_to' => true],
+        ]);
+    }
+
+    public function testSavesToStream()
+    {
+        $stream = fopen('php://memory', 'r+');
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to' => $stream,
+            ],
+        ]);
+        $response->wait();
+        rewind($stream);
+        $this->assertEquals('test', stream_get_contents($stream));
+    }
+
+    public function testSavesToGuzzleStream()
+    {
+        $stream = Stream::factory();
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to'        => $stream,
+            ],
+        ]);
+        $response->wait();
+        $this->assertEquals('test', (string) $stream);
+    }
+
+    public function testSavesToFileOnDisk()
+    {
+        $tmpfile = tempnam(sys_get_temp_dir(), 'testfile');
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client' => [
+                'decode_content' => true,
+                'save_to'        => $tmpfile,
+            ],
+        ]);
+        $response->wait();
+        $this->assertEquals('test', file_get_contents($tmpfile));
+        unlink($tmpfile);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesBody()
+    {
+        $handler = new CurlMultiHandler();
+        $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => false,
+        ]);
+    }
+
+    public function testAddsLargePayloadFromStreamWithNoSizeUsingChunked()
+    {
+        $stream = Stream::factory('foo');
+        $stream = FnStream::decorate($stream, [
+            'getSize' => function () {
+                return null;
+            }
+        ]);
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $stream,
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertEquals('chunked', Core::header($sent, 'Transfer-Encoding'));
+        $this->assertNull(Core::header($sent, 'Content-Length'));
+        $this->assertEquals('foo', $sent['body']);
+    }
+
+    public function testAddsPayloadFromIterator()
+    {
+        $iter = new \ArrayIterator(['f', 'o', 'o']);
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $iter,
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertEquals('chunked', Core::header($sent, 'Transfer-Encoding'));
+        $this->assertNull(Core::header($sent, 'Content-Length'));
+        $this->assertEquals('foo', $sent['body']);
+    }
+
+    public function testAddsPayloadFromResource()
+    {
+        $res = fopen('php://memory', 'r+');
+        $data = str_repeat('.', 1000000);
+        fwrite($res, $data);
+        rewind($res);
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'           => [Server::$host],
+                'content-length' => [1000000],
+            ],
+            'body'        => $res,
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
+        $this->assertEquals(1000000, Core::header($sent, 'Content-Length'));
+        $this->assertEquals($data, $sent['body']);
+    }
+
+    public function testAddsContentLengthFromStream()
+    {
+        $stream = Stream::factory('foo');
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'body'        => $stream,
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertEquals(3, Core::header($sent, 'Content-Length'));
+        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
+        $this->assertEquals('foo', $sent['body']);
+    }
+
+    public function testDoesNotAddMultipleContentLengthHeaders()
+    {
+        $this->addDecodeResponse();
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => [
+                'host'           => [Server::$host],
+                'content-length' => [3],
+            ],
+            'body' => 'foo',
+        ]);
+        $response->wait();
+        $sent = Server::received()[0];
+        $this->assertEquals(3, Core::header($sent, 'Content-Length'));
+        $this->assertNull(Core::header($sent, 'Transfer-Encoding'));
+        $this->assertEquals('foo', $sent['body']);
+    }
+
+    public function testSendsPostWithNoBodyOrDefaultContentType()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $handler = new CurlMultiHandler();
+        $response = $handler([
+            'http_method' => 'POST',
+            'uri'         => '/',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $response->wait();
+        $received = Server::received()[0];
+        $this->assertEquals('POST', $received['http_method']);
+        $this->assertNull(Core::header($received, 'content-type'));
+        $this->assertSame('0', Core::firstHeader($received, 'content-length'));
+    }
+
+    public function testParseProtocolVersion()
+    {
+        $res = CurlFactory::createResponse(
+            function () {},
+            [],
+            ['curl' => ['errno' => null]],
+            ['HTTP/1.1 200 Ok'],
+            null
+        );
+
+        $this->assertSame('1.1', $res['version']);
+    }
+
+    public function testFailsWhenNoResponseAndNoBody()
+    {
+        $res = CurlFactory::createResponse(function () {}, [], [], [], null);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\RingException', $res['error']);
+        $this->assertContains(
+            'No response was received for a request with no body',
+            $res['error']->getMessage()
+        );
+    }
+
+    public function testFailsWhenCannotRewindRetry()
+    {
+        $res = CurlFactory::createResponse(function () {}, [
+            'body' => new NoSeekStream(Stream::factory('foo'))
+        ], [], [], null);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\RingException', $res['error']);
+        $this->assertContains(
+            'rewind the request body failed',
+            $res['error']->getMessage()
+        );
+    }
+
+    public function testRetriesWhenBodyCanBeRewound()
+    {
+        $callHandler = $called = false;
+        $res = CurlFactory::createResponse(function () use (&$callHandler) {
+            $callHandler = true;
+            return ['status' => 200];
+        }, [
+            'body' => FnStream::decorate(Stream::factory('test'), [
+                'seek' => function () use (&$called) {
+                    $called = true;
+                    return true;
+                }
+            ])
+        ], [], [], null);
+
+        $this->assertTrue($callHandler);
+        $this->assertTrue($called);
+        $this->assertEquals('200', $res['status']);
+    }
+
+    public function testFailsWhenRetryMoreThanThreeTimes()
+    {
+        $call = 0;
+        $mock = new MockHandler(function (array $request) use (&$mock, &$call) {
+            $call++;
+            return CurlFactory::createResponse($mock, $request, [], [], null);
+        });
+        $response = $mock([
+            'http_method' => 'GET',
+            'body'        => 'test',
+        ]);
+        $this->assertEquals(3, $call);
+        $this->assertArrayHasKey('error', $response);
+        $this->assertContains(
+            'The cURL request was retried 3 times',
+            $response['error']->getMessage()
+        );
+    }
+
+    public function testHandles100Continue()
+    {
+        Server::flush();
+        Server::enqueue([
+            [
+                'status' => '200',
+                'reason' => 'OK',
+                'headers' => [
+                    'Test' => ['Hello'],
+                    'Content-Length' => ['4'],
+                ],
+                'body' => 'test',
+            ],
+        ]);
+
+        $request = [
+            'http_method' => 'PUT',
+            'headers'     => [
+                'Host'   => [Server::$host],
+                'Expect' => ['100-Continue'],
+            ],
+            'body'        => 'test',
+        ];
+
+        $handler = new CurlMultiHandler();
+        $response = $handler($request)->wait();
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals('OK', $response['reason']);
+        $this->assertEquals(['Hello'], $response['headers']['Test']);
+        $this->assertEquals(['4'], $response['headers']['Content-Length']);
+        $this->assertEquals('test', Core::body($response));
+    }
+
+    public function testCreatesConnectException()
+    {
+        $m = new \ReflectionMethod('GuzzleHttp\Ring\Client\CurlFactory', 'createErrorResponse');
+        $m->setAccessible(true);
+        $response = $m->invoke(
+            null,
+            function () {},
+            [],
+            [
+                'err_message' => 'foo',
+                'curl' => [
+                    'errno' => CURLE_COULDNT_CONNECT,
+                ]
+            ]
+        );
+        $this->assertInstanceOf('GuzzleHttp\Ring\Exception\ConnectException', $response['error']);
+    }
+
+    public function testParsesLastResponseOnly()
+    {
+        $response1  = [
+            'status'  => 301,
+            'headers' => [
+                'Content-Length' => ['0'],
+                'Location' => ['/foo']
+            ]
+        ];
+
+        $response2 = [
+            'status'  => 200,
+            'headers' => [
+                'Content-Length' => ['0'],
+                'Foo' => ['bar']
+            ]
+        ];
+
+        Server::flush();
+        Server::enqueue([$response1, $response2]);
+
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['Host'   => [Server::$host]],
+            'client' => [
+                'curl' => [
+                    CURLOPT_FOLLOWLOCATION => true
+                ]
+            ]
+        ])->wait();
+
+        $this->assertEquals(1, $response['transfer_stats']['redirect_count']);
+        $this->assertEquals('http://127.0.0.1:8125/foo', $response['effective_url']);
+        $this->assertEquals(['bar'], $response['headers']['Foo']);
+        $this->assertEquals(200, $response['status']);
+        $this->assertFalse(Core::hasHeader($response, 'Location'));
+    }
+
+    public function testMaintainsMultiHeaderOrder()
+    {
+        Server::flush();
+        Server::enqueue([
+            [
+                'status'  => 200,
+                'headers' => [
+                    'Content-Length' => ['0'],
+                    'Foo' => ['a', 'b'],
+                    'foo' => ['c', 'd'],
+                ]
+            ]
+        ]);
+
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['Host'   => [Server::$host]]
+        ])->wait();
+
+        $this->assertEquals(
+            ['a', 'b', 'c', 'd'],
+            Core::headerLines($response, 'Foo')
+        );
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Directory /path/to/does/not does not exist for save_to value of /path/to/does/not/exist.txt
+     */
+    public function testThrowsWhenDirNotFound()
+    {
+        $request = [
+            'http_method' => 'GET',
+            'headers' => ['host' => [Server::$url]],
+            'client' => ['save_to' => '/path/to/does/not/exist.txt'],
+        ];
+
+        $f = new CurlFactory();
+        $f($request);
+    }
+}
+
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ba03b8cd37b66e34be473072b1a862e9f2cca58e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlHandlerTest.php
@@ -0,0 +1,96 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\CurlHandler;
+
+class CurlHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    protected function setUp()
+    {
+        if (!function_exists('curl_reset')) {
+            $this->markTestSkipped('curl_reset() is not available');
+        }
+    }
+
+    protected function getHandler($factory = null, $options = [])
+    {
+        return new CurlHandler($options);
+    }
+
+    public function testCanSetMaxHandles()
+    {
+        $a = new CurlHandler(['max_handles' => 10]);
+        $this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
+    }
+
+    public function testCreatesCurlErrors()
+    {
+        $handler = new CurlHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri' => '/',
+            'headers' => ['host' => ['localhost:123']],
+            'client' => ['timeout' => 0.001, 'connect_timeout' => 0.001],
+        ]);
+        $this->assertNull($response['status']);
+        $this->assertNull($response['reason']);
+        $this->assertEquals([], $response['headers']);
+        $this->assertInstanceOf(
+            'GuzzleHttp\Ring\Exception\RingException',
+            $response['error']
+        );
+
+        $this->assertEquals(
+            1,
+            preg_match('/^cURL error \d+: .*$/', $response['error']->getMessage())
+        );
+    }
+
+    public function testReleasesAdditionalEasyHandles()
+    {
+        Server::flush();
+        $response = [
+            'status'  => 200,
+            'headers' => ['Content-Length' => [4]],
+            'body'    => 'test',
+        ];
+
+        Server::enqueue([$response, $response, $response, $response]);
+        $a = new CurlHandler(['max_handles' => 2]);
+
+        $fn = function () use (&$calls, $a, &$fn) {
+            if (++$calls < 4) {
+                $a([
+                    'http_method' => 'GET',
+                    'headers'     => ['host' => [Server::$host]],
+                    'client'      => ['progress' => $fn],
+                ]);
+            }
+        };
+
+        $request = [
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => [
+                'progress' => $fn,
+            ],
+        ];
+
+        $a($request);
+        $this->assertCount(2, $this->readAttribute($a, 'handles'));
+    }
+
+    public function testReusesHandles()
+    {
+        Server::flush();
+        $response = ['status' => 200];
+        Server::enqueue([$response, $response]);
+        $a = new CurlHandler();
+        $request = [
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+        ];
+        $a($request);
+        $a($request);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9228f1ceac6ac273e68af635217213cb5146239c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/CurlMultiHandlerTest.php
@@ -0,0 +1,165 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\CurlMultiHandler;
+
+class CurlMultiHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testSendsRequest()
+    {
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertEquals(200, $response['status']);
+        $this->assertArrayHasKey('transfer_stats', $response);
+        $realUrl = trim($response['transfer_stats']['url'], '/');
+        $this->assertEquals(trim(Server::$url, '/'), $realUrl);
+        $this->assertArrayHasKey('effective_url', $response);
+        $this->assertEquals(
+            trim(Server::$url, '/'),
+            trim($response['effective_url'], '/')
+        );
+    }
+
+    public function testCreatesErrorResponses()
+    {
+        $url = 'http://localhost:123/';
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => ['localhost:123']],
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertNull($response['status']);
+        $this->assertNull($response['reason']);
+        $this->assertEquals([], $response['headers']);
+        $this->assertArrayHasKey('error', $response);
+        $this->assertContains('cURL error ', $response['error']->getMessage());
+        $this->assertArrayHasKey('transfer_stats', $response);
+        $this->assertEquals(
+            trim($url, '/'),
+            trim($response['transfer_stats']['url'], '/')
+        );
+        $this->assertArrayHasKey('effective_url', $response);
+        $this->assertEquals(
+            trim($url, '/'),
+            trim($response['effective_url'], '/')
+        );
+    }
+
+    public function testSendsFuturesWhenDestructed()
+    {
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $a->__destruct();
+        $this->assertEquals(200, $response['status']);
+    }
+
+    public function testCanSetMaxHandles()
+    {
+        $a = new CurlMultiHandler(['max_handles' => 2]);
+        $this->assertEquals(2, $this->readAttribute($a, 'maxHandles'));
+    }
+
+    public function testCanSetSelectTimeout()
+    {
+        $a = new CurlMultiHandler(['select_timeout' => 2]);
+        $this->assertEquals(2, $this->readAttribute($a, 'selectTimeout'));
+    }
+
+    public function testSendsFuturesWhenMaxHandlesIsReached()
+    {
+        $request = [
+            'http_method' => 'PUT',
+            'headers'     => ['host' => [Server::$host]],
+            'future'      => 'lazy', // passing this to control the test
+        ];
+        $response = ['status' => 200];
+        Server::flush();
+        Server::enqueue([$response, $response, $response]);
+        $a = new CurlMultiHandler(['max_handles' => 3]);
+        for ($i = 0; $i < 5; $i++) {
+            $responses[] = $a($request);
+        }
+        $this->assertCount(3, Server::received());
+        $responses[3]->cancel();
+        $responses[4]->cancel();
+    }
+
+    public function testCanCancel()
+    {
+        Server::flush();
+        $response = ['status' => 200];
+        Server::enqueue(array_fill_keys(range(0, 10), $response));
+        $a = new CurlMultiHandler();
+        $responses = [];
+
+        for ($i = 0; $i < 10; $i++) {
+            $response = $a([
+                'http_method' => 'GET',
+                'headers'     => ['host' => [Server::$host]],
+                'future'      => 'lazy',
+            ]);
+            $response->cancel();
+            $responses[] = $response;
+        }
+
+        $this->assertCount(0, Server::received());
+
+        foreach ($responses as $response) {
+            $this->assertTrue($this->readAttribute($response, 'isRealized'));
+        }
+    }
+
+    public function testCannotCancelFinished()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $response->wait();
+        $response->cancel();
+    }
+
+    public function testDelaysInParallel()
+    {
+        Server::flush();
+        Server::enqueue([['status' => 200]]);
+        $a = new CurlMultiHandler();
+        $expected = microtime(true) + (100 / 1000);
+        $response = $a([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => ['delay' => 100],
+        ]);
+        $response->wait();
+        $this->assertGreaterThanOrEqual($expected, microtime(true));
+    }
+
+    public function testSendsNonLazyFutures()
+    {
+        $request = [
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'future'      => true,
+        ];
+        Server::flush();
+        Server::enqueue([['status' => 202]]);
+        $a = new CurlMultiHandler();
+        $response = $a($request);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertEquals(202, $response['status']);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a47bb30bab4e9b3f88b3da1ebfa0e3f200bb431c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/MiddlewareTest.php
@@ -0,0 +1,65 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\Middleware;
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+
+class MiddlewareTest extends \PHPUnit_Framework_TestCase
+{
+    public function testFutureCallsDefaultHandler()
+    {
+        $future = new CompletedFutureArray(['status' => 200]);
+        $calledA = false;
+        $a = function (array $req) use (&$calledA, $future) {
+            $calledA = true;
+            return $future;
+        };
+        $calledB = false;
+        $b = function (array $req) use (&$calledB) { $calledB = true; };
+        $s = Middleware::wrapFuture($a, $b);
+        $s([]);
+        $this->assertTrue($calledA);
+        $this->assertFalse($calledB);
+    }
+
+    public function testFutureCallsStreamingHandler()
+    {
+        $future = new CompletedFutureArray(['status' => 200]);
+        $calledA = false;
+        $a = function (array $req) use (&$calledA) { $calledA = true; };
+        $calledB = false;
+        $b = function (array $req) use (&$calledB, $future) {
+            $calledB = true;
+            return $future;
+        };
+        $s = Middleware::wrapFuture($a, $b);
+        $result = $s(['client' => ['future' => true]]);
+        $this->assertFalse($calledA);
+        $this->assertTrue($calledB);
+        $this->assertSame($future, $result);
+    }
+
+    public function testStreamingCallsDefaultHandler()
+    {
+        $calledA = false;
+        $a = function (array $req) use (&$calledA) { $calledA = true; };
+        $calledB = false;
+        $b = function (array $req) use (&$calledB) { $calledB = true; };
+        $s = Middleware::wrapStreaming($a, $b);
+        $s([]);
+        $this->assertTrue($calledA);
+        $this->assertFalse($calledB);
+    }
+
+    public function testStreamingCallsStreamingHandler()
+    {
+        $calledA = false;
+        $a = function (array $req) use (&$calledA) { $calledA = true; };
+        $calledB = false;
+        $b = function (array $req) use (&$calledB) { $calledB = true; };
+        $s = Middleware::wrapStreaming($a, $b);
+        $s(['client' => ['stream' => true]]);
+        $this->assertFalse($calledA);
+        $this->assertTrue($calledB);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..26bcd6cdc7ea86445f81f5389e963f4f9ab88f2d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/MockHandlerTest.php
@@ -0,0 +1,86 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\MockHandler;
+use GuzzleHttp\Ring\Future\FutureArray;
+use React\Promise\Deferred;
+
+class MockHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsArray()
+    {
+        $mock = new MockHandler(['status' => 200]);
+        $response = $mock([]);
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals([], $response['headers']);
+        $this->assertNull($response['body']);
+        $this->assertNull($response['reason']);
+        $this->assertNull($response['effective_url']);
+    }
+
+    public function testReturnsFutures()
+    {
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () use ($deferred) {
+                $deferred->resolve(['status' => 200]);
+            }
+        );
+        $mock = new MockHandler($future);
+        $response = $mock([]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertEquals(200, $response['status']);
+    }
+
+    public function testReturnsFuturesWithThenCall()
+    {
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () use ($deferred) {
+                $deferred->resolve(['status' => 200]);
+            }
+        );
+        $mock = new MockHandler($future);
+        $response = $mock([]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $this->assertEquals(200, $response['status']);
+        $req = null;
+        $promise = $response->then(function ($value) use (&$req) {
+            $req = $value;
+            $this->assertEquals(200, $req['status']);
+        });
+        $this->assertInstanceOf('React\Promise\PromiseInterface', $promise);
+        $this->assertEquals(200, $req['status']);
+    }
+
+    public function testReturnsFuturesAndProxiesCancel()
+    {
+        $c = null;
+        $deferred = new Deferred();
+        $future = new FutureArray(
+            $deferred->promise(),
+            function () {},
+            function () use (&$c) {
+                $c = true;
+                return true;
+            }
+        );
+        $mock = new MockHandler($future);
+        $response = $mock([]);
+        $this->assertInstanceOf('GuzzleHttp\Ring\Future\FutureArray', $response);
+        $response->cancel();
+        $this->assertTrue($c);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Response must be an array or FutureArrayInterface. Found
+     */
+    public function testEnsuresMockIsValid()
+    {
+        $mock = new MockHandler('foo');
+        $mock([]);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/Server.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/Server.php
new file mode 100644
index 0000000000000000000000000000000000000000..14665a5565dfdadd93a146ea67bcfb14a31ea8c7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/Server.php
@@ -0,0 +1,183 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\StreamHandler;
+use GuzzleHttp\Ring\Core;
+
+/**
+ * Class uses to control the test webserver.
+ *
+ * Queued responses will be served to requests using a FIFO order.  All requests
+ * received by the server are stored on the node.js server and can be retrieved
+ * by calling {@see Server::received()}.
+ *
+ * Mock responses that don't require data to be transmitted over HTTP a great
+ * for testing.  Mock response, however, cannot test the actual sending of an
+ * HTTP request using cURL.  This test server allows the simulation of any
+ * number of HTTP request response transactions to test the actual sending of
+ * requests over the wire without having to leave an internal network.
+ */
+class Server
+{
+    public static $started;
+    public static $url = 'http://127.0.0.1:8125/';
+    public static $host = '127.0.0.1:8125';
+    public static $port = 8125;
+
+    /**
+     * Flush the received requests from the server
+     * @throws \RuntimeException
+     */
+    public static function flush()
+    {
+        self::send('DELETE', '/guzzle-server/requests');
+    }
+
+    /**
+     * Queue an array of responses or a single response on the server.
+     *
+     * Any currently queued responses will be overwritten. Subsequent requests
+     * on the server will return queued responses in FIFO order.
+     *
+     * @param array $responses An array of responses. The shape of a response
+     *                         is the shape described in the RingPHP spec.
+     * @throws \Exception
+     */
+    public static function enqueue(array $responses)
+    {
+        $data = [];
+
+        foreach ($responses as $response) {
+            if (!is_array($response)) {
+                throw new \Exception('Each response must be an array');
+            }
+
+            if (isset($response['body'])) {
+                $response['body'] = base64_encode($response['body']);
+            }
+
+            $response += ['headers' => [], 'reason' => '', 'body' => ''];
+            $data[] = $response;
+        }
+
+        self::send('PUT', '/guzzle-server/responses', json_encode($data));
+    }
+
+    /**
+     * Get all of the received requests as a RingPHP request structure.
+     *
+     * @return array
+     * @throws \RuntimeException
+     */
+    public static function received()
+    {
+        if (!self::$started) {
+            return [];
+        }
+
+        $response = self::send('GET', '/guzzle-server/requests');
+        $body = Core::body($response);
+        $result = json_decode($body, true);
+        if ($result === false) {
+            throw new \RuntimeException('Error decoding response: '
+                . json_last_error());
+        }
+
+        foreach ($result as &$res) {
+            if (isset($res['uri'])) {
+                $res['resource'] = $res['uri'];
+            }
+            if (isset($res['query_string'])) {
+                $res['resource'] .= '?' . $res['query_string'];
+            }
+            if (!isset($res['resource'])) {
+                $res['resource'] = '';
+            }
+            // Ensure that headers are all arrays
+            if (isset($res['headers'])) {
+                foreach ($res['headers'] as &$h) {
+                    $h = (array) $h;
+                }
+                unset($h);
+            }
+        }
+
+        unset($res);
+        return $result;
+    }
+
+    /**
+     * Stop running the node.js server
+     */
+    public static function stop()
+    {
+        if (self::$started) {
+            self::send('DELETE', '/guzzle-server');
+        }
+
+        self::$started = false;
+    }
+
+    public static function wait($maxTries = 20)
+    {
+        $tries = 0;
+        while (!self::isListening() && ++$tries < $maxTries) {
+            usleep(100000);
+        }
+
+        if (!self::isListening()) {
+            throw new \RuntimeException('Unable to contact node.js server');
+        }
+    }
+
+    public static function start()
+    {
+        if (self::$started) {
+            return;
+        }
+
+        try {
+            self::wait();
+        } catch (\Exception $e) {
+            exec('node ' . __DIR__ . \DIRECTORY_SEPARATOR . 'server.js '
+                . self::$port . ' >> /tmp/server.log 2>&1 &');
+            self::wait();
+        }
+
+        self::$started = true;
+    }
+
+    private static function isListening()
+    {
+        $response = self::send('GET', '/guzzle-server/perf', null, [
+            'connect_timeout' => 1,
+            'timeout'         => 1
+        ]);
+
+        return !isset($response['error']);
+    }
+
+    private static function send(
+        $method,
+        $path,
+        $body = null,
+        array $client = []
+    ) {
+        $handler = new StreamHandler();
+
+        $request = [
+            'http_method'  => $method,
+            'uri'          => $path,
+            'request_port' => 8125,
+            'headers'      => ['host' => ['127.0.0.1:8125']],
+            'body'         => $body,
+            'client'       => $client,
+        ];
+
+        if ($body) {
+            $request['headers']['content-length'] = [strlen($body)];
+        }
+
+        return $handler($request);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3cb9a8e1e63ba0b6b056f49aca19e7d562884518
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/StreamHandlerTest.php
@@ -0,0 +1,480 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Client;
+
+use GuzzleHttp\Ring\Client\ClientUtils;
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Client\StreamHandler;
+
+class StreamHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsResponseForSuccessfulRequest()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri'         => '/',
+            'headers'     => [
+                'host' => [Server::$host],
+                'Foo' => ['Bar'],
+            ],
+        ]);
+
+        $this->assertEquals('1.1', $response['version']);
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals('OK', $response['reason']);
+        $this->assertEquals(['Bar'], $response['headers']['Foo']);
+        $this->assertEquals(['8'], $response['headers']['Content-Length']);
+        $this->assertEquals('hi there', Core::body($response));
+
+        $sent = Server::received()[0];
+        $this->assertEquals('GET', $sent['http_method']);
+        $this->assertEquals('/', $sent['resource']);
+        $this->assertEquals(['127.0.0.1:8125'], $sent['headers']['host']);
+        $this->assertEquals('Bar', Core::header($sent, 'foo'));
+    }
+
+    public function testAddsErrorToResponse()
+    {
+        $handler = new StreamHandler();
+        $result = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => ['localhost:123']],
+            'client'      => ['timeout' => 0.01],
+        ]);
+        $this->assertInstanceOf(
+            'GuzzleHttp\Ring\Future\CompletedFutureArray',
+            $result
+        );
+        $this->assertNull($result['status']);
+        $this->assertNull($result['body']);
+        $this->assertEquals([], $result['headers']);
+        $this->assertInstanceOf(
+            'GuzzleHttp\Ring\Exception\RingException',
+            $result['error']
+        );
+    }
+
+    public function testEnsuresTheHttpProtocol()
+    {
+        $handler = new StreamHandler();
+        $result = $handler([
+            'http_method' => 'GET',
+            'url'         => 'ftp://localhost:123',
+        ]);
+        $this->assertArrayHasKey('error', $result);
+        $this->assertContains(
+            'URL is invalid: ftp://localhost:123',
+            $result['error']->getMessage()
+        );
+    }
+
+    public function testStreamAttributeKeepsStreamOpen()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method'  => 'PUT',
+            'uri'          => '/foo',
+            'query_string' => 'baz=bar',
+            'headers'      => [
+                'host' => [Server::$host],
+                'Foo'  => ['Bar'],
+            ],
+            'body'         => 'test',
+            'client'       => ['stream' => true],
+        ]);
+
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals('OK', $response['reason']);
+        $this->assertEquals('8', Core::header($response, 'Content-Length'));
+        $body = $response['body'];
+        $this->assertTrue(is_resource($body));
+        $this->assertEquals('http', stream_get_meta_data($body)['wrapper_type']);
+        $this->assertEquals('hi there', stream_get_contents($body));
+        fclose($body);
+        $sent = Server::received()[0];
+        $this->assertEquals('PUT', $sent['http_method']);
+        $this->assertEquals('/foo', $sent['uri']);
+        $this->assertEquals('baz=bar', $sent['query_string']);
+        $this->assertEquals('/foo?baz=bar', $sent['resource']);
+        $this->assertEquals('127.0.0.1:8125', Core::header($sent, 'host'));
+        $this->assertEquals('Bar', Core::header($sent, 'foo'));
+    }
+
+    public function testDrainsResponseIntoTempStream()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri'         => '/',
+            'headers'     => ['host' => [Server::$host]],
+        ]);
+        $body = $response['body'];
+        $this->assertEquals('php://temp', stream_get_meta_data($body)['uri']);
+        $this->assertEquals('hi', fread($body, 2));
+        fclose($body);
+    }
+
+    public function testDrainsResponseIntoSaveToBody()
+    {
+        $r = fopen('php://temp', 'r+');
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri' => '/',
+            'headers' => ['host' => [Server::$host]],
+            'client' => ['save_to' => $r],
+        ]);
+        $body = $response['body'];
+        $this->assertEquals('php://temp', stream_get_meta_data($body)['uri']);
+        $this->assertEquals('hi', fread($body, 2));
+        $this->assertEquals(' there', stream_get_contents($r));
+        fclose($r);
+    }
+
+    public function testDrainsResponseIntoSaveToBodyAtPath()
+    {
+        $tmpfname = tempnam('/tmp', 'save_to_path');
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'uri' => '/',
+            'headers' => ['host' => [Server::$host]],
+            'client' => ['save_to' => $tmpfname],
+        ]);
+        $body = $response['body'];
+        $this->assertInstanceOf('GuzzleHttp\Stream\StreamInterface', $body);
+        $this->assertEquals($tmpfname, $body->getMetadata('uri'));
+        $this->assertEquals('hi', $body->read(2));
+        $body->close();
+        unlink($tmpfname);
+    }
+
+    public function testAutomaticallyDecompressGzip()
+    {
+        Server::flush();
+        $content = gzencode('test');
+        Server::enqueue([
+            [
+                'status' => 200,
+                'reason' => 'OK',
+                'headers' => [
+                    'Content-Encoding' => ['gzip'],
+                    'Content-Length' => [strlen($content)],
+                ],
+                'body' => $content,
+            ],
+        ]);
+
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'uri'         => '/',
+            'client'      => ['decode_content' => true],
+        ]);
+        $this->assertEquals('test', Core::body($response));
+    }
+
+    public function testDoesNotForceGzipDecode()
+    {
+        Server::flush();
+        $content = gzencode('test');
+        Server::enqueue([
+            [
+                'status' => 200,
+                'reason' => 'OK',
+                'headers' => [
+                    'Content-Encoding' => ['gzip'],
+                    'Content-Length'   => [strlen($content)],
+                ],
+                'body' => $content,
+            ],
+        ]);
+
+        $handler = new StreamHandler();
+        $response = $handler([
+            'http_method' => 'GET',
+            'headers'     => ['host' => [Server::$host]],
+            'uri'         => '/',
+            'client'      => ['stream' => true, 'decode_content' => false],
+        ]);
+        $this->assertSame($content, Core::body($response));
+    }
+
+    public function testProtocolVersion()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $handler([
+            'http_method' => 'GET',
+            'uri'         => '/',
+            'headers'     => ['host' => [Server::$host]],
+            'version'     => 1.0,
+        ]);
+
+        $this->assertEquals(1.0, Server::received()[0]['version']);
+    }
+
+    protected function getSendResult(array $opts)
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $opts['stream'] = true;
+        return $handler([
+            'http_method' => 'GET',
+            'uri'         => '/',
+            'headers'     => ['host' => [Server::$host]],
+            'client'      => $opts,
+        ]);
+    }
+
+    public function testAddsProxy()
+    {
+        $res = $this->getSendResult(['stream' => true, 'proxy' => '127.0.0.1:8125']);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals('127.0.0.1:8125', $opts['http']['proxy']);
+    }
+
+    public function testAddsTimeout()
+    {
+        $res = $this->getSendResult(['stream' => true, 'timeout' => 200]);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals(200, $opts['http']['timeout']);
+    }
+
+    public function testVerifiesVerifyIsValidIfPath()
+    {
+        $res = $this->getSendResult(['verify' => '/does/not/exist']);
+        $this->assertContains(
+            'SSL CA bundle not found: /does/not/exist',
+            (string) $res['error']
+        );
+    }
+
+    public function testVerifyCanBeDisabled()
+    {
+        $res = $this->getSendResult(['verify' => false]);
+        $this->assertArrayNotHasKey('error', $res);
+    }
+
+    public function testVerifiesCertIfValidPath()
+    {
+        $res = $this->getSendResult(['cert' => '/does/not/exist']);
+        $this->assertContains(
+            'SSL certificate not found: /does/not/exist',
+            (string) $res['error']
+        );
+    }
+
+    public function testVerifyCanBeSetToPath()
+    {
+        $path = $path = ClientUtils::getDefaultCaBundle();
+        $res = $this->getSendResult(['verify' => $path]);
+        $this->assertArrayNotHasKey('error', $res);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals(true, $opts['ssl']['verify_peer']);
+        $this->assertEquals($path, $opts['ssl']['cafile']);
+        $this->assertTrue(file_exists($opts['ssl']['cafile']));
+    }
+
+    public function testUsesSystemDefaultBundle()
+    {
+        $path = $path = ClientUtils::getDefaultCaBundle();
+        $res = $this->getSendResult(['verify' => true]);
+        $this->assertArrayNotHasKey('error', $res);
+        $opts = stream_context_get_options($res['body']);
+        if (PHP_VERSION_ID < 50600) {
+            $this->assertEquals($path, $opts['ssl']['cafile']);
+        }
+    }
+
+    public function testEnsuresVerifyOptionIsValid()
+    {
+        $res = $this->getSendResult(['verify' => 10]);
+        $this->assertContains(
+            'Invalid verify request option',
+            (string) $res['error']
+        );
+    }
+
+    public function testCanSetPasswordWhenSettingCert()
+    {
+        $path = __FILE__;
+        $res = $this->getSendResult(['cert' => [$path, 'foo']]);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals($path, $opts['ssl']['local_cert']);
+        $this->assertEquals('foo', $opts['ssl']['passphrase']);
+    }
+
+    public function testDebugAttributeWritesToStream()
+    {
+        $this->queueRes();
+        $f = fopen('php://temp', 'w+');
+        $this->getSendResult(['debug' => $f]);
+        fseek($f, 0);
+        $contents = stream_get_contents($f);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [CONNECT]', $contents);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [FILE_SIZE_IS]', $contents);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [PROGRESS]', $contents);
+    }
+
+    public function testDebugAttributeWritesStreamInfoToBuffer()
+    {
+        $called = false;
+        $this->queueRes();
+        $buffer = fopen('php://temp', 'r+');
+        $this->getSendResult([
+            'progress' => function () use (&$called) { $called = true; },
+            'debug' => $buffer,
+        ]);
+        fseek($buffer, 0);
+        $contents = stream_get_contents($buffer);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [CONNECT]', $contents);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [FILE_SIZE_IS] message: "Content-Length: 8"', $contents);
+        $this->assertContains('<GET http://127.0.0.1:8125/> [PROGRESS] bytes_max: "8"', $contents);
+        $this->assertTrue($called);
+    }
+
+    public function testEmitsProgressInformation()
+    {
+        $called = [];
+        $this->queueRes();
+        $this->getSendResult([
+            'progress' => function () use (&$called) {
+                $called[] = func_get_args();
+            },
+        ]);
+        $this->assertNotEmpty($called);
+        $this->assertEquals(8, $called[0][0]);
+        $this->assertEquals(0, $called[0][1]);
+    }
+
+    public function testEmitsProgressInformationAndDebugInformation()
+    {
+        $called = [];
+        $this->queueRes();
+        $buffer = fopen('php://memory', 'w+');
+        $this->getSendResult([
+            'debug'    => $buffer,
+            'progress' => function () use (&$called) {
+                $called[] = func_get_args();
+            },
+        ]);
+        $this->assertNotEmpty($called);
+        $this->assertEquals(8, $called[0][0]);
+        $this->assertEquals(0, $called[0][1]);
+        rewind($buffer);
+        $this->assertNotEmpty(stream_get_contents($buffer));
+        fclose($buffer);
+    }
+
+    public function testAddsProxyByProtocol()
+    {
+        $url = str_replace('http', 'tcp', Server::$url);
+        $res = $this->getSendResult(['proxy' => ['http' => $url]]);
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals($url, $opts['http']['proxy']);
+    }
+
+    public function testPerformsShallowMergeOfCustomContextOptions()
+    {
+        $res = $this->getSendResult([
+            'stream_context' => [
+                'http' => [
+                    'request_fulluri' => true,
+                    'method' => 'HEAD',
+                ],
+                'socket' => [
+                    'bindto' => '127.0.0.1:0',
+                ],
+                'ssl' => [
+                    'verify_peer' => false,
+                ],
+            ],
+        ]);
+
+        $opts = stream_context_get_options($res['body']);
+        $this->assertEquals('HEAD', $opts['http']['method']);
+        $this->assertTrue($opts['http']['request_fulluri']);
+        $this->assertFalse($opts['ssl']['verify_peer']);
+        $this->assertEquals('127.0.0.1:0', $opts['socket']['bindto']);
+    }
+
+    public function testEnsuresThatStreamContextIsAnArray()
+    {
+        $res = $this->getSendResult(['stream_context' => 'foo']);
+        $this->assertContains(
+            'stream_context must be an array',
+            (string) $res['error']
+        );
+    }
+
+    public function testDoesNotAddContentTypeByDefault()
+    {
+        $this->queueRes();
+        $handler = new StreamHandler();
+        $handler([
+            'http_method' => 'PUT',
+            'uri' => '/',
+            'headers' => ['host' => [Server::$host], 'content-length' => [3]],
+            'body' => 'foo',
+        ]);
+        $req = Server::received()[0];
+        $this->assertEquals('', Core::header($req, 'Content-Type'));
+        $this->assertEquals(3, Core::header($req, 'Content-Length'));
+    }
+
+    private function queueRes()
+    {
+        Server::flush();
+        Server::enqueue([
+            [
+                'status' => 200,
+                'reason' => 'OK',
+                'headers' => [
+                    'Foo' => ['Bar'],
+                    'Content-Length' => [8],
+                ],
+                'body' => 'hi there',
+            ],
+        ]);
+    }
+
+    public function testSupports100Continue()
+    {
+        Server::flush();
+        Server::enqueue([
+            [
+                'status' => '200',
+                'reason' => 'OK',
+                'headers' => [
+                    'Test' => ['Hello'],
+                    'Content-Length' => ['4'],
+                ],
+                'body' => 'test',
+            ],
+        ]);
+
+        $request = [
+            'http_method' => 'PUT',
+            'headers'     => [
+                'Host'   => [Server::$host],
+                'Expect' => ['100-Continue'],
+            ],
+            'body'        => 'test',
+        ];
+
+        $handler = new StreamHandler();
+        $response = $handler($request);
+        $this->assertEquals(200, $response['status']);
+        $this->assertEquals('OK', $response['reason']);
+        $this->assertEquals(['Hello'], $response['headers']['Test']);
+        $this->assertEquals(['4'], $response['headers']['Content-Length']);
+        $this->assertEquals('test', Core::body($response));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/server.js b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/server.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a03e33ab222ab499d81c0f50df3c5678ac51a3b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Client/server.js
@@ -0,0 +1,241 @@
+/**
+ * Guzzle node.js test server to return queued responses to HTTP requests and
+ * expose a RESTful API for enqueueing responses and retrieving the requests
+ * that have been received.
+ *
+ * - Delete all requests that have been received:
+ *      > DELETE /guzzle-server/requests
+ *      > Host: 127.0.0.1:8125
+ *
+ *  - Enqueue responses
+ *      > PUT /guzzle-server/responses
+ *      > Host: 127.0.0.1:8125
+ *      >
+ *      > [{'status': 200, 'reason': 'OK', 'headers': {}, 'body': '' }]
+ *
+ *  - Get the received requests
+ *      > GET /guzzle-server/requests
+ *      > Host: 127.0.0.1:8125
+ *
+ *      < HTTP/1.1 200 OK
+ *      <
+ *      < [{'http_method': 'GET', 'uri': '/', 'headers': {}, 'body': 'string'}]
+ *
+ *  - Attempt access to the secure area
+ *      > GET /secure/by-digest/qop-auth/guzzle-server/requests
+ *      > Host: 127.0.0.1:8125
+ *
+ *      < HTTP/1.1 401 Unauthorized
+ *      < WWW-Authenticate: Digest realm="Digest Test", qop="auth", nonce="0796e98e1aeef43141fab2a66bf4521a", algorithm="MD5", stale="false"
+ *      <
+ *      < 401 Unauthorized
+ *
+ *  - Shutdown the server
+ *      > DELETE /guzzle-server
+ *      > Host: 127.0.0.1:8125
+ *
+ * @package Guzzle PHP <http://www.guzzlephp.org>
+ * @license See the LICENSE file that was distributed with this source code.
+ */
+
+var http = require('http');
+var url = require('url');
+
+/**
+ * Guzzle node.js server
+ * @class
+ */
+var GuzzleServer = function(port, log) {
+
+    this.port = port;
+    this.log = log;
+    this.responses = [];
+    this.requests = [];
+    var that = this;
+
+    var md5 = function(input) {
+        var crypto = require('crypto');
+        var hasher = crypto.createHash('md5');
+        hasher.update(input);
+        return hasher.digest('hex');
+    }
+
+    /**
+     * Node.js HTTP server authentication module.
+     *
+     * It is only initialized on demand (by loadAuthentifier). This avoids
+     * requiring the dependency to http-auth on standard operations, and the
+     * performance hit at startup.
+     */
+    var auth;
+
+    /**
+     * Provides authentication handlers (Basic, Digest).
+     */
+    var loadAuthentifier = function(type, options) {
+        var typeId = type;
+        if (type == 'digest') {
+            typeId += '.'+(options && options.qop ? options.qop : 'none');
+        }
+        if (!loadAuthentifier[typeId]) {
+            if (!auth) {
+                try {
+                    auth = require('http-auth');
+                } catch (e) {
+                    if (e.code == 'MODULE_NOT_FOUND') {
+                        return;
+                    }
+                }
+            }
+            switch (type) {
+                case 'digest':
+                    var digestParams = {
+                        realm: 'Digest Test',
+                        login: 'me',
+                        password: 'test'
+                    };
+                    if (options && options.qop) {
+                        digestParams.qop = options.qop;
+                    }
+                    loadAuthentifier[typeId] = auth.digest(digestParams, function(username, callback) {
+                        callback(md5(digestParams.login + ':' + digestParams.realm + ':' + digestParams.password));
+                    });
+                    break
+            }
+        }
+        return loadAuthentifier[typeId];
+    };
+
+    var firewallRequest = function(request, req, res, requestHandlerCallback) {
+        var securedAreaUriParts = request.uri.match(/^\/secure\/by-(digest)(\/qop-([^\/]*))?(\/.*)$/);
+        if (securedAreaUriParts) {
+            var authentifier = loadAuthentifier(securedAreaUriParts[1], { qop: securedAreaUriParts[2] });
+            if (!authentifier) {
+                res.writeHead(501, 'HTTP authentication not implemented', { 'Content-Length': 0 });
+                res.end();
+                return;
+            }
+            authentifier.check(req, res, function(req, res) {
+                req.url = securedAreaUriParts[4];
+                requestHandlerCallback(request, req, res);
+            });
+        } else {
+            requestHandlerCallback(request, req, res);
+        }
+    };
+
+    var controlRequest = function(request, req, res) {
+        if (req.url == '/guzzle-server/perf') {
+            res.writeHead(200, 'OK', {'Content-Length': 16});
+            res.end('Body of response');
+        } else if (req.method == 'DELETE') {
+            if (req.url == '/guzzle-server/requests') {
+                // Clear the received requests
+                that.requests = [];
+                res.writeHead(200, 'OK', { 'Content-Length': 0 });
+                res.end();
+                if (that.log) {
+                    console.log('Flushing requests');
+                }
+            } else if (req.url == '/guzzle-server') {
+                // Shutdown the server
+                res.writeHead(200, 'OK', { 'Content-Length': 0, 'Connection': 'close' });
+                res.end();
+                if (that.log) {
+                    console.log('Shutting down');
+                }
+                that.server.close();
+            }
+        } else if (req.method == 'GET') {
+            if (req.url === '/guzzle-server/requests') {
+                if (that.log) {
+                    console.log('Sending received requests');
+                }
+                // Get received requests
+                var body = JSON.stringify(that.requests);
+                res.writeHead(200, 'OK', { 'Content-Length': body.length });
+                res.end(body);
+            }
+        } else if (req.method == 'PUT' && req.url == '/guzzle-server/responses') {
+            if (that.log) {
+                console.log('Adding responses...');
+            }
+            if (!request.body) {
+                if (that.log) {
+                    console.log('No response data was provided');
+                }
+                res.writeHead(400, 'NO RESPONSES IN REQUEST', { 'Content-Length': 0 });
+            } else {
+                that.responses = eval('(' + request.body + ')');
+                for (var i = 0; i < that.responses.length; i++) {
+                    if (that.responses[i].body) {
+                        that.responses[i].body = new Buffer(that.responses[i].body, 'base64');
+                    }
+                }
+                if (that.log) {
+                    console.log(that.responses);
+                }
+                res.writeHead(200, 'OK', { 'Content-Length': 0 });
+            }
+            res.end();
+        }
+    };
+
+    var receivedRequest = function(request, req, res) {
+        if (req.url.indexOf('/guzzle-server') === 0) {
+            controlRequest(request, req, res);
+        } else if (req.url.indexOf('/guzzle-server') == -1 && !that.responses.length) {
+            res.writeHead(500);
+            res.end('No responses in queue');
+        } else {
+            if (that.log) {
+                console.log('Returning response from queue and adding request');
+            }
+            that.requests.push(request);
+            var response = that.responses.shift();
+            res.writeHead(response.status, response.reason, response.headers);
+            res.end(response.body);
+        }
+    };
+
+    this.start = function() {
+
+        that.server = http.createServer(function(req, res) {
+
+            var parts = url.parse(req.url, false);
+            var request = {
+                http_method: req.method,
+                scheme: parts.scheme,
+                uri: parts.pathname,
+                query_string: parts.query,
+                headers: req.headers,
+                version: req.httpVersion,
+                body: ''
+            };
+
+            // Receive each chunk of the request body
+            req.addListener('data', function(chunk) {
+                request.body += chunk;
+            });
+
+            // Called when the request completes
+            req.addListener('end', function() {
+                firewallRequest(request, req, res, receivedRequest);
+            });
+        });
+
+        that.server.listen(this.port, '127.0.0.1');
+
+        if (this.log) {
+            console.log('Server running at http://127.0.0.1:8125/');
+        }
+    };
+};
+
+// Get the port from the arguments
+port = process.argv.length >= 3 ? process.argv[2] : 8125;
+log = process.argv.length >= 4 ? process.argv[3] : false;
+
+// Start the server
+server = new GuzzleServer(port, log);
+server.start();
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/CoreTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/CoreTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..49522f26b7e851c393d98878db9d4b5bfcd33023
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/CoreTest.php
@@ -0,0 +1,336 @@
+<?php
+namespace GuzzleHttp\Tests\Ring;
+
+use GuzzleHttp\Ring\Core;
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+use GuzzleHttp\Ring\Future\FutureArray;
+use GuzzleHttp\Stream\Stream;
+use React\Promise\Deferred;
+
+class CoreTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsNullNoHeadersAreSet()
+    {
+        $this->assertNull(Core::header([], 'Foo'));
+        $this->assertNull(Core::firstHeader([], 'Foo'));
+    }
+
+    public function testChecksIfHasHeader()
+    {
+        $message = [
+            'headers' => [
+                'Foo' => ['Bar', 'Baz'],
+                'foo' => ['hello'],
+                'bar' => ['1']
+            ]
+        ];
+        $this->assertTrue(Core::hasHeader($message, 'Foo'));
+        $this->assertTrue(Core::hasHeader($message, 'foo'));
+        $this->assertTrue(Core::hasHeader($message, 'FoO'));
+        $this->assertTrue(Core::hasHeader($message, 'bar'));
+        $this->assertFalse(Core::hasHeader($message, 'barr'));
+    }
+
+    public function testReturnsFirstHeaderWhenSimple()
+    {
+        $this->assertEquals('Bar', Core::firstHeader([
+            'headers' => ['Foo' => ['Bar', 'Baz']],
+        ], 'Foo'));
+    }
+
+    public function testReturnsFirstHeaderWhenMultiplePerLine()
+    {
+        $this->assertEquals('Bar', Core::firstHeader([
+            'headers' => ['Foo' => ['Bar, Baz']],
+        ], 'Foo'));
+    }
+
+    public function testExtractsCaseInsensitiveHeader()
+    {
+        $this->assertEquals(
+            'hello',
+            Core::header(['headers' => ['foo' => ['hello']]], 'FoO')
+        );
+    }
+
+    public function testExtractsCaseInsensitiveHeaderLines()
+    {
+        $this->assertEquals(
+            ['a', 'b', 'c', 'd'],
+            Core::headerLines([
+                'headers' => [
+                    'foo' => ['a', 'b'],
+                    'Foo' => ['c', 'd']
+                ]
+            ], 'foo')
+        );
+    }
+
+    public function testExtractsHeaderLines()
+    {
+        $this->assertEquals(
+            ['bar', 'baz'],
+            Core::headerLines([
+                'headers' => [
+                    'Foo' => ['bar', 'baz'],
+                ],
+            ], 'Foo')
+        );
+    }
+
+    public function testExtractsHeaderAsString()
+    {
+        $this->assertEquals(
+            'bar, baz',
+            Core::header([
+                'headers' => [
+                    'Foo' => ['bar', 'baz'],
+                ],
+            ], 'Foo', true)
+        );
+    }
+
+    public function testReturnsNullWhenHeaderNotFound()
+    {
+        $this->assertNull(Core::header(['headers' => []], 'Foo'));
+    }
+
+    public function testRemovesHeaders()
+    {
+        $message = [
+            'headers' => [
+                'foo' => ['bar'],
+                'Foo' => ['bam'],
+                'baz' => ['123'],
+            ],
+        ];
+
+        $this->assertSame($message, Core::removeHeader($message, 'bam'));
+        $this->assertEquals([
+            'headers' => ['baz' => ['123']],
+        ], Core::removeHeader($message, 'foo'));
+    }
+
+    public function testCreatesUrl()
+    {
+        $req = [
+            'scheme'  => 'http',
+            'headers' => ['host' => ['foo.com']],
+            'uri'     => '/',
+        ];
+
+        $this->assertEquals('http://foo.com/', Core::url($req));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage No Host header was provided
+     */
+    public function testEnsuresHostIsAvailableWhenCreatingUrls()
+    {
+        Core::url([]);
+    }
+
+    public function testCreatesUrlWithQueryString()
+    {
+        $req = [
+            'scheme'       => 'http',
+            'headers'      => ['host' => ['foo.com']],
+            'uri'          => '/',
+            'query_string' => 'foo=baz',
+        ];
+
+        $this->assertEquals('http://foo.com/?foo=baz', Core::url($req));
+    }
+
+    public function testUsesUrlIfSet()
+    {
+        $req = ['url' => 'http://foo.com'];
+        $this->assertEquals('http://foo.com', Core::url($req));
+    }
+
+    public function testReturnsNullWhenNoBody()
+    {
+        $this->assertNull(Core::body([]));
+    }
+
+    public function testReturnsStreamAsString()
+    {
+        $this->assertEquals(
+            'foo',
+            Core::body(['body' => Stream::factory('foo')])
+        );
+    }
+
+    public function testReturnsString()
+    {
+        $this->assertEquals('foo', Core::body(['body' => 'foo']));
+    }
+
+    public function testReturnsResourceContent()
+    {
+        $r = fopen('php://memory', 'w+');
+        fwrite($r, 'foo');
+        rewind($r);
+        $this->assertEquals('foo', Core::body(['body' => $r]));
+        fclose($r);
+    }
+
+    public function testReturnsIteratorContent()
+    {
+        $a = new \ArrayIterator(['a', 'b', 'cd', '']);
+        $this->assertEquals('abcd', Core::body(['body' => $a]));
+    }
+
+    public function testReturnsObjectToString()
+    {
+        $this->assertEquals('foo', Core::body(['body' => new StrClass]));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testEnsuresBodyIsValid()
+    {
+        Core::body(['body' => false]);
+    }
+
+    public function testParsesHeadersFromLines()
+    {
+        $lines = ['Foo: bar', 'Foo: baz', 'Abc: 123', 'Def: a, b'];
+        $this->assertEquals([
+            'Foo' => ['bar', 'baz'],
+            'Abc' => ['123'],
+            'Def' => ['a, b'],
+        ], Core::headersFromLines($lines));
+    }
+
+    public function testParsesHeadersFromLinesWithMultipleLines()
+    {
+        $lines = ['Foo: bar', 'Foo: baz', 'Foo: 123'];
+        $this->assertEquals([
+            'Foo' => ['bar', 'baz', '123'],
+        ], Core::headersFromLines($lines));
+    }
+
+    public function testCreatesArrayCallFunctions()
+    {
+        $called = [];
+        $a = function ($a, $b) use (&$called) {
+            $called['a'] = func_get_args();
+        };
+        $b = function ($a, $b) use (&$called) {
+            $called['b'] = func_get_args();
+        };
+        $c = Core::callArray([$a, $b]);
+        $c(1, 2);
+        $this->assertEquals([1, 2], $called['a']);
+        $this->assertEquals([1, 2], $called['b']);
+    }
+
+    public function testRewindsGuzzleStreams()
+    {
+        $str = Stream::factory('foo');
+        $this->assertTrue(Core::rewindBody(['body' => $str]));
+    }
+
+    public function testRewindsStreams()
+    {
+        $str = Stream::factory('foo')->detach();
+        $this->assertTrue(Core::rewindBody(['body' => $str]));
+    }
+
+    public function testRewindsIterators()
+    {
+        $iter = new \ArrayIterator(['foo']);
+        $this->assertTrue(Core::rewindBody(['body' => $iter]));
+    }
+
+    public function testRewindsStrings()
+    {
+        $this->assertTrue(Core::rewindBody(['body' => 'hi']));
+    }
+
+    public function testRewindsToStrings()
+    {
+        $this->assertTrue(Core::rewindBody(['body' => new StrClass()]));
+    }
+
+    public function typeProvider()
+    {
+        return [
+            ['foo', 'string(3) "foo"'],
+            [true, 'bool(true)'],
+            [false, 'bool(false)'],
+            [10, 'int(10)'],
+            [1.0, 'float(1)'],
+            [new StrClass(), 'object(GuzzleHttp\Tests\Ring\StrClass)'],
+            [['foo'], 'array(1)']
+        ];
+    }
+
+    /**
+     * @dataProvider typeProvider
+     */
+    public function testDescribesType($input, $output)
+    {
+        $this->assertEquals($output, Core::describeType($input));
+    }
+
+    public function testDoesSleep()
+    {
+        $t = microtime(true);
+        $expected = $t + (100 / 1000);
+        Core::doSleep(['client' => ['delay' => 100]]);
+        $this->assertGreaterThanOrEqual($expected, microtime(true));
+    }
+
+    public function testProxiesFuture()
+    {
+        $f = new CompletedFutureArray(['status' => 200]);
+        $res = null;
+        $proxied = Core::proxy($f, function ($value) use (&$res) {
+            $value['foo'] = 'bar';
+            $res = $value;
+            return $value;
+        });
+        $this->assertNotSame($f, $proxied);
+        $this->assertEquals(200, $f->wait()['status']);
+        $this->assertArrayNotHasKey('foo', $f->wait());
+        $this->assertEquals('bar', $proxied->wait()['foo']);
+        $this->assertEquals(200, $proxied->wait()['status']);
+    }
+
+    public function testProxiesDeferredFuture()
+    {
+        $d = new Deferred();
+        $f = new FutureArray($d->promise());
+        $f2 = Core::proxy($f);
+        $d->resolve(['foo' => 'bar']);
+        $this->assertEquals('bar', $f['foo']);
+        $this->assertEquals('bar', $f2['foo']);
+    }
+
+    public function testProxiesDeferredFutureFailure()
+    {
+        $d = new Deferred();
+        $f = new FutureArray($d->promise());
+        $f2 = Core::proxy($f);
+        $d->reject(new \Exception('foo'));
+        try {
+            $f2['hello?'];
+            $this->fail('did not throw');
+        } catch (\Exception $e) {
+            $this->assertEquals('foo', $e->getMessage());
+        }
+
+    }
+}
+
+final class StrClass
+{
+    public function __toString()
+    {
+        return 'foo';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..82d7efbf5caa958a54c786efc9a0fa572e4b3f21
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureArrayTest.php
@@ -0,0 +1,21 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Future;
+
+use GuzzleHttp\Ring\Future\CompletedFutureArray;
+
+class CompletedFutureArrayTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsAsArray()
+    {
+        $f = new CompletedFutureArray(['foo' => 'bar']);
+        $this->assertEquals('bar', $f['foo']);
+        $this->assertFalse(isset($f['baz']));
+        $f['abc'] = '123';
+        $this->assertTrue(isset($f['abc']));
+        $this->assertEquals(['foo' => 'bar', 'abc' => '123'], iterator_to_array($f));
+        $this->assertEquals(2, count($f));
+        unset($f['abc']);
+        $this->assertEquals(1, count($f));
+        $this->assertEquals(['foo' => 'bar'], iterator_to_array($f));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ded40dfba63f90c7cfb08f70b32c991a64db9ac
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/CompletedFutureValueTest.php
@@ -0,0 +1,46 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Future;
+
+use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+use GuzzleHttp\Ring\Future\CompletedFutureValue;
+
+class CompletedFutureValueTest extends \PHPUnit_Framework_TestCase
+{
+    public function testReturnsValue()
+    {
+        $f = new CompletedFutureValue('hi');
+        $this->assertEquals('hi', $f->wait());
+        $f->cancel();
+
+        $a = null;
+        $f->then(function ($v) use (&$a) {
+            $a = $v;
+        });
+        $this->assertSame('hi', $a);
+    }
+
+    public function testThrows()
+    {
+        $ex = new \Exception('foo');
+        $f = new CompletedFutureValue(null, $ex);
+        $f->cancel();
+        try {
+            $f->wait();
+            $this->fail('did not throw');
+        } catch (\Exception $e) {
+            $this->assertSame($e, $ex);
+        }
+    }
+
+    public function testMarksAsCancelled()
+    {
+        $ex = new CancelledFutureAccessException();
+        $f = new CompletedFutureValue(null, $ex);
+        try {
+            $f->wait();
+            $this->fail('did not throw');
+        } catch (\Exception $e) {
+            $this->assertSame($e, $ex);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e09f5afa837c54815ca3931a3bd7aa9bf737fa8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/FutureArrayTest.php
@@ -0,0 +1,56 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Future;
+
+use GuzzleHttp\Ring\Future\FutureArray;
+use React\Promise\Deferred;
+
+class FutureArrayTest extends \PHPUnit_Framework_TestCase
+{
+    public function testLazilyCallsDeref()
+    {
+        $c = false;
+        $deferred = new Deferred();
+        $f = new FutureArray(
+            $deferred->promise(),
+            function () use (&$c, $deferred) {
+                $c = true;
+                $deferred->resolve(['status' => 200]);
+            }
+        );
+        $this->assertFalse($c);
+        $this->assertFalse($this->readAttribute($f, 'isRealized'));
+        $this->assertEquals(200, $f['status']);
+        $this->assertTrue($c);
+    }
+
+    public function testActsLikeArray()
+    {
+        $deferred = new Deferred();
+        $f = new FutureArray(
+            $deferred->promise(),
+            function () use (&$c, $deferred) {
+                $deferred->resolve(['status' => 200]);
+            }
+        );
+
+        $this->assertTrue(isset($f['status']));
+        $this->assertEquals(200, $f['status']);
+        $this->assertEquals(['status' => 200], $f->wait());
+        $this->assertEquals(1, count($f));
+        $f['baz'] = 10;
+        $this->assertEquals(10, $f['baz']);
+        unset($f['baz']);
+        $this->assertFalse(isset($f['baz']));
+        $this->assertEquals(['status' => 200], iterator_to_array($f));
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testThrowsWhenAccessingInvalidProperty()
+    {
+        $deferred = new Deferred();
+        $f = new FutureArray($deferred->promise(), function () {});
+        $f->foo;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d59c543d0ff28af2ede0c720c059f96e87409704
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/Future/FutureValueTest.php
@@ -0,0 +1,109 @@
+<?php
+namespace GuzzleHttp\Tests\Ring\Future;
+
+use GuzzleHttp\Ring\Exception\CancelledFutureAccessException;
+use GuzzleHttp\Ring\Future\FutureValue;
+use React\Promise\Deferred;
+
+class FutureValueTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDerefReturnsValue()
+    {
+        $called = 0;
+        $deferred = new Deferred();
+
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () use ($deferred, &$called) {
+                $called++;
+                $deferred->resolve('foo');
+            }
+        );
+
+        $this->assertEquals('foo', $f->wait());
+        $this->assertEquals(1, $called);
+        $this->assertEquals('foo', $f->wait());
+        $this->assertEquals(1, $called);
+        $f->cancel();
+        $this->assertTrue($this->readAttribute($f, 'isRealized'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Ring\Exception\CancelledFutureAccessException
+     */
+    public function testThrowsWhenAccessingCancelled()
+    {
+        $f = new FutureValue(
+            (new Deferred())->promise(),
+            function () {},
+            function () { return true; }
+        );
+        $f->cancel();
+        $f->wait();
+    }
+
+    /**
+     * @expectedException \OutOfBoundsException
+     */
+    public function testThrowsWhenDerefFailure()
+    {
+        $called = false;
+        $deferred = new Deferred();
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () use(&$called) {
+                $called = true;
+            }
+        );
+        $deferred->reject(new \OutOfBoundsException());
+        $f->wait();
+        $this->assertFalse($called);
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Ring\Exception\RingException
+     * @expectedExceptionMessage Waiting did not resolve future
+     */
+    public function testThrowsWhenDerefDoesNotResolve()
+    {
+        $deferred = new Deferred();
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () use(&$called) {
+                $called = true;
+            }
+        );
+        $f->wait();
+    }
+
+    public function testThrowingCancelledFutureAccessExceptionCancels()
+    {
+        $deferred = new Deferred();
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () use ($deferred) {
+                throw new CancelledFutureAccessException();
+            }
+        );
+        try {
+            $f->wait();
+            $this->fail('did not throw');
+        } catch (CancelledFutureAccessException $e) {}
+    }
+
+    /**
+     * @expectedException \Exception
+     * @expectedExceptionMessage foo
+     */
+    public function testThrowingExceptionInDerefMarksAsFailed()
+    {
+        $deferred = new Deferred();
+        $f = new FutureValue(
+            $deferred->promise(),
+            function () {
+                throw new \Exception('foo');
+            }
+        );
+        $f->wait();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/bootstrap.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..017610fe0d86c2258a5baacd5b889ebfc002fb28
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/ringphp/tests/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+require __DIR__ . '/../vendor/autoload.php';
+require __DIR__ . '/Client/Server.php';
+
+use GuzzleHttp\Tests\Ring\Client\Server;
+
+Server::start();
+
+register_shutdown_function(function () {
+    Server::stop();
+});
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/.travis.yml b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a6f8a87b7dc46e42a2ca74885674dfab0ebb7c2b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/.travis.yml
@@ -0,0 +1,17 @@
+language: php
+
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+
+before_script:
+  - composer self-update
+  - composer install --no-interaction --prefer-source --dev
+
+script: vendor/bin/phpunit
+
+matrix:
+  allow_failures:
+    - php: hhvm
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/CHANGELOG.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/CHANGELOG.rst
new file mode 100644
index 0000000000000000000000000000000000000000..0018ffe353f1ebb94097d811755289cfba1a4b5b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/CHANGELOG.rst
@@ -0,0 +1,94 @@
+=========
+Changelog
+=========
+
+3.0.0 (2014-10-12)
+------------------
+
+* Now supports creating streams from functions and iterators.
+* Supports creating buffered streams and asynchronous streams.
+* Removed ``functions.php``. Use the corresponding functions provided by
+  ``GuzzleHttp\Streams\Utils`` instead.
+* Moved ``GuzzleHttp\Stream\MetadataStreamInterface::getMetadata`` to
+  ``GuzzleHttp\Stream\StreamInterface``. MetadataStreamInterface is no longer
+  used and is marked as deprecated.
+* Added ``attach()`` to ``GuzzleHttp\Stream\StreamInterface`` for PSR-7
+  compatibility.
+* Removed ``flush()`` from StreamInterface.
+* Removed the ``$maxLength`` parameter from
+  ``GuzzleHttp\Stream\StreamInterface::getContents()``. This function now
+  returns the entire remainder of the stream. If you want to limit the maximum
+  amount of data read from the stream, use the
+  ``GuzzleHttp\Stream\Utils::copyToString()`` function.
+* Streams that return an empty string, ``''``, are no longer considered a
+  failure. You MUST return ``false`` to mark the read as a failure, and ensure
+  that any decorators you create properly return ``true`` in response to the
+  ``eof()`` method when the stream is consumed.
+* ``GuzzleHttp\Stream\Stream::__construct``,
+  ``GuzzleHttp\Stream\Stream::factory``, and
+  ``GuzzleHttp\Stream\Utils::create`` no longer accept a size in the second
+  argument. They now accept an associative array of options, including the
+  "size" key and "metadata" key which can be used to provide custom metadata.
+* Added ``GuzzleHttp\Stream\BufferStream`` to add support for buffering data,
+  and when read, shifting data off of the buffer.
+* Added ``GuzzleHttp\Stream\NullBuffer`` which can be used as a buffer that
+  does not actually store any data.
+* Added ``GuzzleHttp\Stream\AsyncStream`` to provide support for non-blocking
+  streams that can be filled by a remote source (e.g., an event-loop). If a
+  ``drain`` option is provided, the stream can also act as if it is a blocking
+  stream.
+
+2.1.0 (2014-08-17)
+------------------
+
+* Added an InflateStream to inflate gzipped or deflated content.
+* Added ``flush`` to stream wrapper.
+* Added the ability to easily register the GuzzleStreamWrapper if needed.
+
+2.0.0 (2014-08-16)
+------------------
+
+* Deprecated functions.php and moved all of those methods to
+  ``GuzzleHttp\Streams\Utils``. Use ``GuzzleHttp\Stream\Stream::factory()``
+  instead of ``GuzzleHttp\Stream\create()`` to create new streams.
+* Added ``flush()`` to ``StreamInterface``. This method is used to flush any
+  underlying stream write buffers.
+* Added ``FnStream`` to easily decorate stream behavior with callables.
+* ``Utils::hash`` now throws an exception when the stream cannot seek to 0.
+
+1.5.1 (2014-09-10)
+------------------
+
+* Stream metadata is grabbed from the underlying stream each time
+  ``getMetadata`` is called rather than returning a value from a cache.
+* Properly closing all underlying streams when AppendStream is closed.
+* Seek functions no longer throw exceptions.
+* LazyOpenStream now correctly returns the underlying stream resource when
+  detached.
+
+1.5.0 (2014-08-07)
+------------------
+
+* Added ``Stream\safe_open`` to open stream resources and throw exceptions
+  instead of raising errors.
+
+1.4.0 (2014-07-19)
+------------------
+
+* Added a LazyOpenStream
+
+1.3.0 (2014-07-15)
+------------------
+
+* Added an AppendStream to stream over multiple stream one after the other.
+
+1.2.0 (2014-07-15)
+------------------
+
+* Updated the ``detach()`` method to return the underlying stream resource or
+  ``null`` if it does not wrap a resource.
+* Multiple fixes for how streams behave when the underlying resource is
+  detached
+* Do not clear statcache when a stream does not have a 'uri'
+* Added a fix to LimitStream
+* Added a condition to ensure that functions.php can be required multiple times
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/LICENSE b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..71d3b783cb5b82e732f4555c5b7839036334607b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
+
+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:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+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.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/Makefile b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f4d42849e528e185aaaa1b2d478c541b629601b7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/Makefile
@@ -0,0 +1,19 @@
+all: clean coverage
+
+release: tag
+	git push origin --tags
+
+tag:
+	chag tag --sign --debug CHANGELOG.rst
+
+test:
+	vendor/bin/phpunit
+
+coverage:
+	vendor/bin/phpunit --coverage-html=artifacts/coverage
+
+view-coverage:
+	open artifacts/coverage/index.html
+
+clean:
+	rm -rf artifacts/*
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/README.rst b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/README.rst
new file mode 100644
index 0000000000000000000000000000000000000000..baff63b37d59ac356f00f0b32b2f5c5ef22ebc9f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/README.rst
@@ -0,0 +1,36 @@
+==============
+Guzzle Streams
+==============
+
+Provides a simple abstraction over streams of data.
+
+This library is used in `Guzzle 5 <https://github.com/guzzle/guzzle>`_, and is
+(currently) compatible with the WIP PSR-7.
+
+Installation
+============
+
+This package can be installed easily using `Composer <http://getcomposer.org>`_.
+Simply add the following to the composer.json file at the root of your project:
+
+.. code-block:: javascript
+
+    {
+      "require": {
+        "guzzlehttp/streams": "~3.0"
+      }
+    }
+
+Then install your dependencies using ``composer.phar install``.
+
+Documentation
+=============
+
+The documentation for this package can be found on the main Guzzle website at
+http://docs.guzzlephp.org/en/guzzle4/streams.html.
+
+Testing
+=======
+
+This library is tested using PHPUnit. You'll need to install the dependencies
+using `Composer <http://getcomposer.org>`_ then run ``make test``.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/composer.json b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..6d7034370bda463f985656ea07b08e78661a141d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/composer.json
@@ -0,0 +1,28 @@
+{
+    "name": "guzzlehttp/streams",
+    "description": "Provides a simple abstraction over streams of data",
+    "homepage": "http://guzzlephp.org/",
+    "keywords": ["stream", "guzzle"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~4.0"
+    },
+    "autoload": {
+        "psr-4": { "GuzzleHttp\\Stream\\": "src/" }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "3.0-dev"
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/phpunit.xml.dist b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..6e758c1927bf71d8c865ea8cd6bfc6bb928a0fbf
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/phpunit.xml.dist
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit bootstrap="./vendor/autoload.php"
+         colors="true">
+    <testsuites>
+        <testsuite>
+            <directory>tests</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist>
+            <directory suffix=".php">src</directory>
+            <exclude>
+                <file>src/functions.php</file>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/AppendStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/AppendStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..94bda7173f7e2ee02a676ed3764258c056d1a4c3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/AppendStream.php
@@ -0,0 +1,220 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
+/**
+ * Reads from multiple streams, one after the other.
+ *
+ * This is a read-only stream decorator.
+ */
+class AppendStream implements StreamInterface
+{
+    /** @var StreamInterface[] Streams being decorated */
+    private $streams = [];
+
+    private $seekable = true;
+    private $current = 0;
+    private $pos = 0;
+    private $detached = false;
+
+    /**
+     * @param StreamInterface[] $streams Streams to decorate. Each stream must
+     *                                   be readable.
+     */
+    public function __construct(array $streams = [])
+    {
+        foreach ($streams as $stream) {
+            $this->addStream($stream);
+        }
+    }
+
+    public function __toString()
+    {
+        try {
+            $this->seek(0);
+            return $this->getContents();
+        } catch (\Exception $e) {
+            return '';
+        }
+    }
+
+    /**
+     * Add a stream to the AppendStream
+     *
+     * @param StreamInterface $stream Stream to append. Must be readable.
+     *
+     * @throws \InvalidArgumentException if the stream is not readable
+     */
+    public function addStream(StreamInterface $stream)
+    {
+        if (!$stream->isReadable()) {
+            throw new \InvalidArgumentException('Each stream must be readable');
+        }
+
+        // The stream is only seekable if all streams are seekable
+        if (!$stream->isSeekable()) {
+            $this->seekable = false;
+        }
+
+        $this->streams[] = $stream;
+    }
+
+    public function getContents()
+    {
+        return Utils::copyToString($this);
+    }
+
+    /**
+     * Closes each attached stream.
+     *
+     * {@inheritdoc}
+     */
+    public function close()
+    {
+        $this->pos = $this->current = 0;
+
+        foreach ($this->streams as $stream) {
+            $stream->close();
+        }
+
+        $this->streams = [];
+    }
+
+    /**
+     * Detaches each attached stream
+     *
+     * {@inheritdoc}
+     */
+    public function detach()
+    {
+        $this->close();
+        $this->detached = true;
+    }
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
+    public function tell()
+    {
+        return $this->pos;
+    }
+
+    /**
+     * Tries to calculate the size by adding the size of each stream.
+     *
+     * If any of the streams do not return a valid number, then the size of the
+     * append stream cannot be determined and null is returned.
+     *
+     * {@inheritdoc}
+     */
+    public function getSize()
+    {
+        $size = 0;
+
+        foreach ($this->streams as $stream) {
+            $s = $stream->getSize();
+            if ($s === null) {
+                return null;
+            }
+            $size += $s;
+        }
+
+        return $size;
+    }
+
+    public function eof()
+    {
+        return !$this->streams ||
+            ($this->current >= count($this->streams) - 1 &&
+             $this->streams[$this->current]->eof());
+    }
+
+    /**
+     * Attempts to seek to the given position. Only supports SEEK_SET.
+     *
+     * {@inheritdoc}
+     */
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        if (!$this->seekable || $whence !== SEEK_SET) {
+            return false;
+        }
+
+        $success = true;
+        $this->pos = $this->current = 0;
+
+        // Rewind each stream
+        foreach ($this->streams as $stream) {
+            if (!$stream->seek(0)) {
+                $success = false;
+            }
+        }
+
+        if (!$success) {
+            return false;
+        }
+
+        // Seek to the actual position by reading from each stream
+        while ($this->pos < $offset && !$this->eof()) {
+            $this->read(min(8096, $offset - $this->pos));
+        }
+
+        return $this->pos == $offset;
+    }
+
+    /**
+     * Reads from all of the appended streams until the length is met or EOF.
+     *
+     * {@inheritdoc}
+     */
+    public function read($length)
+    {
+        $buffer = '';
+        $total = count($this->streams) - 1;
+        $remaining = $length;
+
+        while ($remaining > 0) {
+            // Progress to the next stream if needed.
+            if ($this->streams[$this->current]->eof()) {
+                if ($this->current == $total) {
+                    break;
+                }
+                $this->current++;
+            }
+            $buffer .= $this->streams[$this->current]->read($remaining);
+            $remaining = $length - strlen($buffer);
+        }
+
+        $this->pos += strlen($buffer);
+
+        return $buffer;
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function isWritable()
+    {
+        return false;
+    }
+
+    public function isSeekable()
+    {
+        return $this->seekable;
+    }
+
+    public function write($string)
+    {
+        return false;
+    }
+
+    public function getMetadata($key = null)
+    {
+        return $key ? null : [];
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/AsyncReadStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/AsyncReadStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..25ad96021a760538351632eea7cdb6dae32cdb71
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/AsyncReadStream.php
@@ -0,0 +1,207 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Represents an asynchronous read-only stream that supports a drain event and
+ * pumping data from a source stream.
+ *
+ * The AsyncReadStream can be used as a completely asynchronous stream, meaning
+ * the data you can read from the stream will immediately return only
+ * the data that is currently buffered.
+ *
+ * AsyncReadStream can also be used in a "blocking" manner if a "pump" function
+ * is provided. When a caller requests more bytes than are available in the
+ * buffer, then the pump function is used to block until the requested number
+ * of bytes are available or the remote source stream has errored, closed, or
+ * timed-out. This behavior isn't strictly "blocking" because the pump function
+ * can send other transfers while waiting on the desired buffer size to be
+ * ready for reading (e.g., continue to tick an event loop).
+ *
+ * @unstable This class is subject to change.
+ */
+class AsyncReadStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    /** @var callable|null Fn used to notify writers the buffer has drained */
+    private $drain;
+
+    /** @var callable|null Fn used to block for more data */
+    private $pump;
+
+    /** @var int|null Highwater mark of the underlying buffer */
+    private $hwm;
+
+    /** @var bool Whether or not drain needs to be called at some point */
+    private $needsDrain;
+
+    /** @var int The expected size of the remote source */
+    private $size;
+
+    /**
+     * In order to utilize high water marks to tell writers to slow down, the
+     * provided stream must answer to the "hwm" stream metadata variable,
+     * providing the high water mark. If no "hwm" metadata value is available,
+     * then the "drain" functionality is not utilized.
+     *
+     * This class accepts an associative array of configuration options.
+     *
+     * - drain: (callable) Function to invoke when the stream has drained,
+     *   meaning the buffer is now writable again because the size of the
+     *   buffer is at an acceptable level (e.g., below the high water mark).
+     *   The function accepts a single argument, the buffer stream object that
+     *   has drained.
+     * - pump: (callable) A function that accepts the number of bytes to read
+     *   from the source stream. This function will block until all of the data
+     *   that was requested has been read, EOF of the source stream, or the
+     *   source stream is closed.
+     * - size: (int) The expected size in bytes of the data that will be read
+     *   (if known up-front).
+     *
+     * @param StreamInterface $buffer   Buffer that contains the data that has
+     *                                  been read by the event loop.
+     * @param array           $config   Associative array of options.
+     *
+     * @throws \InvalidArgumentException if the buffer is not readable and
+     *                                   writable.
+     */
+    public function __construct(
+        StreamInterface $buffer,
+        array $config = []
+    ) {
+        if (!$buffer->isReadable() || !$buffer->isWritable()) {
+            throw new \InvalidArgumentException(
+                'Buffer must be readable and writable'
+            );
+        }
+
+        if (isset($config['size'])) {
+            $this->size = $config['size'];
+        }
+
+        static $callables = ['pump', 'drain'];
+        foreach ($callables as $check) {
+            if (isset($config[$check])) {
+                if (!is_callable($config[$check])) {
+                    throw new \InvalidArgumentException(
+                        $check . ' must be callable'
+                    );
+                }
+                $this->{$check} = $config[$check];
+            }
+        }
+
+        $this->hwm = $buffer->getMetadata('hwm');
+
+        // Cannot drain when there's no high water mark.
+        if ($this->hwm === null) {
+            $this->drain = null;
+        }
+
+        $this->stream = $buffer;
+    }
+
+    /**
+     * Factory method used to create new async stream and an underlying buffer
+     * if no buffer is provided.
+     *
+     * This function accepts the same options as AsyncReadStream::__construct,
+     * but added the following key value pairs:
+     *
+     * - buffer: (StreamInterface) Buffer used to buffer data. If none is
+     *   provided, a default buffer is created.
+     * - hwm: (int) High water mark to use if a buffer is created on your
+     *   behalf.
+     * - max_buffer: (int) If provided, wraps the utilized buffer in a
+     *   DroppingStream decorator to ensure that buffer does not exceed a given
+     *   length. When exceeded, the stream will begin dropping data. Set the
+     *   max_buffer to 0, to use a NullStream which does not store data.
+     * - write: (callable) A function that is invoked when data is written
+     *   to the underlying buffer. The function accepts the buffer as the first
+     *   argument, and the data being written as the second. The function MUST
+     *   return the number of bytes that were written or false to let writers
+     *   know to slow down.
+     * - drain: (callable) See constructor documentation.
+     * - pump: (callable) See constructor documentation.
+     *
+     * @param array $options Associative array of options.
+     *
+     * @return array Returns an array containing the buffer used to buffer
+     *               data, followed by the ready to use AsyncReadStream object.
+     */
+    public static function create(array $options = [])
+    {
+        $maxBuffer = isset($options['max_buffer'])
+            ? $options['max_buffer']
+            : null;
+
+        if ($maxBuffer === 0) {
+            $buffer = new NullStream();
+        } elseif (isset($options['buffer'])) {
+            $buffer = $options['buffer'];
+        } else {
+            $hwm = isset($options['hwm']) ? $options['hwm'] : 16384;
+            $buffer = new BufferStream($hwm);
+        }
+
+        if ($maxBuffer > 0) {
+            $buffer = new DroppingStream($buffer, $options['max_buffer']);
+        }
+
+        // Call the on_write callback if an on_write function was provided.
+        if (isset($options['write'])) {
+            $onWrite = $options['write'];
+            $buffer = FnStream::decorate($buffer, [
+                'write' => function ($string) use ($buffer, $onWrite) {
+                    $result = $buffer->write($string);
+                    $onWrite($buffer, $string);
+                    return $result;
+                }
+            ]);
+        }
+
+        return [$buffer, new self($buffer, $options)];
+    }
+
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    public function isWritable()
+    {
+        return false;
+    }
+
+    public function write($string)
+    {
+        return false;
+    }
+
+    public function read($length)
+    {
+        if (!$this->needsDrain && $this->drain) {
+            $this->needsDrain = $this->stream->getSize() >= $this->hwm;
+        }
+
+        $result = $this->stream->read($length);
+
+        // If we need to drain, then drain when the buffer is empty.
+        if ($this->needsDrain && $this->stream->getSize() === 0) {
+            $this->needsDrain = false;
+            $drainFn = $this->drain;
+            $drainFn($this->stream);
+        }
+
+        $resultLen = strlen($result);
+
+        // If a pump was provided, the buffer is still open, and not enough
+        // data was given, then block until the data is provided.
+        if ($this->pump && $resultLen < $length) {
+            $pumpFn = $this->pump;
+            $result .= $pumpFn($length - $resultLen);
+        }
+
+        return $result;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/BufferStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/BufferStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..0fffbd63a8c555a95dc7630b9a838c596591d68d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/BufferStream.php
@@ -0,0 +1,138 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
+/**
+ * Provides a buffer stream that can be written to to fill a buffer, and read
+ * from to remove bytes from the buffer.
+ *
+ * This stream returns a "hwm" metadata value that tells upstream consumers
+ * what the configured high water mark of the stream is, or the maximum
+ * preferred size of the buffer.
+ *
+ * @package GuzzleHttp\Stream
+ */
+class BufferStream implements StreamInterface
+{
+    private $hwm;
+    private $buffer = '';
+
+    /**
+     * @param int $hwm High water mark, representing the preferred maximum
+     *                 buffer size. If the size of the buffer exceeds the high
+     *                 water mark, then calls to write will continue to succeed
+     *                 but will return false to inform writers to slow down
+     *                 until the buffer has been drained by reading from it.
+     */
+    public function __construct($hwm = 16384)
+    {
+        $this->hwm = $hwm;
+    }
+
+    public function __toString()
+    {
+        return $this->getContents();
+    }
+
+    public function getContents()
+    {
+        $buffer = $this->buffer;
+        $this->buffer = '';
+
+        return $buffer;
+    }
+
+    public function close()
+    {
+        $this->buffer = '';
+    }
+
+    public function detach()
+    {
+        $this->close();
+    }
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
+    public function getSize()
+    {
+        return strlen($this->buffer);
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function isWritable()
+    {
+        return true;
+    }
+
+    public function isSeekable()
+    {
+        return false;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function eof()
+    {
+        return strlen($this->buffer) === 0;
+    }
+
+    public function tell()
+    {
+        return false;
+    }
+
+    /**
+     * Reads data from the buffer.
+     */
+    public function read($length)
+    {
+        $currentLength = strlen($this->buffer);
+
+        if ($length >= $currentLength) {
+            // No need to slice the buffer because we don't have enough data.
+            $result = $this->buffer;
+            $this->buffer = '';
+        } else {
+            // Slice up the result to provide a subset of the buffer.
+            $result = substr($this->buffer, 0, $length);
+            $this->buffer = substr($this->buffer, $length);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Writes data to the buffer.
+     */
+    public function write($string)
+    {
+        $this->buffer .= $string;
+
+        if (strlen($this->buffer) >= $this->hwm) {
+            return false;
+        }
+
+        return strlen($string);
+    }
+
+    public function getMetadata($key = null)
+    {
+        if ($key == 'hwm') {
+            return $this->hwm;
+        }
+
+        return $key ? null : [];
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/CachingStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/CachingStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..60bb9056c432e60019bafd2b609428c15fd63727
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/CachingStream.php
@@ -0,0 +1,122 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+use GuzzleHttp\Stream\Exception\SeekException;
+
+/**
+ * Stream decorator that can cache previously read bytes from a sequentially
+ * read stream.
+ */
+class CachingStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    /** @var StreamInterface Stream being wrapped */
+    private $remoteStream;
+
+    /** @var int Number of bytes to skip reading due to a write on the buffer */
+    private $skipReadBytes = 0;
+
+    /**
+     * We will treat the buffer object as the body of the stream
+     *
+     * @param StreamInterface $stream Stream to cache
+     * @param StreamInterface $target Optionally specify where data is cached
+     */
+    public function __construct(
+        StreamInterface $stream,
+        StreamInterface $target = null
+    ) {
+        $this->remoteStream = $stream;
+        $this->stream = $target ?: new Stream(fopen('php://temp', 'r+'));
+    }
+
+    public function getSize()
+    {
+        return max($this->stream->getSize(), $this->remoteStream->getSize());
+    }
+
+    /**
+     * {@inheritdoc}
+     * @throws SeekException When seeking with SEEK_END or when seeking
+     *     past the total size of the buffer stream
+     */
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        if ($whence == SEEK_SET) {
+            $byte = $offset;
+        } elseif ($whence == SEEK_CUR) {
+            $byte = $offset + $this->tell();
+        } else {
+            return false;
+        }
+
+        // You cannot skip ahead past where you've read from the remote stream
+        if ($byte > $this->stream->getSize()) {
+            throw new SeekException(
+                $this,
+                $byte,
+                sprintf('Cannot seek to byte %d when the buffered stream only'
+                    . ' contains %d bytes', $byte, $this->stream->getSize())
+            );
+        }
+
+        return $this->stream->seek($byte);
+    }
+
+    public function read($length)
+    {
+        // Perform a regular read on any previously read data from the buffer
+        $data = $this->stream->read($length);
+        $remaining = $length - strlen($data);
+
+        // More data was requested so read from the remote stream
+        if ($remaining) {
+            // If data was written to the buffer in a position that would have
+            // been filled from the remote stream, then we must skip bytes on
+            // the remote stream to emulate overwriting bytes from that
+            // position. This mimics the behavior of other PHP stream wrappers.
+            $remoteData = $this->remoteStream->read(
+                $remaining + $this->skipReadBytes
+            );
+
+            if ($this->skipReadBytes) {
+                $len = strlen($remoteData);
+                $remoteData = substr($remoteData, $this->skipReadBytes);
+                $this->skipReadBytes = max(0, $this->skipReadBytes - $len);
+            }
+
+            $data .= $remoteData;
+            $this->stream->write($remoteData);
+        }
+
+        return $data;
+    }
+
+    public function write($string)
+    {
+        // When appending to the end of the currently read stream, you'll want
+        // to skip bytes from being read from the remote stream to emulate
+        // other stream wrappers. Basically replacing bytes of data of a fixed
+        // length.
+        $overflow = (strlen($string) + $this->tell()) - $this->remoteStream->tell();
+        if ($overflow > 0) {
+            $this->skipReadBytes += $overflow;
+        }
+
+        return $this->stream->write($string);
+    }
+
+    public function eof()
+    {
+        return $this->stream->eof() && $this->remoteStream->eof();
+    }
+
+    /**
+     * Close both the remote stream and buffer stream
+     */
+    public function close()
+    {
+        $this->remoteStream->close() && $this->stream->close();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/DroppingStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/DroppingStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..56ee80c123a92b906e636adc71dfb95f74968dc5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/DroppingStream.php
@@ -0,0 +1,42 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Stream decorator that begins dropping data once the size of the underlying
+ * stream becomes too full.
+ */
+class DroppingStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    private $maxLength;
+
+    /**
+     * @param StreamInterface $stream    Underlying stream to decorate.
+     * @param int             $maxLength Maximum size before dropping data.
+     */
+    public function __construct(StreamInterface $stream, $maxLength)
+    {
+        $this->stream = $stream;
+        $this->maxLength = $maxLength;
+    }
+
+    public function write($string)
+    {
+        $diff = $this->maxLength - $this->stream->getSize();
+
+        // Begin returning false when the underlying stream is too large.
+        if ($diff <= 0) {
+            return false;
+        }
+
+        // Write the stream or a subset of the stream if needed.
+        if (strlen($string) < $diff) {
+            return $this->stream->write($string);
+        }
+
+        $this->stream->write(substr($string, 0, $diff));
+
+        return false;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php
new file mode 100644
index 0000000000000000000000000000000000000000..e631b9fa44bb6410eef808e33d19fa32edd42193
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Exception/CannotAttachException.php
@@ -0,0 +1,4 @@
+<?php
+namespace GuzzleHttp\Stream\Exception;
+
+class CannotAttachException extends \RuntimeException {}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Exception/SeekException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Exception/SeekException.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f6d5ebad5180af15686dca6df791e2456463358
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Exception/SeekException.php
@@ -0,0 +1,27 @@
+<?php
+namespace GuzzleHttp\Stream\Exception;
+
+use GuzzleHttp\Stream\StreamInterface;
+
+/**
+ * Exception thrown when a seek fails on a stream.
+ */
+class SeekException extends \RuntimeException
+{
+    private $stream;
+
+    public function __construct(StreamInterface $stream, $pos = 0, $msg = '')
+    {
+        $this->stream = $stream;
+        $msg = $msg ?: 'Could not seek the stream to position ' . $pos;
+        parent::__construct($msg);
+    }
+
+    /**
+     * @return StreamInterface
+     */
+    public function getStream()
+    {
+        return $this->stream;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/FnStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/FnStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b5872d7f6c599b4f5c4b1858b4a3073cf918fab
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/FnStream.php
@@ -0,0 +1,147 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Compose stream implementations based on a hash of functions.
+ *
+ * Allows for easy testing and extension of a provided stream without needing
+ * to create a concrete class for a simple extension point.
+ */
+class FnStream implements StreamInterface
+{
+    /** @var array */
+    private $methods;
+
+    /** @var array Methods that must be implemented in the given array */
+    private static $slots = ['__toString', 'close', 'detach', 'attach',
+        'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',
+        'isReadable', 'read', 'getContents', 'getMetadata'];
+
+    /**
+     * @param array $methods Hash of method name to a callable.
+     */
+    public function __construct(array $methods)
+    {
+        $this->methods = $methods;
+
+        // Create the functions on the class
+        foreach ($methods as $name => $fn) {
+            $this->{'_fn_' . $name} = $fn;
+        }
+    }
+
+    /**
+     * Lazily determine which methods are not implemented.
+     * @throws \BadMethodCallException
+     */
+    public function __get($name)
+    {
+        throw new \BadMethodCallException(str_replace('_fn_', '', $name)
+            . '() is not implemented in the FnStream');
+    }
+
+    /**
+     * The close method is called on the underlying stream only if possible.
+     */
+    public function __destruct()
+    {
+        if (isset($this->_fn_close)) {
+            call_user_func($this->_fn_close);
+        }
+    }
+
+    /**
+     * Adds custom functionality to an underlying stream by intercepting
+     * specific method calls.
+     *
+     * @param StreamInterface $stream  Stream to decorate
+     * @param array           $methods Hash of method name to a closure
+     *
+     * @return FnStream
+     */
+    public static function decorate(StreamInterface $stream, array $methods)
+    {
+        // If any of the required methods were not provided, then simply
+        // proxy to the decorated stream.
+        foreach (array_diff(self::$slots, array_keys($methods)) as $diff) {
+            $methods[$diff] = [$stream, $diff];
+        }
+
+        return new self($methods);
+    }
+
+    public function __toString()
+    {
+        return call_user_func($this->_fn___toString);
+    }
+
+    public function close()
+    {
+        return call_user_func($this->_fn_close);
+    }
+
+    public function detach()
+    {
+        return call_user_func($this->_fn_detach);
+    }
+
+    public function attach($stream)
+    {
+        return call_user_func($this->_fn_attach, $stream);
+    }
+
+    public function getSize()
+    {
+        return call_user_func($this->_fn_getSize);
+    }
+
+    public function tell()
+    {
+        return call_user_func($this->_fn_tell);
+    }
+
+    public function eof()
+    {
+        return call_user_func($this->_fn_eof);
+    }
+
+    public function isSeekable()
+    {
+        return call_user_func($this->_fn_isSeekable);
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return call_user_func($this->_fn_seek, $offset, $whence);
+    }
+
+    public function isWritable()
+    {
+        return call_user_func($this->_fn_isWritable);
+    }
+
+    public function write($string)
+    {
+        return call_user_func($this->_fn_write, $string);
+    }
+
+    public function isReadable()
+    {
+        return call_user_func($this->_fn_isReadable);
+    }
+
+    public function read($length)
+    {
+        return call_user_func($this->_fn_read, $length);
+    }
+
+    public function getContents()
+    {
+        return call_user_func($this->_fn_getContents);
+    }
+
+    public function getMetadata($key = null)
+    {
+        return call_user_func($this->_fn_getMetadata, $key);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d049a6936d688dcafc6fc594acb395b3965b0d7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/GuzzleStreamWrapper.php
@@ -0,0 +1,117 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Converts Guzzle streams into PHP stream resources.
+ */
+class GuzzleStreamWrapper
+{
+    /** @var resource */
+    public $context;
+
+    /** @var StreamInterface */
+    private $stream;
+
+    /** @var string r, r+, or w */
+    private $mode;
+
+    /**
+     * Returns a resource representing the stream.
+     *
+     * @param StreamInterface $stream The stream to get a resource for
+     *
+     * @return resource
+     * @throws \InvalidArgumentException if stream is not readable or writable
+     */
+    public static function getResource(StreamInterface $stream)
+    {
+        self::register();
+
+        if ($stream->isReadable()) {
+            $mode = $stream->isWritable() ? 'r+' : 'r';
+        } elseif ($stream->isWritable()) {
+            $mode = 'w';
+        } else {
+            throw new \InvalidArgumentException('The stream must be readable, '
+                . 'writable, or both.');
+        }
+
+        return fopen('guzzle://stream', $mode, null, stream_context_create([
+            'guzzle' => ['stream' => $stream]
+        ]));
+    }
+
+    /**
+     * Registers the stream wrapper if needed
+     */
+    public static function register()
+    {
+        if (!in_array('guzzle', stream_get_wrappers())) {
+            stream_wrapper_register('guzzle', __CLASS__);
+        }
+    }
+
+    public function stream_open($path, $mode, $options, &$opened_path)
+    {
+        $options = stream_context_get_options($this->context);
+
+        if (!isset($options['guzzle']['stream'])) {
+            return false;
+        }
+
+        $this->mode = $mode;
+        $this->stream = $options['guzzle']['stream'];
+
+        return true;
+    }
+
+    public function stream_read($count)
+    {
+        return $this->stream->read($count);
+    }
+
+    public function stream_write($data)
+    {
+        return (int) $this->stream->write($data);
+    }
+
+    public function stream_tell()
+    {
+        return $this->stream->tell();
+    }
+
+    public function stream_eof()
+    {
+        return $this->stream->eof();
+    }
+
+    public function stream_seek($offset, $whence)
+    {
+        return $this->stream->seek($offset, $whence);
+    }
+
+    public function stream_stat()
+    {
+        static $modeMap = [
+            'r'  => 33060,
+            'r+' => 33206,
+            'w'  => 33188
+        ];
+
+        return [
+            'dev'     => 0,
+            'ino'     => 0,
+            'mode'    => $modeMap[$this->mode],
+            'nlink'   => 0,
+            'uid'     => 0,
+            'gid'     => 0,
+            'rdev'    => 0,
+            'size'    => $this->stream->getSize() ?: 0,
+            'atime'   => 0,
+            'mtime'   => 0,
+            'ctime'   => 0,
+            'blksize' => 0,
+            'blocks'  => 0
+        ];
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/InflateStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/InflateStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..978af21031b9f83a174008e8750d4d0ebcc20b5f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/InflateStream.php
@@ -0,0 +1,27 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.
+ *
+ * This stream decorator skips the first 10 bytes of the given stream to remove
+ * the gzip header, converts the provided stream to a PHP stream resource,
+ * then appends the zlib.inflate filter. The stream is then converted back
+ * to a Guzzle stream resource to be used as a Guzzle stream.
+ *
+ * @link http://tools.ietf.org/html/rfc1952
+ * @link http://php.net/manual/en/filters.compression.php
+ */
+class InflateStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    public function __construct(StreamInterface $stream)
+    {
+        // Skip the first 10 bytes
+        $stream = new LimitStream($stream, -1, 10);
+        $resource = GuzzleStreamWrapper::getResource($stream);
+        stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ);
+        $this->stream = new Stream($resource);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/LazyOpenStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/LazyOpenStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..6242ee7b57fa0783cc2f79aa45c6391c2c689b52
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/LazyOpenStream.php
@@ -0,0 +1,37 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Lazily reads or writes to a file that is opened only after an IO operation
+ * take place on the stream.
+ */
+class LazyOpenStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    /** @var string File to open */
+    private $filename;
+
+    /** @var string $mode */
+    private $mode;
+
+    /**
+     * @param string $filename File to lazily open
+     * @param string $mode     fopen mode to use when opening the stream
+     */
+    public function __construct($filename, $mode)
+    {
+        $this->filename = $filename;
+        $this->mode = $mode;
+    }
+
+    /**
+     * Creates the underlying stream lazily when required.
+     *
+     * @return StreamInterface
+     */
+    protected function createStream()
+    {
+        return Stream::factory(Utils::open($this->filename, $this->mode));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/LimitStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/LimitStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..e9fad98573318b55a4b2f70805746956a52e1036
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/LimitStream.php
@@ -0,0 +1,161 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+use GuzzleHttp\Stream\Exception\SeekException;
+
+/**
+ * Decorator used to return only a subset of a stream
+ */
+class LimitStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    /** @var int Offset to start reading from */
+    private $offset;
+
+    /** @var int Limit the number of bytes that can be read */
+    private $limit;
+
+    /**
+     * @param StreamInterface $stream Stream to wrap
+     * @param int             $limit  Total number of bytes to allow to be read
+     *                                from the stream. Pass -1 for no limit.
+     * @param int|null        $offset Position to seek to before reading (only
+     *                                works on seekable streams).
+     */
+    public function __construct(
+        StreamInterface $stream,
+        $limit = -1,
+        $offset = 0
+    ) {
+        $this->stream = $stream;
+        $this->setLimit($limit);
+        $this->setOffset($offset);
+    }
+
+    public function eof()
+    {
+        // Always return true if the underlying stream is EOF
+        if ($this->stream->eof()) {
+            return true;
+        }
+
+        // No limit and the underlying stream is not at EOF
+        if ($this->limit == -1) {
+            return false;
+        }
+
+        $tell = $this->stream->tell();
+        if ($tell === false) {
+            return false;
+        }
+
+        return $tell >= $this->offset + $this->limit;
+    }
+
+    /**
+     * Returns the size of the limited subset of data
+     * {@inheritdoc}
+     */
+    public function getSize()
+    {
+        if (null === ($length = $this->stream->getSize())) {
+            return null;
+        } elseif ($this->limit == -1) {
+            return $length - $this->offset;
+        } else {
+            return min($this->limit, $length - $this->offset);
+        }
+    }
+
+    /**
+     * Allow for a bounded seek on the read limited stream
+     * {@inheritdoc}
+     */
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        if ($whence !== SEEK_SET || $offset < 0) {
+            return false;
+        }
+
+        $offset += $this->offset;
+
+        if ($this->limit !== -1) {
+            if ($offset > $this->offset + $this->limit) {
+                $offset = $this->offset + $this->limit;
+            }
+        }
+
+        return $this->stream->seek($offset);
+    }
+
+    /**
+     * Give a relative tell()
+     * {@inheritdoc}
+     */
+    public function tell()
+    {
+        return $this->stream->tell() - $this->offset;
+    }
+
+    /**
+     * Set the offset to start limiting from
+     *
+     * @param int $offset Offset to seek to and begin byte limiting from
+     *
+     * @return self
+     * @throws SeekException
+     */
+    public function setOffset($offset)
+    {
+        $current = $this->stream->tell();
+
+        if ($current !== $offset) {
+            // If the stream cannot seek to the offset position, then read to it
+            if (!$this->stream->seek($offset)) {
+                if ($current > $offset) {
+                    throw new SeekException($this, $offset);
+                } else {
+                    $this->stream->read($offset - $current);
+                }
+            }
+        }
+
+        $this->offset = $offset;
+
+        return $this;
+    }
+
+    /**
+     * Set the limit of bytes that the decorator allows to be read from the
+     * stream.
+     *
+     * @param int $limit Number of bytes to allow to be read from the stream.
+     *                   Use -1 for no limit.
+     * @return self
+     */
+    public function setLimit($limit)
+    {
+        $this->limit = $limit;
+
+        return $this;
+    }
+
+    public function read($length)
+    {
+        if ($this->limit == -1) {
+            return $this->stream->read($length);
+        }
+
+        // Check if the current position is less than the total allowed
+        // bytes + original offset
+        $remaining = ($this->offset + $this->limit) - $this->stream->tell();
+        if ($remaining > 0) {
+            // Only return the amount of requested data, ensuring that the byte
+            // limit is not exceeded
+            return $this->stream->read(min($remaining, $length));
+        } else {
+            return false;
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c1433ad83e8158407368ba7f2829cddf662bc9f7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/MetadataStreamInterface.php
@@ -0,0 +1,11 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * This interface is deprecated and should no longer be used. Just use
+ * StreamInterface now that the getMetadata method has been added to
+ * StreamInterface.
+ *
+ * @deprecated
+ */
+interface MetadataStreamInterface extends StreamInterface {}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/NoSeekStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/NoSeekStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d42395d76b45b8e97e983cc190b934439fd96da
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/NoSeekStream.php
@@ -0,0 +1,25 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Stream decorator that prevents a stream from being seeked
+ */
+class NoSeekStream implements StreamInterface
+{
+    use StreamDecoratorTrait;
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function isSeekable()
+    {
+        return false;
+    }
+
+    public function attach($stream)
+    {
+        $this->stream->attach($stream);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/NullStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/NullStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..41ee776683a0f0f26042cc1172f08ed886618d07
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/NullStream.php
@@ -0,0 +1,78 @@
+<?php
+namespace GuzzleHttp\Stream;
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
+/**
+ * Does not store any data written to it.
+ */
+class NullStream implements StreamInterface
+{
+    public function __toString()
+    {
+        return '';
+    }
+
+    public function getContents()
+    {
+        return '';
+    }
+
+    public function close() {}
+
+    public function detach() {}
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
+    public function getSize()
+    {
+        return 0;
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function isWritable()
+    {
+        return true;
+    }
+
+    public function isSeekable()
+    {
+        return true;
+    }
+
+    public function eof()
+    {
+        return true;
+    }
+
+    public function tell()
+    {
+        return 0;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function read($length)
+    {
+        return false;
+    }
+
+    public function write($string)
+    {
+        return strlen($string);
+    }
+
+    public function getMetadata($key = null)
+    {
+        return $key ? null : [];
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/PumpStream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/PumpStream.php
new file mode 100644
index 0000000000000000000000000000000000000000..9963207296b2c5fc899823c16e0199a8ae5278d9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/PumpStream.php
@@ -0,0 +1,161 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
+/**
+ * Provides a read only stream that pumps data from a PHP callable.
+ *
+ * When invoking the provided callable, the PumpStream will pass the amount of
+ * data requested to read to the callable. The callable can choose to ignore
+ * this value and return fewer or more bytes than requested. Any extra data
+ * returned by the provided callable is buffered internally until drained using
+ * the read() function of the PumpStream. The provided callable MUST return
+ * false when there is no more data to read.
+ */
+class PumpStream implements StreamInterface
+{
+    /** @var callable */
+    private $source;
+
+    /** @var int */
+    private $size;
+
+    /** @var int */
+    private $tellPos = 0;
+
+    /** @var array */
+    private $metadata;
+
+    /** @var BufferStream */
+    private $buffer;
+
+    /**
+     * @param callable $source Source of the stream data. The callable MAY
+     *                         accept an integer argument used to control the
+     *                         amount of data to return. The callable MUST
+     *                         return a string when called, or false on error
+     *                         or EOF.
+     * @param array $options   Stream options:
+     *                         - metadata: Hash of metadata to use with stream.
+     *                         - size: Size of the stream, if known.
+     */
+    public function __construct(callable $source, array $options = [])
+    {
+        $this->source = $source;
+        $this->size = isset($options['size']) ? $options['size'] : null;
+        $this->metadata = isset($options['metadata']) ? $options['metadata'] : [];
+        $this->buffer = new BufferStream();
+    }
+
+    public function __toString()
+    {
+        return Utils::copyToString($this);
+    }
+
+    public function close()
+    {
+        $this->detach();
+    }
+
+    public function detach()
+    {
+        $this->tellPos = false;
+        $this->source = null;
+    }
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    public function tell()
+    {
+        return $this->tellPos;
+    }
+
+    public function eof()
+    {
+        return !$this->source;
+    }
+
+    public function isSeekable()
+    {
+        return false;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return false;
+    }
+
+    public function isWritable()
+    {
+        return false;
+    }
+
+    public function write($string)
+    {
+        return false;
+    }
+
+    public function isReadable()
+    {
+        return true;
+    }
+
+    public function read($length)
+    {
+        $data = $this->buffer->read($length);
+        $readLen = strlen($data);
+        $this->tellPos += $readLen;
+        $remaining = $length - $readLen;
+
+        if ($remaining) {
+            $this->pump($remaining);
+            $data .= $this->buffer->read($remaining);
+            $this->tellPos += strlen($data) - $readLen;
+        }
+
+        return $data;
+    }
+
+    public function getContents()
+    {
+        $result = '';
+        while (!$this->eof()) {
+            $result .= $this->read(1000000);
+        }
+
+        return $result;
+    }
+
+    public function getMetadata($key = null)
+    {
+        if (!$key) {
+            return $this->metadata;
+        }
+
+        return isset($this->metadata[$key]) ? $this->metadata[$key] : null;
+    }
+
+    private function pump($length)
+    {
+        if ($this->source) {
+            do {
+                $data = call_user_func($this->source, $length);
+                if ($data === false || $data === null) {
+                    $this->source = null;
+                    return;
+                }
+                $this->buffer->write($data);
+                $length -= strlen($data);
+            } while ($length > 0);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Stream.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Stream.php
new file mode 100644
index 0000000000000000000000000000000000000000..7adbc5e3f3ec44c1b6d8cb1bd72bec5a332e8fcb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Stream.php
@@ -0,0 +1,261 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * PHP stream implementation
+ */
+class Stream implements StreamInterface
+{
+    private $stream;
+    private $size;
+    private $seekable;
+    private $readable;
+    private $writable;
+    private $uri;
+    private $customMetadata;
+
+    /** @var array Hash of readable and writable stream types */
+    private static $readWriteHash = [
+        'read' => [
+            'r' => true, 'w+' => true, 'r+' => true, 'x+' => true, 'c+' => true,
+            'rb' => true, 'w+b' => true, 'r+b' => true, 'x+b' => true,
+            'c+b' => true, 'rt' => true, 'w+t' => true, 'r+t' => true,
+            'x+t' => true, 'c+t' => true, 'a+' => true
+        ],
+        'write' => [
+            'w' => true, 'w+' => true, 'rw' => true, 'r+' => true, 'x+' => true,
+            'c+' => true, 'wb' => true, 'w+b' => true, 'r+b' => true,
+            'x+b' => true, 'c+b' => true, 'w+t' => true, 'r+t' => true,
+            'x+t' => true, 'c+t' => true, 'a' => true, 'a+' => true
+        ]
+    ];
+
+    /**
+     * Create a new stream based on the input type.
+     *
+     * This factory accepts the same associative array of options as described
+     * in the constructor.
+     *
+     * @param resource|string|StreamInterface $resource Entity body data
+     * @param array                           $options  Additional options
+     *
+     * @return Stream
+     * @throws \InvalidArgumentException if the $resource arg is not valid.
+     */
+    public static function factory($resource = '', array $options = [])
+    {
+        $type = gettype($resource);
+
+        if ($type == 'string') {
+            $stream = fopen('php://temp', 'r+');
+            if ($resource !== '') {
+                fwrite($stream, $resource);
+                fseek($stream, 0);
+            }
+            return new self($stream, $options);
+        }
+
+        if ($type == 'resource') {
+            return new self($resource, $options);
+        }
+
+        if ($resource instanceof StreamInterface) {
+            return $resource;
+        }
+
+        if ($type == 'object' && method_exists($resource, '__toString')) {
+            return self::factory((string) $resource, $options);
+        }
+
+        if (is_callable($resource)) {
+            return new PumpStream($resource, $options);
+        }
+
+        if ($resource instanceof \Iterator) {
+            return new PumpStream(function () use ($resource) {
+                if (!$resource->valid()) {
+                    return false;
+                }
+                $result = $resource->current();
+                $resource->next();
+                return $result;
+            }, $options);
+        }
+
+        throw new \InvalidArgumentException('Invalid resource type: ' . $type);
+    }
+
+    /**
+     * This constructor accepts an associative array of options.
+     *
+     * - size: (int) If a read stream would otherwise have an indeterminate
+     *   size, but the size is known due to foreknownledge, then you can
+     *   provide that size, in bytes.
+     * - metadata: (array) Any additional metadata to return when the metadata
+     *   of the stream is accessed.
+     *
+     * @param resource $stream  Stream resource to wrap.
+     * @param array    $options Associative array of options.
+     *
+     * @throws \InvalidArgumentException if the stream is not a stream resource
+     */
+    public function __construct($stream, $options = [])
+    {
+        if (!is_resource($stream)) {
+            throw new \InvalidArgumentException('Stream must be a resource');
+        }
+
+        if (isset($options['size'])) {
+            $this->size = $options['size'];
+        }
+
+        $this->customMetadata = isset($options['metadata'])
+            ? $options['metadata']
+            : [];
+
+        $this->attach($stream);
+    }
+
+    /**
+     * Closes the stream when the destructed
+     */
+    public function __destruct()
+    {
+        $this->close();
+    }
+
+    public function __toString()
+    {
+        if (!$this->stream) {
+            return '';
+        }
+
+        $this->seek(0);
+
+        return (string) stream_get_contents($this->stream);
+    }
+
+    public function getContents()
+    {
+        return $this->stream ? stream_get_contents($this->stream) : '';
+    }
+
+    public function close()
+    {
+        if (is_resource($this->stream)) {
+            fclose($this->stream);
+        }
+
+        $this->detach();
+    }
+
+    public function detach()
+    {
+        $result = $this->stream;
+        $this->stream = $this->size = $this->uri = null;
+        $this->readable = $this->writable = $this->seekable = false;
+
+        return $result;
+    }
+
+    public function attach($stream)
+    {
+        $this->stream = $stream;
+        $meta = stream_get_meta_data($this->stream);
+        $this->seekable = $meta['seekable'];
+        $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]);
+        $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]);
+        $this->uri = $this->getMetadata('uri');
+    }
+
+    public function getSize()
+    {
+        if ($this->size !== null) {
+            return $this->size;
+        }
+
+        if (!$this->stream) {
+            return null;
+        }
+
+        // Clear the stat cache if the stream has a URI
+        if ($this->uri) {
+            clearstatcache(true, $this->uri);
+        }
+
+        $stats = fstat($this->stream);
+        if (isset($stats['size'])) {
+            $this->size = $stats['size'];
+            return $this->size;
+        }
+
+        return null;
+    }
+
+    public function isReadable()
+    {
+        return $this->readable;
+    }
+
+    public function isWritable()
+    {
+        return $this->writable;
+    }
+
+    public function isSeekable()
+    {
+        return $this->seekable;
+    }
+
+    public function eof()
+    {
+        return !$this->stream || feof($this->stream);
+    }
+
+    public function tell()
+    {
+        return $this->stream ? ftell($this->stream) : false;
+    }
+
+    public function setSize($size)
+    {
+        $this->size = $size;
+
+        return $this;
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return $this->seekable
+            ? fseek($this->stream, $offset, $whence) === 0
+            : false;
+    }
+
+    public function read($length)
+    {
+        return $this->readable ? fread($this->stream, $length) : false;
+    }
+
+    public function write($string)
+    {
+        // We can't know the size after writing anything
+        $this->size = null;
+
+        return $this->writable ? fwrite($this->stream, $string) : false;
+    }
+
+    public function getMetadata($key = null)
+    {
+        if (!$this->stream) {
+            return $key ? null : [];
+        } elseif (!$key) {
+            return $this->customMetadata + stream_get_meta_data($this->stream);
+        } elseif (isset($this->customMetadata[$key])) {
+            return $this->customMetadata[$key];
+        }
+
+        $meta = stream_get_meta_data($this->stream);
+
+        return isset($meta[$key]) ? $meta[$key] : null;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..39c19c58ccf1cf2ec95e807c0868383a7641313b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/StreamDecoratorTrait.php
@@ -0,0 +1,143 @@
+<?php
+namespace GuzzleHttp\Stream;
+use GuzzleHttp\Stream\Exception\CannotAttachException;
+
+/**
+ * Stream decorator trait
+ * @property StreamInterface stream
+ */
+trait StreamDecoratorTrait
+{
+    /**
+     * @param StreamInterface $stream Stream to decorate
+     */
+    public function __construct(StreamInterface $stream)
+    {
+        $this->stream = $stream;
+    }
+
+    /**
+     * Magic method used to create a new stream if streams are not added in
+     * the constructor of a decorator (e.g., LazyOpenStream).
+     */
+    public function __get($name)
+    {
+        if ($name == 'stream') {
+            $this->stream = $this->createStream();
+            return $this->stream;
+        }
+
+        throw new \UnexpectedValueException("$name not found on class");
+    }
+
+    public function __toString()
+    {
+        try {
+            $this->seek(0);
+            return $this->getContents();
+        } catch (\Exception $e) {
+            // Really, PHP? https://bugs.php.net/bug.php?id=53648
+            trigger_error('StreamDecorator::__toString exception: '
+                . (string) $e, E_USER_ERROR);
+            return '';
+        }
+    }
+
+    public function getContents()
+    {
+        return Utils::copyToString($this);
+    }
+
+    /**
+     * Allow decorators to implement custom methods
+     *
+     * @param string $method Missing method name
+     * @param array  $args   Method arguments
+     *
+     * @return mixed
+     */
+    public function __call($method, array $args)
+    {
+        $result = call_user_func_array(array($this->stream, $method), $args);
+
+        // Always return the wrapped object if the result is a return $this
+        return $result === $this->stream ? $this : $result;
+    }
+
+    public function close()
+    {
+        $this->stream->close();
+    }
+
+    public function getMetadata($key = null)
+    {
+        return $this->stream->getMetadata($key);
+    }
+
+    public function detach()
+    {
+        return $this->stream->detach();
+    }
+
+    public function attach($stream)
+    {
+        throw new CannotAttachException();
+    }
+
+    public function getSize()
+    {
+        return $this->stream->getSize();
+    }
+
+    public function eof()
+    {
+        return $this->stream->eof();
+    }
+
+    public function tell()
+    {
+        return $this->stream->tell();
+    }
+
+    public function isReadable()
+    {
+        return $this->stream->isReadable();
+    }
+
+    public function isWritable()
+    {
+        return $this->stream->isWritable();
+    }
+
+    public function isSeekable()
+    {
+        return $this->stream->isSeekable();
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        return $this->stream->seek($offset, $whence);
+    }
+
+    public function read($length)
+    {
+        return $this->stream->read($length);
+    }
+
+    public function write($string)
+    {
+        return $this->stream->write($string);
+    }
+
+    /**
+     * Implement in subclasses to dynamically create streams when requested.
+     *
+     * @return StreamInterface
+     * @throws \BadMethodCallException
+     */
+    protected function createStream()
+    {
+        throw new \BadMethodCallException('createStream() not implemented in '
+            . get_class($this));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/StreamInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/StreamInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd19c6f25ae12a7757f85498d75812194d59b727
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/StreamInterface.php
@@ -0,0 +1,159 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+/**
+ * Describes a stream instance.
+ */
+interface StreamInterface
+{
+    /**
+     * Attempts to seek to the beginning of the stream and reads all data into
+     * a string until the end of the stream is reached.
+     *
+     * Warning: This could attempt to load a large amount of data into memory.
+     *
+     * @return string
+     */
+    public function __toString();
+
+    /**
+     * Closes the stream and any underlying resources.
+     */
+    public function close();
+
+    /**
+     * Separates any underlying resources from the stream.
+     *
+     * After the underlying resource has been detached, the stream object is in
+     * an unusable state. If you wish to use a Stream object as a PHP stream
+     * but keep the Stream object in a consistent state, use
+     * {@see GuzzleHttp\Stream\GuzzleStreamWrapper::getResource}.
+     *
+     * @return resource|null Returns the underlying PHP stream resource or null
+     *                       if the Stream object did not utilize an underlying
+     *                       stream resource.
+     */
+    public function detach();
+
+    /**
+     * Replaces the underlying stream resource with the provided stream.
+     *
+     * Use this method to replace the underlying stream with another; as an
+     * example, in server-side code, if you decide to return a file, you
+     * would replace the original content-oriented stream with the file
+     * stream.
+     *
+     * Any internal state such as caching of cursor position should be reset
+     * when attach() is called, as the stream has changed.
+     *
+     * @param resource $stream
+     *
+     * @return void
+     */
+    public function attach($stream);
+
+    /**
+     * Get the size of the stream if known
+     *
+     * @return int|null Returns the size in bytes if known, or null if unknown
+     */
+    public function getSize();
+
+    /**
+     * Returns the current position of the file read/write pointer
+     *
+     * @return int|bool Returns the position of the file pointer or false on error
+     */
+    public function tell();
+
+    /**
+     * Returns true if the stream is at the end of the stream.
+     *
+     * @return bool
+     */
+    public function eof();
+
+    /**
+     * Returns whether or not the stream is seekable
+     *
+     * @return bool
+     */
+    public function isSeekable();
+
+    /**
+     * Seek to a position in the stream
+     *
+     * @param int $offset Stream offset
+     * @param int $whence Specifies how the cursor position will be calculated
+     *                    based on the seek offset. Valid values are identical
+     *                    to the built-in PHP $whence values for `fseek()`.
+     *                    SEEK_SET: Set position equal to offset bytes
+     *                    SEEK_CUR: Set position to current location plus offset
+     *                    SEEK_END: Set position to end-of-stream plus offset
+     *
+     * @return bool Returns true on success or false on failure
+     * @link   http://www.php.net/manual/en/function.fseek.php
+     */
+    public function seek($offset, $whence = SEEK_SET);
+
+    /**
+     * Returns whether or not the stream is writable
+     *
+     * @return bool
+     */
+    public function isWritable();
+
+    /**
+     * Write data to the stream
+     *
+     * @param string $string The string that is to be written.
+     *
+     * @return int|bool Returns the number of bytes written to the stream on
+     *                  success returns false on failure (e.g., broken pipe,
+     *                  writer needs to slow down, buffer is full, etc.)
+     */
+    public function write($string);
+
+    /**
+     * Returns whether or not the stream is readable
+     *
+     * @return bool
+     */
+    public function isReadable();
+
+    /**
+     * Read data from the stream
+     *
+     * @param int $length Read up to $length bytes from the object and return
+     *                    them. Fewer than $length bytes may be returned if
+     *                    underlying stream call returns fewer bytes.
+     *
+     * @return string     Returns the data read from the stream.
+     */
+    public function read($length);
+
+    /**
+     * Returns the remaining contents of the stream as a string.
+     *
+     * Note: this could potentially load a large amount of data into memory.
+     *
+     * @return string
+     */
+    public function getContents();
+
+    /**
+     * Get stream metadata as an associative array or retrieve a specific key.
+     *
+     * The keys returned are identical to the keys returned from PHP's
+     * stream_get_meta_data() function.
+     *
+     * @param string $key Specific metadata to retrieve.
+     *
+     * @return array|mixed|null Returns an associative array if no key is
+     *                          no key is provided. Returns a specific key
+     *                          value if a key is provided and the value is
+     *                          found, or null if the key is not found.
+     * @see http://php.net/manual/en/function.stream-get-meta-data.php
+     */
+    public function getMetadata($key = null);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Utils.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Utils.php
new file mode 100644
index 0000000000000000000000000000000000000000..94cb42d31d15d879c7414f223a36f729cbb1ca67
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/src/Utils.php
@@ -0,0 +1,196 @@
+<?php
+namespace GuzzleHttp\Stream;
+
+use GuzzleHttp\Stream\Exception\SeekException;
+
+/**
+ * Static utility class because PHP's autoloaders don't support the concept
+ * of namespaced function autoloading.
+ */
+class Utils
+{
+    /**
+     * Safely opens a PHP stream resource using a filename.
+     *
+     * When fopen fails, PHP normally raises a warning. This function adds an
+     * error handler that checks for errors and throws an exception instead.
+     *
+     * @param string $filename File to open
+     * @param string $mode     Mode used to open the file
+     *
+     * @return resource
+     * @throws \RuntimeException if the file cannot be opened
+     */
+    public static function open($filename, $mode)
+    {
+        $ex = null;
+        set_error_handler(function () use ($filename, $mode, &$ex) {
+            $ex = new \RuntimeException(sprintf(
+                'Unable to open %s using mode %s: %s',
+                $filename,
+                $mode,
+                func_get_args()[1]
+            ));
+        });
+
+        $handle = fopen($filename, $mode);
+        restore_error_handler();
+
+        if ($ex) {
+            /** @var $ex \RuntimeException */
+            throw $ex;
+        }
+
+        return $handle;
+    }
+
+    /**
+     * Copy the contents of a stream into a string until the given number of
+     * bytes have been read.
+     *
+     * @param StreamInterface $stream Stream to read
+     * @param int             $maxLen Maximum number of bytes to read. Pass -1
+     *                                to read the entire stream.
+     * @return string
+     */
+    public static function copyToString(StreamInterface $stream, $maxLen = -1)
+    {
+        $buffer = '';
+
+        if ($maxLen === -1) {
+            while (!$stream->eof()) {
+                $buf = $stream->read(1048576);
+                if ($buf === false) {
+                    break;
+                }
+                $buffer .= $buf;
+            }
+            return $buffer;
+        }
+
+        $len = 0;
+        while (!$stream->eof() && $len < $maxLen) {
+            $buf = $stream->read($maxLen - $len);
+            if ($buf === false) {
+                break;
+            }
+            $buffer .= $buf;
+            $len = strlen($buffer);
+        }
+
+        return $buffer;
+    }
+
+    /**
+     * Copy the contents of a stream into another stream until the given number
+     * of bytes have been read.
+     *
+     * @param StreamInterface $source Stream to read from
+     * @param StreamInterface $dest   Stream to write to
+     * @param int             $maxLen Maximum number of bytes to read. Pass -1
+     *                                to read the entire stream.
+     */
+    public static function copyToStream(
+        StreamInterface $source,
+        StreamInterface $dest,
+        $maxLen = -1
+    ) {
+        if ($maxLen === -1) {
+            while (!$source->eof()) {
+                if (!$dest->write($source->read(1048576))) {
+                    break;
+                }
+            }
+            return;
+        }
+
+        $bytes = 0;
+        while (!$source->eof()) {
+            $buf = $source->read($maxLen - $bytes);
+            if (!($len = strlen($buf))) {
+                break;
+            }
+            $bytes += $len;
+            $dest->write($buf);
+            if ($bytes == $maxLen) {
+                break;
+            }
+        }
+    }
+
+    /**
+     * Calculate a hash of a Stream
+     *
+     * @param StreamInterface $stream    Stream to calculate the hash for
+     * @param string          $algo      Hash algorithm (e.g. md5, crc32, etc)
+     * @param bool            $rawOutput Whether or not to use raw output
+     *
+     * @return string Returns the hash of the stream
+     * @throws SeekException
+     */
+    public static function hash(
+        StreamInterface $stream,
+        $algo,
+        $rawOutput = false
+    ) {
+        $pos = $stream->tell();
+
+        if ($pos > 0 && !$stream->seek(0)) {
+            throw new SeekException($stream);
+        }
+
+        $ctx = hash_init($algo);
+        while (!$stream->eof()) {
+            hash_update($ctx, $stream->read(1048576));
+        }
+
+        $out = hash_final($ctx, (bool) $rawOutput);
+        $stream->seek($pos);
+
+        return $out;
+    }
+
+    /**
+     * Read a line from the stream up to the maximum allowed buffer length
+     *
+     * @param StreamInterface $stream    Stream to read from
+     * @param int             $maxLength Maximum buffer length
+     *
+     * @return string|bool
+     */
+    public static function readline(StreamInterface $stream, $maxLength = null)
+    {
+        $buffer = '';
+        $size = 0;
+
+        while (!$stream->eof()) {
+            if (false === ($byte = $stream->read(1))) {
+                return $buffer;
+            }
+            $buffer .= $byte;
+            // Break when a new line is found or the max length - 1 is reached
+            if ($byte == PHP_EOL || ++$size == $maxLength - 1) {
+                break;
+            }
+        }
+
+        return $buffer;
+    }
+
+    /**
+     * Alias of GuzzleHttp\Stream\Stream::factory.
+     *
+     * @param mixed $resource Resource to create
+     * @param array $options  Associative array of stream options defined in
+     *                        {@see \GuzzleHttp\Stream\Stream::__construct}
+     *
+     * @return StreamInterface
+     *
+     * @see GuzzleHttp\Stream\Stream::factory
+     * @see GuzzleHttp\Stream\Stream::__construct
+     */
+    public static function create($resource, array $options = [])
+    {
+        return Stream::factory($resource, $options);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/AppendStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..78798d9f7a0f33ba444e8766ec966967ea8f8c3e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/AppendStreamTest.php
@@ -0,0 +1,178 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\AppendStream;
+use GuzzleHttp\Stream\Stream;
+
+class AppendStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Each stream must be readable
+     */
+    public function testValidatesStreamsAreReadable()
+    {
+        $a = new AppendStream();
+        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+            ->setMethods(['isReadable'])
+            ->getMockForAbstractClass();
+        $s->expects($this->once())
+            ->method('isReadable')
+            ->will($this->returnValue(false));
+        $a->addStream($s);
+    }
+
+    public function testValidatesSeekType()
+    {
+        $a = new AppendStream();
+        $this->assertFalse($a->seek(100, SEEK_CUR));
+    }
+
+    public function testTriesToRewindOnSeek()
+    {
+        $a = new AppendStream();
+        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+            ->setMethods(['isReadable', 'seek', 'isSeekable'])
+            ->getMockForAbstractClass();
+        $s->expects($this->once())
+            ->method('isReadable')
+            ->will($this->returnValue(true));
+        $s->expects($this->once())
+            ->method('isSeekable')
+            ->will($this->returnValue(true));
+        $s->expects($this->once())
+            ->method('seek')
+            ->will($this->returnValue(false));
+        $a->addStream($s);
+        $this->assertFalse($a->seek(10));
+    }
+
+    public function testSeeksToPositionByReading()
+    {
+        $a = new AppendStream([
+            Stream::factory('foo'),
+            Stream::factory('bar'),
+            Stream::factory('baz'),
+        ]);
+
+        $this->assertTrue($a->seek(3));
+        $this->assertEquals(3, $a->tell());
+        $this->assertEquals('bar', $a->read(3));
+        $a->seek(6);
+        $this->assertEquals(6, $a->tell());
+        $this->assertEquals('baz', $a->read(3));
+    }
+
+    public function testDetachesEachStream()
+    {
+        $s1 = Stream::factory('foo');
+        $s2 = Stream::factory('foo');
+        $a = new AppendStream([$s1, $s2]);
+        $this->assertSame('foofoo', (string) $a);
+        $a->detach();
+        $this->assertSame('', (string) $a);
+        $this->assertSame(0, $a->getSize());
+    }
+
+    public function testClosesEachStream()
+    {
+        $s1 = Stream::factory('foo');
+        $a = new AppendStream([$s1]);
+        $a->close();
+        $this->assertSame('', (string) $a);
+    }
+
+    public function testIsNotWritable()
+    {
+        $a = new AppendStream([Stream::factory('foo')]);
+        $this->assertFalse($a->isWritable());
+        $this->assertTrue($a->isSeekable());
+        $this->assertTrue($a->isReadable());
+        $this->assertFalse($a->write('foo'));
+    }
+
+    public function testDoesNotNeedStreams()
+    {
+        $a = new AppendStream();
+        $this->assertEquals('', (string) $a);
+    }
+
+    public function testCanReadFromMultipleStreams()
+    {
+        $a = new AppendStream([
+            Stream::factory('foo'),
+            Stream::factory('bar'),
+            Stream::factory('baz'),
+        ]);
+        $this->assertFalse($a->eof());
+        $this->assertSame(0, $a->tell());
+        $this->assertEquals('foo', $a->read(3));
+        $this->assertEquals('bar', $a->read(3));
+        $this->assertEquals('baz', $a->read(3));
+        $this->assertTrue($a->eof());
+        $this->assertSame(9, $a->tell());
+        $this->assertEquals('foobarbaz', (string) $a);
+    }
+
+    public function testCanDetermineSizeFromMultipleStreams()
+    {
+        $a = new AppendStream([
+            Stream::factory('foo'),
+            Stream::factory('bar')
+        ]);
+        $this->assertEquals(6, $a->getSize());
+
+        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+            ->setMethods(['isSeekable', 'isReadable'])
+            ->getMockForAbstractClass();
+        $s->expects($this->once())
+            ->method('isSeekable')
+            ->will($this->returnValue(null));
+        $s->expects($this->once())
+            ->method('isReadable')
+            ->will($this->returnValue(true));
+        $a->addStream($s);
+        $this->assertNull($a->getSize());
+    }
+
+    public function testCatchesExceptionsWhenCastingToString()
+    {
+        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+            ->setMethods(['read', 'isReadable', 'eof'])
+            ->getMockForAbstractClass();
+        $s->expects($this->once())
+            ->method('read')
+            ->will($this->throwException(new \RuntimeException('foo')));
+        $s->expects($this->once())
+            ->method('isReadable')
+            ->will($this->returnValue(true));
+        $s->expects($this->any())
+            ->method('eof')
+            ->will($this->returnValue(false));
+        $a = new AppendStream([$s]);
+        $this->assertFalse($a->eof());
+        $this->assertSame('', (string) $a);
+    }
+
+    public function testCanDetach()
+    {
+        $s = new AppendStream();
+        $s->detach();
+    }
+
+    public function testReturnsEmptyMetadata()
+    {
+        $s = new AppendStream();
+        $this->assertEquals([], $s->getMetadata());
+        $this->assertNull($s->getMetadata('foo'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $p = new AppendStream();
+        $p->attach('a');
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c78995962a2327070ec2313c6da44249745c866
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/AsyncReadStreamTest.php
@@ -0,0 +1,186 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\AsyncReadStream;
+use GuzzleHttp\Stream\BufferStream;
+use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Stream\Stream;
+
+class AsyncReadStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Buffer must be readable and writable
+     */
+    public function testValidatesReadableBuffer()
+    {
+        new AsyncReadStream(FnStream::decorate(
+            Stream::factory(),
+            ['isReadable' => function () { return false; }]
+        ));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Buffer must be readable and writable
+     */
+    public function testValidatesWritableBuffer()
+    {
+        new AsyncReadStream(FnStream::decorate(
+            Stream::factory(),
+            ['isWritable' => function () { return false; }]
+        ));
+    }
+
+    public function testValidatesHwmMetadata()
+    {
+        $a = new AsyncReadStream(Stream::factory(), [
+            'drain' => function() {}
+        ]);
+        $this->assertNull($this->readAttribute($a, 'drain'));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage pump must be callable
+     */
+    public function testValidatesPumpIsCallable()
+    {
+        new AsyncReadStream(new BufferStream(), ['pump' => true]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage drain must be callable
+     */
+    public function testValidatesDrainIsCallable()
+    {
+        new AsyncReadStream(new BufferStream(), ['drain' => true]);
+    }
+
+    public function testCanInitialize()
+    {
+        $buffer = new BufferStream();
+        $a = new AsyncReadStream($buffer, [
+            'size'  => 10,
+            'drain' => function () {},
+            'pump'  => function () {},
+        ]);
+        $this->assertSame($buffer, $this->readAttribute($a, 'stream'));
+        $this->assertTrue(is_callable($this->readAttribute($a, 'drain')));
+        $this->assertTrue(is_callable($this->readAttribute($a, 'pump')));
+        $this->assertTrue($a->isReadable());
+        $this->assertFalse($a->isSeekable());
+        $this->assertFalse($a->isWritable());
+        $this->assertFalse($a->write('foo'));
+        $this->assertEquals(10, $a->getSize());
+    }
+
+    public function testReadsFromBufferWithNoDrainOrPump()
+    {
+        $buffer = new BufferStream();
+        $a = new AsyncReadStream($buffer);
+        $buffer->write('foo');
+        $this->assertNull($a->getSize());
+        $this->assertEquals('foo', $a->read(10));
+        $this->assertEquals('', $a->read(10));
+    }
+
+    public function testCallsPumpForMoreDataWhenRequested()
+    {
+        $called = 0;
+        $buffer = new BufferStream();
+        $a = new AsyncReadStream($buffer, [
+            'pump' => function ($size) use (&$called) {
+                $called++;
+                return str_repeat('.', $size);
+            }
+        ]);
+        $buffer->write('foobar');
+        $this->assertEquals('foo', $a->read(3));
+        $this->assertEquals(0, $called);
+        $this->assertEquals('bar.....', $a->read(8));
+        $this->assertEquals(1, $called);
+        $this->assertEquals('..', $a->read(2));
+        $this->assertEquals(2, $called);
+    }
+
+    public function testCallsDrainWhenNeeded()
+    {
+        $called = 0;
+        $buffer = new BufferStream(5);
+        $a = new AsyncReadStream($buffer, [
+            'drain' => function (BufferStream $b) use (&$called, $buffer) {
+                $this->assertSame($b, $buffer);
+                $called++;
+            }
+        ]);
+
+        $buffer->write('foobar');
+        $this->assertEquals(6, $buffer->getSize());
+        $this->assertEquals(0, $called);
+
+        $a->read(3);
+        $this->assertTrue($this->readAttribute($a, 'needsDrain'));
+        $this->assertEquals(3, $buffer->getSize());
+        $this->assertEquals(0, $called);
+
+        $a->read(3);
+        $this->assertEquals(0, $buffer->getSize());
+        $this->assertFalse($this->readAttribute($a, 'needsDrain'));
+        $this->assertEquals(1, $called);
+    }
+
+    public function testCreatesBufferWithNoConfig()
+    {
+        list($buffer, $async) = AsyncReadStream::create();
+        $this->assertInstanceOf('GuzzleHttp\Stream\BufferStream', $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+    }
+
+    public function testCreatesBufferWithSpecifiedBuffer()
+    {
+        $buf = new BufferStream();
+        list($buffer, $async) = AsyncReadStream::create(['buffer' => $buf]);
+        $this->assertSame($buf, $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+    }
+
+    public function testCreatesNullStream()
+    {
+        list($buffer, $async) = AsyncReadStream::create(['max_buffer' => 0]);
+        $this->assertInstanceOf('GuzzleHttp\Stream\NullStream', $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+    }
+
+    public function testCreatesDroppingStream()
+    {
+        list($buffer, $async) = AsyncReadStream::create(['max_buffer' => 5]);
+        $this->assertInstanceOf('GuzzleHttp\Stream\DroppingStream', $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+        $buffer->write('12345678910');
+        $this->assertEquals(5, $buffer->getSize());
+    }
+
+    public function testCreatesOnWriteStream()
+    {
+        $c = 0;
+        $b = new BufferStream();
+        list($buffer, $async) = AsyncReadStream::create([
+            'buffer' => $b,
+            'write'  => function (BufferStream $buf, $data) use (&$c, $b) {
+                $this->assertSame($buf, $b);
+                $this->assertEquals('foo', $data);
+                $c++;
+            }
+        ]);
+        $this->assertInstanceOf('GuzzleHttp\Stream\FnStream', $buffer);
+        $this->assertInstanceOf('GuzzleHttp\Stream\AsyncReadStream', $async);
+        $this->assertEquals(0, $c);
+        $this->assertEquals(3, $buffer->write('foo'));
+        $this->assertEquals(1, $c);
+        $this->assertEquals(3, $buffer->write('foo'));
+        $this->assertEquals(2, $c);
+        $this->assertEquals('foofoo', (string) $buffer);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/BufferStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/BufferStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f9bfea21d183369dc1f480673dc17ba2ba70b0f0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/BufferStreamTest.php
@@ -0,0 +1,69 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\BufferStream;
+
+class BufferStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasMetadata()
+    {
+        $b = new BufferStream(10);
+        $this->assertTrue($b->isReadable());
+        $this->assertTrue($b->isWritable());
+        $this->assertFalse($b->isSeekable());
+        $this->assertEquals(null, $b->getMetadata('foo'));
+        $this->assertEquals(10, $b->getMetadata('hwm'));
+        $this->assertEquals([], $b->getMetadata());
+    }
+
+    public function testRemovesReadDataFromBuffer()
+    {
+        $b = new BufferStream();
+        $this->assertEquals(3, $b->write('foo'));
+        $this->assertEquals(3, $b->getSize());
+        $this->assertFalse($b->eof());
+        $this->assertEquals('foo', $b->read(10));
+        $this->assertTrue($b->eof());
+        $this->assertEquals('', $b->read(10));
+    }
+
+    public function testCanCastToStringOrGetContents()
+    {
+        $b = new BufferStream();
+        $b->write('foo');
+        $b->write('baz');
+        $this->assertEquals('foo', $b->read(3));
+        $b->write('bar');
+        $this->assertEquals('bazbar', (string) $b);
+        $this->assertFalse($b->tell());
+    }
+
+    public function testDetachClearsBuffer()
+    {
+        $b = new BufferStream();
+        $b->write('foo');
+        $b->detach();
+        $this->assertEquals(0, $b->tell());
+        $this->assertTrue($b->eof());
+        $this->assertEquals(3, $b->write('abc'));
+        $this->assertEquals('abc', $b->read(10));
+    }
+
+    public function testExceedingHighwaterMarkReturnsFalseButStillBuffers()
+    {
+        $b = new BufferStream(5);
+        $this->assertEquals(3, $b->write('hi '));
+        $this->assertFalse($b->write('hello'));
+        $this->assertEquals('hi hello', (string) $b);
+        $this->assertEquals(4, $b->write('test'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $p = new BufferStream();
+        $p->attach('a');
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/CachingStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea969b3ad7e78b8027bc9bcde95054597eb44d71
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/CachingStreamTest.php
@@ -0,0 +1,136 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\CachingStream;
+use GuzzleHttp\Stream\Utils;
+
+/**
+ * @covers GuzzleHttp\Stream\CachingStream
+ */
+class CachingStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var CachingStream */
+    protected $body;
+
+    /** @var Stream */
+    protected $decorated;
+
+    public function setUp()
+    {
+        $this->decorated = Stream::factory('testing');
+        $this->body = new CachingStream($this->decorated);
+    }
+
+    public function tearDown()
+    {
+        $this->decorated->close();
+        $this->body->close();
+    }
+
+    public function testUsesRemoteSizeIfPossible()
+    {
+        $body = Stream::factory('test');
+        $caching = new CachingStream($body);
+        $this->assertEquals(4, $caching->getSize());
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Cannot seek to byte 10
+     */
+    public function testCannotSeekPastWhatHasBeenRead()
+    {
+        $this->body->seek(10);
+    }
+
+    public function testCannotUseSeekEnd()
+    {
+        $this->assertFalse($this->body->seek(2, SEEK_END));
+    }
+
+    public function testRewindUsesSeek()
+    {
+        $a = Stream::factory('foo');
+        $d = $this->getMockBuilder('GuzzleHttp\Stream\CachingStream')
+            ->setMethods(array('seek'))
+            ->setConstructorArgs(array($a))
+            ->getMock();
+        $d->expects($this->once())
+            ->method('seek')
+            ->with(0)
+            ->will($this->returnValue(true));
+        $d->seek(0);
+    }
+
+    public function testCanSeekToReadBytes()
+    {
+        $this->assertEquals('te', $this->body->read(2));
+        $this->body->seek(0);
+        $this->assertEquals('test', $this->body->read(4));
+        $this->assertEquals(4, $this->body->tell());
+        $this->body->seek(2);
+        $this->assertEquals(2, $this->body->tell());
+        $this->body->seek(2, SEEK_CUR);
+        $this->assertEquals(4, $this->body->tell());
+        $this->assertEquals('ing', $this->body->read(3));
+    }
+
+    public function testWritesToBufferStream()
+    {
+        $this->body->read(2);
+        $this->body->write('hi');
+        $this->body->seek(0);
+        $this->assertEquals('tehiing', (string) $this->body);
+    }
+
+    public function testSkipsOverwrittenBytes()
+    {
+        $decorated = Stream::factory(
+            implode("\n", array_map(function ($n) {
+                return str_pad($n, 4, '0', STR_PAD_LEFT);
+            }, range(0, 25)))
+        );
+
+        $body = new CachingStream($decorated);
+
+        $this->assertEquals("0000\n", Utils::readline($body));
+        $this->assertEquals("0001\n", Utils::readline($body));
+        // Write over part of the body yet to be read, so skip some bytes
+        $this->assertEquals(5, $body->write("TEST\n"));
+        $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes'));
+        // Read, which skips bytes, then reads
+        $this->assertEquals("0003\n", Utils::readline($body));
+        $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes'));
+        $this->assertEquals("0004\n", Utils::readline($body));
+        $this->assertEquals("0005\n", Utils::readline($body));
+
+        // Overwrite part of the cached body (so don't skip any bytes)
+        $body->seek(5);
+        $this->assertEquals(5, $body->write("ABCD\n"));
+        $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes'));
+        $this->assertEquals("TEST\n", Utils::readline($body));
+        $this->assertEquals("0003\n", Utils::readline($body));
+        $this->assertEquals("0004\n", Utils::readline($body));
+        $this->assertEquals("0005\n", Utils::readline($body));
+        $this->assertEquals("0006\n", Utils::readline($body));
+        $this->assertEquals(5, $body->write("1234\n"));
+        $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes'));
+
+        // Seek to 0 and ensure the overwritten bit is replaced
+        $body->seek(0);
+        $this->assertEquals("0000\nABCD\nTEST\n0003\n0004\n0005\n0006\n1234\n0008\n0009\n", $body->read(50));
+
+        // Ensure that casting it to a string does not include the bit that was overwritten
+        $this->assertContains("0000\nABCD\nTEST\n0003\n0004\n0005\n0006\n1234\n0008\n0009\n", (string) $body);
+    }
+
+    public function testClosesBothStreams()
+    {
+        $s = fopen('php://temp', 'r');
+        $a = Stream::factory($s);
+        $d = new CachingStream($a);
+        $d->close();
+        $this->assertFalse(is_resource($s));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..bb2cb22048ebdade5ce4e083adad50484ba0ba04
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/DroppingStreamTest.php
@@ -0,0 +1,26 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\BufferStream;
+use GuzzleHttp\Stream\DroppingStream;
+
+class DroppingStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testBeginsDroppingWhenSizeExceeded()
+    {
+        $stream = new BufferStream();
+        $drop = new DroppingStream($stream, 5);
+        $this->assertEquals(3, $drop->write('hel'));
+        $this->assertFalse($drop->write('lo'));
+        $this->assertEquals(5, $drop->getSize());
+        $this->assertEquals('hello', $drop->read(5));
+        $this->assertEquals(0, $drop->getSize());
+        $drop->write('12345678910');
+        $this->assertEquals(5, $stream->getSize());
+        $this->assertEquals(5, $drop->getSize());
+        $this->assertEquals('12345', (string) $drop);
+        $this->assertEquals(0, $drop->getSize());
+        $drop->write('hello');
+        $this->assertFalse($drop->write('test'));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd8cd1ad266a710daf11812b24d3ce803e977c9f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/Exception/SeekExceptionTest.php
@@ -0,0 +1,16 @@
+<?php
+namespace GuzzleHttp\Tests\Stream\Exception;
+
+use GuzzleHttp\Stream\Exception\SeekException;
+use GuzzleHttp\Stream\Stream;
+
+class SeekExceptionTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasStream()
+    {
+        $s = Stream::factory('foo');
+        $e = new SeekException($s, 10);
+        $this->assertSame($s, $e->getStream());
+        $this->assertContains('10', $e->getMessage());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/FnStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/FnStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6cc336b916c6f17b47c743ef73d1a7dede91e623
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/FnStreamTest.php
@@ -0,0 +1,89 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\FnStream;
+
+/**
+ * @covers GuzzleHttp\Stream\FnStream
+ */
+class FnStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \BadMethodCallException
+     * @expectedExceptionMessage seek() is not implemented in the FnStream
+     */
+    public function testThrowsWhenNotImplemented()
+    {
+        (new FnStream([]))->seek(1);
+    }
+
+    public function testProxiesToFunction()
+    {
+        $s = new FnStream([
+            'read' => function ($len) {
+                $this->assertEquals(3, $len);
+                return 'foo';
+            }
+        ]);
+
+        $this->assertEquals('foo', $s->read(3));
+    }
+
+    public function testCanCloseOnDestruct()
+    {
+        $called = false;
+        $s = new FnStream([
+            'close' => function () use (&$called) {
+                $called = true;
+            }
+        ]);
+        unset($s);
+        $this->assertTrue($called);
+    }
+
+    public function testDoesNotRequireClose()
+    {
+        $s = new FnStream([]);
+        unset($s);
+    }
+
+    public function testDecoratesStream()
+    {
+        $a = Stream::factory('foo');
+        $b = FnStream::decorate($a, []);
+        $this->assertEquals(3, $b->getSize());
+        $this->assertEquals($b->isWritable(), true);
+        $this->assertEquals($b->isReadable(), true);
+        $this->assertEquals($b->isSeekable(), true);
+        $this->assertEquals($b->read(3), 'foo');
+        $this->assertEquals($b->tell(), 3);
+        $this->assertEquals($a->tell(), 3);
+        $this->assertEquals($b->eof(), true);
+        $this->assertEquals($a->eof(), true);
+        $b->seek(0);
+        $this->assertEquals('foo', (string) $b);
+        $b->seek(0);
+        $this->assertEquals('foo', $b->getContents());
+        $this->assertEquals($a->getMetadata(), $b->getMetadata());
+        $b->seek(0, SEEK_END);
+        $b->write('bar');
+        $this->assertEquals('foobar', (string) $b);
+        $this->assertInternalType('resource', $b->detach());
+        $b->close();
+    }
+
+    public function testDecoratesWithCustomizations()
+    {
+        $called = false;
+        $a = Stream::factory('foo');
+        $b = FnStream::decorate($a, [
+            'read' => function ($len) use (&$called, $a) {
+                $called = true;
+                return $a->read($len);
+            }
+        ]);
+        $this->assertEquals('foo', $b->read(3));
+        $this->assertTrue($called);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..33c3eccb4c090a9c57e09c2bef3f8d7102bf9382
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/GuzzleStreamWrapperTest.php
@@ -0,0 +1,99 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\GuzzleStreamWrapper;
+use GuzzleHttp\Stream\Stream;
+
+/**
+ * @covers GuzzleHttp\Stream\GuzzleStreamWrapper
+ */
+class GuzzleStreamWrapperTest extends \PHPUnit_Framework_TestCase
+{
+    public function testResource()
+    {
+        $stream = Stream::factory('foo');
+        $handle = GuzzleStreamWrapper::getResource($stream);
+        $this->assertSame('foo', fread($handle, 3));
+        $this->assertSame(3, ftell($handle));
+        $this->assertSame(3, fwrite($handle, 'bar'));
+        $this->assertSame(0, fseek($handle, 0));
+        $this->assertSame('foobar', fread($handle, 6));
+        $this->assertTrue(feof($handle));
+
+        // This fails on HHVM for some reason
+        if (!defined('HHVM_VERSION')) {
+            $this->assertEquals([
+                'dev'     => 0,
+                'ino'     => 0,
+                'mode'    => 33206,
+                'nlink'   => 0,
+                'uid'     => 0,
+                'gid'     => 0,
+                'rdev'    => 0,
+                'size'    => 6,
+                'atime'   => 0,
+                'mtime'   => 0,
+                'ctime'   => 0,
+                'blksize' => 0,
+                'blocks'  => 0,
+                0         => 0,
+                1         => 0,
+                2         => 33206,
+                3         => 0,
+                4         => 0,
+                5         => 0,
+                6         => 0,
+                7         => 6,
+                8         => 0,
+                9         => 0,
+                10        => 0,
+                11        => 0,
+                12        => 0,
+            ], fstat($handle));
+        }
+
+        $this->assertTrue(fclose($handle));
+        $this->assertSame('foobar', (string) $stream);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testValidatesStream()
+    {
+        $stream = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+            ->setMethods(['isReadable', 'isWritable'])
+            ->getMockForAbstractClass();
+        $stream->expects($this->once())
+            ->method('isReadable')
+            ->will($this->returnValue(false));
+        $stream->expects($this->once())
+            ->method('isWritable')
+            ->will($this->returnValue(false));
+        GuzzleStreamWrapper::getResource($stream);
+    }
+
+    /**
+     * @expectedException \PHPUnit_Framework_Error_Warning
+     */
+    public function testReturnsFalseWhenStreamDoesNotExist()
+    {
+        fopen('guzzle://foo', 'r');
+    }
+
+    public function testCanOpenReadonlyStream()
+    {
+        $stream = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+            ->setMethods(['isReadable', 'isWritable'])
+            ->getMockForAbstractClass();
+        $stream->expects($this->once())
+            ->method('isReadable')
+            ->will($this->returnValue(false));
+        $stream->expects($this->once())
+            ->method('isWritable')
+            ->will($this->returnValue(true));
+        $r = GuzzleStreamWrapper::getResource($stream);
+        $this->assertInternalType('resource', $r);
+        fclose($r);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/InflateStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/InflateStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ead9356a53f27f68cce9a6123a3a6d8dba702782
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/InflateStreamTest.php
@@ -0,0 +1,16 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\InflateStream;
+use GuzzleHttp\Stream\Stream;
+
+class InflateStreamtest extends \PHPUnit_Framework_TestCase
+{
+    public function testInflatesStreams()
+    {
+        $content = gzencode('test');
+        $a = Stream::factory($content);
+        $b = new InflateStream($a);
+        $this->assertEquals('test', (string) $b);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..79e0078e888065f9ee865679500be22413c9bbb9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/LazyOpenStreamTest.php
@@ -0,0 +1,64 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\LazyOpenStream;
+
+class LazyOpenStreamTest extends \PHPUnit_Framework_TestCase
+{
+    private $fname;
+
+    public function setup()
+    {
+        $this->fname = tempnam('/tmp', 'tfile');
+
+        if (file_exists($this->fname)) {
+            unlink($this->fname);
+        }
+    }
+
+    public function tearDown()
+    {
+        if (file_exists($this->fname)) {
+            unlink($this->fname);
+        }
+    }
+
+    public function testOpensLazily()
+    {
+        $l = new LazyOpenStream($this->fname, 'w+');
+        $l->write('foo');
+        $this->assertInternalType('array', $l->getMetadata());
+        $this->assertFileExists($this->fname);
+        $this->assertEquals('foo', file_get_contents($this->fname));
+        $this->assertEquals('foo', (string) $l);
+    }
+
+    public function testProxiesToFile()
+    {
+        file_put_contents($this->fname, 'foo');
+        $l = new LazyOpenStream($this->fname, 'r');
+        $this->assertEquals('foo', $l->read(4));
+        $this->assertTrue($l->eof());
+        $this->assertEquals(3, $l->tell());
+        $this->assertTrue($l->isReadable());
+        $this->assertTrue($l->isSeekable());
+        $this->assertFalse($l->isWritable());
+        $l->seek(1);
+        $this->assertEquals('oo', $l->getContents());
+        $this->assertEquals('foo', (string) $l);
+        $this->assertEquals(3, $l->getSize());
+        $this->assertInternalType('array', $l->getMetadata());
+        $l->close();
+    }
+
+    public function testDetachesUnderlyingStream()
+    {
+        file_put_contents($this->fname, 'foo');
+        $l = new LazyOpenStream($this->fname, 'r');
+        $r = $l->detach();
+        $this->assertInternalType('resource', $r);
+        fseek($r, 0);
+        $this->assertEquals('foo', stream_get_contents($r));
+        fclose($r);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/LimitStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..efb1dc58ff362332c08a00f27c21faf59a8041c0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/LimitStreamTest.php
@@ -0,0 +1,133 @@
+<?php
+namespace GuzzleHttp\Tests\Http;
+
+use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\LimitStream;
+use GuzzleHttp\Stream\NoSeekStream;
+
+/**
+ * @covers GuzzleHttp\Stream\LimitStream
+ */
+class LimitStreamTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var LimitStream */
+    protected $body;
+
+    /** @var Stream */
+    protected $decorated;
+
+    public function setUp()
+    {
+        $this->decorated = Stream::factory(fopen(__FILE__, 'r'));
+        $this->body = new LimitStream($this->decorated, 10, 3);
+    }
+
+    public function testReturnsSubset()
+    {
+        $body = new LimitStream(Stream::factory('foo'), -1, 1);
+        $this->assertEquals('oo', (string) $body);
+        $this->assertTrue($body->eof());
+        $body->seek(0);
+        $this->assertFalse($body->eof());
+        $this->assertEquals('oo', $body->read(100));
+        $this->assertTrue($body->eof());
+    }
+
+    public function testReturnsSubsetWhenCastToString()
+    {
+        $body = Stream::factory('foo_baz_bar');
+        $limited = new LimitStream($body, 3, 4);
+        $this->assertEquals('baz', (string) $limited);
+    }
+
+    public function testReturnsSubsetOfEmptyBodyWhenCastToString()
+    {
+        $body = Stream::factory('');
+        $limited = new LimitStream($body, 0, 10);
+        $this->assertEquals('', (string) $limited);
+    }
+
+    public function testSeeksWhenConstructed()
+    {
+        $this->assertEquals(0, $this->body->tell());
+        $this->assertEquals(3, $this->decorated->tell());
+    }
+
+    public function testAllowsBoundedSeek()
+    {
+        $this->assertEquals(true, $this->body->seek(100));
+        $this->assertEquals(10, $this->body->tell());
+        $this->assertEquals(13, $this->decorated->tell());
+        $this->assertEquals(true, $this->body->seek(0));
+        $this->assertEquals(0, $this->body->tell());
+        $this->assertEquals(3, $this->decorated->tell());
+        $this->assertEquals(false, $this->body->seek(-10));
+        $this->assertEquals(0, $this->body->tell());
+        $this->assertEquals(3, $this->decorated->tell());
+        $this->assertEquals(true, $this->body->seek(5));
+        $this->assertEquals(5, $this->body->tell());
+        $this->assertEquals(8, $this->decorated->tell());
+        $this->assertEquals(false, $this->body->seek(1000, SEEK_END));
+    }
+
+    public function testReadsOnlySubsetOfData()
+    {
+        $data = $this->body->read(100);
+        $this->assertEquals(10, strlen($data));
+        $this->assertFalse($this->body->read(1000));
+
+        $this->body->setOffset(10);
+        $newData = $this->body->read(100);
+        $this->assertEquals(10, strlen($newData));
+        $this->assertNotSame($data, $newData);
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\SeekException
+     * @expectedExceptionMessage Could not seek the stream to position 2
+     */
+    public function testThrowsWhenCurrentGreaterThanOffsetSeek()
+    {
+        $a = Stream::factory('foo_bar');
+        $b = new NoSeekStream($a);
+        $c = new LimitStream($b);
+        $a->getContents();
+        $c->setOffset(2);
+    }
+
+    public function testClaimsConsumedWhenReadLimitIsReached()
+    {
+        $this->assertFalse($this->body->eof());
+        $this->body->read(1000);
+        $this->assertTrue($this->body->eof());
+    }
+
+    public function testContentLengthIsBounded()
+    {
+        $this->assertEquals(10, $this->body->getSize());
+    }
+
+    public function testGetContentsIsBasedOnSubset()
+    {
+        $body = new LimitStream(Stream::factory('foobazbar'), 3, 3);
+        $this->assertEquals('baz', $body->getContents());
+    }
+
+    public function testReturnsNullIfSizeCannotBeDetermined()
+    {
+        $a = new FnStream([
+            'getSize' => function () { return null; },
+            'tell'    => function () { return 0; },
+        ]);
+        $b = new LimitStream($a);
+        $this->assertNull($b->getSize());
+    }
+
+    public function testLengthLessOffsetWhenNoLimitSize()
+    {
+        $a = Stream::factory('foo_bar');
+        $b = new LimitStream($a, -1, 4);
+        $this->assertEquals(3, $b->getSize());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..21b7c6d22707b4db796c5cc4deed60b4a3dc6152
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/NoSeekStreamTest.php
@@ -0,0 +1,41 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\NoSeekStream;
+
+/**
+ * @covers GuzzleHttp\Stream\NoSeekStream
+ * @covers GuzzleHttp\Stream\StreamDecoratorTrait
+ */
+class NoSeekStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCannotSeek()
+    {
+        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+            ->setMethods(['isSeekable', 'seek'])
+            ->getMockForAbstractClass();
+        $s->expects($this->never())->method('seek');
+        $s->expects($this->never())->method('isSeekable');
+        $wrapped = new NoSeekStream($s);
+        $this->assertFalse($wrapped->isSeekable());
+        $this->assertFalse($wrapped->seek(2));
+    }
+
+    public function testHandlesClose()
+    {
+        $s = Stream::factory('foo');
+        $wrapped = new NoSeekStream($s);
+        $wrapped->close();
+        $this->assertFalse($wrapped->write('foo'));
+    }
+
+    public function testCanAttach()
+    {
+        $s1 = Stream::factory('foo');
+        $s2 = Stream::factory('bar');
+        $wrapped = new NoSeekStream($s1);
+        $wrapped->attach($s2->detach());
+        $this->assertEquals('bar', (string) $wrapped);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/NullStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/NullStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e41431592ec2143c2491650a920f8058cdfb47d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/NullStreamTest.php
@@ -0,0 +1,39 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\NullStream;
+
+class NullStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDoesNothing()
+    {
+        $b = new NullStream();
+        $this->assertEquals('', $b->read(10));
+        $this->assertEquals(4, $b->write('test'));
+        $this->assertEquals('', (string) $b);
+        $this->assertNull($b->getMetadata('a'));
+        $this->assertEquals([], $b->getMetadata());
+        $this->assertEquals(0, $b->getSize());
+        $this->assertEquals('', $b->getContents());
+        $this->assertEquals(0, $b->tell());
+
+        $this->assertTrue($b->isReadable());
+        $this->assertTrue($b->isWritable());
+        $this->assertTrue($b->isSeekable());
+        $this->assertFalse($b->seek(10));
+
+        $this->assertTrue($b->eof());
+        $b->detach();
+        $this->assertTrue($b->eof());
+        $b->close();
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $p = new NullStream();
+        $p->attach('a');
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/PumpStreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/PumpStreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d20ce90c0d7674d946b0a2b3c6c871e2d3019a5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/PumpStreamTest.php
@@ -0,0 +1,77 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\LimitStream;
+use GuzzleHttp\Stream\PumpStream;
+use GuzzleHttp\Stream\Stream;
+
+class PumpStreamTest extends \PHPUnit_Framework_TestCase
+{
+    public function testHasMetadataAndSize()
+    {
+        $p = new PumpStream(function () {}, [
+            'metadata' => ['foo' => 'bar'],
+            'size'     => 100
+        ]);
+
+        $this->assertEquals('bar', $p->getMetadata('foo'));
+        $this->assertEquals(['foo' => 'bar'], $p->getMetadata());
+        $this->assertEquals(100, $p->getSize());
+    }
+
+    public function testCanReadFromCallable()
+    {
+        $p = Stream::factory(function ($size) {
+            return 'a';
+        });
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals(1, $p->tell());
+        $this->assertEquals('aaaaa', $p->read(5));
+        $this->assertEquals(6, $p->tell());
+    }
+
+    public function testStoresExcessDataInBuffer()
+    {
+        $called = [];
+        $p = Stream::factory(function ($size) use (&$called) {
+            $called[] = $size;
+            return 'abcdef';
+        });
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals('b', $p->read(1));
+        $this->assertEquals('cdef', $p->read(4));
+        $this->assertEquals('abcdefabc', $p->read(9));
+        $this->assertEquals([1, 9, 3], $called);
+    }
+
+    public function testInifiniteStreamWrappedInLimitStream()
+    {
+        $p = Stream::factory(function () { return 'a'; });
+        $s = new LimitStream($p, 5);
+        $this->assertEquals('aaaaa', (string) $s);
+    }
+
+    public function testDescribesCapabilities()
+    {
+        $p = Stream::factory(function () {});
+        $this->assertTrue($p->isReadable());
+        $this->assertFalse($p->isSeekable());
+        $this->assertFalse($p->isWritable());
+        $this->assertNull($p->getSize());
+        $this->assertFalse($p->write('aa'));
+        $this->assertEquals('', $p->getContents());
+        $this->assertEquals('', (string) $p);
+        $p->close();
+        $this->assertEquals('', $p->read(10));
+        $this->assertTrue($p->eof());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttach()
+    {
+        $p = Stream::factory(function () {});
+        $p->attach('a');
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ba79addfad62c336531b256631dd98c95957085
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/StreamDecoratorTraitTest.php
@@ -0,0 +1,147 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\StreamInterface;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\StreamDecoratorTrait;
+
+class Str implements StreamInterface
+{
+    use StreamDecoratorTrait;
+}
+
+/**
+ * @covers GuzzleHttp\Stream\StreamDecoratorTrait
+ */
+class StreamDecoratorTraitTest extends \PHPUnit_Framework_TestCase
+{
+    private $a;
+    private $b;
+    private $c;
+
+    public function setUp()
+    {
+        $this->c = fopen('php://temp', 'r+');
+        fwrite($this->c, 'foo');
+        fseek($this->c, 0);
+        $this->a = Stream::factory($this->c);
+        $this->b = new Str($this->a);
+    }
+
+    public function testCatchesExceptionsWhenCastingToString()
+    {
+        $s = $this->getMockBuilder('GuzzleHttp\Stream\StreamInterface')
+            ->setMethods(['read'])
+            ->getMockForAbstractClass();
+        $s->expects($this->once())
+            ->method('read')
+            ->will($this->throwException(new \Exception('foo')));
+        $msg = '';
+        set_error_handler(function ($errNo, $str) use (&$msg) { $msg = $str; });
+        echo new Str($s);
+        restore_error_handler();
+        $this->assertContains('foo', $msg);
+    }
+
+    public function testToString()
+    {
+        $this->assertEquals('foo', (string) $this->b);
+    }
+
+    public function testHasSize()
+    {
+        $this->assertEquals(3, $this->b->getSize());
+        $this->assertSame($this->b, $this->b->setSize(2));
+        $this->assertEquals(2, $this->b->getSize());
+    }
+
+    public function testReads()
+    {
+        $this->assertEquals('foo', $this->b->read(10));
+    }
+
+    public function testCheckMethods()
+    {
+        $this->assertEquals($this->a->isReadable(), $this->b->isReadable());
+        $this->assertEquals($this->a->isWritable(), $this->b->isWritable());
+        $this->assertEquals($this->a->isSeekable(), $this->b->isSeekable());
+    }
+
+    public function testSeeksAndTells()
+    {
+        $this->assertTrue($this->b->seek(1));
+        $this->assertEquals(1, $this->a->tell());
+        $this->assertEquals(1, $this->b->tell());
+        $this->assertTrue($this->b->seek(0));
+        $this->assertEquals(0, $this->a->tell());
+        $this->assertEquals(0, $this->b->tell());
+        $this->assertTrue($this->b->seek(0, SEEK_END));
+        $this->assertEquals(3, $this->a->tell());
+        $this->assertEquals(3, $this->b->tell());
+    }
+
+    public function testGetsContents()
+    {
+        $this->assertEquals('foo', $this->b->getContents());
+        $this->assertEquals('', $this->b->getContents());
+        $this->b->seek(1);
+        $this->assertEquals('oo', $this->b->getContents(1));
+    }
+
+    public function testCloses()
+    {
+        $this->b->close();
+        $this->assertFalse(is_resource($this->c));
+    }
+
+    public function testDetaches()
+    {
+        $this->b->detach();
+        $this->assertFalse($this->b->isReadable());
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\CannotAttachException
+     */
+    public function testCannotAttachByDefault()
+    {
+        $this->b->attach('a');
+    }
+
+    public function testWrapsMetadata()
+    {
+        $this->assertSame($this->b->getMetadata(), $this->a->getMetadata());
+        $this->assertSame($this->b->getMetadata('uri'), $this->a->getMetadata('uri'));
+    }
+
+    public function testWrapsWrites()
+    {
+        $this->b->seek(0, SEEK_END);
+        $this->b->write('foo');
+        $this->assertEquals('foofoo', (string) $this->a);
+    }
+
+    /**
+     * @expectedException \UnexpectedValueException
+     */
+    public function testThrowsWithInvalidGetter()
+    {
+        $this->b->foo;
+    }
+
+    /**
+     * @expectedException \BadMethodCallException
+     */
+    public function testThrowsWhenGetterNotImplemented()
+    {
+        $s = new BadStream();
+        $s->stream;
+    }
+}
+
+class BadStream
+{
+    use StreamDecoratorTrait;
+
+    public function __construct() {}
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/StreamTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/StreamTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2985bfbb17b27bf3bebbab59f22e3eb46a4614bd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/StreamTest.php
@@ -0,0 +1,252 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\Stream;
+
+/**
+ * @covers GuzzleHttp\Stream\Stream
+ */
+class StreamTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testConstructorThrowsExceptionOnInvalidArgument()
+    {
+        new Stream(true);
+    }
+
+    public function testConstructorInitializesProperties()
+    {
+        $handle = fopen('php://temp', 'r+');
+        fwrite($handle, 'data');
+        $stream = new Stream($handle);
+        $this->assertTrue($stream->isReadable());
+        $this->assertTrue($stream->isWritable());
+        $this->assertTrue($stream->isSeekable());
+        $this->assertEquals('php://temp', $stream->getMetadata('uri'));
+        $this->assertInternalType('array', $stream->getMetadata());
+        $this->assertEquals(4, $stream->getSize());
+        $this->assertFalse($stream->eof());
+        $stream->close();
+    }
+
+    public function testStreamClosesHandleOnDestruct()
+    {
+        $handle = fopen('php://temp', 'r');
+        $stream = new Stream($handle);
+        unset($stream);
+        $this->assertFalse(is_resource($handle));
+    }
+
+    public function testConvertsToString()
+    {
+        $handle = fopen('php://temp', 'w+');
+        fwrite($handle, 'data');
+        $stream = new Stream($handle);
+        $this->assertEquals('data', (string) $stream);
+        $this->assertEquals('data', (string) $stream);
+        $stream->close();
+    }
+
+    public function testGetsContents()
+    {
+        $handle = fopen('php://temp', 'w+');
+        fwrite($handle, 'data');
+        $stream = new Stream($handle);
+        $this->assertEquals('', $stream->getContents());
+        $stream->seek(0);
+        $this->assertEquals('data', $stream->getContents());
+        $this->assertEquals('', $stream->getContents());
+    }
+
+    public function testChecksEof()
+    {
+        $handle = fopen('php://temp', 'w+');
+        fwrite($handle, 'data');
+        $stream = new Stream($handle);
+        $this->assertFalse($stream->eof());
+        $stream->read(4);
+        $this->assertTrue($stream->eof());
+        $stream->close();
+    }
+
+    public function testAllowsSettingManualSize()
+    {
+        $handle = fopen('php://temp', 'w+');
+        fwrite($handle, 'data');
+        $stream = new Stream($handle);
+        $stream->setSize(10);
+        $this->assertEquals(10, $stream->getSize());
+        $stream->close();
+    }
+
+    public function testGetSize()
+    {
+        $size = filesize(__FILE__);
+        $handle = fopen(__FILE__, 'r');
+        $stream = new Stream($handle);
+        $this->assertEquals($size, $stream->getSize());
+        // Load from cache
+        $this->assertEquals($size, $stream->getSize());
+        $stream->close();
+    }
+
+    public function testEnsuresSizeIsConsistent()
+    {
+        $h = fopen('php://temp', 'w+');
+        $this->assertEquals(3, fwrite($h, 'foo'));
+        $stream = new Stream($h);
+        $this->assertEquals(3, $stream->getSize());
+        $this->assertEquals(4, $stream->write('test'));
+        $this->assertEquals(7, $stream->getSize());
+        $this->assertEquals(7, $stream->getSize());
+        $stream->close();
+    }
+
+    public function testProvidesStreamPosition()
+    {
+        $handle = fopen('php://temp', 'w+');
+        $stream = new Stream($handle);
+        $this->assertEquals(0, $stream->tell());
+        $stream->write('foo');
+        $this->assertEquals(3, $stream->tell());
+        $stream->seek(1);
+        $this->assertEquals(1, $stream->tell());
+        $this->assertSame(ftell($handle), $stream->tell());
+        $stream->close();
+    }
+
+    public function testKeepsPositionOfResource()
+    {
+        $h = fopen(__FILE__, 'r');
+        fseek($h, 10);
+        $stream = Stream::factory($h);
+        $this->assertEquals(10, $stream->tell());
+        $stream->close();
+    }
+
+    public function testCanDetachAndAttachStream()
+    {
+        $r = fopen('php://temp', 'w+');
+        $stream = new Stream($r);
+        $stream->write('foo');
+        $this->assertTrue($stream->isReadable());
+        $this->assertSame($r, $stream->detach());
+        $this->assertNull($stream->detach());
+
+        $this->assertFalse($stream->isReadable());
+        $this->assertFalse($stream->read(10));
+        $this->assertFalse($stream->isWritable());
+        $this->assertFalse($stream->write('bar'));
+        $this->assertFalse($stream->isSeekable());
+        $this->assertFalse($stream->seek(10));
+        $this->assertFalse($stream->tell());
+        $this->assertTrue($stream->eof());
+        $this->assertNull($stream->getSize());
+        $this->assertSame('', (string) $stream);
+        $this->assertSame('', $stream->getContents());
+
+        $stream->attach($r);
+        $stream->seek(0);
+        $this->assertEquals('foo', $stream->getContents());
+        $this->assertTrue($stream->isReadable());
+        $this->assertTrue($stream->isWritable());
+        $this->assertTrue($stream->isSeekable());
+
+        $stream->close();
+    }
+
+    public function testCloseClearProperties()
+    {
+        $handle = fopen('php://temp', 'r+');
+        $stream = new Stream($handle);
+        $stream->close();
+
+        $this->assertEmpty($stream->getMetadata());
+        $this->assertFalse($stream->isSeekable());
+        $this->assertFalse($stream->isReadable());
+        $this->assertFalse($stream->isWritable());
+        $this->assertNull($stream->getSize());
+    }
+
+    public function testCreatesWithFactory()
+    {
+        $stream = Stream::factory('foo');
+        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $stream);
+        $this->assertEquals('foo', $stream->getContents());
+        $stream->close();
+    }
+
+    public function testFactoryCreatesFromEmptyString()
+    {
+        $s = Stream::factory();
+        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
+    }
+
+    public function testFactoryCreatesFromResource()
+    {
+        $r = fopen(__FILE__, 'r');
+        $s = Stream::factory($r);
+        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
+        $this->assertSame(file_get_contents(__FILE__), (string) $s);
+    }
+
+    public function testFactoryCreatesFromObjectWithToString()
+    {
+        $r = new HasToString();
+        $s = Stream::factory($r);
+        $this->assertInstanceOf('GuzzleHttp\Stream\Stream', $s);
+        $this->assertEquals('foo', (string) $s);
+    }
+
+    public function testCreatePassesThrough()
+    {
+        $s = Stream::factory('foo');
+        $this->assertSame($s, Stream::factory($s));
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testThrowsExceptionForUnknown()
+    {
+        Stream::factory(new \stdClass());
+    }
+
+    public function testReturnsCustomMetadata()
+    {
+        $s = Stream::factory('foo', ['metadata' => ['hwm' => 3]]);
+        $this->assertEquals(3, $s->getMetadata('hwm'));
+        $this->assertArrayHasKey('hwm', $s->getMetadata());
+    }
+
+    public function testCanSetSize()
+    {
+        $s = Stream::factory('', ['size' => 10]);
+        $this->assertEquals(10, $s->getSize());
+    }
+
+    public function testCanCreateIteratorBasedStream()
+    {
+        $a = new \ArrayIterator(['foo', 'bar', '123']);
+        $p = Stream::factory($a);
+        $this->assertInstanceOf('GuzzleHttp\Stream\PumpStream', $p);
+        $this->assertEquals('foo', $p->read(3));
+        $this->assertFalse($p->eof());
+        $this->assertEquals('b', $p->read(1));
+        $this->assertEquals('a', $p->read(1));
+        $this->assertEquals('r12', $p->read(3));
+        $this->assertFalse($p->eof());
+        $this->assertEquals('3', $p->getContents());
+        $this->assertTrue($p->eof());
+        $this->assertEquals(9, $p->tell());
+    }
+}
+
+class HasToString
+{
+    public function __toString() {
+        return 'foo';
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/UtilsTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/UtilsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..6e3e3b21608c0f47cfdf334e2aca668015382629
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/guzzlehttp/streams/tests/UtilsTest.php
@@ -0,0 +1,155 @@
+<?php
+namespace GuzzleHttp\Tests\Stream;
+
+use GuzzleHttp\Stream\FnStream;
+use GuzzleHttp\Stream\NoSeekStream;
+use GuzzleHttp\Stream\Stream;
+use GuzzleHttp\Stream\Utils;
+
+class UtilsTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCopiesToString()
+    {
+        $s = Stream::factory('foobaz');
+        $this->assertEquals('foobaz', Utils::copyToString($s));
+        $s->seek(0);
+        $this->assertEquals('foo', Utils::copyToString($s, 3));
+        $this->assertEquals('baz', Utils::copyToString($s, 3));
+        $this->assertEquals('', Utils::copyToString($s));
+    }
+
+    public function testCopiesToStringStopsWhenReadFails()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s1 = FnStream::decorate($s1, [
+            'read' => function () {
+                return false;
+            }
+        ]);
+        $result = Utils::copyToString($s1);
+        $this->assertEquals('', $result);
+    }
+
+    public function testCopiesToStream()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s2 = Stream::factory('');
+        Utils::copyToStream($s1, $s2);
+        $this->assertEquals('foobaz', (string) $s2);
+        $s2 = Stream::factory('');
+        $s1->seek(0);
+        Utils::copyToStream($s1, $s2, 3);
+        $this->assertEquals('foo', (string) $s2);
+        Utils::copyToStream($s1, $s2, 3);
+        $this->assertEquals('foobaz', (string) $s2);
+    }
+
+    public function testStopsCopyToStreamWhenWriteFails()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s2 = Stream::factory('');
+        $s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
+        Utils::copyToStream($s1, $s2);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testStopsCopyToSteamWhenWriteFailsWithMaxLen()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s2 = Stream::factory('');
+        $s2 = FnStream::decorate($s2, ['write' => function () { return 0; }]);
+        Utils::copyToStream($s1, $s2, 10);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testStopsCopyToSteamWhenReadFailsWithMaxLen()
+    {
+        $s1 = Stream::factory('foobaz');
+        $s1 = FnStream::decorate($s1, ['read' => function () { return ''; }]);
+        $s2 = Stream::factory('');
+        Utils::copyToStream($s1, $s2, 10);
+        $this->assertEquals('', (string) $s2);
+    }
+
+    public function testReadsLines()
+    {
+        $s = Stream::factory("foo\nbaz\nbar");
+        $this->assertEquals("foo\n", Utils::readline($s));
+        $this->assertEquals("baz\n", Utils::readline($s));
+        $this->assertEquals("bar", Utils::readline($s));
+    }
+
+    public function testReadsLinesUpToMaxLength()
+    {
+        $s = Stream::factory("12345\n");
+        $this->assertEquals("123", Utils::readline($s, 4));
+        $this->assertEquals("45\n", Utils::readline($s));
+    }
+
+    public function testReadsLineUntilFalseReturnedFromRead()
+    {
+        $s = $this->getMockBuilder('GuzzleHttp\Stream\Stream')
+            ->setMethods(['read', 'eof'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $s->expects($this->exactly(2))
+            ->method('read')
+            ->will($this->returnCallback(function () {
+                static $c = false;
+                if ($c) {
+                    return false;
+                }
+                $c = true;
+                return 'h';
+            }));
+        $s->expects($this->exactly(2))
+            ->method('eof')
+            ->will($this->returnValue(false));
+        $this->assertEquals("h", Utils::readline($s));
+    }
+
+    public function testCalculatesHash()
+    {
+        $s = Stream::factory('foobazbar');
+        $this->assertEquals(md5('foobazbar'), Utils::hash($s, 'md5'));
+    }
+
+    /**
+     * @expectedException \GuzzleHttp\Stream\Exception\SeekException
+     */
+    public function testCalculatesHashThrowsWhenSeekFails()
+    {
+        $s = new NoSeekStream(Stream::factory('foobazbar'));
+        $s->read(2);
+        Utils::hash($s, 'md5');
+    }
+
+    public function testCalculatesHashSeeksToOriginalPosition()
+    {
+        $s = Stream::factory('foobazbar');
+        $s->seek(4);
+        $this->assertEquals(md5('foobazbar'), Utils::hash($s, 'md5'));
+        $this->assertEquals(4, $s->tell());
+    }
+
+    public function testOpensFilesSuccessfully()
+    {
+        $r = Utils::open(__FILE__, 'r');
+        $this->assertInternalType('resource', $r);
+        fclose($r);
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Unable to open /path/to/does/not/exist using mode r
+     */
+    public function testThrowsExceptionNotWarning()
+    {
+        Utils::open('/path/to/does/not/exist', 'r');
+    }
+
+    public function testProxiesToFactory()
+    {
+        $this->assertEquals('foo', (string) Utils::create('foo'));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/LICENSE b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..474c952b4b50c761c9b031f410ac0dfbc1daac4c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2012 PHP Framework Interoperability Group
+
+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:
+
+The above copyright notice and this permission notice shall be included in 
+all copies or substantial portions of the Software.
+
+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.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/AbstractLogger.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/AbstractLogger.php
new file mode 100644
index 0000000000000000000000000000000000000000..90e721af2d37716f0984a6b17b2385c223a248ed
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/AbstractLogger.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This is a simple Logger implementation that other Loggers can inherit from.
+ *
+ * It simply delegates all log-level-specific methods to the `log` method to
+ * reduce boilerplate code that a simple Logger that does the same thing with
+ * messages regardless of the error level has to implement.
+ */
+abstract class AbstractLogger implements LoggerInterface
+{
+    /**
+     * System is unusable.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function emergency($message, array $context = array())
+    {
+        $this->log(LogLevel::EMERGENCY, $message, $context);
+    }
+
+    /**
+     * Action must be taken immediately.
+     *
+     * Example: Entire website down, database unavailable, etc. This should
+     * trigger the SMS alerts and wake you up.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function alert($message, array $context = array())
+    {
+        $this->log(LogLevel::ALERT, $message, $context);
+    }
+
+    /**
+     * Critical conditions.
+     *
+     * Example: Application component unavailable, unexpected exception.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function critical($message, array $context = array())
+    {
+        $this->log(LogLevel::CRITICAL, $message, $context);
+    }
+
+    /**
+     * Runtime errors that do not require immediate action but should typically
+     * be logged and monitored.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function error($message, array $context = array())
+    {
+        $this->log(LogLevel::ERROR, $message, $context);
+    }
+
+    /**
+     * Exceptional occurrences that are not errors.
+     *
+     * Example: Use of deprecated APIs, poor use of an API, undesirable things
+     * that are not necessarily wrong.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function warning($message, array $context = array())
+    {
+        $this->log(LogLevel::WARNING, $message, $context);
+    }
+
+    /**
+     * Normal but significant events.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function notice($message, array $context = array())
+    {
+        $this->log(LogLevel::NOTICE, $message, $context);
+    }
+
+    /**
+     * Interesting events.
+     *
+     * Example: User logs in, SQL logs.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function info($message, array $context = array())
+    {
+        $this->log(LogLevel::INFO, $message, $context);
+    }
+
+    /**
+     * Detailed debug information.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function debug($message, array $context = array())
+    {
+        $this->log(LogLevel::DEBUG, $message, $context);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/InvalidArgumentException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..67f852d1dbc660ba05e703fe9b727727da2b3f78
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/InvalidArgumentException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Psr\Log;
+
+class InvalidArgumentException extends \InvalidArgumentException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LogLevel.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LogLevel.php
new file mode 100644
index 0000000000000000000000000000000000000000..9cebcace652f5bc52ee4c20497162df4ef00b16d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LogLevel.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes log levels.
+ */
+class LogLevel
+{
+    const EMERGENCY = 'emergency';
+    const ALERT     = 'alert';
+    const CRITICAL  = 'critical';
+    const ERROR     = 'error';
+    const WARNING   = 'warning';
+    const NOTICE    = 'notice';
+    const INFO      = 'info';
+    const DEBUG     = 'debug';
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerAwareInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerAwareInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d64f4786adb9b25259533304542302ca687eba2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerAwareInterface.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes a logger-aware instance.
+ */
+interface LoggerAwareInterface
+{
+    /**
+     * Sets a logger instance on the object.
+     *
+     * @param LoggerInterface $logger
+     *
+     * @return void
+     */
+    public function setLogger(LoggerInterface $logger);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerAwareTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..639f79bdaa5a007de241f4d902b679c51980eaca
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerAwareTrait.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Basic Implementation of LoggerAwareInterface.
+ */
+trait LoggerAwareTrait
+{
+    /**
+     * The logger instance.
+     *
+     * @var LoggerInterface
+     */
+    protected $logger;
+
+    /**
+     * Sets a logger.
+     *
+     * @param LoggerInterface $logger
+     */
+    public function setLogger(LoggerInterface $logger)
+    {
+        $this->logger = $logger;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ea72438b56694639c13101cbc3c82339a6e96a8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerInterface.php
@@ -0,0 +1,123 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes a logger instance.
+ *
+ * The message MUST be a string or object implementing __toString().
+ *
+ * The message MAY contain placeholders in the form: {foo} where foo
+ * will be replaced by the context data in key "foo".
+ *
+ * The context array can contain arbitrary data. The only assumption that
+ * can be made by implementors is that if an Exception instance is given
+ * to produce a stack trace, it MUST be in a key named "exception".
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+ * for the full interface specification.
+ */
+interface LoggerInterface
+{
+    /**
+     * System is unusable.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function emergency($message, array $context = array());
+
+    /**
+     * Action must be taken immediately.
+     *
+     * Example: Entire website down, database unavailable, etc. This should
+     * trigger the SMS alerts and wake you up.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function alert($message, array $context = array());
+
+    /**
+     * Critical conditions.
+     *
+     * Example: Application component unavailable, unexpected exception.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function critical($message, array $context = array());
+
+    /**
+     * Runtime errors that do not require immediate action but should typically
+     * be logged and monitored.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function error($message, array $context = array());
+
+    /**
+     * Exceptional occurrences that are not errors.
+     *
+     * Example: Use of deprecated APIs, poor use of an API, undesirable things
+     * that are not necessarily wrong.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function warning($message, array $context = array());
+
+    /**
+     * Normal but significant events.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function notice($message, array $context = array());
+
+    /**
+     * Interesting events.
+     *
+     * Example: User logs in, SQL logs.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function info($message, array $context = array());
+
+    /**
+     * Detailed debug information.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function debug($message, array $context = array());
+
+    /**
+     * Logs with an arbitrary level.
+     *
+     * @param mixed  $level
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function log($level, $message, array $context = array());
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..867225df1d12469facd1355e6db7467e0d8de128
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/LoggerTrait.php
@@ -0,0 +1,140 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This is a simple Logger trait that classes unable to extend AbstractLogger
+ * (because they extend another class, etc) can include.
+ *
+ * It simply delegates all log-level-specific methods to the `log` method to
+ * reduce boilerplate code that a simple Logger that does the same thing with
+ * messages regardless of the error level has to implement.
+ */
+trait LoggerTrait
+{
+    /**
+     * System is unusable.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function emergency($message, array $context = array())
+    {
+        $this->log(LogLevel::EMERGENCY, $message, $context);
+    }
+
+    /**
+     * Action must be taken immediately.
+     *
+     * Example: Entire website down, database unavailable, etc. This should
+     * trigger the SMS alerts and wake you up.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function alert($message, array $context = array())
+    {
+        $this->log(LogLevel::ALERT, $message, $context);
+    }
+
+    /**
+     * Critical conditions.
+     *
+     * Example: Application component unavailable, unexpected exception.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function critical($message, array $context = array())
+    {
+        $this->log(LogLevel::CRITICAL, $message, $context);
+    }
+
+    /**
+     * Runtime errors that do not require immediate action but should typically
+     * be logged and monitored.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function error($message, array $context = array())
+    {
+        $this->log(LogLevel::ERROR, $message, $context);
+    }
+
+    /**
+     * Exceptional occurrences that are not errors.
+     *
+     * Example: Use of deprecated APIs, poor use of an API, undesirable things
+     * that are not necessarily wrong.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function warning($message, array $context = array())
+    {
+        $this->log(LogLevel::WARNING, $message, $context);
+    }
+
+    /**
+     * Normal but significant events.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function notice($message, array $context = array())
+    {
+        $this->log(LogLevel::NOTICE, $message, $context);
+    }
+
+    /**
+     * Interesting events.
+     *
+     * Example: User logs in, SQL logs.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function info($message, array $context = array())
+    {
+        $this->log(LogLevel::INFO, $message, $context);
+    }
+
+    /**
+     * Detailed debug information.
+     *
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function debug($message, array $context = array())
+    {
+        $this->log(LogLevel::DEBUG, $message, $context);
+    }
+
+    /**
+     * Logs with an arbitrary level.
+     *
+     * @param mixed  $level
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    abstract public function log($level, $message, array $context = array());
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/NullLogger.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/NullLogger.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8cd682c8f963e8f5e04f46a4a57308cc8d9ecf0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/NullLogger.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This Logger can be used to avoid conditional log calls.
+ *
+ * Logging should always be optional, and if no logger is provided to your
+ * library creating a NullLogger instance to have something to throw logs at
+ * is a good way to avoid littering your code with `if ($this->logger) { }`
+ * blocks.
+ */
+class NullLogger extends AbstractLogger
+{
+    /**
+     * Logs with an arbitrary level.
+     *
+     * @param mixed  $level
+     * @param string $message
+     * @param array  $context
+     *
+     * @return void
+     */
+    public function log($level, $message, array $context = array())
+    {
+        // noop
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a0391a52b8fc10b727c2258a19520c65791fc1ae
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php
@@ -0,0 +1,140 @@
+<?php
+
+namespace Psr\Log\Test;
+
+use Psr\Log\LoggerInterface;
+use Psr\Log\LogLevel;
+
+/**
+ * Provides a base test class for ensuring compliance with the LoggerInterface.
+ *
+ * Implementors can extend the class and implement abstract methods to run this
+ * as part of their test suite.
+ */
+abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @return LoggerInterface
+     */
+    abstract public function getLogger();
+
+    /**
+     * This must return the log messages in order.
+     *
+     * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>".
+     *
+     * Example ->error('Foo') would yield "error Foo".
+     *
+     * @return string[]
+     */
+    abstract public function getLogs();
+
+    public function testImplements()
+    {
+        $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger());
+    }
+
+    /**
+     * @dataProvider provideLevelsAndMessages
+     */
+    public function testLogsAtAllLevels($level, $message)
+    {
+        $logger = $this->getLogger();
+        $logger->{$level}($message, array('user' => 'Bob'));
+        $logger->log($level, $message, array('user' => 'Bob'));
+
+        $expected = array(
+            $level.' message of level '.$level.' with context: Bob',
+            $level.' message of level '.$level.' with context: Bob',
+        );
+        $this->assertEquals($expected, $this->getLogs());
+    }
+
+    public function provideLevelsAndMessages()
+    {
+        return array(
+            LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'),
+            LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'),
+            LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'),
+            LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'),
+            LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'),
+            LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'),
+            LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'),
+            LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'),
+        );
+    }
+
+    /**
+     * @expectedException \Psr\Log\InvalidArgumentException
+     */
+    public function testThrowsOnInvalidLevel()
+    {
+        $logger = $this->getLogger();
+        $logger->log('invalid level', 'Foo');
+    }
+
+    public function testContextReplacement()
+    {
+        $logger = $this->getLogger();
+        $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));
+
+        $expected = array('info {Message {nothing} Bob Bar a}');
+        $this->assertEquals($expected, $this->getLogs());
+    }
+
+    public function testObjectCastToString()
+    {
+        if (method_exists($this, 'createPartialMock')) {
+            $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString'));
+        } else {
+            $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString'));
+        }
+        $dummy->expects($this->once())
+            ->method('__toString')
+            ->will($this->returnValue('DUMMY'));
+
+        $this->getLogger()->warning($dummy);
+
+        $expected = array('warning DUMMY');
+        $this->assertEquals($expected, $this->getLogs());
+    }
+
+    public function testContextCanContainAnything()
+    {
+        $context = array(
+            'bool' => true,
+            'null' => null,
+            'string' => 'Foo',
+            'int' => 0,
+            'float' => 0.5,
+            'nested' => array('with object' => new DummyTest),
+            'object' => new \DateTime,
+            'resource' => fopen('php://memory', 'r'),
+        );
+
+        $this->getLogger()->warning('Crazy context data', $context);
+
+        $expected = array('warning Crazy context data');
+        $this->assertEquals($expected, $this->getLogs());
+    }
+
+    public function testContextExceptionKeyCanBeExceptionOrOtherValues()
+    {
+        $logger = $this->getLogger();
+        $logger->warning('Random message', array('exception' => 'oops'));
+        $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail')));
+
+        $expected = array(
+            'warning Random message',
+            'critical Uncaught Exception!'
+        );
+        $this->assertEquals($expected, $this->getLogs());
+    }
+}
+
+class DummyTest
+{
+    public function __toString()
+    {
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/README.md b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..574bc1cb2a82ffa07bcc2f7ffee3656eb086ba29
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/README.md
@@ -0,0 +1,45 @@
+PSR Log
+=======
+
+This repository holds all interfaces/classes/traits related to
+[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md).
+
+Note that this is not a logger of its own. It is merely an interface that
+describes a logger. See the specification for more details.
+
+Usage
+-----
+
+If you need a logger, you can use the interface like this:
+
+```php
+<?php
+
+use Psr\Log\LoggerInterface;
+
+class Foo
+{
+    private $logger;
+
+    public function __construct(LoggerInterface $logger = null)
+    {
+        $this->logger = $logger;
+    }
+
+    public function doSomething()
+    {
+        if ($this->logger) {
+            $this->logger->info('Doing work');
+        }
+
+        // do something useful
+    }
+}
+```
+
+You can then pick one of the implementations of the interface to get a logger.
+
+If you want to implement the interface, you can require this package and
+implement `Psr\Log\LoggerInterface` in your code. Please read the
+[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)
+for details.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/composer.json b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..87934d707e7a37325a0ec6afe4b63aaa4ca6337c
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/psr/log/composer.json
@@ -0,0 +1,26 @@
+{
+    "name": "psr/log",
+    "description": "Common interface for logging libraries",
+    "keywords": ["psr", "psr-3", "log"],
+    "homepage": "https://github.com/php-fig/log",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "PHP-FIG",
+            "homepage": "http://www.php-fig.org/"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "Psr\\Log\\": "Psr/Log/"
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.0.x-dev"
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/.travis.yml b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..19c08ab1a98d6859e2638b64fdb19131d5b285fb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/.travis.yml
@@ -0,0 +1,22 @@
+language: php
+
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - 7.0
+  - nightly
+  - hhvm
+
+before_install:
+  - composer self-update
+
+install:
+  - composer install
+
+script:
+  - phpunit -v --coverage-text --coverage-clover=./build/logs/clover.xml
+
+after_script:
+  - if [ -f ./build/logs/clover.xml ]; then travis_retry composer require satooshi/php-coveralls --no-interaction --update-with-dependencies; fi
+  - if [ -f ./build/logs/clover.xml ]; then php vendor/bin/coveralls -v; fi
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/CHANGELOG.md b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..4886f96cf25d725a7ae6bb0ac865004b0c18e164
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/CHANGELOG.md
@@ -0,0 +1,91 @@
+CHANGELOG for 2.x
+=================
+
+* 2.5.0 (2016-12-22)
+
+    * Revert automatic cancellation of pending collection promises once the
+      output promise resolves. This was introduced in 42d86b7 (PR #36, released
+      in [v2.3.0](https://github.com/reactphp/promise/releases/tag/v2.3.0)) and
+      was both unintended and backward incompatible.
+
+      If you need automatic cancellation, you can use something like:
+
+      ```php
+      function allAndCancel(array $promises)
+      {
+           return \React\Promise\all($promises)
+               ->always(function() use ($promises) {
+                   foreach ($promises as $promise) {
+                       if ($promise instanceof \React\Promise\CancellablePromiseInterface) {
+                           $promise->cancel();
+                       }
+                   }
+              });
+      }
+      ```
+    * `all()` and `map()` functions now preserve the order of the array (#77).
+    * Fix circular references when resolving a promise with itself (#71).
+
+* 2.4.1 (2016-05-03)
+
+    * Fix `some()` not cancelling pending promises when too much input promises
+      reject (16ff799).
+
+* 2.4.0 (2016-03-31)
+
+    * Support foreign thenables in `resolve()`.
+      Any object that provides a `then()` method is now assimilated to a trusted
+      promise that follows the state of this thenable (#52).
+    * Fix `some()` and `any()` for input arrays containing not enough items
+      (#34).
+
+* 2.3.0 (2016-03-24)
+
+    * Allow cancellation of promises returned by functions working on promise
+      collections (#36).
+    * Handle `\Throwable` in the same way as `\Exception` (#51 by @joshdifabio).
+
+* 2.2.2 (2016-02-26)
+
+    * Fix cancellation handlers called multiple times (#47 by @clue).
+
+* 2.2.1 (2015-07-03)
+
+    * Fix stack error when resolving a promise in its own fulfillment or
+      rejection handlers.
+
+* 2.2.0 (2014-12-30)
+
+    * Introduce new `ExtendedPromiseInterface` implemented by all promises.
+    * Add new `done()` method (part of the `ExtendedPromiseInterface`).
+    * Add new `otherwise()` method (part of the `ExtendedPromiseInterface`).
+    * Add new `always()` method (part of the `ExtendedPromiseInterface`).
+    * Add new `progress()` method (part of the `ExtendedPromiseInterface`).
+    * Rename `Deferred::progress` to `Deferred::notify` to avoid confusion with
+      `ExtendedPromiseInterface::progress` (a `Deferred::progress` alias is
+      still available for backward compatibility)
+    * `resolve()` now always returns a `ExtendedPromiseInterface`.
+
+* 2.1.0 (2014-10-15)
+
+    * Introduce new `CancellablePromiseInterface` implemented by all promises.
+    * Add new `cancel()` method (part of the `CancellablePromiseInterface`).
+
+* 2.0.0 (2013-12-10)
+
+    New major release. The goal is to streamline the API and to make it more
+    compliant with other promise libraries and especially with the new upcoming
+    [ES6 promises specification](https://github.com/domenic/promises-unwrapping/).
+
+    * Add standalone Promise class.
+    * Add new `race()` function.
+    * BC break: Bump minimum PHP version to PHP 5.4.
+    * BC break: Remove `ResolverInterface` and `PromiseInterface` from 
+      `Deferred`.
+    * BC break: Change signature of `PromiseInterface`.
+    * BC break: Remove `When` and `Util` classes and move static methods to
+      functions.
+    * BC break: `FulfilledPromise` and `RejectedPromise` now throw an exception
+      when initialized with a promise instead of a value/reason.
+    * BC break: `Deferred::resolve()` and `Deferred::reject()` no longer return
+      a promise.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/LICENSE b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..5919d20ff3fab238b917724cd73d4e8423fe7e62
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2012-2016 Jan Sorgalla
+
+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:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+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.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/README.md b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9c0558c04d0942f435749d8af99647d196b32baa
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/README.md
@@ -0,0 +1,840 @@
+React/Promise
+=============
+
+A lightweight implementation of
+[CommonJS Promises/A](http://wiki.commonjs.org/wiki/Promises/A) for PHP.
+
+[![Build Status](https://travis-ci.org/reactphp/promise.svg?branch=master)](http://travis-ci.org/reactphp/promise)
+[![Coverage Status](https://coveralls.io/repos/github/reactphp/promise/badge.svg?branch=master)](https://coveralls.io/github/reactphp/promise?branch=master)
+
+Table of Contents
+-----------------
+
+1. [Introduction](#introduction)
+2. [Concepts](#concepts)
+   * [Deferred](#deferred)
+   * [Promise](#promise)
+3. [API](#api)
+   * [Deferred](#deferred-1)
+     * [Deferred::promise()](#deferredpromise)
+     * [Deferred::resolve()](#deferredresolve)
+     * [Deferred::reject()](#deferredreject)
+     * [Deferred::notify()](#deferrednotify)
+   * [PromiseInterface](#promiseinterface)
+     * [PromiseInterface::then()](#promiseinterfacethen)
+   * [ExtendedPromiseInterface](#extendedpromiseinterface)
+        * [ExtendedPromiseInterface::done()](#extendedpromiseinterfacedone)
+        * [ExtendedPromiseInterface::otherwise()](#extendedpromiseinterfaceotherwise)
+        * [ExtendedPromiseInterface::always()](#extendedpromiseinterfacealways)
+        * [ExtendedPromiseInterface::progress()](#extendedpromiseinterfaceprogress)
+   * [CancellablePromiseInterface](#cancellablepromiseinterface)
+        * [CancellablePromiseInterface::cancel()](#cancellablepromiseinterfacecancel)
+   * [Promise](#promise-1)
+   * [FulfilledPromise](#fulfilledpromise)
+   * [RejectedPromise](#rejectedpromise)
+   * [LazyPromise](#lazypromise)
+   * [Functions](#functions)
+     * [resolve()](#resolve)
+     * [reject()](#reject)
+     * [all()](#all)
+     * [race()](#race)
+     * [any()](#any)
+     * [some()](#some)
+     * [map()](#map)
+     * [reduce()](#reduce)
+   * [PromisorInterface](#promisorinterface)
+4. [Examples](#examples)
+   * [How to use Deferred](#how-to-use-deferred)
+   * [How promise forwarding works](#how-promise-forwarding-works)
+     * [Resolution forwarding](#resolution-forwarding)
+     * [Rejection forwarding](#rejection-forwarding)
+     * [Mixed resolution and rejection forwarding](#mixed-resolution-and-rejection-forwarding)
+     * [Progress event forwarding](#progress-event-forwarding)
+   * [done() vs. then()](#done-vs-then)
+5. [Credits](#credits)
+6. [License](#license)
+
+Introduction
+------------
+
+React/Promise is a library implementing
+[CommonJS Promises/A](http://wiki.commonjs.org/wiki/Promises/A) for PHP.
+
+It also provides several other useful promise-related concepts, such as joining
+multiple promises and mapping and reducing collections of promises.
+
+If you've never heard about promises before,
+[read this first](https://gist.github.com/3889970).
+
+Concepts
+--------
+
+### Deferred
+
+A **Deferred** represents a computation or unit of work that may not have
+completed yet. Typically (but not always), that computation will be something
+that executes asynchronously and completes at some point in the future.
+
+### Promise
+
+While a deferred represents the computation itself, a **Promise** represents
+the result of that computation. Thus, each deferred has a promise that acts as
+a placeholder for its actual result.
+
+API
+---
+
+### Deferred
+
+A deferred represents an operation whose resolution is pending. It has separate
+promise and resolver parts.
+
+```php
+$deferred = new React\Promise\Deferred();
+
+$promise = $deferred->promise();
+
+$deferred->resolve(mixed $value = null);
+$deferred->reject(mixed $reason = null);
+$deferred->notify(mixed $update = null);
+```
+
+The `promise` method returns the promise of the deferred.
+
+The `resolve` and `reject` methods control the state of the deferred.
+
+The `notify` method is for progress notification.
+
+The constructor of the `Deferred` accepts an optional `$canceller` argument.
+See [Promise](#promise-1) for more information.
+
+#### Deferred::promise()
+
+```php
+$promise = $deferred->promise();
+```
+
+Returns the promise of the deferred, which you can hand out to others while
+keeping the authority to modify its state to yourself.
+
+#### Deferred::resolve()
+
+```php
+$deferred->resolve(mixed $value = null);
+```
+
+Resolves the promise returned by `promise()`. All consumers are notified by
+having `$onFulfilled` (which they registered via `$promise->then()`) called with
+`$value`.
+
+If `$value` itself is a promise, the promise will transition to the state of
+this promise once it is resolved.
+
+#### Deferred::reject()
+
+```php
+$deferred->reject(mixed $reason = null);
+```
+
+Rejects the promise returned by `promise()`, signalling that the deferred's
+computation failed.
+All consumers are notified by having `$onRejected` (which they registered via
+`$promise->then()`) called with `$reason`.
+
+If `$reason` itself is a promise, the promise will be rejected with the outcome
+of this promise regardless whether it fulfills or rejects.
+
+#### Deferred::notify()
+
+```php
+$deferred->notify(mixed $update = null);
+```
+
+Triggers progress notifications, to indicate to consumers that the computation
+is making progress toward its result.
+
+All consumers are notified by having `$onProgress` (which they registered via
+`$promise->then()`) called with `$update`.
+
+### PromiseInterface
+
+The promise interface provides the common interface for all promise
+implementations.
+
+A promise represents an eventual outcome, which is either fulfillment (success)
+and an associated value, or rejection (failure) and an associated reason.
+
+Once in the fulfilled or rejected state, a promise becomes immutable.
+Neither its state nor its result (or error) can be modified.
+
+#### Implementations
+
+* [Promise](#promise-1)
+* [FulfilledPromise](#fulfilledpromise)
+* [RejectedPromise](#rejectedpromise)
+* [LazyPromise](#lazypromise)
+
+#### PromiseInterface::then()
+
+```php
+$transformedPromise = $promise->then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
+```
+
+Transforms a promise's value by applying a function to the promise's fulfillment
+or rejection value. Returns a new promise for the transformed result.
+
+The `then()` method registers new fulfilled, rejection and progress handlers
+with a promise (all parameters are optional):
+
+  * `$onFulfilled` will be invoked once the promise is fulfilled and passed
+    the result as the first argument.
+  * `$onRejected` will be invoked once the promise is rejected and passed the
+    reason as the first argument.
+  * `$onProgress` will be invoked whenever the producer of the promise
+    triggers progress notifications and passed a single argument (whatever it
+    wants) to indicate progress.
+
+It returns a new promise that will fulfill with the return value of either
+`$onFulfilled` or `$onRejected`, whichever is called, or will reject with
+the thrown exception if either throws.
+
+A promise makes the following guarantees about handlers registered in
+the same call to `then()`:
+
+  1. Only one of `$onFulfilled` or `$onRejected` will be called,
+     never both.
+  2. `$onFulfilled` and `$onRejected` will never be called more
+     than once.
+  3. `$onProgress` may be called multiple times.
+
+#### See also
+
+* [resolve()](#resolve) - Creating a resolved promise
+* [reject()](#reject) - Creating a rejected promise
+* [ExtendedPromiseInterface::done()](#extendedpromiseinterfacedone)
+* [done() vs. then()](#done-vs-then)
+
+### ExtendedPromiseInterface
+
+The ExtendedPromiseInterface extends the PromiseInterface with useful shortcut
+and utility methods which are not part of the Promises/A specification.
+
+#### Implementations
+
+* [Promise](#promise-1)
+* [FulfilledPromise](#fulfilledpromise)
+* [RejectedPromise](#rejectedpromise)
+* [LazyPromise](#lazypromise)
+
+#### ExtendedPromiseInterface::done()
+
+```php
+$promise->done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
+```
+
+Consumes the promise's ultimate value if the promise fulfills, or handles the
+ultimate error.
+
+It will cause a fatal error if either `$onFulfilled` or `$onRejected` throw or
+return a rejected promise.
+
+Since the purpose of `done()` is consumption rather than transformation,
+`done()` always returns `null`.
+
+#### See also
+
+* [PromiseInterface::then()](#promiseinterfacethen)
+* [done() vs. then()](#done-vs-then)
+
+#### ExtendedPromiseInterface::otherwise()
+
+```php
+$promise->otherwise(callable $onRejected);
+```
+
+Registers a rejection handler for promise. It is a shortcut for:
+
+```php
+$promise->then(null, $onRejected);
+```
+
+Additionally, you can type hint the `$reason` argument of `$onRejected` to catch
+only specific errors.
+
+```php
+$promise
+    ->otherwise(function (\RuntimeException $reason) {
+        // Only catch \RuntimeException instances
+        // All other types of errors will propagate automatically
+    })
+    ->otherwise(function ($reason) {
+        // Catch other errors
+    )};
+```
+
+#### ExtendedPromiseInterface::always()
+
+```php
+$newPromise = $promise->always(callable $onFulfilledOrRejected);
+```
+
+Allows you to execute "cleanup" type tasks in a promise chain.
+
+It arranges for `$onFulfilledOrRejected` to be called, with no arguments,
+when the promise is either fulfilled or rejected.
+
+* If `$promise` fulfills, and `$onFulfilledOrRejected` returns successfully,
+  `$newPromise` will fulfill with the same value as `$promise`.
+* If `$promise` fulfills, and `$onFulfilledOrRejected` throws or returns a
+  rejected promise, `$newPromise` will reject with the thrown exception or
+  rejected promise's reason.
+* If `$promise` rejects, and `$onFulfilledOrRejected` returns successfully,
+  `$newPromise` will reject with the same reason as `$promise`.
+* If `$promise` rejects, and `$onFulfilledOrRejected` throws or returns a
+  rejected promise, `$newPromise` will reject with the thrown exception or
+  rejected promise's reason.
+
+`always()` behaves similarly to the synchronous finally statement. When combined
+with `otherwise()`, `always()` allows you to write code that is similar to the familiar
+synchronous catch/finally pair.
+
+Consider the following synchronous code:
+
+```php
+try {
+  return doSomething();
+} catch(\Exception $e) {
+    return handleError($e);
+} finally {
+    cleanup();
+}
+```
+
+Similar asynchronous code (with `doSomething()` that returns a promise) can be
+written:
+
+```php
+return doSomething()
+    ->otherwise('handleError')
+    ->always('cleanup');
+```
+
+#### ExtendedPromiseInterface::progress()
+
+```php
+$promise->progress(callable $onProgress);
+```
+
+Registers a handler for progress updates from promise. It is a shortcut for:
+
+```php
+$promise->then(null, null, $onProgress);
+```
+
+### CancellablePromiseInterface
+
+A cancellable promise provides a mechanism for consumers to notify the creator
+of the promise that they are not longer interested in the result of an
+operation.
+
+#### CancellablePromiseInterface::cancel()
+
+``` php
+$promise->cancel();
+```
+
+The `cancel()` method notifies the creator of the promise that there is no
+further interest in the results of the operation.
+
+Once a promise is settled (either fulfilled or rejected), calling `cancel()` on
+a promise has no effect.
+
+#### Implementations
+
+* [Promise](#promise-1)
+* [FulfilledPromise](#fulfilledpromise)
+* [RejectedPromise](#rejectedpromise)
+* [LazyPromise](#lazypromise)
+
+### Promise
+
+Creates a promise whose state is controlled by the functions passed to
+`$resolver`.
+
+```php
+$resolver = function (callable $resolve, callable $reject, callable $notify) {
+    // Do some work, possibly asynchronously, and then
+    // resolve or reject. You can notify of progress events
+    // along the way if you want/need.
+
+    $resolve($awesomeResult);
+    // or $resolve($anotherPromise);
+    // or $reject($nastyError);
+    // or $notify($progressNotification);
+};
+
+$canceller = function (callable $resolve, callable $reject, callable $progress) {
+    // Cancel/abort any running operations like network connections, streams etc.
+
+    $reject(new \Exception('Promise cancelled'));
+};
+
+$promise = new React\Promise\Promise($resolver, $canceller);
+```
+
+The promise constructor receives a resolver function and an optional canceller
+function which both will be called with 3 arguments:
+
+  * `$resolve($value)` - Primary function that seals the fate of the
+    returned promise. Accepts either a non-promise value, or another promise.
+    When called with a non-promise value, fulfills promise with that value.
+    When called with another promise, e.g. `$resolve($otherPromise)`, promise's
+    fate will be equivalent to that of `$otherPromise`.
+  * `$reject($reason)` - Function that rejects the promise.
+  * `$notify($update)` - Function that issues progress events for the promise.
+
+If the resolver or canceller throw an exception, the promise will be rejected
+with that thrown exception as the rejection reason.
+
+The resolver function will be called immediately, the canceller function only
+once all consumers called the `cancel()` method of the promise.
+
+### FulfilledPromise
+
+Creates a already fulfilled promise.
+
+```php
+$promise = React\Promise\FulfilledPromise($value);
+```
+
+Note, that `$value` **cannot** be a promise. It's recommended to use
+[resolve()](#resolve) for creating resolved promises.
+
+### RejectedPromise
+
+Creates a already rejected promise.
+
+```php
+$promise = React\Promise\RejectedPromise($reason);
+```
+
+Note, that `$reason` **cannot** be a promise. It's recommended to use
+[reject()](#reject) for creating rejected promises.
+
+### LazyPromise
+
+Creates a promise which will be lazily initialized by `$factory` once a consumer
+calls the `then()` method.
+
+```php
+$factory = function () {
+    $deferred = new React\Promise\Deferred();
+
+    // Do some heavy stuff here and resolve the deferred once completed
+
+    return $deferred->promise();
+};
+
+$promise = React\Promise\LazyPromise($factory);
+
+// $factory will only be executed once we call then()
+$promise->then(function ($value) {
+});
+```
+
+### Functions
+
+Useful functions for creating, joining, mapping and reducing collections of
+promises.
+
+All functions working on promise collections (like `all()`, `race()`, `some()`
+etc.) support cancellation. This means, if you call `cancel()` on the returned
+promise, all promises in the collection are cancelled. If the collection itself
+is a promise which resolves to an array, this promise is also cancelled.
+
+#### resolve()
+
+```php
+$promise = React\Promise\resolve(mixed $promiseOrValue);
+```
+
+Creates a promise for the supplied `$promiseOrValue`.
+
+If `$promiseOrValue` is a value, it will be the resolution value of the
+returned promise.
+
+If `$promiseOrValue` is a thenable (any object that provides a `then()` method),
+a trusted promise that follows the state of the thenable is returned.
+
+If `$promiseOrValue` is a promise, it will be returned as is.
+
+Note: The promise returned is always a promise implementing
+[ExtendedPromiseInterface](#extendedpromiseinterface). If you pass in a custom
+promise which only implements [PromiseInterface](#promiseinterface), this
+promise will be assimilated to a extended promise following `$promiseOrValue`.
+
+#### reject()
+
+```php
+$promise = React\Promise\reject(mixed $promiseOrValue);
+```
+
+Creates a rejected promise for the supplied `$promiseOrValue`.
+
+If `$promiseOrValue` is a value, it will be the rejection value of the
+returned promise.
+
+If `$promiseOrValue` is a promise, its completion value will be the rejected
+value of the returned promise.
+
+This can be useful in situations where you need to reject a promise without
+throwing an exception. For example, it allows you to propagate a rejection with
+the value of another promise.
+
+#### all()
+
+```php
+$promise = React\Promise\all(array|React\Promise\PromiseInterface $promisesOrValues);
+```
+
+Returns a promise that will resolve only once all the items in
+`$promisesOrValues` have resolved. The resolution value of the returned promise
+will be an array containing the resolution values of each of the items in
+`$promisesOrValues`.
+
+#### race()
+
+```php
+$promise = React\Promise\race(array|React\Promise\PromiseInterface $promisesOrValues);
+```
+
+Initiates a competitive race that allows one winner. Returns a promise which is
+resolved in the same way the first settled promise resolves.
+
+#### any()
+
+```php
+$promise = React\Promise\any(array|React\Promise\PromiseInterface $promisesOrValues);
+```
+
+Returns a promise that will resolve when any one of the items in
+`$promisesOrValues` resolves. The resolution value of the returned promise
+will be the resolution value of the triggering item.
+
+The returned promise will only reject if *all* items in `$promisesOrValues` are
+rejected. The rejection value will be an array of all rejection reasons.
+
+The returned promise will also reject with a `React\Promise\Exception\LengthException`
+if `$promisesOrValues` contains 0 items.
+
+#### some()
+
+```php
+$promise = React\Promise\some(array|React\Promise\PromiseInterface $promisesOrValues, integer $howMany);
+```
+
+Returns a promise that will resolve when `$howMany` of the supplied items in
+`$promisesOrValues` resolve. The resolution value of the returned promise
+will be an array of length `$howMany` containing the resolution values of the
+triggering items.
+
+The returned promise will reject if it becomes impossible for `$howMany` items
+to resolve (that is, when `(count($promisesOrValues) - $howMany) + 1` items
+reject). The rejection value will be an array of
+`(count($promisesOrValues) - $howMany) + 1` rejection reasons.
+
+The returned promise will also reject with a `React\Promise\Exception\LengthException`
+if `$promisesOrValues` contains less items than `$howMany`.
+
+#### map()
+
+```php
+$promise = React\Promise\map(array|React\Promise\PromiseInterface $promisesOrValues, callable $mapFunc);
+```
+
+Traditional map function, similar to `array_map()`, but allows input to contain
+promises and/or values, and `$mapFunc` may return either a value or a promise.
+
+The map function receives each item as argument, where item is a fully resolved
+value of a promise or value in `$promisesOrValues`.
+
+#### reduce()
+
+```php
+$promise = React\Promise\reduce(array|React\Promise\PromiseInterface $promisesOrValues, callable $reduceFunc , $initialValue = null);
+```
+
+Traditional reduce function, similar to `array_reduce()`, but input may contain
+promises and/or values, and `$reduceFunc` may return either a value or a
+promise, *and* `$initialValue` may be a promise or a value for the starting
+value.
+
+### PromisorInterface
+
+The `React\Promise\PromisorInterface` provides a common interface for objects
+that provide a promise. `React\Promise\Deferred` implements it, but since it
+is part of the public API anyone can implement it.
+
+Examples
+--------
+
+### How to use Deferred
+
+```php
+function getAwesomeResultPromise()
+{
+    $deferred = new React\Promise\Deferred();
+
+    // Execute a Node.js-style function using the callback pattern
+    computeAwesomeResultAsynchronously(function ($error, $result) use ($deferred) {
+        if ($error) {
+            $deferred->reject($error);
+        } else {
+            $deferred->resolve($result);
+        }
+    });
+
+    // Return the promise
+    return $deferred->promise();
+}
+
+getAwesomeResultPromise()
+    ->then(
+        function ($value) {
+            // Deferred resolved, do something with $value
+        },
+        function ($reason) {
+            // Deferred rejected, do something with $reason
+        },
+        function ($update) {
+            // Progress notification triggered, do something with $update
+        }
+    );
+```
+
+### How promise forwarding works
+
+A few simple examples to show how the mechanics of Promises/A forwarding works.
+These examples are contrived, of course, and in real usage, promise chains will
+typically be spread across several function calls, or even several levels of
+your application architecture.
+
+#### Resolution forwarding
+
+Resolved promises forward resolution values to the next promise.
+The first promise, `$deferred->promise()`, will resolve with the value passed
+to `$deferred->resolve()` below.
+
+Each call to `then()` returns a new promise that will resolve with the return
+value of the previous handler. This creates a promise "pipeline".
+
+```php
+$deferred = new React\Promise\Deferred();
+
+$deferred->promise()
+    ->then(function ($x) {
+        // $x will be the value passed to $deferred->resolve() below
+        // and returns a *new promise* for $x + 1
+        return $x + 1;
+    })
+    ->then(function ($x) {
+        // $x === 2
+        // This handler receives the return value of the
+        // previous handler.
+        return $x + 1;
+    })
+    ->then(function ($x) {
+        // $x === 3
+        // This handler receives the return value of the
+        // previous handler.
+        return $x + 1;
+    })
+    ->then(function ($x) {
+        // $x === 4
+        // This handler receives the return value of the
+        // previous handler.
+        echo 'Resolve ' . $x;
+    });
+
+$deferred->resolve(1); // Prints "Resolve 4"
+```
+
+#### Rejection forwarding
+
+Rejected promises behave similarly, and also work similarly to try/catch:
+When you catch an exception, you must rethrow for it to propagate.
+
+Similarly, when you handle a rejected promise, to propagate the rejection,
+"rethrow" it by either returning a rejected promise, or actually throwing
+(since promise translates thrown exceptions into rejections)
+
+```php
+$deferred = new React\Promise\Deferred();
+
+$deferred->promise()
+    ->then(function ($x) {
+        throw new \Exception($x + 1);
+    })
+    ->otherwise(function (\Exception $x) {
+        // Propagate the rejection
+        throw $x;
+    })
+    ->otherwise(function (\Exception $x) {
+        // Can also propagate by returning another rejection
+        return React\Promise\reject(
+            new \Exception($x->getMessage() + 1)
+        );
+    })
+    ->otherwise(function ($x) {
+        echo 'Reject ' . $x->getMessage(); // 3
+    });
+
+$deferred->resolve(1);  // Prints "Reject 3"
+```
+
+#### Mixed resolution and rejection forwarding
+
+Just like try/catch, you can choose to propagate or not. Mixing resolutions and
+rejections will still forward handler results in a predictable way.
+
+```php
+$deferred = new React\Promise\Deferred();
+
+$deferred->promise()
+    ->then(function ($x) {
+        return $x + 1;
+    })
+    ->then(function ($x) {
+        throw new \Exception($x + 1);
+    })
+    ->otherwise(function (\Exception $x) {
+        // Handle the rejection, and don't propagate.
+        // This is like catch without a rethrow
+        return $x->getMessage() + 1;
+    })
+    ->then(function ($x) {
+        echo 'Mixed ' . $x; // 4
+    });
+
+$deferred->resolve(1);  // Prints "Mixed 4"
+```
+
+#### Progress event forwarding
+
+In the same way as resolution and rejection handlers, your progress handler
+**MUST** return a progress event to be propagated to the next link in the chain.
+If you return nothing, `null` will be propagated.
+
+Also in the same way as resolutions and rejections, if you don't register a
+progress handler, the update will be propagated through.
+
+If your progress handler throws an exception, the exception will be propagated
+to the next link in the chain. The best thing to do is to ensure your progress
+handlers do not throw exceptions.
+
+This gives you the opportunity to transform progress events at each step in the
+chain so that they are meaningful to the next step. It also allows you to choose
+not to transform them, and simply let them propagate untransformed, by not
+registering a progress handler.
+
+```php
+$deferred = new React\Promise\Deferred();
+
+$deferred->promise()
+    ->progress(function ($update) {
+        return $update + 1;
+    })
+    ->progress(function ($update) {
+        echo 'Progress ' . $update; // 2
+    });
+
+$deferred->notify(1);  // Prints "Progress 2"
+```
+
+### done() vs. then()
+
+The golden rule is:
+
+    Either return your promise, or call done() on it.
+
+At a first glance, `then()` and `done()` seem very similar. However, there are
+important distinctions.
+
+The intent of `then()` is to transform a promise's value and to pass or return
+a new promise for the transformed value along to other parts of your code.
+
+The intent of `done()` is to consume a promise's value, transferring
+responsibility for the value to your code.
+
+In addition to transforming a value, `then()` allows you to recover from, or
+propagate intermediate errors. Any errors that are not handled will be caught
+by the promise machinery and used to reject the promise returned by `then()`.
+
+Calling `done()` transfers all responsibility for errors to your code. If an
+error (either a thrown exception or returned rejection) escapes the
+`$onFulfilled` or `$onRejected` callbacks you provide to done, it will be
+rethrown in an uncatchable way causing a fatal error.
+
+```php
+function getJsonResult()
+{
+    return queryApi()
+        ->then(
+            // Transform API results to an object
+            function ($jsonResultString) {
+                return json_decode($jsonResultString);
+            },
+            // Transform API errors to an exception
+            function ($jsonErrorString) {
+                $object = json_decode($jsonErrorString);
+                throw new ApiErrorException($object->errorMessage);
+            }
+        );
+}
+
+// Here we provide no rejection handler. If the promise returned has been
+// rejected, the ApiErrorException will be thrown
+getJsonResult()
+    ->done(
+        // Consume transformed object
+        function ($jsonResultObject) {
+            // Do something with $jsonResultObject
+        }
+    );
+
+// Here we provide a rejection handler which will either throw while debugging
+// or log the exception
+getJsonResult()
+    ->done(
+        function ($jsonResultObject) {
+            // Do something with $jsonResultObject
+        },
+        function (ApiErrorException $exception) {
+            if (isDebug()) {
+                throw $exception;
+            } else {
+                logException($exception);
+            }
+        }
+    );
+```
+
+Note that if a rejection value is not an instance of `\Exception`, it will be
+wrapped in an exception of the type `React\Promise\UnhandledRejectionException`.
+
+You can get the original rejection reason by calling `$exception->getReason()`.
+
+Credits
+-------
+
+React/Promise is a port of [when.js](https://github.com/cujojs/when)
+by [Brian Cavalier](https://github.com/briancavalier).
+
+Also, large parts of the documentation have been ported from the when.js
+[Wiki](https://github.com/cujojs/when/wiki) and the
+[API docs](https://github.com/cujojs/when/blob/master/docs/api.md).
+
+License
+-------
+
+React/Promise is released under the [MIT](https://github.com/reactphp/promise/blob/master/LICENSE) license.
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/composer.json b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..7cf1750f246702d2813d2b50951736772eb5bc87
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/composer.json
@@ -0,0 +1,26 @@
+{
+    "name": "react/promise",
+    "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+    "license": "MIT",
+    "authors": [
+        {"name": "Jan Sorgalla", "email": "jsorgalla@gmail.com"}
+    ],
+    "require": {
+        "php": ">=5.4.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "React\\Promise\\": "src/"
+        },
+        "files": ["src/functions_include.php"]
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "React\\Promise\\": "tests/fixtures"
+        }
+    },
+    "keywords": [
+        "promise",
+        "promises"
+    ]
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/phpunit.xml.dist b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..b9a689d74f8361a468e3c29fecf98d648f0c41ff
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/phpunit.xml.dist
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+         bootstrap="tests/bootstrap.php"
+>
+    <testsuites>
+        <testsuite name="Promise Test Suite">
+            <directory>./tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory>./src/</directory>
+            <exclude>
+                <file>./src/functions_include.php</file>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/CancellablePromiseInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/CancellablePromiseInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..896db2d372a5f99cd5c4fae90ebe39516e969f30
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/CancellablePromiseInterface.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace React\Promise;
+
+interface CancellablePromiseInterface extends PromiseInterface
+{
+    /**
+     * @return void
+     */
+    public function cancel();
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/CancellationQueue.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/CancellationQueue.php
new file mode 100644
index 0000000000000000000000000000000000000000..a366994d98cfece881bce81ab429f67e00bff9ba
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/CancellationQueue.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace React\Promise;
+
+class CancellationQueue
+{
+    private $started = false;
+    private $queue = [];
+
+    public function __invoke()
+    {
+        if ($this->started) {
+            return;
+        }
+
+        $this->started = true;
+        $this->drain();
+    }
+
+    public function enqueue($cancellable)
+    {
+        if (!method_exists($cancellable, 'then') || !method_exists($cancellable, 'cancel')) {
+            return;
+        }
+
+        $length = array_push($this->queue, $cancellable);
+
+        if ($this->started && 1 === $length) {
+            $this->drain();
+        }
+    }
+
+    private function drain()
+    {
+        for ($i = key($this->queue); isset($this->queue[$i]); $i++) {
+            $cancellable = $this->queue[$i];
+
+            $exception = null;
+
+            try {
+                $cancellable->cancel();
+            } catch (\Throwable $exception) {
+            } catch (\Exception $exception) {
+            }
+
+            unset($this->queue[$i]);
+
+            if ($exception) {
+                throw $exception;
+            }
+        }
+
+        $this->queue = [];
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Deferred.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Deferred.php
new file mode 100644
index 0000000000000000000000000000000000000000..f23980c31184ba084b1b48375c0f6c35cd2f927b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Deferred.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace React\Promise;
+
+class Deferred implements PromisorInterface
+{
+    private $promise;
+    private $resolveCallback;
+    private $rejectCallback;
+    private $notifyCallback;
+    private $canceller;
+
+    public function __construct(callable $canceller = null)
+    {
+        $this->canceller = $canceller;
+    }
+
+    public function promise()
+    {
+        if (null === $this->promise) {
+            $this->promise = new Promise(function ($resolve, $reject, $notify) {
+                $this->resolveCallback = $resolve;
+                $this->rejectCallback  = $reject;
+                $this->notifyCallback  = $notify;
+            }, $this->canceller);
+        }
+
+        return $this->promise;
+    }
+
+    public function resolve($value = null)
+    {
+        $this->promise();
+
+        call_user_func($this->resolveCallback, $value);
+    }
+
+    public function reject($reason = null)
+    {
+        $this->promise();
+
+        call_user_func($this->rejectCallback, $reason);
+    }
+
+    public function notify($update = null)
+    {
+        $this->promise();
+
+        call_user_func($this->notifyCallback, $update);
+    }
+
+    /**
+     * @deprecated 2.2.0
+     * @see Deferred::notify()
+     */
+    public function progress($update = null)
+    {
+        $this->notify($update);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Exception/LengthException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Exception/LengthException.php
new file mode 100644
index 0000000000000000000000000000000000000000..775c48db6a9974038092e035e0827ca5fcbb7a1f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Exception/LengthException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace React\Promise\Exception;
+
+class LengthException extends \LengthException
+{
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/ExtendedPromiseInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/ExtendedPromiseInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9cb6435987525754edab701518767203ba1ad559
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/ExtendedPromiseInterface.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace React\Promise;
+
+interface ExtendedPromiseInterface extends PromiseInterface
+{
+    /**
+     * @return void
+     */
+    public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
+
+    /**
+     * @return ExtendedPromiseInterface
+     */
+    public function otherwise(callable $onRejected);
+
+    /**
+     * @return ExtendedPromiseInterface
+     */
+    public function always(callable $onFulfilledOrRejected);
+
+    /**
+     * @return ExtendedPromiseInterface
+     */
+    public function progress(callable $onProgress);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/FulfilledPromise.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/FulfilledPromise.php
new file mode 100644
index 0000000000000000000000000000000000000000..914bb5c15abf5645b9963a4617602eae3d795a75
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/FulfilledPromise.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace React\Promise;
+
+class FulfilledPromise implements ExtendedPromiseInterface, CancellablePromiseInterface
+{
+    private $value;
+
+    public function __construct($value = null)
+    {
+        if ($value instanceof PromiseInterface) {
+            throw new \InvalidArgumentException('You cannot create React\Promise\FulfilledPromise with a promise. Use React\Promise\resolve($promiseOrValue) instead.');
+        }
+
+        $this->value = $value;
+    }
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        if (null === $onFulfilled) {
+            return $this;
+        }
+
+        try {
+            return resolve($onFulfilled($this->value));
+        } catch (\Throwable $exception) {
+            return new RejectedPromise($exception);
+        } catch (\Exception $exception) {
+            return new RejectedPromise($exception);
+        }
+    }
+
+    public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        if (null === $onFulfilled) {
+            return;
+        }
+
+        $result = $onFulfilled($this->value);
+
+        if ($result instanceof ExtendedPromiseInterface) {
+            $result->done();
+        }
+    }
+
+    public function otherwise(callable $onRejected)
+    {
+        return $this;
+    }
+
+    public function always(callable $onFulfilledOrRejected)
+    {
+        return $this->then(function ($value) use ($onFulfilledOrRejected) {
+            return resolve($onFulfilledOrRejected())->then(function () use ($value) {
+                return $value;
+            });
+        });
+    }
+
+    public function progress(callable $onProgress)
+    {
+        return $this;
+    }
+
+    public function cancel()
+    {
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/LazyPromise.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/LazyPromise.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e3a3d3dd003dac853b5d5c14b9c643f9821e35e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/LazyPromise.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace React\Promise;
+
+class LazyPromise implements ExtendedPromiseInterface, CancellablePromiseInterface
+{
+    private $factory;
+    private $promise;
+
+    public function __construct(callable $factory)
+    {
+        $this->factory = $factory;
+    }
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        return $this->promise()->then($onFulfilled, $onRejected, $onProgress);
+    }
+
+    public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        return $this->promise()->done($onFulfilled, $onRejected, $onProgress);
+    }
+
+    public function otherwise(callable $onRejected)
+    {
+        return $this->promise()->otherwise($onRejected);
+    }
+
+    public function always(callable $onFulfilledOrRejected)
+    {
+        return $this->promise()->always($onFulfilledOrRejected);
+    }
+
+    public function progress(callable $onProgress)
+    {
+        return $this->promise()->progress($onProgress);
+    }
+
+    public function cancel()
+    {
+        return $this->promise()->cancel();
+    }
+
+    /**
+     * @internal
+     * @see Promise::settle()
+     */
+    public function promise()
+    {
+        if (null === $this->promise) {
+            try {
+                $this->promise = resolve(call_user_func($this->factory));
+            } catch (\Throwable $exception) {
+                $this->promise = new RejectedPromise($exception);
+            } catch (\Exception $exception) {
+                $this->promise = new RejectedPromise($exception);
+            }
+        }
+
+        return $this->promise;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Promise.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Promise.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8a3f7d6101a3d3fcb1b8dff3e92a23f9b285d55
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/Promise.php
@@ -0,0 +1,207 @@
+<?php
+
+namespace React\Promise;
+
+class Promise implements ExtendedPromiseInterface, CancellablePromiseInterface
+{
+    private $canceller;
+    private $result;
+
+    private $handlers = [];
+    private $progressHandlers = [];
+
+    private $requiredCancelRequests = 0;
+    private $cancelRequests = 0;
+
+    public function __construct(callable $resolver, callable $canceller = null)
+    {
+        $this->canceller = $canceller;
+        $this->call($resolver);
+    }
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        if (null !== $this->result) {
+            return $this->result()->then($onFulfilled, $onRejected, $onProgress);
+        }
+
+        if (null === $this->canceller) {
+            return new static($this->resolver($onFulfilled, $onRejected, $onProgress));
+        }
+
+        $this->requiredCancelRequests++;
+
+        return new static($this->resolver($onFulfilled, $onRejected, $onProgress), function () {
+            if (++$this->cancelRequests < $this->requiredCancelRequests) {
+                return;
+            }
+
+            $this->cancel();
+        });
+    }
+
+    public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        if (null !== $this->result) {
+            return $this->result()->done($onFulfilled, $onRejected, $onProgress);
+        }
+
+        $this->handlers[] = function (ExtendedPromiseInterface $promise) use ($onFulfilled, $onRejected) {
+            $promise
+                ->done($onFulfilled, $onRejected);
+        };
+
+        if ($onProgress) {
+            $this->progressHandlers[] = $onProgress;
+        }
+    }
+
+    public function otherwise(callable $onRejected)
+    {
+        return $this->then(null, function ($reason) use ($onRejected) {
+            if (!_checkTypehint($onRejected, $reason)) {
+                return new RejectedPromise($reason);
+            }
+
+            return $onRejected($reason);
+        });
+    }
+
+    public function always(callable $onFulfilledOrRejected)
+    {
+        return $this->then(function ($value) use ($onFulfilledOrRejected) {
+            return resolve($onFulfilledOrRejected())->then(function () use ($value) {
+                return $value;
+            });
+        }, function ($reason) use ($onFulfilledOrRejected) {
+            return resolve($onFulfilledOrRejected())->then(function () use ($reason) {
+                return new RejectedPromise($reason);
+            });
+        });
+    }
+
+    public function progress(callable $onProgress)
+    {
+        return $this->then(null, null, $onProgress);
+    }
+
+    public function cancel()
+    {
+        if (null === $this->canceller || null !== $this->result) {
+            return;
+        }
+
+        $canceller = $this->canceller;
+        $this->canceller = null;
+
+        $this->call($canceller);
+    }
+
+    private function resolver(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        return function ($resolve, $reject, $notify) use ($onFulfilled, $onRejected, $onProgress) {
+            if ($onProgress) {
+                $progressHandler = function ($update) use ($notify, $onProgress) {
+                    try {
+                        $notify($onProgress($update));
+                    } catch (\Throwable $e) {
+                        $notify($e);
+                    } catch (\Exception $e) {
+                        $notify($e);
+                    }
+                };
+            } else {
+                $progressHandler = $notify;
+            }
+
+            $this->handlers[] = function (ExtendedPromiseInterface $promise) use ($onFulfilled, $onRejected, $resolve, $reject, $progressHandler) {
+                $promise
+                    ->then($onFulfilled, $onRejected)
+                    ->done($resolve, $reject, $progressHandler);
+            };
+
+            $this->progressHandlers[] = $progressHandler;
+        };
+    }
+
+    private function resolve($value = null)
+    {
+        if (null !== $this->result) {
+            return;
+        }
+
+        $this->settle(resolve($value));
+    }
+
+    private function reject($reason = null)
+    {
+        if (null !== $this->result) {
+            return;
+        }
+
+        $this->settle(reject($reason));
+    }
+
+    private function notify($update = null)
+    {
+        if (null !== $this->result) {
+            return;
+        }
+
+        foreach ($this->progressHandlers as $handler) {
+            $handler($update);
+        }
+    }
+
+    private function settle(ExtendedPromiseInterface $promise)
+    {
+        if ($promise instanceof LazyPromise) {
+            $promise = $promise->promise();
+        }
+
+        if ($promise === $this) {
+            $promise = new RejectedPromise(
+                new \LogicException('Cannot resolve a promise with itself.')
+            );
+        }
+
+        $handlers = $this->handlers;
+
+        $this->progressHandlers = $this->handlers = [];
+        $this->result = $promise;
+
+        foreach ($handlers as $handler) {
+            $handler($promise);
+        }
+    }
+
+    private function result()
+    {
+        while ($this->result instanceof self && null !== $this->result->result) {
+            $this->result = $this->result->result;
+        }
+
+        return $this->result;
+    }
+
+    private function call(callable $callback)
+    {
+        try {
+            $callback(
+                function ($value = null) {
+                    $this->resolve($value);
+                },
+                function ($reason = null) {
+                    $this->reject($reason);
+                },
+                function ($update = null) {
+                    $this->notify($update);
+                }
+            );
+        } catch (\Throwable $e) {
+            $this->reject($e);
+        } catch (\Exception $e) {
+            $this->reject($e);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/PromiseInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/PromiseInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..d80d11421ad1f60c4e05002288a07b91f6312b27
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/PromiseInterface.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace React\Promise;
+
+interface PromiseInterface
+{
+    /**
+     * @return PromiseInterface
+     */
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/PromisorInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/PromisorInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9341a4fa83cd840f7baa12a36987aa6ade856e88
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/PromisorInterface.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace React\Promise;
+
+interface PromisorInterface
+{
+    /**
+     * @return PromiseInterface
+     */
+    public function promise();
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/RejectedPromise.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/RejectedPromise.php
new file mode 100644
index 0000000000000000000000000000000000000000..479a746b342f01218cb7421767bc53013e4a7ebb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/RejectedPromise.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace React\Promise;
+
+class RejectedPromise implements ExtendedPromiseInterface, CancellablePromiseInterface
+{
+    private $reason;
+
+    public function __construct($reason = null)
+    {
+        if ($reason instanceof PromiseInterface) {
+            throw new \InvalidArgumentException('You cannot create React\Promise\RejectedPromise with a promise. Use React\Promise\reject($promiseOrValue) instead.');
+        }
+
+        $this->reason = $reason;
+    }
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        if (null === $onRejected) {
+            return $this;
+        }
+
+        try {
+            return resolve($onRejected($this->reason));
+        } catch (\Throwable $exception) {
+            return new RejectedPromise($exception);
+        } catch (\Exception $exception) {
+            return new RejectedPromise($exception);
+        }
+    }
+
+    public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        if (null === $onRejected) {
+            throw UnhandledRejectionException::resolve($this->reason);
+        }
+
+        $result = $onRejected($this->reason);
+
+        if ($result instanceof self) {
+            throw UnhandledRejectionException::resolve($result->reason);
+        }
+
+        if ($result instanceof ExtendedPromiseInterface) {
+            $result->done();
+        }
+    }
+
+    public function otherwise(callable $onRejected)
+    {
+        if (!_checkTypehint($onRejected, $this->reason)) {
+            return $this;
+        }
+
+        return $this->then(null, $onRejected);
+    }
+
+    public function always(callable $onFulfilledOrRejected)
+    {
+        return $this->then(null, function ($reason) use ($onFulfilledOrRejected) {
+            return resolve($onFulfilledOrRejected())->then(function () use ($reason) {
+                return new RejectedPromise($reason);
+            });
+        });
+    }
+
+    public function progress(callable $onProgress)
+    {
+        return $this;
+    }
+
+    public function cancel()
+    {
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/UnhandledRejectionException.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/UnhandledRejectionException.php
new file mode 100644
index 0000000000000000000000000000000000000000..a44b7a1bffc05ad5f7ceba03bb80826aaf4f7edd
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/UnhandledRejectionException.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace React\Promise;
+
+class UnhandledRejectionException extends \RuntimeException
+{
+    private $reason;
+
+    public static function resolve($reason)
+    {
+        if ($reason instanceof \Exception || $reason instanceof \Throwable) {
+            return $reason;
+        }
+
+        return new static($reason);
+    }
+
+    public function __construct($reason)
+    {
+        $this->reason = $reason;
+
+        $message = sprintf('Unhandled Rejection: %s', json_encode($reason));
+
+        parent::__construct($message, 0);
+    }
+
+    public function getReason()
+    {
+        return $this->reason;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/functions.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/functions.php
new file mode 100644
index 0000000000000000000000000000000000000000..70c0eb72f9e52d39dfa5a82acbd912367bdf3f53
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/functions.php
@@ -0,0 +1,244 @@
+<?php
+
+namespace React\Promise;
+
+function resolve($promiseOrValue = null)
+{
+    if ($promiseOrValue instanceof ExtendedPromiseInterface) {
+        return $promiseOrValue;
+    }
+
+    if (method_exists($promiseOrValue, 'then')) {
+        $canceller = null;
+
+        if (method_exists($promiseOrValue, 'cancel')) {
+            $canceller = [$promiseOrValue, 'cancel'];
+        }
+
+        return new Promise(function ($resolve, $reject, $notify) use ($promiseOrValue) {
+            $promiseOrValue->then($resolve, $reject, $notify);
+        }, $canceller);
+    }
+
+    return new FulfilledPromise($promiseOrValue);
+}
+
+function reject($promiseOrValue = null)
+{
+    if ($promiseOrValue instanceof PromiseInterface) {
+        return resolve($promiseOrValue)->then(function ($value) {
+            return new RejectedPromise($value);
+        });
+    }
+
+    return new RejectedPromise($promiseOrValue);
+}
+
+function all($promisesOrValues)
+{
+    return map($promisesOrValues, function ($val) {
+        return $val;
+    });
+}
+
+function race($promisesOrValues)
+{
+    $cancellationQueue = new CancellationQueue();
+    $cancellationQueue->enqueue($promisesOrValues);
+
+    return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $cancellationQueue) {
+        resolve($promisesOrValues)
+            ->done(function ($array) use ($cancellationQueue, $resolve, $reject, $notify) {
+                if (!is_array($array) || !$array) {
+                    $resolve();
+                    return;
+                }
+
+                foreach ($array as $promiseOrValue) {
+                    $cancellationQueue->enqueue($promiseOrValue);
+
+                    resolve($promiseOrValue)
+                        ->done($resolve, $reject, $notify);
+                }
+            }, $reject, $notify);
+    }, $cancellationQueue);
+}
+
+function any($promisesOrValues)
+{
+    return some($promisesOrValues, 1)
+        ->then(function ($val) {
+            return array_shift($val);
+        });
+}
+
+function some($promisesOrValues, $howMany)
+{
+    $cancellationQueue = new CancellationQueue();
+    $cancellationQueue->enqueue($promisesOrValues);
+
+    return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $howMany, $cancellationQueue) {
+        resolve($promisesOrValues)
+            ->done(function ($array) use ($howMany, $cancellationQueue, $resolve, $reject, $notify) {
+                if (!is_array($array) || $howMany < 1) {
+                    $resolve([]);
+                    return;
+                }
+
+                $len = count($array);
+
+                if ($len < $howMany) {
+                    throw new Exception\LengthException(
+                        sprintf(
+                            'Input array must contain at least %d item%s but contains only %s item%s.',
+                            $howMany,
+                            1 === $howMany ? '' : 's',
+                            $len,
+                            1 === $len ? '' : 's'
+                        )
+                    );
+                }
+
+                $toResolve = $howMany;
+                $toReject  = ($len - $toResolve) + 1;
+                $values    = [];
+                $reasons   = [];
+
+                foreach ($array as $i => $promiseOrValue) {
+                    $fulfiller = function ($val) use ($i, &$values, &$toResolve, $toReject, $resolve) {
+                        if ($toResolve < 1 || $toReject < 1) {
+                            return;
+                        }
+
+                        $values[$i] = $val;
+
+                        if (0 === --$toResolve) {
+                            $resolve($values);
+                        }
+                    };
+
+                    $rejecter = function ($reason) use ($i, &$reasons, &$toReject, $toResolve, $reject) {
+                        if ($toResolve < 1 || $toReject < 1) {
+                            return;
+                        }
+
+                        $reasons[$i] = $reason;
+
+                        if (0 === --$toReject) {
+                            $reject($reasons);
+                        }
+                    };
+
+                    $cancellationQueue->enqueue($promiseOrValue);
+
+                    resolve($promiseOrValue)
+                        ->done($fulfiller, $rejecter, $notify);
+                }
+            }, $reject, $notify);
+    }, $cancellationQueue);
+}
+
+function map($promisesOrValues, callable $mapFunc)
+{
+    $cancellationQueue = new CancellationQueue();
+    $cancellationQueue->enqueue($promisesOrValues);
+
+    return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $mapFunc, $cancellationQueue) {
+        resolve($promisesOrValues)
+            ->done(function ($array) use ($mapFunc, $cancellationQueue, $resolve, $reject, $notify) {
+                if (!is_array($array) || !$array) {
+                    $resolve([]);
+                    return;
+                }
+
+                $toResolve = count($array);
+                $values    = [];
+
+                foreach ($array as $i => $promiseOrValue) {
+                    $cancellationQueue->enqueue($promiseOrValue);
+                    $values[$i] = null;
+
+                    resolve($promiseOrValue)
+                        ->then($mapFunc)
+                        ->done(
+                            function ($mapped) use ($i, &$values, &$toResolve, $resolve) {
+                                $values[$i] = $mapped;
+
+                                if (0 === --$toResolve) {
+                                    $resolve($values);
+                                }
+                            },
+                            $reject,
+                            $notify
+                        );
+                }
+            }, $reject, $notify);
+    }, $cancellationQueue);
+}
+
+function reduce($promisesOrValues, callable $reduceFunc, $initialValue = null)
+{
+    $cancellationQueue = new CancellationQueue();
+    $cancellationQueue->enqueue($promisesOrValues);
+
+    return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $reduceFunc, $initialValue, $cancellationQueue) {
+        resolve($promisesOrValues)
+            ->done(function ($array) use ($reduceFunc, $initialValue, $cancellationQueue, $resolve, $reject, $notify) {
+                if (!is_array($array)) {
+                    $array = [];
+                }
+
+                $total = count($array);
+                $i = 0;
+
+                // Wrap the supplied $reduceFunc with one that handles promises and then
+                // delegates to the supplied.
+                $wrappedReduceFunc = function ($current, $val) use ($reduceFunc, $cancellationQueue, $total, &$i) {
+                    $cancellationQueue->enqueue($val);
+
+                    return $current
+                        ->then(function ($c) use ($reduceFunc, $total, &$i, $val) {
+                            return resolve($val)
+                                ->then(function ($value) use ($reduceFunc, $total, &$i, $c) {
+                                    return $reduceFunc($c, $value, $i++, $total);
+                                });
+                        });
+                };
+
+                $cancellationQueue->enqueue($initialValue);
+
+                array_reduce($array, $wrappedReduceFunc, resolve($initialValue))
+                    ->done($resolve, $reject, $notify);
+            }, $reject, $notify);
+    }, $cancellationQueue);
+}
+
+// Internal functions
+function _checkTypehint(callable $callback, $object)
+{
+    if (!is_object($object)) {
+        return true;
+    }
+
+    if (is_array($callback)) {
+        $callbackReflection = new \ReflectionMethod($callback[0], $callback[1]);
+    } elseif (is_object($callback) && !$callback instanceof \Closure) {
+        $callbackReflection = new \ReflectionMethod($callback, '__invoke');
+    } else {
+        $callbackReflection = new \ReflectionFunction($callback);
+    }
+
+    $parameters = $callbackReflection->getParameters();
+
+    if (!isset($parameters[0])) {
+        return true;
+    }
+
+    $expectedException = $parameters[0];
+
+    if (!$expectedException->getClass()) {
+        return true;
+    }
+
+    return $expectedException->getClass()->isInstance($object);
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/functions_include.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/functions_include.php
new file mode 100644
index 0000000000000000000000000000000000000000..c71decbf9895632b5c8fbc457857c2bd185a1fb1
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/src/functions_include.php
@@ -0,0 +1,5 @@
+<?php
+
+if (!function_exists('React\Promise\resolve')) {
+    require __DIR__.'/functions.php';
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/CancellationQueueTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/CancellationQueueTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..32cedf475d4edd55e0ff08cc27d20aefc9299ef2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/CancellationQueueTest.php
@@ -0,0 +1,100 @@
+<?php
+
+namespace React\Promise;
+
+class CancellationQueueTest extends TestCase
+{
+    /** @test */
+    public function acceptsSimpleCancellableThenable()
+    {
+        $p = new SimpleTestCancellableThenable();
+
+        $cancellationQueue = new CancellationQueue();
+        $cancellationQueue->enqueue($p);
+
+        $cancellationQueue();
+
+        $this->assertTrue($p->cancelCalled);
+    }
+
+    /** @test */
+    public function ignoresSimpleCancellable()
+    {
+        $p = new SimpleTestCancellable();
+
+        $cancellationQueue = new CancellationQueue();
+        $cancellationQueue->enqueue($p);
+
+        $cancellationQueue();
+
+        $this->assertFalse($p->cancelCalled);
+    }
+
+    /** @test */
+    public function callsCancelOnPromisesEnqueuedBeforeStart()
+    {
+        $d1 = $this->getCancellableDeferred();
+        $d2 = $this->getCancellableDeferred();
+
+        $cancellationQueue = new CancellationQueue();
+        $cancellationQueue->enqueue($d1->promise());
+        $cancellationQueue->enqueue($d2->promise());
+
+        $cancellationQueue();
+    }
+
+    /** @test */
+    public function callsCancelOnPromisesEnqueuedAfterStart()
+    {
+        $d1 = $this->getCancellableDeferred();
+        $d2 = $this->getCancellableDeferred();
+
+        $cancellationQueue = new CancellationQueue();
+
+        $cancellationQueue();
+
+        $cancellationQueue->enqueue($d2->promise());
+        $cancellationQueue->enqueue($d1->promise());
+    }
+
+    /** @test */
+    public function doesNotCallCancelTwiceWhenStartedTwice()
+    {
+        $d = $this->getCancellableDeferred();
+
+        $cancellationQueue = new CancellationQueue();
+        $cancellationQueue->enqueue($d->promise());
+
+        $cancellationQueue();
+        $cancellationQueue();
+    }
+
+    /** @test */
+    public function rethrowsExceptionsThrownFromCancel()
+    {
+        $this->setExpectedException('\Exception', 'test');
+
+        $mock = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock
+            ->expects($this->once())
+            ->method('cancel')
+            ->will($this->throwException(new \Exception('test')));
+
+        $cancellationQueue = new CancellationQueue();
+        $cancellationQueue->enqueue($mock);
+
+        $cancellationQueue();
+    }
+
+    private function getCancellableDeferred()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke');
+
+        return new Deferred($mock);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/DeferredTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/DeferredTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..16212e9e1cb8b1b06c8fdc3ba8c19635a6048ef7
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/DeferredTest.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class DeferredTest extends TestCase
+{
+    use PromiseTest\FullTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $d = new Deferred($canceller);
+
+        return new CallbackPromiseAdapter([
+            'promise' => [$d, 'promise'],
+            'resolve' => [$d, 'resolve'],
+            'reject'  => [$d, 'reject'],
+            'notify'  => [$d, 'progress'],
+            'settle'  => [$d, 'resolve'],
+        ]);
+    }
+
+    /** @test */
+    public function progressIsAnAliasForNotify()
+    {
+        $deferred = new Deferred();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $deferred->promise()
+            ->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
+
+        $deferred->progress($sentinel);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FulfilledPromiseTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FulfilledPromiseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..97fc8f6c6d3c2f0c0b5fa278a6bf23f991753ec3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FulfilledPromiseTest.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class FulfilledPromiseTest extends TestCase
+{
+    use PromiseTest\PromiseSettledTestTrait,
+        PromiseTest\PromiseFulfilledTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $promise = null;
+
+        return new CallbackPromiseAdapter([
+            'promise' => function () use (&$promise) {
+                if (!$promise) {
+                    throw new \LogicException('FulfilledPromise must be resolved before obtaining the promise');
+                }
+
+                return $promise;
+            },
+            'resolve' => function ($value = null) use (&$promise) {
+                if (!$promise) {
+                    $promise = new FulfilledPromise($value);
+                }
+            },
+            'reject' => function () {
+                throw new \LogicException('You cannot call reject() for React\Promise\FulfilledPromise');
+            },
+            'notify' => function () {
+                // no-op
+            },
+            'settle' => function ($value = null) use (&$promise) {
+                if (!$promise) {
+                    $promise = new FulfilledPromise($value);
+                }
+            },
+        ]);
+    }
+
+    /** @test */
+    public function shouldThrowExceptionIfConstructedWithAPromise()
+    {
+        $this->setExpectedException('\InvalidArgumentException');
+
+        return new FulfilledPromise(new FulfilledPromise());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionAllTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionAllTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..74c1d7c31432c004fe50638256131a02e9e58afb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionAllTest.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionAllTest extends TestCase
+{
+    /** @test */
+    public function shouldResolveEmptyInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        all([])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveValuesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        all([1, 2, 3])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolvePromisesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        all([resolve(1), resolve(2), resolve(3)])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveSparseArrayInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([null, 1, null, 1, 1]));
+
+        all([null, 1, null, 1, 1])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectIfAnyInputPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        all([resolve(1), reject(2), resolve(3)])
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        all(resolve([1, 2, 3]))
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        all(resolve(1))
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldPreserveTheOrderOfArrayWhenResolvingAsyncPromises()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        $deferred = new Deferred();
+
+        all([resolve(1), $deferred->promise(), resolve(3)])
+            ->then($mock);
+
+        $deferred->resolve(2);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionAnyTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionAnyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..140b55122e4342611555eed7f80c590f2ce4f099
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionAnyTest.php
@@ -0,0 +1,204 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\Exception\LengthException;
+
+class FunctionAnyTest extends TestCase
+{
+    /** @test */
+    public function shouldRejectWithLengthExceptionWithEmptyInputArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with(
+                $this->callback(function($exception){
+                    return $exception instanceof LengthException &&
+                           'Input array must contain at least 1 item but contains only 0 items.' === $exception->getMessage();
+                })
+            );
+
+        any([])
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldResolveToNullWithNonArrayInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        any(null)
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveWithAnInputValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        any([1, 2, 3])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveWithAPromisedInputValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        any([resolve(1), resolve(2), resolve(3)])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectWithAllRejectedInputValuesIfAllInputsAreRejected()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([0 => 1, 1 => 2, 2 => 3]));
+
+        any([reject(1), reject(2), reject(3)])
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldResolveWhenFirstInputPromiseResolves()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        any([resolve(1), reject(2), reject(3)])
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        any(resolve([1, 2, 3]))
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToNullArrayWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        any(resolve(1))
+            ->then($mock);
+    }
+
+    /** @test */
+    public function shouldNotRelyOnArryIndexesWhenUnwrappingToASingleResolutionValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $d1 = new Deferred();
+        $d2 = new Deferred();
+
+        any(['abc' => $d1->promise(), 1 => $d2->promise()])
+            ->then($mock);
+
+        $d2->resolve(2);
+        $d1->resolve(1);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        any(reject())
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldCancelInputPromise()
+    {
+        $mock = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock
+            ->expects($this->once())
+            ->method('cancel');
+
+        any($mock)->cancel();
+    }
+
+    /** @test */
+    public function shouldCancelInputArrayPromises()
+    {
+        $mock1 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock1
+            ->expects($this->once())
+            ->method('cancel');
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->once())
+            ->method('cancel');
+
+        any([$mock1, $mock2])->cancel();
+    }
+
+    /** @test */
+    public function shouldNotCancelOtherPendingInputArrayPromisesIfOnePromiseFulfills()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->never())
+            ->method('__invoke');
+
+
+        $deferred = New Deferred($mock);
+        $deferred->resolve();
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->never())
+            ->method('cancel');
+
+        some([$deferred->promise(), $mock2], 1)->cancel();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionCheckTypehintTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionCheckTypehintTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8449bc1f7a39e2f0e3049e307f8e41bf920d8d08
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionCheckTypehintTest.php
@@ -0,0 +1,118 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionCheckTypehintTest extends TestCase
+{
+    /** @test */
+    public function shouldAcceptClosureCallbackWithTypehint()
+    {
+        $this->assertTrue(_checkTypehint(function (\InvalidArgumentException $e) {
+                }, new \InvalidArgumentException()));
+        $this->assertfalse(_checkTypehint(function (\InvalidArgumentException $e) {
+                }, new \Exception()));
+    }
+
+    /** @test */
+    public function shouldAcceptFunctionStringCallbackWithTypehint()
+    {
+        $this->assertTrue(_checkTypehint('React\Promise\testCallbackWithTypehint', new \InvalidArgumentException()));
+        $this->assertfalse(_checkTypehint('React\Promise\testCallbackWithTypehint', new \Exception()));
+    }
+
+    /** @test */
+    public function shouldAcceptInvokableObjectCallbackWithTypehint()
+    {
+        $this->assertTrue(_checkTypehint(new TestCallbackWithTypehintClass(), new \InvalidArgumentException()));
+        $this->assertfalse(_checkTypehint(new TestCallbackWithTypehintClass(), new \Exception()));
+    }
+
+    /** @test */
+    public function shouldAcceptObjectMethodCallbackWithTypehint()
+    {
+        $this->assertTrue(_checkTypehint([new TestCallbackWithTypehintClass(), 'testCallback'], new \InvalidArgumentException()));
+        $this->assertfalse(_checkTypehint([new TestCallbackWithTypehintClass(), 'testCallback'], new \Exception()));
+    }
+
+    /** @test */
+    public function shouldAcceptStaticClassCallbackWithTypehint()
+    {
+        $this->assertTrue(_checkTypehint(['React\Promise\TestCallbackWithTypehintClass', 'testCallbackStatic'], new \InvalidArgumentException()));
+        $this->assertfalse(_checkTypehint(['React\Promise\TestCallbackWithTypehintClass', 'testCallbackStatic'], new \Exception()));
+    }
+
+    /** @test */
+    public function shouldAcceptClosureCallbackWithoutTypehint()
+    {
+        $this->assertTrue(_checkTypehint(function (\InvalidArgumentException $e) {
+        }, new \InvalidArgumentException()));
+    }
+
+    /** @test */
+    public function shouldAcceptFunctionStringCallbackWithoutTypehint()
+    {
+        $this->assertTrue(_checkTypehint('React\Promise\testCallbackWithoutTypehint', new \InvalidArgumentException()));
+    }
+
+    /** @test */
+    public function shouldAcceptInvokableObjectCallbackWithoutTypehint()
+    {
+        $this->assertTrue(_checkTypehint(new TestCallbackWithoutTypehintClass(), new \InvalidArgumentException()));
+    }
+
+    /** @test */
+    public function shouldAcceptObjectMethodCallbackWithoutTypehint()
+    {
+        $this->assertTrue(_checkTypehint([new TestCallbackWithoutTypehintClass(), 'testCallback'], new \InvalidArgumentException()));
+    }
+
+    /** @test */
+    public function shouldAcceptStaticClassCallbackWithoutTypehint()
+    {
+        $this->assertTrue(_checkTypehint(['React\Promise\TestCallbackWithoutTypehintClass', 'testCallbackStatic'], new \InvalidArgumentException()));
+    }
+}
+
+function testCallbackWithTypehint(\InvalidArgumentException $e)
+{
+}
+
+function testCallbackWithoutTypehint()
+{
+}
+
+class TestCallbackWithTypehintClass
+{
+    public function __invoke(\InvalidArgumentException $e)
+    {
+
+    }
+
+    public function testCallback(\InvalidArgumentException $e)
+    {
+
+    }
+
+    public static function testCallbackStatic(\InvalidArgumentException $e)
+    {
+
+    }
+}
+
+class TestCallbackWithoutTypehintClass
+{
+    public function __invoke()
+    {
+
+    }
+
+    public function testCallback()
+    {
+
+    }
+
+    public static function testCallbackStatic()
+    {
+
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionMapTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionMapTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ea560a1f20ada838e5bf2c4e9a087d797e37b91
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionMapTest.php
@@ -0,0 +1,198 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionMapTest extends TestCase
+{
+    protected function mapper()
+    {
+        return function ($val) {
+            return $val * 2;
+        };
+    }
+
+    protected function promiseMapper()
+    {
+        return function ($val) {
+            return resolve($val * 2);
+        };
+    }
+
+    /** @test */
+    public function shouldMapInputValuesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            [1, 2, 3],
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldMapInputPromisesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            [resolve(1), resolve(2), resolve(3)],
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldMapMixedInputArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            [1, resolve(2), 3],
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldMapInputWhenMapperReturnsAPromise()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            [1, 2, 3],
+            $this->promiseMapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        map(
+            resolve([1, resolve(2), 3]),
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        map(
+            resolve(1),
+            $this->mapper()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldPreserveTheOrderOfArrayWhenResolvingAsyncPromises()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([2, 4, 6]));
+
+        $deferred = new Deferred();
+
+        map(
+            [resolve(1), $deferred->promise(), resolve(3)],
+            $this->mapper()
+        )->then($mock);
+
+        $deferred->resolve(2);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputContainsRejection()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        map(
+            [resolve(1), reject(2), resolve(3)],
+            $this->mapper()
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        map(
+            reject(),
+            $this->mapper()
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldCancelInputPromise()
+    {
+        $mock = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock
+            ->expects($this->once())
+            ->method('cancel');
+
+        map(
+            $mock,
+            $this->mapper()
+        )->cancel();
+    }
+
+    /** @test */
+    public function shouldCancelInputArrayPromises()
+    {
+        $mock1 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock1
+            ->expects($this->once())
+            ->method('cancel');
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->once())
+            ->method('cancel');
+
+        map(
+            [$mock1, $mock2],
+            $this->mapper()
+        )->cancel();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionRaceTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionRaceTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..83770ec204fcce4f72c3d30f6259143758962285
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionRaceTest.php
@@ -0,0 +1,211 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionRaceTest extends TestCase
+{
+    /** @test */
+    public function shouldResolveEmptyInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        race(
+            []
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveValuesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        race(
+            [1, 2, 3]
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolvePromisesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $d1 = new Deferred();
+        $d2 = new Deferred();
+        $d3 = new Deferred();
+
+        race(
+            [$d1->promise(), $d2->promise(), $d3->promise()]
+        )->then($mock);
+
+        $d2->resolve(2);
+
+        $d1->resolve(1);
+        $d3->resolve(3);
+    }
+
+    /** @test */
+    public function shouldResolveSparseArrayInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        race(
+            [null, 1, null, 2, 3]
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectIfFirstSettledPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $d1 = new Deferred();
+        $d2 = new Deferred();
+        $d3 = new Deferred();
+
+        race(
+            [$d1->promise(), $d2->promise(), $d3->promise()]
+        )->then($this->expectCallableNever(), $mock);
+
+        $d2->reject(2);
+
+        $d1->resolve(1);
+        $d3->resolve(3);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        race(
+            resolve([1, 2, 3])
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToNullWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        race(
+            resolve(1)
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        race(
+            reject()
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldCancelInputPromise()
+    {
+        $mock = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock
+            ->expects($this->once())
+            ->method('cancel');
+
+        race($mock)->cancel();
+    }
+
+    /** @test */
+    public function shouldCancelInputArrayPromises()
+    {
+        $mock1 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock1
+            ->expects($this->once())
+            ->method('cancel');
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->once())
+            ->method('cancel');
+
+        race([$mock1, $mock2])->cancel();
+    }
+
+    /** @test */
+    public function shouldNotCancelOtherPendingInputArrayPromisesIfOnePromiseFulfills()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->never())
+            ->method('__invoke');
+
+        $deferred = New Deferred($mock);
+        $deferred->resolve();
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->never())
+            ->method('cancel');
+
+        race([$deferred->promise(), $mock2])->cancel();
+    }
+
+    /** @test */
+    public function shouldNotCancelOtherPendingInputArrayPromisesIfOnePromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->never())
+            ->method('__invoke');
+
+        $deferred = New Deferred($mock);
+        $deferred->reject();
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->never())
+            ->method('cancel');
+
+        race([$deferred->promise(), $mock2])->cancel();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionReduceTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionReduceTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8b43a8787a9b4cbdc22de18a7e713a60a4aefab5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionReduceTest.php
@@ -0,0 +1,347 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionReduceTest extends TestCase
+{
+    protected function plus()
+    {
+        return function ($sum, $val) {
+            return $sum + $val;
+        };
+    }
+
+    protected function append()
+    {
+        return function ($sum, $val) {
+            return $sum . $val;
+        };
+    }
+
+    /** @test */
+    public function shouldReduceValuesWithoutInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(6));
+
+        reduce(
+            [1, 2, 3],
+            $this->plus()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceValuesWithInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(7));
+
+        reduce(
+            [1, 2, 3],
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceValuesWithInitialPromise()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(7));
+
+        reduce(
+            [1, 2, 3],
+            $this->plus(),
+            resolve(1)
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReducePromisedValuesWithoutInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(6));
+
+        reduce(
+            [resolve(1), resolve(2), resolve(3)],
+            $this->plus()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReducePromisedValuesWithInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(7));
+
+        reduce(
+            [resolve(1), resolve(2), resolve(3)],
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReducePromisedValuesWithInitialPromise()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(7));
+
+        reduce(
+            [resolve(1), resolve(2), resolve(3)],
+            $this->plus(),
+            resolve(1)
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceEmptyInputWithInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        reduce(
+            [],
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceEmptyInputWithInitialPromise()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        reduce(
+            [],
+            $this->plus(),
+            resolve(1)
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputContainsRejection()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        reduce(
+            [resolve(1), reject(2), resolve(3)],
+            $this->plus(),
+            resolve(1)
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldResolveWithNullWhenInputIsEmptyAndNoInitialValueOrPromiseProvided()
+    {
+        // Note: this is different from when.js's behavior!
+        // In when.reduce(), this rejects with a TypeError exception (following
+        // JavaScript's [].reduce behavior.
+        // We're following PHP's array_reduce behavior and resolve with NULL.
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        reduce(
+            [],
+            $this->plus()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldAllowSparseArrayInputWithoutInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(3));
+
+        reduce(
+            [null, null, 1, null, 1, 1],
+            $this->plus()
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldAllowSparseArrayInputWithInitialValue()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(4));
+
+        reduce(
+            [null, null, 1, null, 1, 1],
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldReduceInInputOrder()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo('123'));
+
+        reduce(
+            [1, 2, 3],
+            $this->append(),
+            ''
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo('123'));
+
+        reduce(
+            resolve([1, 2, 3]),
+            $this->append(),
+            ''
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToInitialValueWhenInputPromiseDoesNotResolveToAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        reduce(
+            resolve(1),
+            $this->plus(),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldProvideCorrectBasisValue()
+    {
+        $insertIntoArray = function ($arr, $val, $i) {
+            $arr[$i] = $val;
+
+            return $arr;
+        };
+
+        $d1 = new Deferred();
+        $d2 = new Deferred();
+        $d3 = new Deferred();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2, 3]));
+
+        reduce(
+            [$d1->promise(), $d2->promise(), $d3->promise()],
+            $insertIntoArray,
+            []
+        )->then($mock);
+
+        $d3->resolve(3);
+        $d1->resolve(1);
+        $d2->resolve(2);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        reduce(
+            reject(),
+            $this->plus(),
+            1
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldCancelInputPromise()
+    {
+        $mock = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock
+            ->expects($this->once())
+            ->method('cancel');
+
+        reduce(
+            $mock,
+            $this->plus(),
+            1
+        )->cancel();
+    }
+
+    /** @test */
+    public function shouldCancelInputArrayPromises()
+    {
+        $mock1 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock1
+            ->expects($this->once())
+            ->method('cancel');
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->once())
+            ->method('cancel');
+
+        reduce(
+            [$mock1, $mock2],
+            $this->plus(),
+            1
+        )->cancel();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionRejectTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionRejectTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..84b8ec6a04245afeb27a8d9004ebb7f7f3886bfa
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionRejectTest.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionRejectTest extends TestCase
+{
+    /** @test */
+    public function shouldRejectAnImmediateValue()
+    {
+        $expected = 123;
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        reject($expected)
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function shouldRejectAFulfilledPromise()
+    {
+        $expected = 123;
+
+        $resolved = new FulfilledPromise($expected);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        reject($resolved)
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function shouldRejectARejectedPromise()
+    {
+        $expected = 123;
+
+        $resolved = new RejectedPromise($expected);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        reject($resolved)
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionResolveTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionResolveTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..53126bc02c383a43a4fb8b14faed8ea5a0b575b2
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionResolveTest.php
@@ -0,0 +1,171 @@
+<?php
+
+namespace React\Promise;
+
+class FunctionResolveTest extends TestCase
+{
+    /** @test */
+    public function shouldResolveAnImmediateValue()
+    {
+        $expected = 123;
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        resolve($expected)
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldResolveAFulfilledPromise()
+    {
+        $expected = 123;
+
+        $resolved = new FulfilledPromise($expected);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        resolve($resolved)
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldResolveAThenable()
+    {
+        $thenable = new SimpleFulfilledTestThenable();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo('foo'));
+
+        resolve($thenable)
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldResolveACancellableThenable()
+    {
+        $thenable = new SimpleTestCancellableThenable();
+
+        $promise = resolve($thenable);
+        $promise->cancel();
+
+        $this->assertTrue($thenable->cancelCalled);
+    }
+
+    /** @test */
+    public function shouldRejectARejectedPromise()
+    {
+        $expected = 123;
+
+        $resolved = new RejectedPromise($expected);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($expected));
+
+        resolve($resolved)
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function shouldSupportDeepNestingInPromiseChains()
+    {
+        $d = new Deferred();
+        $d->resolve(false);
+
+        $result = resolve(resolve($d->promise()->then(function ($val) {
+            $d = new Deferred();
+            $d->resolve($val);
+
+            $identity = function ($val) {
+                return $val;
+            };
+
+            return resolve($d->promise()->then($identity))->then(
+                function ($val) {
+                    return !$val;
+                }
+            );
+        })));
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(true));
+
+        $result->then($mock);
+    }
+
+    /** @test */
+    public function shouldSupportVeryDeepNestedPromises()
+    {
+        $deferreds = [];
+
+        // @TODO Increase count once global-queue is merged
+        for ($i = 0; $i < 10; $i++) {
+            $deferreds[] = $d = new Deferred();
+            $p = $d->promise();
+
+            $last = $p;
+            for ($j = 0; $j < 10; $j++) {
+                $last = $last->then(function($result) {
+                    return $result;
+                });
+            }
+        }
+
+        $p = null;
+        foreach ($deferreds as $d) {
+            if ($p) {
+                $d->resolve($p);
+            }
+
+            $p = $d->promise();
+        }
+
+        $deferreds[0]->resolve(true);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(true));
+
+        $deferreds[0]->promise()->then($mock);
+    }
+
+    /** @test */
+    public function returnsExtendePromiseForSimplePromise()
+    {
+        $promise = $this
+            ->getMockBuilder('React\Promise\PromiseInterface')
+            ->getMock();
+
+        $this->assertInstanceOf('React\Promise\ExtendedPromiseInterface', resolve($promise));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionSomeTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionSomeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..276b54bb299e3a28581ceeee0f6148b6d3345e25
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/FunctionSomeTest.php
@@ -0,0 +1,258 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\Exception\LengthException;
+
+class FunctionSomeTest extends TestCase
+{
+    /** @test */
+    public function shouldRejectWithLengthExceptionWithEmptyInputArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with(
+                $this->callback(function($exception){
+                    return $exception instanceof LengthException &&
+                           'Input array must contain at least 1 item but contains only 0 items.' === $exception->getMessage();
+                })
+            );
+
+        some(
+            [],
+            1
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldRejectWithLengthExceptionWithInputArrayContainingNotEnoughItems()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with(
+                $this->callback(function($exception){
+                    return $exception instanceof LengthException &&
+                           'Input array must contain at least 4 items but contains only 3 items.' === $exception->getMessage();
+                })
+            );
+
+        some(
+            [1, 2, 3],
+            4
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldResolveToEmptyArrayWithNonArrayInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        some(
+            null,
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveValuesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2]));
+
+        some(
+            [1, 2, 3],
+            2
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolvePromisesArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2]));
+
+        some(
+            [resolve(1), resolve(2), resolve(3)],
+            2
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveSparseArrayInput()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([null, 1]));
+
+        some(
+            [null, 1, null, 2, 3],
+            2
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectIfAnyInputPromiseRejectsBeforeDesiredNumberOfInputsAreResolved()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1 => 2, 2 => 3]));
+
+        some(
+            [resolve(1), reject(2), reject(3)],
+            2
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldAcceptAPromiseForAnArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([1, 2]));
+
+        some(
+            resolve([1, 2, 3]),
+            2
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveWithEmptyArrayIfHowManyIsLessThanOne()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        some(
+            [1],
+            0
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo([]));
+
+        some(
+            resolve(1),
+            1
+        )->then($mock);
+    }
+
+    /** @test */
+    public function shouldRejectWhenInputPromiseRejects()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(null));
+
+        some(
+            reject(),
+            1
+        )->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldCancelInputPromise()
+    {
+        $mock = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock
+            ->expects($this->once())
+            ->method('cancel');
+
+        some($mock, 1)->cancel();
+    }
+
+    /** @test */
+    public function shouldCancelInputArrayPromises()
+    {
+        $mock1 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock1
+            ->expects($this->once())
+            ->method('cancel');
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->once())
+            ->method('cancel');
+
+        some([$mock1, $mock2], 1)->cancel();
+    }
+
+    /** @test */
+    public function shouldNotCancelOtherPendingInputArrayPromisesIfEnoughPromisesFulfill()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->never())
+            ->method('__invoke');
+
+        $deferred = New Deferred($mock);
+        $deferred->resolve();
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->never())
+            ->method('cancel');
+
+        some([$deferred->promise(), $mock2], 1);
+    }
+
+    /** @test */
+    public function shouldNotCancelOtherPendingInputArrayPromisesIfEnoughPromisesReject()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->never())
+            ->method('__invoke');
+
+        $deferred = New Deferred($mock);
+        $deferred->reject();
+
+        $mock2 = $this
+            ->getMockBuilder('React\Promise\CancellablePromiseInterface')
+            ->getMock();
+        $mock2
+            ->expects($this->never())
+            ->method('cancel');
+
+        some([$deferred->promise(), $mock2], 2);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/LazyPromiseTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/LazyPromiseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6308818a7714899c619d46fae8a2e45d1866ab0
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/LazyPromiseTest.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class LazyPromiseTest extends TestCase
+{
+    use PromiseTest\FullTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $d = new Deferred($canceller);
+
+        $factory = function () use ($d) {
+            return $d->promise();
+        };
+
+        return new CallbackPromiseAdapter([
+            'promise'  => function () use ($factory) {
+                return new LazyPromise($factory);
+            },
+            'resolve' => [$d, 'resolve'],
+            'reject'  => [$d, 'reject'],
+            'notify'  => [$d, 'progress'],
+            'settle'  => [$d, 'resolve'],
+        ]);
+    }
+
+    /** @test */
+    public function shouldNotCallFactoryIfThenIsNotInvoked()
+    {
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->never())
+            ->method('__invoke');
+
+        new LazyPromise($factory);
+    }
+
+    /** @test */
+    public function shouldCallFactoryIfThenIsInvoked()
+    {
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->once())
+            ->method('__invoke');
+
+        $p = new LazyPromise($factory);
+        $p->then();
+    }
+
+    /** @test */
+    public function shouldReturnPromiseFromFactory()
+    {
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnValue(new FulfilledPromise(1)));
+
+        $onFulfilled = $this->createCallableMock();
+        $onFulfilled
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $p = new LazyPromise($factory);
+
+        $p->then($onFulfilled);
+    }
+
+    /** @test */
+    public function shouldReturnPromiseIfFactoryReturnsNull()
+    {
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnValue(null));
+
+        $p = new LazyPromise($factory);
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $p->then());
+    }
+
+    /** @test */
+    public function shouldReturnRejectedPromiseIfFactoryThrowsException()
+    {
+        $exception = new \Exception();
+
+        $factory = $this->createCallableMock();
+        $factory
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->throwException($exception));
+
+        $onRejected = $this->createCallableMock();
+        $onRejected
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $p = new LazyPromise($factory);
+
+        $p->then($this->expectCallableNever(), $onRejected);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php
new file mode 100644
index 0000000000000000000000000000000000000000..bdedf4658e455eac097fe41325d1e0a3e45c4d5b
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace React\Promise\PromiseAdapter;
+
+use React\Promise;
+
+class CallbackPromiseAdapter implements PromiseAdapterInterface
+{
+    private $callbacks;
+
+    public function __construct(array $callbacks)
+    {
+        $this->callbacks = $callbacks;
+    }
+
+    public function promise()
+    {
+        return call_user_func_array($this->callbacks['promise'], func_get_args());
+    }
+
+    public function resolve()
+    {
+        return call_user_func_array($this->callbacks['resolve'], func_get_args());
+    }
+
+    public function reject()
+    {
+        return call_user_func_array($this->callbacks['reject'], func_get_args());
+    }
+
+    public function notify()
+    {
+        return call_user_func_array($this->callbacks['notify'], func_get_args());
+    }
+
+    public function settle()
+    {
+        return call_user_func_array($this->callbacks['settle'], func_get_args());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9157cd4ea7253a7c7fe7d467aea8fe0c1ccf77a8
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace React\Promise\PromiseAdapter;
+
+use React\Promise;
+
+interface PromiseAdapterInterface
+{
+    public function promise();
+    public function resolve();
+    public function reject();
+    public function notify();
+    public function settle();
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc7b733dbfd853c058d66433ce8cc1e7b34c51fb
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest.php
@@ -0,0 +1,84 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class PromiseTest extends TestCase
+{
+    use PromiseTest\FullTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $resolveCallback = $rejectCallback = $progressCallback = null;
+
+        $promise = new Promise(function ($resolve, $reject, $progress) use (&$resolveCallback, &$rejectCallback, &$progressCallback) {
+            $resolveCallback  = $resolve;
+            $rejectCallback   = $reject;
+            $progressCallback = $progress;
+        }, $canceller);
+
+        return new CallbackPromiseAdapter([
+            'promise' => function () use ($promise) {
+                return $promise;
+            },
+            'resolve' => $resolveCallback,
+            'reject'  => $rejectCallback,
+            'notify'  => $progressCallback,
+            'settle'  => $resolveCallback,
+        ]);
+    }
+
+    /** @test */
+    public function shouldRejectIfResolverThrowsException()
+    {
+        $exception = new \Exception('foo');
+
+        $promise = new Promise(function () use ($exception) {
+            throw $exception;
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $promise
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldFulfillIfFullfilledWithSimplePromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo('foo'));
+
+        $adapter->promise()
+            ->then($mock);
+
+        $adapter->resolve(new SimpleFulfilledTestPromise());
+    }
+
+    /** @test */
+    public function shouldRejectIfRejectedWithSimplePromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo('foo'));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->resolve(new SimpleRejectedTestPromise());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..d722d756a857c01d79597057ee4e0626b133800d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php
@@ -0,0 +1,231 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+use React\Promise;
+
+trait CancelTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function cancelShouldCallCancellerWithResolverArguments()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->isType('callable'), $this->isType('callable'), $this->isType('callable'));
+
+        $adapter = $this->getPromiseTestAdapter($mock);
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldFulfillPromiseIfCancellerFulfills()
+    {
+        $adapter = $this->getPromiseTestAdapter(function ($resolve) {
+            $resolve(1);
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($mock, $this->expectCallableNever());
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldRejectPromiseIfCancellerRejects()
+    {
+        $adapter = $this->getPromiseTestAdapter(function ($resolve, $reject) {
+            $reject(1);
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldRejectPromiseWithExceptionIfCancellerThrows()
+    {
+        $e = new \Exception();
+
+        $adapter = $this->getPromiseTestAdapter(function () use ($e) {
+            throw $e;
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($e));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldProgressPromiseIfCancellerNotifies()
+    {
+        $adapter = $this->getPromiseTestAdapter(function ($resolve, $reject, $progress) {
+            $progress(1);
+        });
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldCallCancellerOnlyOnceIfCancellerResolves()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnCallback(function ($resolve) {
+                $resolve();
+            }));
+
+        $adapter = $this->getPromiseTestAdapter($mock);
+
+        $adapter->promise()->cancel();
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldHaveNoEffectIfCancellerDoesNothing()
+    {
+        $adapter = $this->getPromiseTestAdapter(function () {});
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $this->expectCallableNever());
+
+        $adapter->promise()->cancel();
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldCallCancellerFromDeepNestedPromiseChain()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke');
+
+        $adapter = $this->getPromiseTestAdapter($mock);
+
+        $promise = $adapter->promise()
+            ->then(function () {
+                return new Promise\Promise(function () {});
+            })
+            ->then(function () {
+                $d = new Promise\Deferred();
+
+                return $d->promise();
+            })
+            ->then(function () {
+                return new Promise\Promise(function () {});
+            });
+
+        $promise->cancel();
+    }
+
+    /** @test */
+    public function cancelCalledOnChildrenSouldOnlyCancelWhenAllChildrenCancelled()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $child1 = $adapter->promise()
+            ->then()
+            ->then();
+
+        $adapter->promise()
+            ->then();
+
+        $child1->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldTriggerCancellerWhenAllChildrenCancel()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableOnce());
+
+        $child1 = $adapter->promise()
+            ->then()
+            ->then();
+
+        $child2 = $adapter->promise()
+            ->then();
+
+        $child1->cancel();
+        $child2->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldNotTriggerCancellerWhenCancellingOneChildrenMultipleTimes()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $child1 = $adapter->promise()
+            ->then()
+            ->then();
+
+        $child2 = $adapter->promise()
+            ->then();
+
+        $child1->cancel();
+        $child1->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldTriggerCancellerOnlyOnceWhenCancellingMultipleTimes()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableOnce());
+
+        $adapter->promise()->cancel();
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function cancelShouldAlwaysTriggerCancellerWhenCalledOnRootPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableOnce());
+
+        $adapter->promise()
+            ->then()
+            ->then();
+
+        $adapter->promise()
+            ->then();
+
+        $adapter->promise()->cancel();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/FullTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/FullTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ce45d61fae47689c45d79e55b4a781d74a488fc
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/FullTestTrait.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait FullTestTrait
+{
+    use PromisePendingTestTrait,
+        PromiseSettledTestTrait,
+        PromiseFulfilledTestTrait,
+        PromiseRejectedTestTrait,
+        ResolveTestTrait,
+        RejectTestTrait,
+        NotifyTestTrait,
+        CancelTestTrait;
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/NotifyTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/NotifyTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..4501df67683f2f1f0d2885c410311c4d733166c9
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/NotifyTestTrait.php
@@ -0,0 +1,336 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait NotifyTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function notifyShouldProgress()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
+
+        $adapter->notify($sentinel);
+    }
+
+    /** @test */
+    public function notifyShouldPropagateProgressToDownstreamPromises()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnArgument(0));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock2
+            );
+
+        $adapter->notify($sentinel);
+    }
+
+    /** @test */
+    public function notifyShouldPropagateTransformedProgressToDownstreamPromises()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnValue($sentinel));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock2
+            );
+
+        $adapter->notify(1);
+    }
+
+    /** @test */
+    public function notifyShouldPropagateCaughtExceptionValueAsProgress()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->throwException($exception));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock2
+            );
+
+        $adapter->notify(1);
+    }
+
+    /** @test */
+    public function notifyShouldForwardProgressEventsWhenIntermediaryCallbackTiedToAResolvedPromiseReturnsAPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+        $adapter2 = $this->getPromiseTestAdapter();
+
+        $promise2 = $adapter2->promise();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        // resolve BEFORE attaching progress handler
+        $adapter->resolve();
+
+        $adapter->promise()
+            ->then(function () use ($promise2) {
+                return $promise2;
+            })
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter2->notify($sentinel);
+    }
+
+    /** @test */
+    public function notifyShouldForwardProgressEventsWhenIntermediaryCallbackTiedToAnUnresolvedPromiseReturnsAPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+        $adapter2 = $this->getPromiseTestAdapter();
+
+        $promise2 = $adapter2->promise();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then(function () use ($promise2) {
+                return $promise2;
+            })
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        // resolve AFTER attaching progress handler
+        $adapter->resolve();
+        $adapter2->notify($sentinel);
+    }
+
+    /** @test */
+    public function notifyShouldForwardProgressWhenResolvedWithAnotherPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+        $adapter2 = $this->getPromiseTestAdapter();
+
+        $sentinel = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->returnValue($sentinel));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($sentinel);
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $this->expectCallableNever(),
+                $mock2
+            );
+
+        $adapter->resolve($adapter2->promise());
+        $adapter2->notify($sentinel);
+    }
+
+    /** @test */
+    public function notifyShouldAllowResolveAfterProgress()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->at(0))
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+        $mock
+            ->expects($this->at(1))
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->promise()
+            ->then(
+                $mock,
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter->notify(1);
+        $adapter->resolve(2);
+    }
+
+    /** @test */
+    public function notifyShouldAllowRejectAfterProgress()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->at(0))
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+        $mock
+            ->expects($this->at(1))
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $mock,
+                $mock
+            );
+
+        $adapter->notify(1);
+        $adapter->reject(2);
+    }
+
+    /** @test */
+    public function notifyShouldReturnSilentlyOnProgressWhenAlreadyRejected()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->reject(1);
+
+        $this->assertNull($adapter->notify());
+    }
+
+    /** @test */
+    public function notifyShouldInvokeProgressHandler()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()->progress($mock);
+        $adapter->notify(1);
+    }
+
+    /** @test */
+    public function notifyShouldInvokeProgressHandlerFromDone()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $this->assertNull($adapter->promise()->done(null, null, $mock));
+        $adapter->notify(1);
+    }
+
+    /** @test */
+    public function notifyShouldThrowExceptionThrownProgressHandlerFromDone()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $this->assertNull($adapter->promise()->done(null, null, function () {
+            throw new \Exception('UnhandledRejectionException');
+        }));
+        $adapter->notify(1);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..428230b97ac1c7e9baac52a9d683545cb9ec58e3
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php
@@ -0,0 +1,351 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait PromiseFulfilledTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function fulfilledPromiseShouldBeImmutable()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->resolve(1);
+        $adapter->resolve(2);
+
+        $adapter->promise()
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function fulfilledPromiseShouldInvokeNewlyAddedCallback()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->resolve(1);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($mock, $this->expectCallableNever());
+    }
+
+    /** @test */
+    public function thenShouldForwardResultWhenCallbackIsNull()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                null,
+                $this->expectCallableNever()
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function thenShouldForwardCallbackResultToNextCallback()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                function ($val) {
+                    return $val + 1;
+                },
+                $this->expectCallableNever()
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function thenShouldForwardPromisedCallbackResultValueToNextCallback()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                function ($val) {
+                    return \React\Promise\resolve($val + 1);
+                },
+                $this->expectCallableNever()
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function thenShouldSwitchFromCallbacksToErrbacksWhenCallbackReturnsARejection()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                function ($val) {
+                    return \React\Promise\reject($val + 1);
+                },
+                $this->expectCallableNever()
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function thenShouldSwitchFromCallbacksToErrbacksWhenCallbackThrows()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->throwException($exception));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock2
+            );
+    }
+
+    /** @test */
+    public function cancelShouldReturnNullForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->resolve();
+
+        $this->assertNull($adapter->promise()->cancel());
+    }
+
+    /** @test */
+    public function cancelShouldHaveNoEffectForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $adapter->resolve();
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function doneShouldInvokeFulfillmentHandlerForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->resolve(1);
+        $this->assertNull($adapter->promise()->done($mock));
+    }
+
+    /** @test */
+    public function doneShouldThrowExceptionThrownFulfillmentHandlerForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $adapter->resolve(1);
+        $this->assertNull($adapter->promise()->done(function () {
+            throw new \Exception('UnhandledRejectionException');
+        }));
+    }
+
+    /** @test */
+    public function doneShouldThrowUnhandledRejectionExceptionWhenFulfillmentHandlerRejectsForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
+
+        $adapter->resolve(1);
+        $this->assertNull($adapter->promise()->done(function () {
+            return \React\Promise\reject();
+        }));
+    }
+
+    /** @test */
+    public function otherwiseShouldNotInvokeRejectionHandlerForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->resolve(1);
+        $adapter->promise()->otherwise($this->expectCallableNever());
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressValueForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $value = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($value));
+
+        $adapter->resolve($value);
+        $adapter->promise()
+            ->always(function () {})
+            ->then($mock);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressValueWhenHandlerReturnsANonPromiseForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $value = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($value));
+
+        $adapter->resolve($value);
+        $adapter->promise()
+            ->always(function () {
+                return 1;
+            })
+            ->then($mock);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressValueWhenHandlerReturnsAPromiseForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $value = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($value));
+
+        $adapter->resolve($value);
+        $adapter->promise()
+            ->always(function () {
+                return \React\Promise\resolve(1);
+            })
+            ->then($mock);
+    }
+
+    /** @test */
+    public function alwaysShouldRejectWhenHandlerThrowsForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->always(function () use ($exception) {
+                throw $exception;
+            })
+            ->then(null, $mock);
+    }
+
+    /** @test */
+    public function alwaysShouldRejectWhenHandlerRejectsForFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->resolve(1);
+        $adapter->promise()
+            ->always(function () use ($exception) {
+                return \React\Promise\reject($exception);
+            })
+            ->then(null, $mock);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..a4f48ee2530456239bb1e9ba64c6712a95ac8b07
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait PromisePendingTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function thenShouldReturnAPromiseForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then());
+    }
+
+    /** @test */
+    public function thenShouldReturnAllowNullForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then(null, null, null));
+    }
+
+    /** @test */
+    public function cancelShouldReturnNullForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertNull($adapter->promise()->cancel());
+    }
+
+    /** @test */
+    public function doneShouldReturnNullForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertNull($adapter->promise()->done());
+    }
+
+    /** @test */
+    public function doneShouldReturnAllowNullForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertNull($adapter->promise()->done(null, null, null));
+    }
+
+    /** @test */
+    public function otherwiseShouldNotInvokeRejectionHandlerForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $adapter->promise()->otherwise($this->expectCallableNever());
+    }
+
+    /** @test */
+    public function alwaysShouldReturnAPromiseForPendingPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->always(function () {}));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..98d1dcf933908057cc317e66b03ebd855bed99dc
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php
@@ -0,0 +1,512 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+use React\Promise\Deferred;
+use React\Promise\UnhandledRejectionException;
+
+trait PromiseRejectedTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function rejectedPromiseShouldBeImmutable()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->reject(1);
+        $adapter->reject(2);
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function rejectedPromiseShouldInvokeNewlyAddedCallback()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->reject(1);
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+    }
+
+    /** @test */
+    public function shouldForwardUndefinedRejectionValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with(null);
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                function () {
+                    // Presence of rejection handler is enough to switch back
+                    // to resolve mode, even though it returns undefined.
+                    // The ONLY way to propagate a rejection is to re-throw or
+                    // return a rejected promise;
+                }
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldSwitchFromErrbacksToCallbacksWhenErrbackDoesNotExplicitlyPropagate()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                function ($val) {
+                    return $val + 1;
+                }
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldSwitchFromErrbacksToCallbacksWhenErrbackReturnsAResolution()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                function ($val) {
+                    return \React\Promise\resolve($val + 1);
+                }
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+    }
+
+    /** @test */
+    public function shouldPropagateRejectionsWhenErrbackThrows()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->will($this->throwException($exception));
+
+        $mock2 = $this->createCallableMock();
+        $mock2
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock2
+            );
+    }
+
+    /** @test */
+    public function shouldPropagateRejectionsWhenErrbackReturnsARejection()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(2));
+
+        $adapter->reject(1);
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                function ($val) {
+                    return \React\Promise\reject($val + 1);
+                }
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+    }
+
+    /** @test */
+    public function doneShouldInvokeRejectionHandlerForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->reject(1);
+        $this->assertNull($adapter->promise()->done(null, $mock));
+    }
+
+    /** @test */
+    public function doneShouldThrowExceptionThrownByRejectionHandlerForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $adapter->reject(1);
+        $this->assertNull($adapter->promise()->done(null, function () {
+            throw new \Exception('UnhandledRejectionException');
+        }));
+    }
+
+    /** @test */
+    public function doneShouldThrowUnhandledRejectionExceptionWhenRejectedWithNonExceptionForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
+
+        $adapter->reject(1);
+        $this->assertNull($adapter->promise()->done());
+    }
+
+    /** @test */
+    public function unhandledRejectionExceptionThrownByDoneHoldsRejectionValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $expected = new \stdClass();
+
+        $adapter->reject($expected);
+
+        try {
+            $adapter->promise()->done();
+        } catch (UnhandledRejectionException $e) {
+            $this->assertSame($expected, $e->getReason());
+            return;
+        }
+
+        $this->fail();
+    }
+
+    /** @test */
+    public function doneShouldThrowUnhandledRejectionExceptionWhenRejectionHandlerRejectsForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
+
+        $adapter->reject(1);
+        $this->assertNull($adapter->promise()->done(null, function () {
+            return \React\Promise\reject();
+        }));
+    }
+
+    /** @test */
+    public function doneShouldThrowRejectionExceptionWhenRejectionHandlerRejectsWithExceptionForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $adapter->reject(1);
+        $this->assertNull($adapter->promise()->done(null, function () {
+            return \React\Promise\reject(new \Exception('UnhandledRejectionException'));
+        }));
+    }
+
+    /** @test */
+    public function doneShouldThrowExceptionProvidedAsRejectionValueForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $adapter->reject(new \Exception('UnhandledRejectionException'));
+        $this->assertNull($adapter->promise()->done());
+    }
+
+    /** @test */
+    public function doneShouldThrowWithDeepNestingPromiseChainsForRejectedPromise()
+    {
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $exception = new \Exception('UnhandledRejectionException');
+
+        $d = new Deferred();
+        $d->resolve();
+
+        $result = \React\Promise\resolve(\React\Promise\resolve($d->promise()->then(function () use ($exception) {
+            $d = new Deferred();
+            $d->resolve();
+
+            return \React\Promise\resolve($d->promise()->then(function () {}))->then(
+                function () use ($exception) {
+                    throw $exception;
+                }
+            );
+        })));
+
+        $result->done();
+    }
+
+    /** @test */
+    public function doneShouldRecoverWhenRejectionHandlerCatchesExceptionForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->reject(new \Exception('UnhandledRejectionException'));
+        $this->assertNull($adapter->promise()->done(null, function (\Exception $e) {
+
+        }));
+    }
+
+    /** @test */
+    public function otherwiseShouldInvokeRejectionHandlerForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->reject(1);
+        $adapter->promise()->otherwise($mock);
+    }
+
+    /** @test */
+    public function otherwiseShouldInvokeNonTypeHintedRejectionHandlerIfReasonIsAnExceptionForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->reject($exception);
+        $adapter->promise()
+            ->otherwise(function ($reason) use ($mock) {
+                $mock($reason);
+            });
+    }
+
+    /** @test */
+    public function otherwiseShouldInvokeRejectionHandlerIfReasonMatchesTypehintForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \InvalidArgumentException();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->reject($exception);
+        $adapter->promise()
+            ->otherwise(function (\InvalidArgumentException $reason) use ($mock) {
+                $mock($reason);
+            });
+    }
+
+    /** @test */
+    public function otherwiseShouldNotInvokeRejectionHandlerIfReaonsDoesNotMatchTypehintForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->expectCallableNever();
+
+        $adapter->reject($exception);
+        $adapter->promise()
+            ->otherwise(function (\InvalidArgumentException $reason) use ($mock) {
+                $mock($reason);
+            });
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressRejectionForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->reject($exception);
+        $adapter->promise()
+            ->always(function () {})
+            ->then(null, $mock);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressRejectionWhenHandlerReturnsANonPromiseForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->reject($exception);
+        $adapter->promise()
+            ->always(function () {
+                return 1;
+            })
+            ->then(null, $mock);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressRejectionWhenHandlerReturnsAPromiseForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->reject($exception);
+        $adapter->promise()
+            ->always(function () {
+                return \React\Promise\resolve(1);
+            })
+            ->then(null, $mock);
+    }
+
+    /** @test */
+    public function alwaysShouldRejectWhenHandlerThrowsForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception1 = new \Exception();
+        $exception2 = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception2));
+
+        $adapter->reject($exception1);
+        $adapter->promise()
+            ->always(function () use ($exception2) {
+                throw $exception2;
+            })
+            ->then(null, $mock);
+    }
+
+    /** @test */
+    public function alwaysShouldRejectWhenHandlerRejectsForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception1 = new \Exception();
+        $exception2 = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception2));
+
+        $adapter->reject($exception1);
+        $adapter->promise()
+            ->always(function () use ($exception2) {
+                return \React\Promise\reject($exception2);
+            })
+            ->then(null, $mock);
+    }
+
+    /** @test */
+    public function cancelShouldReturnNullForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->reject();
+
+        $this->assertNull($adapter->promise()->cancel());
+    }
+
+    /** @test */
+    public function cancelShouldHaveNoEffectForRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $adapter->reject();
+
+        $adapter->promise()->cancel();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..e363b6d91c410baf93ed0c0827654a5c8f08944f
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+trait PromiseSettledTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function thenShouldReturnAPromiseForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then());
+    }
+
+    /** @test */
+    public function thenShouldReturnAllowNullForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then(null, null, null));
+    }
+
+    /** @test */
+    public function cancelShouldReturnNullForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+
+        $this->assertNull($adapter->promise()->cancel());
+    }
+
+    /** @test */
+    public function cancelShouldHaveNoEffectForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
+
+        $adapter->settle();
+
+        $adapter->promise()->cancel();
+    }
+
+    /** @test */
+    public function doneShouldReturnNullForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $this->assertNull($adapter->promise()->done(null, function () {}));
+    }
+
+    /** @test */
+    public function doneShouldReturnAllowNullForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $this->assertNull($adapter->promise()->done(null, function () {}, null));
+    }
+
+    /** @test */
+    public function progressShouldNotInvokeProgressHandlerForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $adapter->promise()->progress($this->expectCallableNever());
+        $adapter->notify();
+    }
+
+    /** @test */
+    public function alwaysShouldReturnAPromiseForSettledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $adapter->settle();
+        $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->always(function () {}));
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..063f178ad4f0fa3ee996e98d2d986953fbaf79f5
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php
@@ -0,0 +1,368 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+use React\Promise;
+use React\Promise\Deferred;
+
+trait RejectTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function rejectShouldRejectWithAnImmediateValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function rejectShouldRejectWithFulfilledPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->reject(Promise\resolve(1));
+    }
+
+    /** @test */
+    public function rejectShouldRejectWithRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->reject(Promise\reject(1));
+    }
+
+    /** @test */
+    public function rejectShouldForwardReasonWhenCallbackIsNull()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever()
+            )
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function rejectShouldMakePromiseImmutable()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then(null, function ($value) use ($adapter) {
+                $adapter->reject(3);
+
+                return Promise\reject($value);
+            })
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter->reject(1);
+        $adapter->reject(2);
+    }
+
+    /** @test */
+    public function notifyShouldInvokeOtherwiseHandler()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->otherwise($mock);
+
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function doneShouldInvokeRejectionHandler()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $this->assertNull($adapter->promise()->done(null, $mock));
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function doneShouldThrowExceptionThrownByRejectionHandler()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $this->assertNull($adapter->promise()->done(null, function () {
+            throw new \Exception('UnhandledRejectionException');
+        }));
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function doneShouldThrowUnhandledRejectionExceptionWhenRejectedWithNonException()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
+
+        $this->assertNull($adapter->promise()->done());
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function doneShouldThrowUnhandledRejectionExceptionWhenRejectionHandlerRejects()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
+
+        $this->assertNull($adapter->promise()->done(null, function () {
+            return \React\Promise\reject();
+        }));
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function doneShouldThrowRejectionExceptionWhenRejectionHandlerRejectsWithException()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $this->assertNull($adapter->promise()->done(null, function () {
+            return \React\Promise\reject(new \Exception('UnhandledRejectionException'));
+        }));
+        $adapter->reject(1);
+    }
+
+    /** @test */
+    public function doneShouldThrowUnhandledRejectionExceptionWhenRejectionHandlerRetunsPendingPromiseWhichRejectsLater()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
+
+        $d = new Deferred();
+        $promise = $d->promise();
+
+        $this->assertNull($adapter->promise()->done(null, function () use ($promise) {
+            return $promise;
+        }));
+        $adapter->reject(1);
+        $d->reject(1);
+    }
+
+    /** @test */
+    public function doneShouldThrowExceptionProvidedAsRejectionValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $this->assertNull($adapter->promise()->done());
+        $adapter->reject(new \Exception('UnhandledRejectionException'));
+    }
+
+    /** @test */
+    public function doneShouldThrowWithDeepNestingPromiseChains()
+    {
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $exception = new \Exception('UnhandledRejectionException');
+
+        $d = new Deferred();
+
+        $result = \React\Promise\resolve(\React\Promise\resolve($d->promise()->then(function () use ($exception) {
+            $d = new Deferred();
+            $d->resolve();
+
+            return \React\Promise\resolve($d->promise()->then(function () {}))->then(
+                function () use ($exception) {
+                    throw $exception;
+                }
+            );
+        })));
+
+        $result->done();
+
+        $d->resolve();
+    }
+
+    /** @test */
+    public function doneShouldRecoverWhenRejectionHandlerCatchesException()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->assertNull($adapter->promise()->done(null, function (\Exception $e) {
+
+        }));
+        $adapter->reject(new \Exception('UnhandledRejectionException'));
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressRejection()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->always(function () {})
+            ->then(null, $mock);
+
+        $adapter->reject($exception);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressRejectionWhenHandlerReturnsANonPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->always(function () {
+                return 1;
+            })
+            ->then(null, $mock);
+
+        $adapter->reject($exception);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressRejectionWhenHandlerReturnsAPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->always(function () {
+                return \React\Promise\resolve(1);
+            })
+            ->then(null, $mock);
+
+        $adapter->reject($exception);
+    }
+
+    /** @test */
+    public function alwaysShouldRejectWhenHandlerThrowsForRejection()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->always(function () use ($exception) {
+                throw $exception;
+            })
+            ->then(null, $mock);
+
+        $adapter->reject($exception);
+    }
+
+    /** @test */
+    public function alwaysShouldRejectWhenHandlerRejectsForRejection()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->always(function () use ($exception) {
+                return \React\Promise\reject($exception);
+            })
+            ->then(null, $mock);
+
+        $adapter->reject($exception);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..967d93c9c6dc3f3b6b8baab2257322fbbbdb5636
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php
@@ -0,0 +1,285 @@
+<?php
+
+namespace React\Promise\PromiseTest;
+
+use React\Promise;
+
+trait ResolveTestTrait
+{
+    /**
+     * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
+     */
+    abstract public function getPromiseTestAdapter(callable $canceller = null);
+
+    /** @test */
+    public function resolveShouldResolve()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($mock);
+
+        $adapter->resolve(1);
+    }
+
+    /** @test */
+    public function resolveShouldResolveWithPromisedValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($mock);
+
+        $adapter->resolve(Promise\resolve(1));
+    }
+
+    /** @test */
+    public function resolveShouldRejectWhenResolvedWithRejectedPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then($this->expectCallableNever(), $mock);
+
+        $adapter->resolve(Promise\reject(1));
+    }
+
+    /** @test */
+    public function resolveShouldForwardValueWhenCallbackIsNull()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then(
+                null,
+                $this->expectCallableNever()
+            )
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+
+        $adapter->resolve(1);
+    }
+
+    /** @test */
+    public function resolveShouldMakePromiseImmutable()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $adapter->promise()
+            ->then(function ($value) use ($adapter) {
+                $adapter->resolve(3);
+
+                return $value;
+            })
+            ->then(
+                $mock,
+                $this->expectCallableNever()
+            );
+
+        $adapter->resolve(1);
+        $adapter->resolve(2);
+    }
+
+    /**
+     * @test
+     */
+    public function resolveShouldRejectWhenResolvedWithItself()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with(new \LogicException('Cannot resolve a promise with itself.'));
+
+        $adapter->promise()
+            ->then(
+                $this->expectCallableNever(),
+                $mock
+            );
+
+        $adapter->resolve($adapter->promise());
+    }
+
+    /** @test */
+    public function doneShouldInvokeFulfillmentHandler()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo(1));
+
+        $this->assertNull($adapter->promise()->done($mock));
+        $adapter->resolve(1);
+    }
+
+    /** @test */
+    public function doneShouldThrowExceptionThrownFulfillmentHandler()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('\Exception', 'UnhandledRejectionException');
+
+        $this->assertNull($adapter->promise()->done(function () {
+            throw new \Exception('UnhandledRejectionException');
+        }));
+        $adapter->resolve(1);
+    }
+
+    /** @test */
+    public function doneShouldThrowUnhandledRejectionExceptionWhenFulfillmentHandlerRejects()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
+
+        $this->assertNull($adapter->promise()->done(function () {
+            return \React\Promise\reject();
+        }));
+        $adapter->resolve(1);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressValue()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $value = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($value));
+
+        $adapter->promise()
+            ->always(function () {})
+            ->then($mock);
+
+        $adapter->resolve($value);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressValueWhenHandlerReturnsANonPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $value = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($value));
+
+        $adapter->promise()
+            ->always(function () {
+                return 1;
+            })
+            ->then($mock);
+
+        $adapter->resolve($value);
+    }
+
+    /** @test */
+    public function alwaysShouldNotSuppressValueWhenHandlerReturnsAPromise()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $value = new \stdClass();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($value));
+
+        $adapter->promise()
+            ->always(function () {
+                return \React\Promise\resolve(1);
+            })
+            ->then($mock);
+
+        $adapter->resolve($value);
+    }
+
+    /** @test */
+    public function alwaysShouldRejectWhenHandlerThrowsForFulfillment()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->always(function () use ($exception) {
+                throw $exception;
+            })
+            ->then(null, $mock);
+
+        $adapter->resolve(1);
+    }
+
+    /** @test */
+    public function alwaysShouldRejectWhenHandlerRejectsForFulfillment()
+    {
+        $adapter = $this->getPromiseTestAdapter();
+
+        $exception = new \Exception();
+
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke')
+            ->with($this->identicalTo($exception));
+
+        $adapter->promise()
+            ->always(function () use ($exception) {
+                return \React\Promise\reject($exception);
+            })
+            ->then(null, $mock);
+
+        $adapter->resolve(1);
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/RejectedPromiseTest.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/RejectedPromiseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c886b00954204aa28aeb8ea891c8f1f457204864
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/RejectedPromiseTest.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace React\Promise;
+
+use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
+
+class RejectedPromiseTest extends TestCase
+{
+    use PromiseTest\PromiseSettledTestTrait,
+        PromiseTest\PromiseRejectedTestTrait;
+
+    public function getPromiseTestAdapter(callable $canceller = null)
+    {
+        $promise = null;
+
+        return new CallbackPromiseAdapter([
+            'promise' => function () use (&$promise) {
+                if (!$promise) {
+                    throw new \LogicException('RejectedPromise must be rejected before obtaining the promise');
+                }
+
+                return $promise;
+            },
+            'resolve' => function () {
+                throw new \LogicException('You cannot call resolve() for React\Promise\RejectedPromise');
+            },
+            'reject' => function ($reason = null) use (&$promise) {
+                if (!$promise) {
+                    $promise = new RejectedPromise($reason);
+                }
+            },
+            'notify' => function () {
+                // no-op
+            },
+            'settle' => function ($reason = null) use (&$promise) {
+                if (!$promise) {
+                    $promise = new RejectedPromise($reason);
+                }
+            },
+        ]);
+    }
+
+    /** @test */
+    public function shouldThrowExceptionIfConstructedWithAPromise()
+    {
+        $this->setExpectedException('\InvalidArgumentException');
+
+        return new RejectedPromise(new RejectedPromise());
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/Stub/CallableStub.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/Stub/CallableStub.php
new file mode 100644
index 0000000000000000000000000000000000000000..0120893358c986052decc6655ef82523fd0c6f31
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/Stub/CallableStub.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace React\Promise\Stub;
+
+class CallableStub
+{
+    public function __invoke()
+    {
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/TestCase.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/TestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..c9274f445dd7676a8cd6a86c6a6fff15e4994a2d
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/TestCase.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace React\Promise;
+
+class TestCase extends \PHPUnit_Framework_TestCase
+{
+    public function expectCallableExactly($amount)
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->exactly($amount))
+            ->method('__invoke');
+
+        return $mock;
+    }
+
+    public function expectCallableOnce()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->once())
+            ->method('__invoke');
+
+        return $mock;
+    }
+
+    public function expectCallableNever()
+    {
+        $mock = $this->createCallableMock();
+        $mock
+            ->expects($this->never())
+            ->method('__invoke');
+
+        return $mock;
+    }
+
+    public function createCallableMock()
+    {
+        return $this
+            ->getMockBuilder('React\\Promise\Stub\CallableStub')
+            ->getMock();
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/bootstrap.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b7f872a5fc6732ef685bed412ed1ec6847ee3e4
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/bootstrap.php
@@ -0,0 +1,7 @@
+<?php
+
+$loader = @include __DIR__.'/../vendor/autoload.php';
+if (!$loader) {
+    $loader = require __DIR__.'/../../../../vendor/autoload.php';
+}
+$loader->addPsr4('React\\Promise\\', __DIR__);
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestPromise.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestPromise.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef4d5301c122403689ea091167d19e20288b37be
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestPromise.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace React\Promise;
+
+class SimpleFulfilledTestPromise implements PromiseInterface
+{
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        try {
+            if ($onFulfilled) {
+                $onFulfilled('foo');
+            }
+
+            return new self();
+        } catch (\Throwable $exception) {
+            return new RejectedPromise($exception);
+        } catch (\Exception $exception) {
+            return new RejectedPromise($exception);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestThenable.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestThenable.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f66f6360fe096a4366434e78d8d0d718078b552
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestThenable.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace React\Promise;
+
+class SimpleFulfilledTestThenable
+{
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        try {
+            if ($onFulfilled) {
+                $onFulfilled('foo');
+            }
+
+            return new self();
+        } catch (\Throwable $exception) {
+            return new RejectedPromise($exception);
+        } catch (\Exception $exception) {
+            return new RejectedPromise($exception);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleRejectedTestPromise.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleRejectedTestPromise.php
new file mode 100644
index 0000000000000000000000000000000000000000..b30a2265dee2176cb4e0f54ae0140b8567ca4e85
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleRejectedTestPromise.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace React\Promise;
+
+class SimpleRejectedTestPromise implements PromiseInterface
+{
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        try {
+            if ($onRejected) {
+                $onRejected('foo');
+            }
+
+            return new self();
+        } catch (\Throwable $exception) {
+            return new RejectedPromise($exception);
+        } catch (\Exception $exception) {
+            return new RejectedPromise($exception);
+        }
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleTestCancellable.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleTestCancellable.php
new file mode 100644
index 0000000000000000000000000000000000000000..f232a68f22f3ee8c5546eec19c448e4c89f33f3e
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleTestCancellable.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace React\Promise;
+
+class SimpleTestCancellable
+{
+    public $cancelCalled = false;
+
+    public function cancel()
+    {
+        $this->cancelCalled = true;
+    }
+}
diff --git a/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleTestCancellableThenable.php b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleTestCancellableThenable.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0f15933a3da11b3690b630a3640d6f4416d13ac
--- /dev/null
+++ b/apps/maarch_entreprise/tools/elasticsearch-php/vendor/react/promise/tests/fixtures/SimpleTestCancellableThenable.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace React\Promise;
+
+class SimpleTestCancellableThenable
+{
+    public $cancelCalled = false;
+
+    public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
+    {
+        return new self();
+    }
+
+    public function cancel()
+    {
+        $this->cancelCalled = true;
+    }
+}
diff --git a/modules/content_management/test_cloudooo_ajax.php b/modules/content_management/test_cloudooo_ajax.php
index fe8d322bc500f3ae6acef74e2d3202bab98c7865..0113f23b3ab2c26f62be71b471c88c5942adb0cd 100644
--- a/modules/content_management/test_cloudooo_ajax.php
+++ b/modules/content_management/test_cloudooo_ajax.php
@@ -8,7 +8,8 @@ require_once 'core/class/class_core_tools.php';
 /************************************************************************************/
 
 // TODO ONLY FOR SIMPLE TEST
-$serverAddress = "https://cloudooo.erp5.net/";
+//$serverAddress = "https://cloudooo.erp5.net/";
+$serverAddress = "http://192.168.21.24:8002/";
 $file = 'modules/content_management/test_cloudooo.docx';
 //$file = '/var/www/html/maarch_trunk_git/modules/content_management/test_cloudooo.docx';
 if (!file_exists($file)) {
diff --git a/modules/content_management/test_cloudooo_ajax_final.php b/modules/content_management/test_cloudooo_ajax_final.php
index f0ea7d955e94ba6b2ef6c792e0a064dc97f89e08..2607d3b1b5ddb8af7d2d0b664126b2a47dcd4c17 100644
--- a/modules/content_management/test_cloudooo_ajax_final.php
+++ b/modules/content_management/test_cloudooo_ajax_final.php
@@ -14,7 +14,8 @@ if (!is_uploaded_file($_FILES['file']['tmp_name'])) {
 }
 
 // TODO ONLY FOR SIMPLE TEST
-$serverAddress = "https://cloudooo.erp5.net/";
+//$serverAddress = "https://cloudooo.erp5.net/";
+$serverAddress = "http://192.168.21.24:8002/";
 $file = $filePathOnTmp;
 if (!file_exists($file)) {
     echo 'file not exists : ' . $file . PHP_EOL;