From 9873393f1595a0a25ffb7315983024f851f79d99 Mon Sep 17 00:00:00 2001 From: Hieromon Ikasamo Date: Sun, 14 Apr 2019 13:34:57 +0900 Subject: [PATCH] Deployment v0.9.8 documentation --- docs/404.html | 135 +- docs/acelements.html | 385 +++-- docs/achandling.html | 173 +-- docs/acintro.html | 137 +- docs/acjson.html | 293 ++-- docs/acupload.html | 1322 +++++++++++++++++ docs/advancedusage.html | 177 ++- docs/api.html | 163 +- docs/apiaux.html | 206 +-- docs/apiconfig.html | 137 +- docs/apielements.html | 650 +++++--- docs/apiextra.html | 137 +- ...on.b806dc00.js => application.dc02f8ce.js} | 8 +- docs/assets/javascripts/lunr/lunr.du.js | 2 +- docs/assets/javascripts/lunr/lunr.ja.js | 1 + docs/assets/javascripts/lunr/lunr.jp.js | 2 +- docs/assets/javascripts/lunr/lunr.nl.js | 1 + docs/assets/javascripts/lunr/lunr.th.js | 1 + docs/assets/javascripts/lunr/wordcut.js | 1 + docs/assets/javascripts/modernizr.01ccdecf.js | 1 + docs/assets/javascripts/modernizr.1f0bcf2b.js | 1 - .../stylesheets/application.3020aac5.css | 1 + .../stylesheets/application.982221ab.css | 1 - docs/basicusage.html | 135 +- docs/changelog.html | 164 +- docs/credit.html | 1185 +++++++++++++++ docs/datatips.html | 159 +- docs/faq.html | 332 +---- docs/gettingstarted.html | 135 +- docs/howtoembed.html | 137 +- docs/images/ac_upload_flow.svg | 973 ++++++++++++ docs/images/acfile.png | Bin 0 -> 4870 bytes docs/images/upload.gif | Bin 0 -> 183630 bytes docs/index.html | 145 +- docs/license.html | 135 +- docs/lsbegin.html | 157 +- docs/menu.html | 135 +- docs/menuize.html | 137 +- docs/search/search_index.json | 2 +- docs/sitemap.xml | 54 +- docs/sitemap.xml.gz | Bin 363 -> 377 bytes docs/wojson.html | 141 +- 42 files changed, 5748 insertions(+), 2313 deletions(-) create mode 100644 docs/acupload.html rename docs/assets/javascripts/{application.b806dc00.js => application.dc02f8ce.js} (50%) create mode 100644 docs/assets/javascripts/lunr/lunr.ja.js create mode 100644 docs/assets/javascripts/lunr/lunr.nl.js create mode 100644 docs/assets/javascripts/lunr/lunr.th.js create mode 100644 docs/assets/javascripts/lunr/wordcut.js create mode 100644 docs/assets/javascripts/modernizr.01ccdecf.js delete mode 100644 docs/assets/javascripts/modernizr.1f0bcf2b.js create mode 100644 docs/assets/stylesheets/application.3020aac5.css delete mode 100644 docs/assets/stylesheets/application.982221ab.css create mode 100644 docs/credit.html create mode 100644 docs/images/ac_upload_flow.svg create mode 100644 docs/images/acfile.png create mode 100644 docs/images/upload.gif diff --git a/docs/404.html b/docs/404.html index 261529a..7a87358 100644 --- a/docs/404.html +++ b/docs/404.html @@ -36,7 +36,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -223,81 +223,6 @@ - - - -
- + diff --git a/docs/acelements.html b/docs/acelements.html index 4e88f0d..3ad756d 100644 --- a/docs/acelements.html +++ b/docs/acelements.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
@@ -618,8 +541,8 @@
  • - - AutoConnectInput + + AutoConnectFile
  • + +
  • + + store + + +
  • + + + + + + +
  • + + AutoConnectInput + + + + +
  • + +
  • + + AutoConnectInput + + +
  • AutoConnect passes the given JSON document directly to the parseObject() function of the ArduinoJson library for parsing. Therefore, the constraint of the parseObject() function is applied as it is in the parsing of the JSON document for the AutoConnect. That is, if the JSON string is read-only, duplicating the input string occurs and consumes more memory.

    +

    Adjust the JSON document buffer size

    +

    AutoConnect uses ArduinoJson library's dynamic buffer to parse JSON documents. Its dynamic buffer allocation scheme depends on the version 5 or version 6 of ArduinoJson library. Either version must have enough buffer to parse the custom web page's JSON document successfully. AutoConnect has the following three constants internally to complete the parsing as much as possible in both ArduinoJson version. These constants are macro defined in AutoConnectDefs.h.

    +

    If memory insufficiency occurs during JSON document parsing, you can adjust these constants to avoid insufficiency by using the JsonAssistant with deriving the required buffer size in advance.

    +
    #define AUTOCONNECT_JSONBUFFER_SIZE     256
    +#define AUTOCONNECT_JSONDOCUMENT_SIZE   (8 * 1024)
    +#define AUTOCONNECT_JSONPSRAM_SIZE      (16* 1024)
    +
    + +

    AUTOCONNECT_JSONBUFFER_SIZE

    +

    This is a unit size constant of DynamicJsonBuffer and works when the library used is ArduinoJson version 5. A buffer size of the JSON document increases with this unit. This value relates to the impact of the fragmented heap area. If it is too large, may occur run-out of memory.

    +

    AUTOCONNECT_JSONDOCUMENT_SIZE

    +

    This is a size of DynamicJsonDocument for ArduinoJson version 6. This buffer is not automatically expanding, and the size determines the limit.

    +

    AUTOCONNECT_JSONPSRAM_SIZE

    +

    For ESP32 module equips with PSRAM, you can allocate the JSON document buffer to PSRAM. Buffer allocation to PSRAM will enable when PSRAM:Enabled option selected in the Arduino IDE's Board Manager menu. It is available since ArduinoJson 6.10.0.

    Saving JSON document

    The sketch can persist AutoConnectElements as a JSON document and also uses this function to save the values ​​entered on the custom Web page. And you can reload the saved JSON document into AutoConnectElements as the field in a custom Web page using the load function.

    @@ -1491,7 +1616,7 @@ An example of using each function is as follows.
    - + diff --git a/docs/acupload.html b/docs/acupload.html new file mode 100644 index 0000000..db04b41 --- /dev/null +++ b/docs/acupload.html @@ -0,0 +1,1322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + File upload handler - AutoConnect for ESP8266/ESP32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
    + +
    + +
    + + + + +
    +
    + + +
    +
    +
    + +
    +
    +
    + + + + + +
    +
    + + + +

    File upload handler

    + +

    Uploading file from Web Browser

    +

    If you have to write some data individually to the ESP8266/ESP32 module for the sketch behavior, the AutoConnectFile element will assist with your wants implementation. The AutoConnectFile element produces an HTML <input type="file"> tag and can save uploaded file to the flash or external SD of the ESP8266/ESP32 module. The handler for saving is built into AutoConnect. You can use it to inject any sketch data such as the initial values for the custom Web page into the ESP module via OTA without using the sketch data upload tool of Arduino-IDE. +

    +

    Basic steps of the file upload sketch

    +

    Here is the basic procedure of the sketch which can upload files from the client browser using AutoConnectFile:1

    +
      +
    1. Place AutoConnectFile on a custom Web page by writing JSON or constructor code directly with the sketch.
    2. +
    3. Place other AutoConnectElements as needed.
    4. +
    5. Place AutoConnectSubmit on the same custom Web page.
    6. +
    7. Perform the following process in the on-handler of submitting destination:
        +
      • Retrieve the AutoConnectFile instance from the custom Web page where you placed the AutoConnectFile element using the AutoConnectAux::getElement function or the operator [].
      • +
      • Start access to the device specified as the upload destination. In usually, it depends on the file system's begin function. For example, if you specified Flash's SPIFFS as the upload destination, invokes SPIFFS.begin().
      • +
      • The value member of AutoConnectFile contains the file name of the upload file. Use its file name to access the uploaded file on the device.
      • +
      • Invokes the end function associated with the begin to close the device. It is the SPIFFS.end()* if the flash on the ESP module has been begun for SPIFFS.
      • +
      +
    8. +
    +

    The following sketch is an example that implements the above basic steps. The postUpload function is the on-handler and retrieves the AutoConnectFile as named upload_file. You should note that this handler is not for a custom Web page placed with its AutoConnectFile element. The uploaded file should be processed by the handler for the transition destination page from the AutoConnectFile element placed page. AutoConnect built-in upload handler will save the uploaded file to the specified device before invoking the postUpload function.

    +

    However, If you use uploaded files in different situations, it may be more appropriate to place the actual handling process outside the handler. It applies for the parameter file, etc. The important thing is that you do not have to sketch file reception and storing logic by using the AutoConnectFile element and the upload handler built into the AutoConnect.

    +
    #include <ESP8266WiFi.h>
    +#include <ESP8266WebServer.h>
    +#include <FS.h>
    +#include <AutoConnect.h>
    +
    +// Upload request custom Web page
    +static const char PAGE_UPLOAD[] PROGMEM = R"(
    +{
    +  "uri": "/",
    +  "title": "Upload",
    +  "menu": true,
    +  "element": [
    +    { "name":"caption", "type":"ACText", "value":"<h2>File uploading platform<h2>" },
    +    { "name":"upload_file", "type":"ACFile", "label":"Select file: ", "store":"fs" },
    +    { "name":"upload", "type":"ACSubmit", "value":"UPLOAD", "uri":"/upload" }
    +  ]
    +}
    +)";
    +
    +// Upload result display
    +static const char PAGE_BROWSE[] PROGMEM = R"(
    +{
    +  "uri": "/upload",
    +  "title": "Upload",
    +  "menu": false,
    +  "element": [
    +    { "name":"caption", "type":"ACText", "value":"<h2>Uploading ended<h2>" },
    +    { "name":"filename", "type":"ACText" },
    +    { "name":"size", "type":"ACText", "format":"%s bytes uploaded" },
    +    { "name":"content_type", "type":"ACText", "format":"Content: %s" }
    +  ]
    +}
    +)";
    +
    +ESP8266WebServer server;
    +AutoConnect portal(server);
    +// Declare AutoConnectAux separately as a custom web page to access
    +// easily for each page in the post-upload handler.
    +AutoConnectAux auxUpload;
    +AutoConnectAux auxBrowse;
    +
    +/**
    + * Post uploading, AutoConnectFile's built-in upload handler reads the
    + * file saved in SPIFFS and displays the file contents on /upload custom
    + * web page. However, only files with mime type uploaded as text are
    + * displayed. A custom web page handler is called after upload.
    + * @param  aux  AutoConnectAux(/upload)
    + * @param  args PageArgument
    + * @return Uploaded text content
    + */
    +String postUpload(AutoConnectAux& aux, PageArgument& args) {
    +  String  content;
    +  AutoConnectFile&  upload = auxUpload["upload_file"].as<AutoConnectFile>();
    +  AutoConnectText&  aux_filename = aux["filename"].as<AutoConnectText>();
    +  AutoConnectText&  aux_size = aux["size"].as<AutoConnectText>();
    +  AutoConnectText&  aux_contentType = aux["content_type"].as<AutoConnectText>();
    +  // Assignment operator can be used for the element attribute.
    +  aux_filename.value = upload.value;
    +  aux_size.value = String(upload.size);
    +  aux_contentType.value = upload.mimeType;
    +  // The file saved by the AutoConnect upload handler is read from
    +  // the EEPROM and echoed to a custom web page.
    +  SPIFFS.begin();
    +  File uploadFile = SPIFFS.open(String("/" + upload.value).c_str(), "r");
    +  if (uploadFile) {
    +    while (uploadFile.available()) {
    +      char c = uploadFile.read();
    +      Serial.print(c);
    +    }
    +    uploadFile.close();
    +  }
    +  else
    +    content = "Not saved";
    +  SPIFFS.end();
    +  return String();
    +}
    +
    +void setup() {
    +  delay(1000);
    +  Serial.begin(115200);
    +  Serial.println();
    +
    +  auxUpload.load(PAGE_UPLOAD);
    +  auxBrowse.load(PAGE_BROWSE);
    +  portal.join({ auxUpload, auxBrowse });
    +  auxBrowse.on(postUpload);
    +  portal.begin();
    +}
    +
    +void loop() {
    +  portal.handleClient();
    +}
    +
    + +

    Where will the file upload

    +

    The AutoConnect built-in upload handler can save the upload file to three locations:

    +
      +
    1. Flash memory embedded in the ESP8266/ESP32 module
    2. +
    3. SD device externally connected to the ESP8266/ESP32 module
    4. +
    5. Other character devices
    6. +
    +

    You can specify the device type to save with the store attribute of AutoConenctFile, and it accepts the following values:

    +
      +
    • Flash : AC_File_FS for the API parameter or fs for the JSON document
    • +
    • SD : AC_File_SD for the API parameter or sd for the JSON document
    • +
    • Other : AC_File_Extern for the API parameter or extern for the JSON document
    • +
    +

    The substance of AC_File_FS (fs) is a SPIFFS file system implemented by the ESP8266/ESP32 core, and then AutoConnect uses the Global Instance SPIFFS to access SPIFFS.

    +

    Also, the substance of AC_File_SD (sd) is a FAT file of Arduino SD library ported to the ESP8266/ESP32 core, and then AutoConnect uses the Global Instance SD to access SD. When saving to an external SD device, there are additional required parameters for the connection interface and is defined as the macro in AutoConnectDefs.h.

    +
    #define AUTOCONNECT_SD_CS       SS
    +#define AUTOCONNECT_SD_SPEED    4000000
    +
    + +

    AUTOCONNECT_SD_CS defines which GPIO for the CS (Chip Select, or SS as Slave Select) pin. This definition is derived from pins_arduino.h, which is included in the Arduino core distribution. If you want to assign the CS pin to another GPIO, you need to change the macro definition of AutoConnectDefs.h.

    +

    AUTOCONNECT_SD_SPEED defines SPI clock speed depending on the connected device.

    +
    +

    Involves both the begin() and the end()

    +

    The built-in uploader executes the begin and end functions regardless of the sketch whence the file system of the device will terminate with the uploader termination. Therefore, to use the device in the sketch after uploading, you need to restart it with the begin function.

    +
    +

    When it will be uploaded

    +

    Upload handler will be launched by ESP8266WebServer/WebServer(as ESP32) library which is triggered by receiving an HTTP stream of POST BODY including file content. Its launching occurs before invoking the page handler.

    +

    The following diagram illustrates the file uploading sequence:

    +

    +

    At the time of the page handler behaves, the uploaded file already saved to the device, and the member variables of AutoConnectFile reflects the file name and transfer size.

    +

    The file name for the uploaded file

    +

    AutoConnetFile saves the uploaded file with the file name you selected by <input type="file"> tag on the browser. The file name used for uploading is stored in the AutoConnetFile's value member, which you can access after uploading. (i.e. In the handler of the destination page by the AutoConnectSubmit element.) You can not save it with a different name. It can be renamed after upload if you need to change the name.

    +

    Upload to a device other than Flash or SD

    +

    You can output the file to any device using a custom uploader by specifying extern with the store attribute of [AutoConnectFile (or specifying AC_File_Extern for the store member variable) and can customize the uploader according to the need to upload files to other than Flash or SD. Implements your own uploader with inheriting the AutoConnectUploadHandler class which is the base class of the upload handler.

    +
    +

    It's not so difficult

    +

    Implementing the custom uploader requires a little knowledge of the c++ language. If you are less attuned to programming c++, you may find it difficult. But don't worry. You can make it in various situations by just modifying the sketch skeleton that appears at the end of this page.

    +
    +

    Upload handler base class

    +

    AutoConnectUploadHandler is a base class of upload handler and It has one public member function and three protected functions.

    +

    Constructor

    +
    AutoConnectUploadHandler()
    +
    + +

    Member functions

    +

    The upload public function is an entry point, the ESP8266WebServer (WebServer as ESP32) library will invoke the upload with each time of uploading content divided into chunks.

    +

    Also, the _open, _write and _close protected functions are actually responsible for saving files and are declared as pure virtual functions. A custom uploader class that inherits from the AutoConnectUploadHandler class need to implement these functions.

    +

    The actual upload process is handled by the three private functions above, and then upload only invokes three functions according to the upload situation. In usually, there is no need to override the upload function in an inherited class.

    +

    public virtual void upload(const String& requestUri, const HTTPUpload& upload)
    +
    +
    +
    Parameters
    +
    requestUriURI of upload request source.
    +
    uploadA data structure of the upload file as HTTPUpload. It is defined in the ESP8266WebServer (WebServer as ESP32) library as follows:

    +

    typedef struct {
    +  HTTPUploadStatus status;
    +  String  filename;
    +  String  name;
    +  String  type;
    +  size_t  totalSize;
    +  size_t  currentSize;
    +  size_t  contentLength;
    +  uint8_t buf[HTTP_UPLOAD_BUFLEN];
    +} HTTPUpload;
    +
    +
    +

    +

    The upload handler needs to implement processing based on the enumeration value of HTTPUpload.status as HTTPUploadStatus enum type. HTTPUploadStatus enumeration is as follows:

    +
      +
    • UPLOAD_FILE_START : Invokes to the _open.
    • +
    • UPLOAD_FILE_WRITE : Invokes to the _write.
    • +
    • UPLOAD_FILE_END : Invokes to the _close.
    • +
    • UPLOAD_FILE_ABORTED : Invokes to the _close.
    • +
    +

    The _open function will be invoked when HTTPUploadStatus is UPLOAD_FILE_START. Usually, the implementation of an inherited class will open the file.

    +

    protected virtual bool _open(const char* filename, const char* mode) = 0
    +
    +
    +
    Parameters
    +
    filenameUploading file name.
    +
    modeAn indicator for the file access mode, a "w" for writing.
    +
    Return value
    +
    trueFile open successful.
    +
    falseFailed to open.
    +

    +

    The _write function will be invoked when HTTPUploadStatus is UPLOAD_FILE_WRITE. The content of the upload file is divided and the _write will be invoked in multiple times. Usually, the implementation of an inherited class will write data.

    +

    protected virtual size_t _write(const uint8_t *buf, const size_t size))= 0
    +
    +
    +
    Parameters
    +
    bufFile content block.
    +
    sizeFile block size to write.
    +
    Return value
    +
    Size written.
    +

    +

    The _close function will be invoked when HTTPUploadStatus is UPLOAD_FILE_END or UPLOAD_FILE_ABORTED. Usually, the implementation of an inherited class will close the file.

    +
    protected virtual void _close(void) = 0
    +
    + +

    For reference, the following AutoConnectUploadFS class is an implementation of AutoConnect built-in uploader and inherits from AutoConnectUploadHandler.

    +
    class AutoConnectUploadFS : public AutoConnectUploadHandler {
    + public:
    +  explicit AutoConnectUploadFS(SPIFFST& media) : _media(&media) {}
    +  ~AutoConnectUploadFS() { _close(); }
    +
    + protected:
    +  bool _open(const char* filename, const char* mode) override {
    +    if (_media->begin()) {
    +      _file = _media->open(filename, mode);
    +      return _file != false;      
    +    }
    +    return false;
    +  }
    +
    +  size_t _write(const uint8_t* buf, const size_t size) override {
    +    if (_file)
    +      return _file.write(buf, size);
    +    else
    +      return -1;
    +  }
    +
    +  void _close(void) override {
    +    if (_file)
    +      _file.close();
    +    _media->end();
    +  }
    +
    + private:
    +  SPIFFST*  _media;
    +  SPIFileT  _file; 
    +};
    +
    + +

    Register custom upload handler

    +

    In order to upload a file by the custom uploader, it is necessary to register it to the custom Web page beforehand. To register a custom uploader, specify the custom uploader class name in the template argument of the AutoConnectAux::onUpload function and invokes it.

    +

    void AutoConnectAux::onUpload<T>(T& uploadClass)
    +
    +
    +
    Parameters
    +
    TSpecifies a class name of the custom uploader. This class name is a class that you implemented by inheriting AutoConnectUploadHandler for custom upload.
    +
    uploadClassSpecifies the custom upload class instance.
    +

    +

    The rough structure of the sketches that completed these implementations will be as follows:

    +
    #include <ESP8266WiFi.h>
    +#include <ESP8266WebServer.h>
    +#include <AutoConnect.h>
    +
    +static const char PAGE_UPLOAD[] PROGMEM = R"(
    +{
    +  "uri": "/",
    +  "title": "Upload",
    +  "menu": true,
    +  "element": [
    +    { "name":"caption", "type":"ACText", "value":"<h2>File uploading platform<h2>" },
    +    { "name":"upload_file", "type":"ACFile", "label":"Select file: ", "store":"extern" },
    +    { "name":"upload", "type":"ACSubmit", "value":"UPLOAD", "uri":"/upload" }
    +  ]
    +}
    +)";
    +
    +static const char PAGE_RECEIVED[] PROGMEM = R"(
    +{
    +  "uri": "/upload",
    +  "title": "Upload ended",
    +  "menu": false,
    +  "element": [
    +    { "name":"caption", "type":"ACText", "value":"<h2>File uploading ended<h2>" }
    +  ]
    +}
    +)";
    +
    +// Custom upload handler class
    +class CustomUploader : public AutoConnectUploadHandler {
    +public:
    +  CustomUploader() {}
    +  ~CustomUploader() {}
    +
    +protected:
    +  bool   _open(const char* filename, const char* mode) override;
    +  size_t _write(const uint8_t *buf, const size_t size) override;
    +  void   _close(void) override;
    +};
    +
    +// _open for custom open
    +bool CustomUploader::_open(const char* filename, const char* mode) {
    +  // Here, an implementation for the open file.
    +}
    +
    +// _open for custom write
    +size_t CustomUploader::_write(const uint8_t *buf, const size_t size) {
    +  // Here, an implementation for the writing the file data.
    +}
    +
    +// _open for custom close
    +void CustomUploader::_close(void) {
    +  // Here, an implementation for the close file.
    +}
    +
    +AutoConnect     portal;
    +AutoConnectAux  uploadPage;
    +AutoConnectAux  receivePage;
    +CustomUploader  uploader;   // Declare the custom uploader
    +
    +void setup() {
    +  uploadPage.load(PAGE_UPLOAD);
    +  receivePage.load(PAGE_RECEIVED);
    +  portal.join({ uploadPage, receivePage });
    +  receivePage.onUpload<CustomUploader>(uploader);  // Register the custom uploader
    +  portal.begin();
    +}
    +
    +void loop() {
    +  portal.handleClient();
    +}
    +
    + +
    +

    Don't forget to specify the store

    +

    When using a custom uploader, remember to specify the extern for the store attribute of AutoConnectFile.

    +
    + + +
    +
    +
      +
    1. +

      The AutoConnectFile element can be used with other AutoConnectElements on the same page. 

      +
    2. +
    +
    + + + + + + + + + +
    +
    +
    +
    + + + + +
    + + + + + + + + + + \ No newline at end of file diff --git a/docs/advancedusage.html b/docs/advancedusage.html index a70b26d..e026ec9 100644 --- a/docs/advancedusage.html +++ b/docs/advancedusage.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,81 +229,6 @@ - - - -
    @@ -432,6 +357,13 @@ 404 handler + + +
  • + + Access to saved credentials + +
  • @@ -474,6 +406,13 @@ Change menu title +
  • + +
  • + + Change the menu labels + +
  • @@ -843,12 +782,60 @@ -
  • - +
  • + + + + + +
  • + @@ -917,6 +904,13 @@ 404 handler + + +
  • + + Access to saved credentials + +
  • @@ -959,6 +953,13 @@ Change menu title +
  • + +
  • + + Change the menu labels + +
  • @@ -1105,7 +1106,9 @@

    Advanced usage

    404 handler

    -

    Registering the "not found" handler is a different way than ESP8266WebServer/WebServer. The onNotFound of ESP8266WebServer/WebServer does not work with AutoConnect. AutoConnect overrides ESP8266WebServer::onNotFound/WebServer::onNotFound to handle a captive portal. To register "not found" handler, use AutoConnect::onNotFound.

    +

    Registering the "not found" handler is a different way than ESP8266WebServer (WebServer as ESP32). The onNotFound of ESP8266WebServer/WebServer does not work with AutoConnect. AutoConnect overrides ESP8266WebServer::onNotFound/WebServer::onNotFound to handle a captive portal. To register "not found" handler, use AutoConnect::onNotFound.

    +

    Access to saved credentials

    +

    AutoConnect stores the established WiFi connection in the EEPROM of the ESP8266/ESP32 module and equips the class to access it from the sketch. You can read, write or erase the credentials using this class individually. It's AutoConnectCredential class which provides the access method to the saved credentials in EEPROM. Refer to section Saved credentail access for details.

    Automatic reconnect

    When the captive portal is started, SoftAP starts and the STA is disconnected. The current SSID setting memorized in ESP8266 will be lost but then the reconnect behavior of ESP32 is somewhat different from this.

    The WiFiSTAClass::disconnect function implemented in the arduino-esp32 has extended parameters than the ESP8266's arduino-core. The second parameter of WiFi.disconnect on the arduino-esp32 core that does not exist in the ESP8266WiFiSTAClass has the effect of deleting the currently connected WiFi configuration and its default value is "false". On the ESP32 platform, even if WiFi.disconnect is executed, WiFi.begin() without the parameters in the next turn will try to connect to that AP. That is, automatic reconnection is implemented in arduino-esp32 already. Although this behavior appears seemingly competent, it is rather a disadvantage in scenes where you want to change the access point each time. When explicitly disconnecting WiFi from the Disconnect menu, AutoConnect will erase the AP connection settings saved by arduino-esp32 core. AutoConnect's automatic reconnection is a mechanism independent from the automatic reconnection of the arduino-esp32 core.

    @@ -1267,6 +1270,16 @@ Also, if you want to stop AutoConnect completely when the captive portal is time

    +

    Change the menu labels

    +

    You can change the label of the AutoConnect menu item by rewriting the default label letter in AutoConnectLabels.h macros. However, changing menu items letter influences all the sketch's build scenes.

    +
    #define AUTOCONNECT_MENULABEL_CONFIGNEW   "Configure new AP"
    +#define AUTOCONNECT_MENULABEL_OPENSSIDS   "Open SSIDs"
    +#define AUTOCONNECT_MENULABEL_DISCONNECT  "Disconnect"
    +#define AUTOCONNECT_MENULABEL_RESET       "Reset..."
    +#define AUTOCONNECT_MENULABEL_HOME        "HOME"
    +#define AUTOCONNECT_BUTTONLABEL_RESET     "RESET"
    +
    +

    Combination with mDNS

    With mDNS library, you can access to ESP8266 by name instead of IP address after connection. The sketch can start the MDNS responder after AutoConnect::begin.

    #include <ESP8266WiFi.h>
    @@ -1596,7 +1609,7 @@ The above example does not connect to WiFi until TRIGGER_PIN goes LOW. When TRIG
           
         
    - + diff --git a/docs/api.html b/docs/api.html index 8269d0d..ec7574f 100644 --- a/docs/api.html +++ b/docs/api.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
    @@ -825,12 +748,60 @@ -
  • - +
  • + + + + + +
  • + @@ -1111,7 +1082,7 @@

    Run the AutoConnect site using the externally ensured ESP8266WebServer for ESP8266 or WebServer for ESP32.

    The handleClient function of AutoConnect can include the response of the URI handler added by the user using the "on" function of ESP8266WebServer/WebServer. If ESP8266WebServer/WebServer is assigned internally by AutoConnect, the sketch can obtain that reference with the host function.

    -
    Parameters
    +
    Parameter
    webServerA reference of ESP8266WebServer or WebServer instance.

    Public member functions

    @@ -1120,7 +1091,7 @@
    Returns a pointer to AutoConnectAux with the URI specified by uri. If AutoConnectAux with that URI is not bound, it returns nullptr.
    -
    Parameters
    +
    Parameter
    uriA string of the URI.
    Return value
    A Pointer of the AutoConnectAux instance.
    @@ -1160,7 +1131,7 @@ The captive portal will not be started if the connection has been established wi
    falseConfiguration parameter is invalid, some values out of range.

    end

    -
    void end()
    +
    void end(void)
     

    Stops AutoConnect captive portal service. Release ESP8266WebServer/WebServer and DNSServer.

    @@ -1169,12 +1140,12 @@ The captive portal will not be started if the connection has been established wi

    The end function releases the instance of ESP8266WebServer/WebServer and DNSServer. It can not process them after the end function.

    handleClient

    -
    void handleClient()
    +
    void handleClient(void)
     

    Process the AutoConnect menu interface. The handleClient() function of the ESP8266WebServer/WebServer hosted by AutoConnect is also called from within AutoConnect, and the client request handlers contained in the user sketch are also handled.

    handleRequest

    -
    void handleRequest()
    +
    void handleRequest(void)
     

    Handling for the AutoConnect menu request.

    @@ -1188,20 +1159,20 @@ The captive portal will not be started if the connection has been established wi

    Put a user site's home URI. The URI specified by home is linked from "HOME" in the AutoConnect menu.

    -
    Parameters
    +
    Parameter
    uriA URI string of user site's home path.

    host

    • For ESP8266
    -
    ESP8266WebServer& host()
    +
    ESP8266WebServer& host(void)
     
    • For ESP32
    -
    WebServer& host()
    +
    WebServer& host(void)
     

    Returns the reference of the ESP8266WebServer/WebServer which is allocated in AutoConnect automatically. @@ -1226,7 +1197,7 @@ or

    Join the AutoConnectAux object to AutoConnect. AutoConnectAux objects can be joined one by one, or joined altogether. The AutoConnectAux object joined by the join function can be handled from the AutoConnect menu.
    -
    Parameters
    +
    Parameter
    auxReference to AutoConnectAux. It can be std::vector of std::reference_wrapper of AutoConnectAux with list initialization.

    load

    @@ -1238,7 +1209,7 @@ Join the AutoConnectAux object to AutoConnect. AutoConnectAux objects can be joi
    Load JSON document of AutoConnectAux which contains AutoConnectElements. If there is a syntax error in the JSON document, false is returned.
    -
    Parameters
    +
    Parameter
    auxThe input string to be loaded.
    Return value
    trueThe JSON document as AutoConnectAux successfully loaded.
    @@ -1284,7 +1255,7 @@ Called even before generating HTML and after generated.
  • Register the function which will call from AutoConnect at the start of the captive portal.
    -
    Parameters
    +
    Parameter
    fnFunction called at the captive portal start.

    @@ -1292,7 +1263,7 @@ Register the function which will call from AutoConnect at the start of the capti

    typedef std::function<bool(IPAddress softapIP)>  DetectExit_ft
     
    -
    Parameters
    +
    Parameter
    softapIPAn IP address of SoftAP for the captive portal.
    Return value
    trueContinues captive portal handling.
    @@ -1312,7 +1283,7 @@ Register the function which will call from AutoConnect at the start of the capti Register the handler function for undefined URL request detected.
    -
    Parameters
    +
    Parameter
    fnA function of the "not found" handler.

    where

    @@ -1408,7 +1379,7 @@ This function is provided to access the fields (ie. the AutoConnectElements) wit - + diff --git a/docs/apiaux.html b/docs/apiaux.html index 0af2880..45f414e 100644 --- a/docs/apiaux.html +++ b/docs/apiaux.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
    @@ -566,6 +489,13 @@

    Public member functions

    +

    operator [ ]

    +

    AutoConnectElement& operator[](const String& name)
    +
    +Returns a reference to the element specified by name. An operator [] is a shortcut for getElement function with the reference casting. Unlike getElement, which returns a pointer to that element, an operator [] returns a reference to that element. You also need to cast the return value to the actual type, just like the getElement function. +
    +
    Parameter
    +
    nameName of the AutoConnectElements to be retrieved.
    +
    Return value
    A reference to AutoConnectElement. It is different from the actual element type.
    +

    add

    void add(AutoConnectElement& addon)
     
    @@ -998,7 +1006,7 @@ Add an element to the AutoConnectAux. An added element is displayed on the custo Get a registered AutoConnectElement as specified name. If T is specified as an actual type of AutoConnectElements, it returns a reference to that instance.
    Parameters
    -
    TActual type name of AutoConnectElements as AutoConnectButton, AutoConnectCheckbox, AutoConnectElement, AutoConnectInput, AutoConnectRadio, AutoConnectSelect, AutoConnectSubmit, AutoConnectText.
    +
    TActual type name of AutoConnectElements as AutoConnectButton, AutoConnectCheckbox, AutoConnectElement, AutoConnectFile, AutoConnectInput, AutoConnectRadio, AutoConnectSelect, AutoConnectSubmit, AutoConnectText.
    nameName of the AutoConnectElements to be retrieved.
    Return value
    A reference of the AutoConnectElements. If a type is not specified returns a pointer.

    @@ -1029,7 +1037,7 @@ Get vector of reference of all elements. Load all AutoConnectElements elements from JSON document into AutoConnectAux as custom Web pages. The JSON document specified by the load function must be the document structure of AutoConnectAux. Its JSON document can describe multiple pages as an array.
    -
    Parameters
    +
    Parameter
    inSpecifies the JSON document to be load. The load function can input the following objects.

    • String : Read-only String
    • @@ -1088,7 +1096,7 @@ The outermost [, ] is missing.

      Set or reset the display as menu item for this AutoConnectAux. This function programmatically manipulates the menu parameter of the AutoConenctAux constructor.
      -
      Parameters
      +
      Parameter
      trueShow on the menu.
      falseHidden on the menu.

      @@ -1122,12 +1130,36 @@ Called even before generating HTML and after generated.
    +

    onUpload

    +

    void onUpload<T&>(T handler)
    +
    +
    void onUpload(PageBuilder::UploadFuncT uploadFunc)
    +
    +Register the upload handler of the AutoConnectAux. +
    +
    Parameters
    +
    TSpecifies a class name of the custom uploader inherited from AutoConnectUploadHandler class. Refer to the appendix for details.
    +
    handlerSpecifies the custom uploader inherited from AutoConnectUploadHandler class. Refer to the appendix for details.
    +
    uploadFuncA function that behaves when request to upload with the AutoConnectAux page. UploadFuncT type is defined by the following declaration.

    void(const String&, const HTTPUpload&)

    A data structure of the upload file as HTTPUpload. It is defined in the ESP8266WebServer (the WebServer for ESP32) library as follows:

    +

    typedef struct {
    +  HTTPUploadStatus status;
    +  String  filename;
    +  String  name;
    +  String  type;
    +  size_t  totalSize;
    +  size_t  currentSize;
    +  size_t  contentLength;
    +  uint8_t buf[HTTP_UPLOAD_BUFLEN];
    +} HTTPUpload;
    +
    +

    Refer to 'To upload to a device other than Flash or SD' in section appendix for details.
    +

    release

    bool release(const String& name)
     
    Release a specified AutoConnectElement from AutoConenctAux. The release function is provided to dynamically change the structure of the custom Web pages with the sketch. By combining the release function and the add function or the loadElement function, the sketch can change the style of the custom Web page according to its behavior.
    -
    Parameters
    +
    Parameter
    nameSpecifies the name of AutoConnectElements to be released.
    Return value
    trueThe AutoConnectElement successfully released.
    @@ -1271,7 +1303,7 @@ Set the title string of the custom Web page. This title will be displayed as the - + diff --git a/docs/apiconfig.html b/docs/apiconfig.html index d9798e7..15c2c94 100644 --- a/docs/apiconfig.html +++ b/docs/apiconfig.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
    @@ -875,12 +798,60 @@ -
  • - +
  • + + + + + +
  • + @@ -1477,7 +1448,7 @@ The default value is 0.
    - + diff --git a/docs/apielements.html b/docs/apielements.html index ee9ae60..74134a6 100644 --- a/docs/apielements.html +++ b/docs/apielements.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
    @@ -772,6 +695,13 @@ typeOf + + +
  • + + as<T> + +
  • @@ -785,8 +715,8 @@
  • - - AutoConnectInput + + AutoConnectFile
  • + +
  • + + store + + +
  • + +
  • + + mimeType + + +
  • + +
  • + + size + + +
  • + + + + + + +
  • + + Public member functions + + + + +
  • + + + + + + +
  • + + AutoConnectInput + + + +
  • @@ -1648,8 +1735,8 @@
  • - - AutoConnectInput + + AutoConnectFile
  • + +
  • + + store + + +
  • + +
  • + + mimeType + + +
  • + +
  • + + size + + +
  • + + + + + + +
  • + + Public member functions + + + + +
  • + + + + + + +
  • + + AutoConnectInput + + +
  • -

    AutoConnectInput

    +

    as<T>

    +

    AutoConnectElement& as<T>(void)
    +
    +Casts the reference to the AutoConnectElement the specified type. +
    +
    Parameter
    +
    TThe element type. AutoConnectElements type such as AutoConnectButton, AutoConnectCheckbox, AutoConnectFile, AutoConnectInput, AutoConnectRadio, AutoConnectSelect, AutoConnectSubmit, AutoConnectText.
    +
    Return value
    +
    A reference to the AutoConnectElement with actual type.
    +

    +

    AutoConnectFile

    Constructor

    +

    AutoConnectFile(const char* name = "", const char* value = "", const char* label = "", const ACFile_t store = AC_File_FS)
    +
    +
    +
    Parameters
    +
    nameThe element name.
    +
    valueFile name to be upload.
    +
    labelLabel string.
    +
    storeThe ACFile_t enumerator that represents the media to save the uploaded file.

    +
    + +

    Public member variables

    +

    name

    +

    The element name. +

    +
    Type
    +
    String
    +

    +

    value

    +

    File name to be upload. The value contains the value entered by the client browser to the <input type="file"> tag and is read-only. +

    +
    Type
    +
    String
    +

    +

    label

    +

    A label is an optional string. A label is always arranged on the left side of the file input box. Specification of a label will generate an HTML <label> tag with an id attribute. The file input box and the label are connected by the id attribute. +

    +
    Type
    +
    String
    +

    +

    store

    +

    Specifies the save destination of the uploaded file. You can use the built-in uploader to save uploaded file to the flash of the ESP8266/ESP32 module or external SD media without writing a dedicated sketch code. It also supports saving to any destination using a custom uploader that inherits from the AutoConnectUploadHandler class. +

    +
    Type
    +
    ACFile_t

    +
      +
    • AC_File_FS : Save the uploaded file to SPIFFS in the flash.
    • +
    • AC_File_SD : Save the uploaded file to SD.
    • +
    • AC_File_Extern : Save the file using your own upload handler. +
    +
    + +

    mimeType

    +

    The mime type of the upload file which included as Media type in the http post request. Set by the client (usually the browser) that requested the upload. It is determined by the file type as application/octet-stream, text etc. which is described in IANA Media Type. +

    +
    Type
    +
    String
    +

    +

    size

    +

    Size of the uploading file. +

    +
    Type
    +
    size_t
    +

    +

    Public member functions

    +

    typeOf

    +

    ACElement_t typeOf(void)
    +
    +Returns type of AutoConnectFile. +
    +
    Return value
    +
    AC_File
    +

    +

    AutoConnectInput

    +

    Constructor

    AutoConnectInput(const char* name = "", const char* value = "", const char* label = "", const char* pattern = "", const char* placeholder = "")
     
    @@ -2267,20 +2530,20 @@ Returns type of AutoConnectElement.
    patternRegular expression string for checking data format.
    placeholderA placeholder string.

    -

    Public member variables

    -

    name

    +

    Public member variables

    +

    name

    The element name.

    Type
    String

    -

    value

    +

    value

    Value of the element. It becomes a value attribute of an HTML <input type="text"> tag. An entered text in the custom Web page will be sent with a query string of the form. The value set before accessing the page is displayed as the initial value.

    Type
    String

    -

    label

    +

    label

    A label is an optional string. A label is always arranged on the left side of the input box. Specification of a label will generate an HTML <label> tag with an id attribute. The input box and the label are connected by the id attribute.

    Type
    @@ -2298,8 +2561,8 @@ Returns type of AutoConnectElement.
    Type
    String

    -

    Public member functions

    -

    typeOf

    +

    Public member functions

    +

    typeOf

    ACElement_t typeOf(void)
     
    Returns type of AutoConnectElement. @@ -2317,7 +2580,7 @@ Evaluate the pattern as a regexp and return whether value matches. Always return
    falseThe value does not match a pattern.

    AutoConnectRadio

    -

    Constructor

    +

    Constructor

    AutoConnectRadio(const char* name = "", std::vector<String> const& values = {}, const char* label = "", const ACArrange_t order = AC_Vertical, const uint8_t checked = 0)
     
    @@ -2328,8 +2591,8 @@ Evaluate the pattern as a regexp and return whether value matches. Always return
    orderThe direction to arrange the radio buttons.
    checkedAn index to be checked in the radio buttons.

    -

    Public member variables

    -

    name

    +

    Public member variables

    +

    name

    The element name.

    Type
    @@ -2341,7 +2604,7 @@ Evaluate the pattern as a regexp and return whether value matches. Always return
    Type
    std::vector<String>

    -

    label

    +

    label

    A label is an optional string. A label will be arranged in the left or top of the radio buttons according to the order.

    Type
    @@ -2364,8 +2627,8 @@ Evaluate the pattern as a regexp and return whether value matches. Always return
    Type
    uint8_t

    -

    Public member functions

    -

    typeOf

    +

    Public member functions

    +

    typeOf

    ACElement_t typeOf(void)
     
    Returns type of AutoConnectElement. @@ -2378,7 +2641,7 @@ Returns type of AutoConnectElement. Adds an option for the radio button.
    -
    Parameters
    +
    Parameter
    valueAn option string to add to the radio button.

    check

    @@ -2386,7 +2649,7 @@ Adds an option for the radio button. Indicates the check of the specified option for the radio buttons. You can use the check function for checking dynamically with arbitrary of the radio button.
    -
    Parameters
    +
    Parameter
    valueAn option string to be checked.

    empty

    @@ -2394,7 +2657,7 @@ Indicates the check of the specified option for the radio buttons. You can use t Clear the array of option strings that AutoConnectRadio has in the values. When a reserve parameter is specified, a vector container of that size is reserved.
    -
    Parameters
    +
    Parameter
    reserveReserved size of a container for the radio button option strings.

    operator [ ]

    @@ -2402,12 +2665,12 @@ Clear the array of option strings that AutoConnectRadio has in the values. When Returns a value string of the index specified by n.
    -
    Parameters
    +
    Parameter
    nIndex of values array to return. Its base number is 0.
    Return value
    A reference of a value string indexed by the specified the n.

    -

    size

    +

    size

    size_t size(void)
     
    Returns number of options which contained. @@ -2415,7 +2678,7 @@ Returns number of options which contained.
    Return value
    Number of options which contained.

    -

    value

    +

    value

      const String& value(void) const
     
    Returns current checked option of the radio buttons. @@ -2424,7 +2687,7 @@ Returns current checked option of the radio buttons.
    A String of an option current checked. If there is no checked option, a null string returned.

    AutoConnectSelect

    -

    Constructor

    +

    Constructor

    AutoConnectSelect(const char* name = "", std::vector<String> const& options = {}, const char* label = "")
     
    @@ -2433,8 +2696,8 @@ Returns current checked option of the radio buttons.
    optionsAn array of options of the select element. Specifies an std::vector object.
    labelLabel string.

    -

    Public member variables

    -

    name

    +

    Public member variables

    +

    name

    The element name.

    Type
    @@ -2446,14 +2709,14 @@ Returns current checked option of the radio buttons.
    Type
    std::vector<String>

    -

    label

    +

    label

    A label is an optional string. A label will be arranged in the top of the selection list.

    Type
    String

    -

    Public member functions

    -

    typeOf

    +

    Public member functions

    +

    typeOf

    ACElement_t typeOf(void)
     
    Returns type of AutoConnectElement. @@ -2466,7 +2729,7 @@ Returns type of AutoConnectElement. Adds a selectable option string for the selection list.
    -
    Parameters
    +
    Parameter
    optionA string of selectable item to be contained in the select element.

    empty

    @@ -2474,7 +2737,7 @@ Adds a selectable option string for the selection list. Clear the array of options list that AutoConnectSelect has in the options. When a reserve parameter is specified, a vector container of that size is reserved.
    -
    Parameters
    +
    Parameter
    reserveReserved size of a container for the options.

    operator [ ]

    @@ -2482,13 +2745,13 @@ Clear the array of options list that AutoConnectSelect has in the options. When Returns an option string of the index specified by n.
    -
    Parameters
    +
    Parameter
    nIndex of options array to return. Its base number is 0.
    Return value
    A reference of a option string indexed by the specified the n.

    -

    size

    +

    size

    size_t size(void)
     
    Returns number of options which contained. @@ -2497,7 +2760,7 @@ Returns number of options which contained.
    Number of options which contained.

    AutoConnectSubmit

    -

    Constructor

    +

    Constructor

    AutoConnectSubmit(const char* name = "", const char* value ="", char* uri = "")
     
    @@ -2506,14 +2769,14 @@ Returns number of options which contained.
    valueThe name of the submit button as an HTML <input type="button"> tag, it will also be the label of the button.
    uriDestination URI.

    -

    Public member variables

    -

    name

    +

    Public member variables

    +

    name

    The element name.

    Type
    String

    -

    value

    +

    value

    The name of the submit button. It will also be the label of the button.

    Type
    @@ -2525,8 +2788,8 @@ Returns number of options which contained.
    Type
    String

    -

    Public member functions

    -

    typeOf

    +

    Public member functions

    +

    typeOf

    ACElement_t typeOf(void)
     
    Returns type of AutoConnectElement. @@ -2535,23 +2798,24 @@ Returns type of AutoConnectElement.
    AC_Submit

    AutoConnectText

    -

    Constructor

    -

    AutoConnectText(const char* name = "", const char* value = "", const char* style = "")
    +

    Constructor

    +

    AutoConnectText(const char* name = "", const char* value = "", const char* style = "", const char* format = "")
     
    Parameters
    nameThe element name.
    valueString of content for the text element.
    styleA style code with CSS format that qualifiers the text.
    +
    formatA pointer to a null-terminated multibyte string specifying how to interpret the value. It specifies the conversion format when outputting values. The format string conforms to C-style printf library functions

    -

    Public member variables

    -

    name

    +

    Public member variables

    +

    name

    The element name.

    Type
    String

    -

    value

    +

    value

    A content string of the text element.

    Type
    @@ -2563,8 +2827,14 @@ Returns type of AutoConnectElement.
    Type
    String

    -

    Public member functions

    -

    typeOf

    +

    format

    +

    The conversion format when outputting values. The format string conforms to C-style printf library functions. +

    +
    Type
    +
    String
    +

    +

    Public member functions

    +

    typeOf

    ACElement_t typeOf(void)
     
    Returns type of AutoConnectElement. @@ -2662,7 +2932,7 @@ Returns type of AutoConnectElement.
    - + diff --git a/docs/apiextra.html b/docs/apiextra.html index b1a7f20..50d6475 100644 --- a/docs/apiextra.html +++ b/docs/apiextra.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
    - + diff --git a/docs/assets/javascripts/application.b806dc00.js b/docs/assets/javascripts/application.dc02f8ce.js similarity index 50% rename from docs/assets/javascripts/application.b806dc00.js rename to docs/assets/javascripts/application.dc02f8ce.js index 3c6d6f6..4a86989 100644 --- a/docs/assets/javascripts/application.b806dc00.js +++ b/docs/assets/javascripts/application.dc02f8ce.js @@ -1,6 +1,6 @@ -!function(e,t){for(var n in t)e[n]=t[n]}(window,function(n){var r={};function i(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=n,i.c=r,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=14)}([function(e,t,n){"use strict";var r={Listener:function(){function e(e,t,n){var r=this;this.els_=Array.prototype.slice.call("string"==typeof e?document.querySelectorAll(e):[].concat(e)),this.handler_="function"==typeof n?{update:n}:n,this.events_=[].concat(t),this.update_=function(e){return r.handler_.update(e)}}var t=e.prototype;return t.listen=function(){var n=this;this.els_.forEach(function(t){n.events_.forEach(function(e){t.addEventListener(e,n.update_,!1)})}),"function"==typeof this.handler_.setup&&this.handler_.setup()},t.unlisten=function(){var n=this;this.els_.forEach(function(t){n.events_.forEach(function(e){t.removeEventListener(e,n.update_)})}),"function"==typeof this.handler_.reset&&this.handler_.reset()},e}(),MatchMedia:function(e,t){this.handler_=function(e){e.matches?t.listen():t.unlisten()};var n=window.matchMedia(e);n.addListener(this.handler_),this.handler_(n)}},i={Shadow:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement&&n.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=n.parentNode,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLElement))throw new ReferenceError;this.header_=n,this.height_=0,this.active_=!1}var t=e.prototype;return t.setup=function(){for(var e=this.el_;e=e.previousElementSibling;){if(!(e instanceof HTMLElement))throw new ReferenceError;this.height_+=e.offsetHeight}this.update()},t.update=function(e){if(!e||"resize"!==e.type&&"orientationchange"!==e.type){var t=window.pageYOffset>=this.height_;t!==this.active_&&(this.header_.dataset.mdState=(this.active_=t)?"shadow":"")}else this.height_=0,this.setup()},t.reset=function(){this.header_.dataset.mdState="",this.height_=0,this.active_=!1},e}(),Title:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement))throw new ReferenceError;if(this.el_=n,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLHeadingElement))throw new ReferenceError;this.header_=n,this.active_=!1}var t=e.prototype;return t.setup=function(){var t=this;Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},t.update=function(e){var t=this,n=window.pageYOffset>=this.header_.offsetTop;n!==this.active_&&(this.el_.dataset.mdState=(this.active_=n)?"active":""),"resize"!==e.type&&"orientationchange"!==e.type||Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.width="",this.active_=!1},e}()},o={Blur:function(){function e(e){this.els_="string"==typeof e?document.querySelectorAll(e):e,this.index_=0,this.offset_=window.pageYOffset,this.dir_=!1,this.anchors_=[].reduce.call(this.els_,function(e,t){var n=decodeURIComponent(t.hash);return e.concat(document.getElementById(n.substring(1))||[])},[])}var t=e.prototype;return t.setup=function(){this.update()},t.update=function(){var e=window.pageYOffset,t=this.offset_-e<0;if(this.dir_!==t&&(this.index_=this.index_=t?0:this.els_.length-1),0!==this.anchors_.length){if(this.offset_<=e)for(var n=this.index_+1;ne)){this.index_=r;break}0=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0},e}()},c=n(6),l=n.n(c);var u={Adapter:{GitHub:function(o){var e,t;function n(e){var t;t=o.call(this,e)||this;var n=/^.+github\.com\/([^/]+)\/?([^/]+)?.*$/.exec(t.base_);if(n&&3===n.length){var r=n[1],i=n[2];t.base_="https://api.github.com/users/"+r+"/repos",t.name_=i}return t}return t=o,(e=n).prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t,n.prototype.fetch_=function(){var i=this;return function n(r){return void 0===r&&(r=0),fetch(i.base_+"?per_page=30&page="+r).then(function(e){return e.json()}).then(function(e){if(!(e instanceof Array))throw new TypeError;if(i.name_){var t=e.find(function(e){return e.name===i.name_});return t||30!==e.length?t?[i.format_(t.stargazers_count)+" Stars",i.format_(t.forks_count)+" Forks"]:[]:n(r+1)}return[e.length+" Repositories"]})}()},n}(function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLAnchorElement))throw new ReferenceError;this.el_=t,this.base_=this.el_.href,this.salt_=this.hash_(this.base_)}var t=e.prototype;return t.fetch=function(){var n=this;return new Promise(function(t){var e=l.a.getJSON(n.salt_+".cache-source");void 0!==e?t(e):n.fetch_().then(function(e){l.a.set(n.salt_+".cache-source",e,{expires:1/96}),t(e)})})},t.fetch_=function(){throw new Error("fetch_(): Not implemented")},t.format_=function(e){return 1e4=this.el_.children[0].offsetTop+-43;e!==this.active_&&(this.el_.dataset.mdState=(this.active_=e)?"hidden":"")},t.reset=function(){this.el_.dataset.mdState="",this.active_=!1},e}()};t.a={Event:r,Header:i,Nav:o,Search:a,Sidebar:s,Source:u,Tabs:f}},function(t,e,n){(function(e){t.exports=e.lunr=n(25)}).call(this,n(4))},function(e,f,d){"use strict";(function(t){var e=d(8),n=setTimeout;function r(){}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],u(e,this)}function i(n,r){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,o._immediateFn(function(){var e=1===n._state?r.onFulfilled:r.onRejected;if(null!==e){var t;try{t=e(n._value)}catch(e){return void s(r.promise,e)}a(r.promise,t)}else(1===n._state?a:s)(r.promise,n._value)})):n._deferreds.push(r)}function a(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof o)return t._state=3,t._value=e,void c(t);if("function"==typeof n)return void u((r=n,i=e,function(){r.apply(i,arguments)}),t)}t._state=1,t._value=e,c(t)}catch(e){s(t,e)}var r,i}function s(e,t){e._state=2,e._value=t,c(e)}function c(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t"+n+""};this.stack_=[],n.forEach(function(e,t){var n,r=a.docs_.get(t),i=u.createElement("li",{class:"md-search-result__item"},u.createElement("a",{href:r.location,title:r.title,class:"md-search-result__link",tabindex:"-1"},u.createElement("article",{class:"md-search-result__article md-search-result__article--document"},u.createElement("h1",{class:"md-search-result__title"},{__html:r.title.replace(s,c)}),r.text.length?u.createElement("p",{class:"md-search-result__teaser"},{__html:r.text.replace(s,c)}):{}))),o=e.map(function(t){return function(){var e=a.docs_.get(t.ref);i.appendChild(u.createElement("a",{href:e.location,title:e.title,class:"md-search-result__link","data-md-rel":"anchor",tabindex:"-1"},u.createElement("article",{class:"md-search-result__article"},u.createElement("h1",{class:"md-search-result__title"},{__html:e.title.replace(s,c)}),e.text.length?u.createElement("p",{class:"md-search-result__teaser"},{__html:function(e,t){var n=t;if(e.length>n){for(;" "!==e[n]&&0<--n;);return e.substring(0,n)+"..."}return e}(e.text.replace(s,c),400)}):{})))}});(n=a.stack_).push.apply(n,[function(){return a.list_.appendChild(i)}].concat(o))});var i=this.el_.parentNode;if(!(i instanceof HTMLElement))throw new ReferenceError;for(;this.stack_.length&&i.offsetHeight>=i.scrollHeight-16;)this.stack_.shift()();var o=this.list_.querySelectorAll("[data-md-rel=anchor]");switch(Array.prototype.forEach.call(o,function(r){["click","keydown"].forEach(function(n){r.addEventListener(n,function(e){if("keydown"!==n||13===e.keyCode){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.checked&&(t.checked=!1,t.dispatchEvent(new CustomEvent("change"))),e.preventDefault(),setTimeout(function(){document.location.href=r.href},100)}})})}),n.size){case 0:this.meta_.textContent=this.message_.none;break;case 1:this.meta_.textContent=this.message_.one;break;default:this.meta_.textContent=this.message_.other.replace("#",n.size)}}}else{var l=function(e){a.docs_=e.reduce(function(e,t){var n=t.location.split("#"),r=n[0],i=n[1];return t.title=h(t.title),t.text=h(t.text),i&&(t.parent=e.get(r),t.parent&&!t.parent.done&&(t.parent.title=t.title,t.parent.text=t.text,t.parent.done=!0)),t.text=t.text.replace(/\n/g," ").replace(/\s+/g," ").replace(/\s+([,.:;!?])/g,function(e,t){return t}),t.parent&&t.parent.title===t.title||e.set(t.location,t),e},new Map);var i=a.docs_,o=a.lang_;a.stack_=[],a.index_=d()(function(){var e,t=this,n={"search.pipeline.trimmer":d.a.trimmer,"search.pipeline.stopwords":d.a.stopWordFilter},r=Object.keys(n).reduce(function(e,t){return p(t).match(/^false$/i)||e.push(n[t]),e},[]);this.pipeline.reset(),r&&(e=this.pipeline).add.apply(e,r),1===o.length&&"en"!==o[0]&&d.a[o[0]]?this.use(d.a[o[0]]):1=t.scrollHeight-16;)a.stack_.splice(0,10).forEach(function(e){return e()})})};setTimeout(function(){return"function"==typeof a.data_?a.data_().then(l):l(a.data_)},250)}},e}()}).call(this,i(3))},function(e,t,n){"use strict";var r=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(r,"\\$&")}},function(e,n,r){"use strict";(function(t){r.d(n,"a",function(){return e});var e=function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLElement))throw new ReferenceError;this.el_=t}return e.prototype.initialize=function(e){e.length&&this.el_.children.length&&this.el_.children[this.el_.children.length-1].appendChild(t.createElement("ul",{class:"md-source__facts"},e.map(function(e){return t.createElement("li",{class:"md-source__fact"},e)}))),this.el_.dataset.mdState="done"},e}()}).call(this,r(3))},,,function(e,n,c){"use strict";c.r(n),function(o){c.d(n,"app",function(){return t});c(15),c(16),c(17),c(18),c(19),c(20),c(21);var r=c(2),e=c(5),a=c.n(e),i=c(0);window.Promise=window.Promise||r.a;var s=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content};var t={initialize:function(t){new i.a.Event.Listener(document,"DOMContentLoaded",function(){if(!(document.body instanceof HTMLElement))throw new ReferenceError;Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)});var e=document.querySelectorAll("table:not([class])");if(Array.prototype.forEach.call(e,function(e){var t=o.createElement("div",{class:"md-typeset__scrollwrap"},o.createElement("div",{class:"md-typeset__table"}));e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.children[0].appendChild(e)}),a.a.isSupported()){var t=document.querySelectorAll(".codehilite > pre, pre > code");Array.prototype.forEach.call(t,function(e,t){var n="__code_"+t,r=o.createElement("button",{class:"md-clipboard",title:s("clipboard.copy"),"data-clipboard-target":"#"+n+" pre, #"+n+" code"},o.createElement("span",{class:"md-clipboard__message"})),i=e.parentNode;i.id=n,i.insertBefore(r,e)}),new a.a(".md-clipboard").on("success",function(e){var t=e.trigger.querySelector(".md-clipboard__message");if(!(t instanceof HTMLElement))throw new ReferenceError;e.clearSelection(),t.dataset.mdTimer&&clearTimeout(parseInt(t.dataset.mdTimer,10)),t.classList.add("md-clipboard__message--active"),t.innerHTML=s("clipboard.copied"),t.dataset.mdTimer=setTimeout(function(){t.classList.remove("md-clipboard__message--active"),t.dataset.mdTimer=""},2e3).toString()})}if(!Modernizr.details){var n=document.querySelectorAll("details > summary");Array.prototype.forEach.call(n,function(e){e.addEventListener("click",function(e){var t=e.target.parentNode;t.hasAttribute("open")?t.removeAttribute("open"):t.setAttribute("open","")})})}var r=function(){if(document.location.hash){var e=document.getElementById(document.location.hash.substring(1));if(!e)return;for(var t=e.parentNode;t&&!(t instanceof HTMLDetailsElement);)t=t.parentNode;if(t&&!t.open){t.open=!0;var n=location.hash;location.hash=" ",location.hash=n}}};if(window.addEventListener("hashchange",r),r(),Modernizr.ios){var i=document.querySelectorAll("[data-md-scrollfix]");Array.prototype.forEach.call(i,function(t){t.addEventListener("touchstart",function(){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)})})}}).listen(),new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Header.Shadow("[data-md-component=container]","[data-md-component=header]")).listen(),new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Header.Title("[data-md-component=title]",".md-typeset h1")).listen(),document.querySelector("[data-md-component=hero]")&&new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Tabs.Toggle("[data-md-component=hero]")).listen(),document.querySelector("[data-md-component=tabs]")&&new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Tabs.Toggle("[data-md-component=tabs]")).listen(),new i.a.Event.MatchMedia("(min-width: 1220px)",new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Sidebar.Position("[data-md-component=navigation]","[data-md-component=header]"))),document.querySelector("[data-md-component=toc]")&&new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Sidebar.Position("[data-md-component=toc]","[data-md-component=header]"))),new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener(window,"scroll",new i.a.Nav.Blur("[data-md-component=toc] .md-nav__link")));var e=document.querySelectorAll("[data-md-component=collapsible]");Array.prototype.forEach.call(e,function(e){new i.a.Event.MatchMedia("(min-width: 1220px)",new i.a.Event.Listener(e.previousElementSibling,"click",new i.a.Nav.Collapse(e)))}),new i.a.Event.MatchMedia("(max-width: 1219px)",new i.a.Event.Listener("[data-md-component=navigation] [data-md-toggle]","change",new i.a.Nav.Scrolling("[data-md-component=navigation] nav"))),document.querySelector("[data-md-component=search]")&&(new i.a.Event.MatchMedia("(max-width: 959px)",new i.a.Event.Listener("[data-md-toggle=search]","change",new i.a.Search.Lock("[data-md-toggle=search]"))),new i.a.Event.Listener("[data-md-component=query]",["focus","keyup","change"],new i.a.Search.Result("[data-md-component=result]",function(){return fetch(t.url.base+"/search/search_index.json",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e.docs.map(function(e){return e.location=t.url.base+"/"+e.location,e})})})).listen(),new i.a.Event.Listener("[data-md-component=reset]","click",function(){setTimeout(function(){var e=document.querySelector("[data-md-component=query]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.focus()},10)}).listen(),new i.a.Event.Listener("[data-md-toggle=search]","change",function(e){setTimeout(function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.focus()}},400,e.target)}).listen(),new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener("[data-md-component=query]","focus",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked||(e.checked=!0,e.dispatchEvent(new CustomEvent("change")))})),new i.a.Event.Listener(window,"keydown",function(e){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;var n=document.querySelector("[data-md-component=query]");if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(!e.metaKey&&!e.ctrlKey)if(t.checked){if(13===e.keyCode){if(n===document.activeElement){e.preventDefault();var r=document.querySelector("[data-md-component=search] [href][data-md-state=active]");r instanceof HTMLLinkElement&&(window.location=r.getAttribute("href"),t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur())}}else if(9===e.keyCode||27===e.keyCode)t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur();else if(-1!==[8,37,39].indexOf(e.keyCode))n!==document.activeElement&&n.focus();else if(-1!==[38,40].indexOf(e.keyCode)){var i=e.keyCode,o=Array.prototype.slice.call(document.querySelectorAll("[data-md-component=query], [data-md-component=search] [href]")),a=o.find(function(e){if(!(e instanceof HTMLElement))throw new ReferenceError;return"active"===e.dataset.mdState});a&&(a.dataset.mdState="");var s=Math.max(0,(o.indexOf(a)+o.length+(38===i?-1:1))%o.length);return o[s]&&(o[s].dataset.mdState="active",o[s].focus()),e.preventDefault(),e.stopPropagation(),!1}}else document.activeElement&&!document.activeElement.form&&(70!==e.keyCode&&83!==e.keyCode||(n.focus(),e.preventDefault()))}).listen(),new i.a.Event.Listener(window,"keypress",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t!==document.activeElement&&t.focus()}}).listen()),new i.a.Event.Listener(document.body,"keydown",function(e){if(9===e.keyCode){var t=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[for]:not([tabindex])");Array.prototype.forEach.call(t,function(e){e.offsetHeight&&(e.tabIndex=0)})}}).listen(),new i.a.Event.Listener(document.body,"mousedown",function(){var e=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[tabindex]");Array.prototype.forEach.call(e,function(e){e.removeAttribute("tabIndex")})}).listen(),document.body.addEventListener("click",function(){"tabbing"===document.body.dataset.mdState&&(document.body.dataset.mdState="")}),new i.a.Event.MatchMedia("(max-width: 959px)",new i.a.Event.Listener("[data-md-component=navigation] [href^='#']","click",function(){var e=document.querySelector("[data-md-toggle=drawer]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked&&(e.checked=!1,e.dispatchEvent(new CustomEvent("change")))})),function(){var e=document.querySelector("[data-md-source]");if(!e)return r.a.resolve([]);if(!(e instanceof HTMLAnchorElement))throw new ReferenceError;switch(e.dataset.mdSource){case"github":return new i.a.Source.Adapter.GitHub(e).fetch();default:return r.a.resolve([])}}().then(function(t){var e=document.querySelectorAll("[data-md-source]");Array.prototype.forEach.call(e,function(e){new i.a.Source.Repository(e).initialize(t)})});var n=function(){var e=document.querySelectorAll("details");Array.prototype.forEach.call(e,function(e){e.setAttribute("open","")})};new i.a.Event.MatchMedia("print",{listen:n,unlisten:function(){}}),window.onbeforeprint=n}}}.call(this,c(3))},function(e,t,n){e.exports=n.p+"assets/images/icons/bitbucket.1b09e088.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/github.f0b8504a.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/gitlab.6dd19c00.svg"},function(e,t){e.exports="/home/travis/build/squidfunk/mkdocs-material/material/application.982221ab.css"},function(e,t){e.exports="/home/travis/build/squidfunk/mkdocs-material/material/application-palette.224b79ff.css"},function(e,t){!function(){if("undefined"!=typeof window)try{var e=new window.CustomEvent("test",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var t=function(e,t){var n,r;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},function(e,t,n){window.fetch||(window.fetch=n(7).default||n(7))},function(e,i,o){(function(e){var t=void 0!==e&&e||"undefined"!=typeof self&&self||window,n=Function.prototype.apply;function r(e,t){this._id=e,this._clearFn=t}i.setTimeout=function(){return new r(n.call(setTimeout,t,arguments),clearTimeout)},i.setInterval=function(){return new r(n.call(setInterval,t,arguments),clearInterval)},i.clearTimeout=i.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(t,this._id)},i.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},i.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},i._unrefActive=i.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;0<=t&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},o(23),i.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,i.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,o(4))},function(e,t,n){(function(e,p){!function(n,r){"use strict";if(!n.setImmediate){var i,o,t,a,e,s=1,c={},l=!1,u=n.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(n);f=f&&f.setTimeout?f:n,i="[object process]"==={}.toString.call(n.process)?function(e){p.nextTick(function(){h(e)})}:function(){if(n.postMessage&&!n.importScripts){var e=!0,t=n.onmessage;return n.onmessage=function(){e=!1},n.postMessage("","*"),n.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",e=function(e){e.source===n&&"string"==typeof e.data&&0===e.data.indexOf(a)&&h(+e.data.slice(a.length))},n.addEventListener?n.addEventListener("message",e,!1):n.attachEvent("onmessage",e),function(e){n.postMessage(a+e,"*")}):n.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){h(e.data)},function(e){t.port2.postMessage(e)}):u&&"onreadystatechange"in u.createElement("script")?(o=u.documentElement,function(e){var t=u.createElement("script");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):function(e){setTimeout(h,0,e)},f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n=this.height_;t!==this.active_&&(this.header_.dataset.mdState=(this.active_=t)?"shadow":"")}else this.height_=0,this.setup()},t.reset=function(){this.header_.dataset.mdState="",this.height_=0,this.active_=!1},e}(),Title:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement))throw new ReferenceError;if(this.el_=n,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLHeadingElement))throw new ReferenceError;this.header_=n,this.active_=!1}var t=e.prototype;return t.setup=function(){var t=this;Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},t.update=function(e){var t=this,n=window.pageYOffset>=this.header_.offsetTop;n!==this.active_&&(this.el_.dataset.mdState=(this.active_=n)?"active":""),"resize"!==e.type&&"orientationchange"!==e.type||Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.width="",this.active_=!1},e}()},o={Blur:function(){function e(e){this.els_="string"==typeof e?document.querySelectorAll(e):e,this.index_=0,this.offset_=window.pageYOffset,this.dir_=!1,this.anchors_=[].reduce.call(this.els_,function(e,t){var n=decodeURIComponent(t.hash);return e.concat(document.getElementById(n.substring(1))||[])},[])}var t=e.prototype;return t.setup=function(){this.update()},t.update=function(){var e=window.pageYOffset,t=this.offset_-e<0;if(this.dir_!==t&&(this.index_=this.index_=t?0:this.els_.length-1),0!==this.anchors_.length){if(this.offset_<=e)for(var n=this.index_+1;ne)){this.index_=r;break}0=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0},e}()},c=n(6),l=n.n(c);var u={Adapter:{GitHub:function(o){var e,t;function n(e){var t;t=o.call(this,e)||this;var n=/^.+github\.com\/([^/]+)\/?([^/]+)?.*$/.exec(t.base_);if(n&&3===n.length){var r=n[1],i=n[2];t.base_="https://api.github.com/users/"+r+"/repos",t.name_=i}return t}return t=o,(e=n).prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t,n.prototype.fetch_=function(){var i=this;return function n(r){return void 0===r&&(r=0),fetch(i.base_+"?per_page=30&page="+r).then(function(e){return e.json()}).then(function(e){if(!(e instanceof Array))throw new TypeError;if(i.name_){var t=e.find(function(e){return e.name===i.name_});return t||30!==e.length?t?[i.format_(t.stargazers_count)+" Stars",i.format_(t.forks_count)+" Forks"]:[]:n(r+1)}return[e.length+" Repositories"]})}()},n}(function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLAnchorElement))throw new ReferenceError;this.el_=t,this.base_=this.el_.href,this.salt_=this.hash_(this.base_)}var t=e.prototype;return t.fetch=function(){var n=this;return new Promise(function(t){var e=l.a.getJSON(n.salt_+".cache-source");void 0!==e?t(e):n.fetch_().then(function(e){l.a.set(n.salt_+".cache-source",e,{expires:1/96}),t(e)})})},t.fetch_=function(){throw new Error("fetch_(): Not implemented")},t.format_=function(e){return 1e4=this.el_.children[0].offsetTop+-43;e!==this.active_&&(this.el_.dataset.mdState=(this.active_=e)?"hidden":"")},t.reset=function(){this.el_.dataset.mdState="",this.active_=!1},e}()};t.a={Event:r,Header:i,Nav:o,Search:a,Sidebar:s,Source:u,Tabs:f}},function(t,e,n){(function(e){t.exports=e.lunr=n(25)}).call(this,n(4))},function(e,f,d){"use strict";(function(t){var e=d(8),n=setTimeout;function r(){}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],u(e,this)}function i(n,r){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,o._immediateFn(function(){var e=1===n._state?r.onFulfilled:r.onRejected;if(null!==e){var t;try{t=e(n._value)}catch(e){return void s(r.promise,e)}a(r.promise,t)}else(1===n._state?a:s)(r.promise,n._value)})):n._deferreds.push(r)}function a(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof o)return t._state=3,t._value=e,void c(t);if("function"==typeof n)return void u((r=n,i=e,function(){r.apply(i,arguments)}),t)}t._state=1,t._value=e,c(t)}catch(e){s(t,e)}var r,i}function s(e,t){e._state=2,e._value=t,c(e)}function c(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t"+n+""};this.stack_=[],n.forEach(function(e,t){var n,r=a.docs_.get(t),i=u.createElement("li",{class:"md-search-result__item"},u.createElement("a",{href:r.location,title:r.title,class:"md-search-result__link",tabindex:"-1"},u.createElement("article",{class:"md-search-result__article md-search-result__article--document"},u.createElement("h1",{class:"md-search-result__title"},{__html:r.title.replace(s,c)}),r.text.length?u.createElement("p",{class:"md-search-result__teaser"},{__html:r.text.replace(s,c)}):{}))),o=e.map(function(t){return function(){var e=a.docs_.get(t.ref);i.appendChild(u.createElement("a",{href:e.location,title:e.title,class:"md-search-result__link","data-md-rel":"anchor",tabindex:"-1"},u.createElement("article",{class:"md-search-result__article"},u.createElement("h1",{class:"md-search-result__title"},{__html:e.title.replace(s,c)}),e.text.length?u.createElement("p",{class:"md-search-result__teaser"},{__html:function(e,t){var n=t;if(e.length>n){for(;" "!==e[n]&&0<--n;);return e.substring(0,n)+"..."}return e}(e.text.replace(s,c),400)}):{})))}});(n=a.stack_).push.apply(n,[function(){return a.list_.appendChild(i)}].concat(o))});var i=this.el_.parentNode;if(!(i instanceof HTMLElement))throw new ReferenceError;for(;this.stack_.length&&i.offsetHeight>=i.scrollHeight-16;)this.stack_.shift()();var o=this.list_.querySelectorAll("[data-md-rel=anchor]");switch(Array.prototype.forEach.call(o,function(r){["click","keydown"].forEach(function(n){r.addEventListener(n,function(e){if("keydown"!==n||13===e.keyCode){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.checked&&(t.checked=!1,t.dispatchEvent(new CustomEvent("change"))),e.preventDefault(),setTimeout(function(){document.location.href=r.href},100)}})})}),n.size){case 0:this.meta_.textContent=this.message_.none;break;case 1:this.meta_.textContent=this.message_.one;break;default:this.meta_.textContent=this.message_.other.replace("#",n.size)}}}else{var l=function(e){a.docs_=e.reduce(function(e,t){var n,r,i,o=t.location.split("#"),a=o[0],s=o[1];return t.text=(n=t.text,r=document.createTextNode(n),(i=document.createElement("p")).appendChild(r),i.innerHTML),s&&(t.parent=e.get(a),t.parent&&!t.parent.done&&(t.parent.title=t.title,t.parent.text=t.text,t.parent.done=!0)),t.text=t.text.replace(/\n/g," ").replace(/\s+/g," ").replace(/\s+([,.:;!?])/g,function(e,t){return t}),t.parent&&t.parent.title===t.title||e.set(t.location,t),e},new Map);var i=a.docs_,o=a.lang_;a.stack_=[],a.index_=d()(function(){var e,t=this,n={"search.pipeline.trimmer":d.a.trimmer,"search.pipeline.stopwords":d.a.stopWordFilter},r=Object.keys(n).reduce(function(e,t){return h(t).match(/^false$/i)||e.push(n[t]),e},[]);this.pipeline.reset(),r&&(e=this.pipeline).add.apply(e,r),1===o.length&&"en"!==o[0]&&d.a[o[0]]?this.use(d.a[o[0]]):1=t.scrollHeight-16;)a.stack_.splice(0,10).forEach(function(e){return e()})})};setTimeout(function(){return"function"==typeof a.data_?a.data_().then(l):l(a.data_)},250)}},e}()}).call(this,i(3))},function(e,t,n){"use strict";var r=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(r,"\\$&")}},function(e,n,r){"use strict";(function(t){r.d(n,"a",function(){return e});var e=function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLElement))throw new ReferenceError;this.el_=t}return e.prototype.initialize=function(e){e.length&&this.el_.children.length&&this.el_.children[this.el_.children.length-1].appendChild(t.createElement("ul",{class:"md-source__facts"},e.map(function(e){return t.createElement("li",{class:"md-source__fact"},e)}))),this.el_.dataset.mdState="done"},e}()}).call(this,r(3))},,,function(e,n,c){"use strict";c.r(n),function(o){c.d(n,"app",function(){return t});c(15),c(16),c(17),c(18),c(19),c(20),c(21);var r=c(2),e=c(5),a=c.n(e),i=c(0);window.Promise=window.Promise||r.a;var s=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content};var t={initialize:function(t){new i.a.Event.Listener(document,"DOMContentLoaded",function(){if(!(document.body instanceof HTMLElement))throw new ReferenceError;Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)});var e=document.querySelectorAll("table:not([class])");if(Array.prototype.forEach.call(e,function(e){var t=o.createElement("div",{class:"md-typeset__scrollwrap"},o.createElement("div",{class:"md-typeset__table"}));e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.children[0].appendChild(e)}),a.a.isSupported()){var t=document.querySelectorAll(".codehilite > pre, pre > code");Array.prototype.forEach.call(t,function(e,t){var n="__code_"+t,r=o.createElement("button",{class:"md-clipboard",title:s("clipboard.copy"),"data-clipboard-target":"#"+n+" pre, #"+n+" code"},o.createElement("span",{class:"md-clipboard__message"})),i=e.parentNode;i.id=n,i.insertBefore(r,e)}),new a.a(".md-clipboard").on("success",function(e){var t=e.trigger.querySelector(".md-clipboard__message");if(!(t instanceof HTMLElement))throw new ReferenceError;e.clearSelection(),t.dataset.mdTimer&&clearTimeout(parseInt(t.dataset.mdTimer,10)),t.classList.add("md-clipboard__message--active"),t.innerHTML=s("clipboard.copied"),t.dataset.mdTimer=setTimeout(function(){t.classList.remove("md-clipboard__message--active"),t.dataset.mdTimer=""},2e3).toString()})}if(!Modernizr.details){var n=document.querySelectorAll("details > summary");Array.prototype.forEach.call(n,function(e){e.addEventListener("click",function(e){var t=e.target.parentNode;t.hasAttribute("open")?t.removeAttribute("open"):t.setAttribute("open","")})})}var r=function(){if(document.location.hash){var e=document.getElementById(document.location.hash.substring(1));if(!e)return;for(var t=e.parentNode;t&&!(t instanceof HTMLDetailsElement);)t=t.parentNode;if(t&&!t.open){t.open=!0;var n=location.hash;location.hash=" ",location.hash=n}}};if(window.addEventListener("hashchange",r),r(),Modernizr.ios){var i=document.querySelectorAll("[data-md-scrollfix]");Array.prototype.forEach.call(i,function(t){t.addEventListener("touchstart",function(){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)})})}}).listen(),new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Header.Shadow("[data-md-component=container]","[data-md-component=header]")).listen(),new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Header.Title("[data-md-component=title]",".md-typeset h1")).listen(),document.querySelector("[data-md-component=hero]")&&new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Tabs.Toggle("[data-md-component=hero]")).listen(),document.querySelector("[data-md-component=tabs]")&&new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Tabs.Toggle("[data-md-component=tabs]")).listen(),new i.a.Event.MatchMedia("(min-width: 1220px)",new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Sidebar.Position("[data-md-component=navigation]","[data-md-component=header]"))),document.querySelector("[data-md-component=toc]")&&new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Sidebar.Position("[data-md-component=toc]","[data-md-component=header]"))),new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener(window,"scroll",new i.a.Nav.Blur("[data-md-component=toc] .md-nav__link")));var e=document.querySelectorAll("[data-md-component=collapsible]");Array.prototype.forEach.call(e,function(e){new i.a.Event.MatchMedia("(min-width: 1220px)",new i.a.Event.Listener(e.previousElementSibling,"click",new i.a.Nav.Collapse(e)))}),new i.a.Event.MatchMedia("(max-width: 1219px)",new i.a.Event.Listener("[data-md-component=navigation] [data-md-toggle]","change",new i.a.Nav.Scrolling("[data-md-component=navigation] nav"))),document.querySelector("[data-md-component=search]")&&(new i.a.Event.MatchMedia("(max-width: 959px)",new i.a.Event.Listener("[data-md-toggle=search]","change",new i.a.Search.Lock("[data-md-toggle=search]"))),new i.a.Event.Listener("[data-md-component=query]",["focus","keyup","change"],new i.a.Search.Result("[data-md-component=result]",function(){return fetch(t.url.base+"/search/search_index.json",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e.docs.map(function(e){return e.location=t.url.base+"/"+e.location,e})})})).listen(),new i.a.Event.Listener("[data-md-component=reset]","click",function(){setTimeout(function(){var e=document.querySelector("[data-md-component=query]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.focus()},10)}).listen(),new i.a.Event.Listener("[data-md-toggle=search]","change",function(e){setTimeout(function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.focus()}},400,e.target)}).listen(),new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener("[data-md-component=query]","focus",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked||(e.checked=!0,e.dispatchEvent(new CustomEvent("change")))})),new i.a.Event.Listener(window,"keydown",function(e){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;var n=document.querySelector("[data-md-component=query]");if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(!(document.activeElement instanceof HTMLElement&&"true"===document.activeElement.contentEditable||e.metaKey||e.ctrlKey))if(t.checked){if(13===e.keyCode){if(n===document.activeElement){e.preventDefault();var r=document.querySelector("[data-md-component=search] [href][data-md-state=active]");r instanceof HTMLLinkElement&&(window.location=r.getAttribute("href"),t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur())}}else if(9===e.keyCode||27===e.keyCode)t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur();else if(-1!==[8,37,39].indexOf(e.keyCode))n!==document.activeElement&&n.focus();else if(-1!==[38,40].indexOf(e.keyCode)){var i=e.keyCode,o=Array.prototype.slice.call(document.querySelectorAll("[data-md-component=query], [data-md-component=search] [href]")),a=o.find(function(e){if(!(e instanceof HTMLElement))throw new ReferenceError;return"active"===e.dataset.mdState});a&&(a.dataset.mdState="");var s=Math.max(0,(o.indexOf(a)+o.length+(38===i?-1:1))%o.length);return o[s]&&(o[s].dataset.mdState="active",o[s].focus()),e.preventDefault(),e.stopPropagation(),!1}}else document.activeElement&&!document.activeElement.form&&(70!==e.keyCode&&83!==e.keyCode||(n.focus(),e.preventDefault()))}).listen(),new i.a.Event.Listener(window,"keypress",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t!==document.activeElement&&t.focus()}}).listen()),new i.a.Event.Listener(document.body,"keydown",function(e){if(9===e.keyCode){var t=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[for]:not([tabindex])");Array.prototype.forEach.call(t,function(e){e.offsetHeight&&(e.tabIndex=0)})}}).listen(),new i.a.Event.Listener(document.body,"mousedown",function(){var e=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[tabindex]");Array.prototype.forEach.call(e,function(e){e.removeAttribute("tabIndex")})}).listen(),document.body.addEventListener("click",function(){"tabbing"===document.body.dataset.mdState&&(document.body.dataset.mdState="")}),new i.a.Event.MatchMedia("(max-width: 959px)",new i.a.Event.Listener("[data-md-component=navigation] [href^='#']","click",function(){var e=document.querySelector("[data-md-toggle=drawer]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked&&(e.checked=!1,e.dispatchEvent(new CustomEvent("change")))})),function(){var e=document.querySelector("[data-md-source]");if(!e)return r.a.resolve([]);if(!(e instanceof HTMLAnchorElement))throw new ReferenceError;switch(e.dataset.mdSource){case"github":return new i.a.Source.Adapter.GitHub(e).fetch();default:return r.a.resolve([])}}().then(function(t){var e=document.querySelectorAll("[data-md-source]");Array.prototype.forEach.call(e,function(e){new i.a.Source.Repository(e).initialize(t)})});var n=function(){var e=document.querySelectorAll("details");Array.prototype.forEach.call(e,function(e){e.setAttribute("open","")})};new i.a.Event.MatchMedia("print",{listen:n,unlisten:function(){}}),window.onbeforeprint=n}}}.call(this,c(3))},function(e,t,n){e.exports=n.p+"assets/images/icons/bitbucket.1b09e088.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/github.f0b8504a.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/gitlab.6dd19c00.svg"},function(e,t){e.exports="/home/travis/build/squidfunk/mkdocs-material/material/application.3020aac5.css"},function(e,t){e.exports="/home/travis/build/squidfunk/mkdocs-material/material/application-palette.224b79ff.css"},function(e,t){!function(){if("undefined"!=typeof window)try{var e=new window.CustomEvent("test",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var t=function(e,t){var n,r;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},function(e,t,n){window.fetch||(window.fetch=n(7).default||n(7))},function(e,i,o){(function(e){var t=void 0!==e&&e||"undefined"!=typeof self&&self||window,n=Function.prototype.apply;function r(e,t){this._id=e,this._clearFn=t}i.setTimeout=function(){return new r(n.call(setTimeout,t,arguments),clearTimeout)},i.setInterval=function(){return new r(n.call(setInterval,t,arguments),clearInterval)},i.clearTimeout=i.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(t,this._id)},i.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},i.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},i._unrefActive=i.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;0<=t&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},o(23),i.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,i.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,o(4))},function(e,t,n){(function(e,p){!function(n,r){"use strict";if(!n.setImmediate){var i,o,t,a,e,s=1,c={},l=!1,u=n.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(n);f=f&&f.setTimeout?f:n,i="[object process]"==={}.toString.call(n.process)?function(e){p.nextTick(function(){h(e)})}:function(){if(n.postMessage&&!n.importScripts){var e=!0,t=n.onmessage;return n.onmessage=function(){e=!1},n.postMessage("","*"),n.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",e=function(e){e.source===n&&"string"==typeof e.data&&0===e.data.indexOf(a)&&h(+e.data.slice(a.length))},n.addEventListener?n.addEventListener("message",e,!1):n.attachEvent("onmessage",e),function(e){n.postMessage(a+e,"*")}):n.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){h(e.data)},function(e){t.port2.postMessage(e)}):u&&"onreadystatechange"in u.createElement("script")?(o=u.documentElement,function(e){var t=u.createElement("script");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):function(e){setTimeout(h,0,e)},f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n=this.length)return D.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},D.QueryLexer.prototype.width=function(){return this.pos-this.start},D.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},D.QueryLexer.prototype.backup=function(){this.pos-=1},D.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=D.QueryLexer.EOS&&this.backup()},D.QueryLexer.prototype.more=function(){return this.pos=this.length)return D.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},D.QueryLexer.prototype.width=function(){return this.pos-this.start},D.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},D.QueryLexer.prototype.backup=function(){this.pos-=1},D.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=D.QueryLexer.EOS&&this.backup()},D.QueryLexer.prototype.more=function(){return this.pos=_.limit||(_.cursor++,!1)}function w(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function b(){return i<=_.cursor}function p(){return e<=_.cursor}function g(){var r=_.limit-_.cursor;_.find_among_b(t,3)&&(_.cursor=_.limit-r,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function h(){var r;u=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.slice_del(),u=!0,g())))}function k(){var r;b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.eq_s_b(3,"gem")||(_.cursor=_.limit-r,_.slice_del(),g())))}this.setCurrent=function(r){_.setCurrent(r)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var r=_.cursor;return function(){for(var r,e,i,n=_.cursor;;){if(_.bra=_.cursor,r=_.find_among(o,11))switch(_.ket=_.cursor,r){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(e=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=e);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=e;else if(s(e))break}else if(s(e))break}(),_.cursor=r,i=_.limit,e=i,w()||((i=_.cursor)<3&&(i=3),w()||(e=_.cursor)),_.limit_backward=r,_.cursor=_.limit,function(){var r,e,i,n,o,t,s=_.limit-_.cursor;if(_.ket=_.cursor,r=_.find_among_b(c,5))switch(_.bra=_.cursor,r){case 1:b()&&_.slice_from("heid");break;case 2:k();break;case 3:b()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-s,h(),_.cursor=_.limit-s,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,p()&&(e=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-e,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,k())))),_.cursor=_.limit-s,_.ket=_.cursor,r=_.find_among_b(a,6))switch(_.bra=_.cursor,r){case 1:if(p()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,p()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,g()}break;case 2:p()&&(o=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-o,_.slice_del()));break;case 3:p()&&(_.slice_del(),h());break;case 4:p()&&_.slice_del();break;case 5:p()&&u&&_.slice_del()}_.cursor=_.limit-s,_.out_grouping_b(d,73,232)&&(t=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-t,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var r;;)if(_.bra=_.cursor,r=_.find_among(n,3))switch(_.ket=_.cursor,r){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}),r.Pipeline.registerFunction(r.du.stemmer,"stemmer-du"),r.du.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,q,r;console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=(v=e.stemmerSupport.Among,q=e.stemmerSupport.SnowballProgram,r=new function(){var r,i,u,o=[new v("",-1,6),new v("á",0,1),new v("ä",0,1),new v("é",0,2),new v("ë",0,2),new v("í",0,3),new v("ï",0,3),new v("ó",0,4),new v("ö",0,4),new v("ú",0,5),new v("ü",0,5)],n=[new v("",-1,3),new v("I",0,2),new v("Y",0,1)],t=[new v("dd",-1,-1),new v("kk",-1,-1),new v("tt",-1,-1)],c=[new v("ene",-1,2),new v("se",-1,3),new v("en",-1,2),new v("heden",2,1),new v("s",-1,3)],a=[new v("end",-1,1),new v("ig",-1,2),new v("ing",-1,1),new v("lijk",-1,3),new v("baar",-1,4),new v("bar",-1,5)],l=[new v("aa",-1,-1),new v("ee",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1)],m=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],d=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],f=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],_=new q;function s(e){return(_.cursor=e)>=_.limit||(_.cursor++,!1)}function w(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function b(){return i<=_.cursor}function p(){return r<=_.cursor}function g(){var e=_.limit-_.cursor;_.find_among_b(t,3)&&(_.cursor=_.limit-e,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function h(){var e;u=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,b()&&(e=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-e,_.slice_del(),u=!0,g())))}function k(){var e;b()&&(e=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-e,_.eq_s_b(3,"gem")||(_.cursor=_.limit-e,_.slice_del(),g())))}this.setCurrent=function(e){_.setCurrent(e)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var e=_.cursor;return function(){for(var e,r,i,n=_.cursor;;){if(_.bra=_.cursor,e=_.find_among(o,11))switch(_.ket=_.cursor,e){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(r=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=r);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=r;else if(s(r))break}else if(s(r))break}(),_.cursor=e,i=_.limit,r=i,w()||((i=_.cursor)<3&&(i=3),w()||(r=_.cursor)),_.limit_backward=e,_.cursor=_.limit,function(){var e,r,i,n,o,t,s=_.limit-_.cursor;if(_.ket=_.cursor,e=_.find_among_b(c,5))switch(_.bra=_.cursor,e){case 1:b()&&_.slice_from("heid");break;case 2:k();break;case 3:b()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-s,h(),_.cursor=_.limit-s,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,p()&&(r=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-r,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,k())))),_.cursor=_.limit-s,_.ket=_.cursor,e=_.find_among_b(a,6))switch(_.bra=_.cursor,e){case 1:if(p()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,p()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,g()}break;case 2:p()&&(o=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-o,_.slice_del()));break;case 3:p()&&(_.slice_del(),h());break;case 4:p()&&_.slice_del();break;case 5:p()&&u&&_.slice_del()}_.cursor=_.limit-s,_.out_grouping_b(d,73,232)&&(t=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-t,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var e;;)if(_.bra=_.cursor,e=_.find_among(n,3))switch(_.ket=_.cursor,e){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file diff --git a/docs/assets/javascripts/lunr/lunr.ja.js b/docs/assets/javascripts/lunr/lunr.ja.js new file mode 100644 index 0000000..69f6202 --- /dev/null +++ b/docs/assets/javascripts/lunr/lunr.ja.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(m){if(void 0===m)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===m.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var l="2"==m.version[0];m.ja=function(){this.pipeline.reset(),this.pipeline.add(m.ja.trimmer,m.ja.stopWordFilter,m.ja.stemmer),l?this.tokenizer=m.ja.tokenizer:(m.tokenizer&&(m.tokenizer=m.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=m.ja.tokenizer))};var j=new m.TinySegmenter;m.ja.tokenizer=function(e){var r,t,i,n,o,s,p,a,u;if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return l?new m.Token(e.toLowerCase()):e.toLowerCase()});for(r=(t=e.toString().toLowerCase().replace(/^\s+/,"")).length-1;0<=r;r--)if(/\S/.test(t.charAt(r))){t=t.substring(0,r+1);break}for(o=[],i=t.length,p=a=0;a<=i;a++)if(s=a-p,t.charAt(a).match(/\s/)||a==i){if(0=_.limit||(_.cursor++,!1)}function w(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function b(){return i<=_.cursor}function p(){return e<=_.cursor}function g(){var r=_.limit-_.cursor;_.find_among_b(t,3)&&(_.cursor=_.limit-r,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function h(){var r;u=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.slice_del(),u=!0,g())))}function k(){var r;b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.eq_s_b(3,"gem")||(_.cursor=_.limit-r,_.slice_del(),g())))}this.setCurrent=function(r){_.setCurrent(r)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var r=_.cursor;return function(){for(var r,e,i,n=_.cursor;;){if(_.bra=_.cursor,r=_.find_among(o,11))switch(_.ket=_.cursor,r){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(e=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=e);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=e;else if(s(e))break}else if(s(e))break}(),_.cursor=r,i=_.limit,e=i,w()||((i=_.cursor)<3&&(i=3),w()||(e=_.cursor)),_.limit_backward=r,_.cursor=_.limit,function(){var r,e,i,n,o,t,s=_.limit-_.cursor;if(_.ket=_.cursor,r=_.find_among_b(c,5))switch(_.bra=_.cursor,r){case 1:b()&&_.slice_from("heid");break;case 2:k();break;case 3:b()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-s,h(),_.cursor=_.limit-s,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,p()&&(e=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-e,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,k())))),_.cursor=_.limit-s,_.ket=_.cursor,r=_.find_among_b(a,6))switch(_.bra=_.cursor,r){case 1:if(p()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,p()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,g()}break;case 2:p()&&(o=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-o,_.slice_del()));break;case 3:p()&&(_.slice_del(),h());break;case 4:p()&&_.slice_del();break;case 5:p()&&u&&_.slice_del()}_.cursor=_.limit-s,_.out_grouping_b(d,73,232)&&(t=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-t,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var r;;)if(_.bra=_.cursor,r=_.find_among(n,3))switch(_.ket=_.cursor,r){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}}); \ No newline at end of file diff --git a/docs/assets/javascripts/lunr/lunr.th.js b/docs/assets/javascripts/lunr/lunr.th.js new file mode 100644 index 0000000..ee8ef37 --- /dev/null +++ b/docs/assets/javascripts/lunr/lunr.th.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(t){if(void 0===t)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===t.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==t.version[0];t.th=function(){this.pipeline.reset(),this.pipeline.add(t.th.trimmer),i?this.tokenizer=t.th.tokenizer:(t.tokenizer&&(t.tokenizer=t.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=t.th.tokenizer))},t.th.wordCharacters="[฀-๿]",t.th.trimmer=t.trimmerSupport.generateTrimmer(t.th.wordCharacters),t.Pipeline.registerFunction(t.th.trimmer,"trimmer-th");var n=t.wordcut;n.init(),t.th.tokenizer=function(e){if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return i?new t.Token(e):e});var r=e.toString().replace(/^\s+/,"");return n.cut(r).split("|")}}}); \ No newline at end of file diff --git a/docs/assets/javascripts/lunr/wordcut.js b/docs/assets/javascripts/lunr/wordcut.js new file mode 100644 index 0000000..179792a --- /dev/null +++ b/docs/assets/javascripts/lunr/wordcut.js @@ -0,0 +1 @@ +!function(n){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var t;((t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).lunr||(t.lunr={})).wordcut=n()}}(function(){return function o(s,a,c){function u(e,n){if(!a[e]){if(!s[e]){var t="function"==typeof require&&require;if(!n&&t)return t(e,!0);if(l)return l(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[e]={exports:{}};s[e][0].call(i.exports,function(n){var t=s[e][1][n];return u(t||n)},i,i.exports,o,s,a,c)}return a[e].exports}for(var l="function"==typeof require&&require,n=0;ne&&(this._events[n].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[n].length),"function"==typeof console.trace&&console.trace()));return this},r.prototype.once=function(n,t){if(!a(t))throw TypeError("listener must be a function");var e=!1;function r(){this.removeListener(n,r),e||(e=!0,t.apply(this,arguments))}return r.listener=t,this.on(n,r),this},r.prototype.removeListener=function(n,t){var e,r,i,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[n])return this;if(i=(e=this._events[n]).length,r=-1,e===t||a(e.listener)&&e.listener===t)delete this._events[n],this._events.removeListener&&this.emit("removeListener",n,t);else if(c(e)){for(o=i;0this.maxLength)return i();if(!this.stat&&p(this.cache,o)){var t=this.cache[o];if(Array.isArray(t)&&(t="DIR"),!n||"DIR"===t)return i(null,t);if(n&&"FILE"===t)return i()}var e=this.statCache[o];if(void 0!==e){if(!1===e)return i(null,e);var s=e.isDirectory()?"DIR":"FILE";return n&&"FILE"===s?i():i(null,s,e)}var a=this,c=d("stat\0"+o,function(n,e){{if(e&&e.isSymbolicLink())return u.stat(o,function(n,t){n?a._stat2(r,o,null,e,i):a._stat2(r,o,n,t,i)});a._stat2(r,o,n,e,i)}});c&&u.lstat(o,c)},b.prototype._stat2=function(n,t,e,r,i){if(e)return this.statCache[t]=!1,i();var o="/"===n.slice(-1);if(this.statCache[t]=r,"/"===t.slice(-1)&&!r.isDirectory())return i(null,!1,r);var s=r.isDirectory()?"DIR":"FILE";return this.cache[t]=this.cache[t]||s,o&&"DIR"!==s?i():i(null,s,r)}}).call(this,_("_process"))},{"./common.js":15,"./sync.js":17,_process:24,assert:9,events:14,fs:12,inflight:18,inherits:19,minimatch:20,once:21,path:22,"path-is-absolute":23,util:28}],17:[function(e,r,n){(function(i){(r.exports=n).GlobSync=h;var s=e("fs"),c=e("minimatch"),g=(c.Minimatch,e("./glob.js").Glob,e("util"),e("path")),u=e("assert"),l=e("path-is-absolute"),t=e("./common.js"),o=(t.alphasort,t.alphasorti,t.setopts),a=t.ownProp,f=t.childrenIgnored;function n(n,t){if("function"==typeof t||3===arguments.length)throw new TypeError("callback provided to sync glob\nSee: https://github.com/isaacs/node-glob/issues/167");return new h(n,t).found}function h(n,t){if(!n)throw new Error("must provide pattern");if("function"==typeof t||3===arguments.length)throw new TypeError("callback provided to sync glob\nSee: https://github.com/isaacs/node-glob/issues/167");if(!(this instanceof h))return new h(n,t);if(o(this,n,t),this.noprocess)return this;var e=this.minimatch.set.length;this.matches=new Array(e);for(var r=0;rthis.maxLength)return!1;if(!this.stat&&a(this.cache,t)){var r=this.cache[t];if(Array.isArray(r)&&(r="DIR"),!e||"DIR"===r)return r;if(e&&"FILE"===r)return!1}var i=this.statCache[t];if(!i){var o;try{o=s.lstatSync(t)}catch(n){return!1}if(o.isSymbolicLink())try{i=s.statSync(t)}catch(n){i=o}else i=o}r=(this.statCache[t]=i).isDirectory()?"DIR":"FILE";return this.cache[t]=this.cache[t]||r,(!e||"DIR"===r)&&r},h.prototype._mark=function(n){return t.mark(this,n)},h.prototype._makeAbs=function(n){return t.makeAbs(this,n)}}).call(this,e("_process"))},{"./common.js":15,"./glob.js":16,_process:24,assert:9,fs:12,minimatch:20,path:22,"path-is-absolute":23,util:28}],18:[function(t,r,n){(function(s){var n=t("wrappy"),a=Object.create(null),e=t("once");r.exports=n(function(n,t){return a[n]?(a[n].push(t),null):(a[n]=[t],o=n,e(function n(){var t=a[o],e=t.length,r=function(n){for(var t=n.length,e=[],r=0;re?(t.splice(0,e),s.nextTick(function(){n.apply(null,r)})):delete a[o]}}));var o})}).call(this,t("_process"))},{_process:24,once:21,wrappy:29}],19:[function(n,t,e){"function"==typeof Object.create?t.exports=function(n,t){n.super_=t,n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(n,t){n.super_=t;var e=function(){};e.prototype=t.prototype,n.prototype=new e,n.prototype.constructor=n}},{}],20:[function(n,t,e){(t.exports=s).Minimatch=i;var u={sep:"/"};try{u=n("path")}catch(n){}var M=s.GLOBSTAR=i.GLOBSTAR={},r=n("brace-expansion"),C={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},P="[^/]",z=P+"*?",B="().*{}+?[]^$\\!".split("").reduce(function(n,t){return n[t]=!0,n},{});var l=/\/+/;function o(t,e){t=t||{},e=e||{};var r={};return Object.keys(e).forEach(function(n){r[n]=e[n]}),Object.keys(t).forEach(function(n){r[n]=t[n]}),r}function s(n,t,e){if("string"!=typeof t)throw new TypeError("glob pattern string required");return e||(e={}),!(!e.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===n:new i(t,e).match(n))}function i(n,t){if(!(this instanceof i))return new i(n,t);if("string"!=typeof n)throw new TypeError("glob pattern string required");t||(t={}),n=n.trim(),"/"!==u.sep&&(n=n.split(u.sep).join("/")),this.options=t,this.set=[],this.pattern=n,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function a(n,t){if(t||(t=this instanceof i?this.options:{}),void 0===(n=void 0===n?this.pattern:n))throw new TypeError("undefined pattern");return t.nobrace||!n.match(/\{.*\}/)?[n]:r(n)}s.filter=function(r,i){return i=i||{},function(n,t,e){return s(n,r,i)}},s.defaults=function(r){if(!r||!Object.keys(r).length)return s;var i=s,n=function(n,t,e){return i.minimatch(n,t,o(r,e))};return n.Minimatch=function(n,t){return new i.Minimatch(n,o(r,t))},n},i.defaults=function(n){return n&&Object.keys(n).length?s.defaults(n).Minimatch:i},i.prototype.debug=function(){},i.prototype.make=function(){if(this._made)return;var n=this.pattern,t=this.options;if(!t.nocomment&&"#"===n.charAt(0))return void(this.comment=!0);if(!n)return void(this.empty=!0);this.parseNegate();var e=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,e),e=this.globParts=e.map(function(n){return n.split(l)}),this.debug(this.pattern,e),e=e.map(function(n,t,e){return n.map(this.parse,this)},this),this.debug(this.pattern,e),e=e.filter(function(n){return-1===n.indexOf(!1)}),this.debug(this.pattern,e),this.set=e},i.prototype.parseNegate=function(){var n=this.pattern,t=!1,e=this.options,r=0;if(e.nonegate)return;for(var i=0,o=n.length;i>> no match, partial?",n,f,t,h),f!==s))}if("string"==typeof u?(c=r.nocase?l.toLowerCase()===u.toLowerCase():l===u,this.debug("string match",u,l,c)):(c=l.match(u),this.debug("pattern match",u,l,c)),!c)return!1}if(i===s&&o===a)return!0;if(i===s)return e;if(o===a)return i===s-1&&""===n[i];throw new Error("wtf?")}},{"brace-expansion":11,path:22}],21:[function(n,t,e){var r=n("wrappy");function i(n){var t=function(){return t.called?t.value:(t.called=!0,t.value=n.apply(this,arguments))};return t.called=!1,t}function o(n){var t=function(){if(t.called)throw new Error(t.onceError);return t.called=!0,t.value=n.apply(this,arguments)},e=n.name||"Function wrapped with `once`";return t.onceError=e+" shouldn't be called more than once",t.called=!1,t}t.exports=r(i),t.exports.strict=r(o),i.proto=i(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return i(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return o(this)},configurable:!0})})},{wrappy:29}],22:[function(n,t,u){(function(i){function o(n,t){for(var e=0,r=n.length-1;0<=r;r--){var i=n[r];"."===i?n.splice(r,1):".."===i?(n.splice(r,1),e++):e&&(n.splice(r,1),e--)}if(t)for(;e--;e)n.unshift("..");return n}var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(n){return t.exec(n).slice(1)};function a(n,t){if(n.filter)return n.filter(t);for(var e=[],r=0;r":">",'"':""","'":"'","`":"`"},D=d.invert(N),F=function(t){var e=function(n){return t[n]},n="(?:"+d.keys(t).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(n){return n=null==n?"":""+n,r.test(n)?n.replace(i,e):n}};d.escape=F(N),d.unescape=F(D),d.result=function(n,t,e){var r=null==n?void 0:n[t];return void 0===r&&(r=e),d.isFunction(r)?r.call(n):r};var M=0;d.uniqueId=function(n){var t=++M+"";return n?n+t:t},d.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var C=/(.)^/,P={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},z=/\\|'|\r|\n|\u2028|\u2029/g,B=function(n){return"\\"+P[n]};d.template=function(o,n,t){!n&&t&&(n=t),n=d.defaults({},n,d.templateSettings);var e=RegExp([(n.escape||C).source,(n.interpolate||C).source,(n.evaluate||C).source].join("|")+"|$","g"),s=0,a="__p+='";o.replace(e,function(n,t,e,r,i){return a+=o.slice(s,i).replace(z,B),s=i+n.length,t?a+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?a+="'+\n((__t=("+e+"))==null?'':__t)+\n'":r&&(a+="';\n"+r+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{var r=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}var i=function(n){return r.call(this,n,d)},c=n.variable||"obj";return i.source="function("+c+"){\n"+a+"}",i},d.chain=function(n){var t=d(n);return t._chain=!0,t};var U=function(n,t){return n._chain?d(t).chain():t};d.mixin=function(e){d.each(d.functions(e),function(n){var t=d[n]=e[n];d.prototype[n]=function(){var n=[this._wrapped];return i.apply(n,arguments),U(this,t.apply(d,n))}})},d.mixin(d),d.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=r[t];d.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],U(this,n)}}),d.each(["concat","join","slice"],function(n){var t=r[n];d.prototype[n]=function(){return U(this,t.apply(this._wrapped,arguments))}}),d.prototype.value=function(){return this._wrapped},d.prototype.valueOf=d.prototype.toJSON=d.prototype.value,d.prototype.toString=function(){return""+this._wrapped}}).call(this)},{}],26:[function(n,t,e){arguments[4][19][0].apply(e,arguments)},{dup:19}],27:[function(n,t,e){t.exports=function(n){return n&&"object"==typeof n&&"function"==typeof n.copy&&"function"==typeof n.fill&&"function"==typeof n.readUInt8}},{}],28:[function(h,n,k){(function(r,i){var a=/%[sdj%]/g;k.format=function(n){if(!_(n)){for(var t=[],e=0;e.admonition-title:before,.md-typeset .admonition>summary:before,.md-typeset .critic.comment:before,.md-typeset .footnote-backref,.md-typeset .task-list-control .task-list-indicator:before,.md-typeset details>.admonition-title:before,.md-typeset details>summary:before,.md-typeset summary:after{font-family:Material Icons;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-content__icon,.md-footer-nav__button,.md-header-nav__button,.md-nav__button,.md-nav__title:before,.md-search-result__article--document:before{display:inline-block;margin:.2rem;padding:.4rem;font-size:1.2rem;cursor:pointer}.md-icon--arrow-back:before{content:""}.md-icon--arrow-forward:before{content:""}.md-icon--menu:before{content:""}.md-icon--search:before{content:""}[dir=rtl] .md-icon--arrow-back:before{content:""}[dir=rtl] .md-icon--arrow-forward:before{content:""}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";font-family:Helvetica Neue,Helvetica,Arial,sans-serif}code,kbd,pre{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern";font-feature-settings:"kern";font-family:Courier New,Courier,monospace}.md-typeset{font-size:.8rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset blockquote,.md-typeset ol,.md-typeset p,.md-typeset ul{margin:1em 0}.md-typeset h1{margin:0 0 2rem;color:rgba(0,0,0,.54);font-size:1.5625rem;line-height:1.3}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{margin:2rem 0 .8rem;font-size:1.25rem;line-height:1.4}.md-typeset h3{margin:1.6rem 0 .8rem;font-size:1rem;font-weight:400;letter-spacing:-.01em;line-height:1.5}.md-typeset h2+h3{margin-top:.8rem}.md-typeset h4{font-size:.8rem}.md-typeset h4,.md-typeset h5,.md-typeset h6{margin:.8rem 0;font-weight:700;letter-spacing:-.01em}.md-typeset h5,.md-typeset h6{color:rgba(0,0,0,.54);font-size:.64rem}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.05rem dotted rgba(0,0,0,.26)}.md-typeset a{color:#3f51b5;word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color .125s}.md-typeset a:active,.md-typeset a:hover{color:#536dfe}.md-typeset code,.md-typeset pre{background-color:hsla(0,0%,92.5%,.5);color:#37474f;font-size:85%;direction:ltr}.md-typeset code{margin:0 .29412em;padding:.07353em 0;border-radius:.1rem;box-shadow:.29412em 0 0 hsla(0,0%,92.5%,.5),-.29412em 0 0 hsla(0,0%,92.5%,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:initial;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{position:relative;margin:1em 0;border-radius:.1rem;line-height:1.4;-webkit-overflow-scrolling:touch}.md-typeset pre>code{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:slice;box-decoration-break:slice;overflow:auto}.md-typeset pre>code::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset kbd{padding:0 .29412em;border-radius:.15rem;border:.05rem solid #c9c9c9;border-bottom-color:#bcbcbc;background-color:#fcfcfc;color:#555;font-size:85%;box-shadow:0 .05rem 0 #b0b0b0;word-break:break-word}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.05rem dotted rgba(0,0,0,.54);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sub,.md-typeset sup{margin-left:.07812em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.07812em;margin-left:0}.md-typeset blockquote{padding-left:.6rem;border-left:.2rem solid rgba(0,0,0,.26);color:rgba(0,0,0,.54)}[dir=rtl] .md-typeset blockquote{padding-right:.6rem;padding-left:0;border-right:.2rem solid rgba(0,0,0,.26);border-left:initial}.md-typeset ul{list-style-type:disc}.md-typeset ol,.md-typeset ul{margin-left:.625em;padding:0}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em;margin-left:0}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em;margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em;margin-left:0}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin:.5em 0 .5em .625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em;margin-left:0}.md-typeset dd{margin:1em 0 1em 1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em;margin-left:0}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:inline-block;max-width:100%;border-radius:.1rem;font-size:.64rem;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{min-width:5rem;padding:.6rem .8rem;background-color:rgba(0,0,0,.54);color:#fff;vertical-align:top}.md-typeset table:not([class]) td{padding:.6rem .8rem;border-top:.05rem solid rgba(0,0,0,.07);vertical-align:top}.md-typeset table:not([class]) tr{transition:background-color .125s}.md-typeset table:not([class]) tr:hover{background-color:rgba(0,0,0,.035);box-shadow:inset 0 .05rem 0 #fff}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{font-size:125%;overflow-x:hidden}body,html{height:100%}body{position:relative;font-size:.5rem}hr{display:block;height:.05rem;padding:0;border:0}.md-svg{display:none}.md-grid{max-width:61rem;margin-right:auto;margin-left:auto}.md-container,.md-main{overflow:auto}.md-container{display:table;width:100%;height:100%;padding-top:2.4rem;table-layout:fixed}.md-main{display:table-row;height:100%}.md-main__inner{height:100%;padding-top:1.5rem;padding-bottom:.05rem}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);opacity:0;z-index:3}.md-flex{display:table}.md-flex__cell{display:table-cell;position:relative;vertical-align:top}.md-flex__cell--shrink{width:0}.md-flex__cell--stretch{display:table;width:100%;table-layout:fixed}.md-flex__ellipsis{display:table-cell;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-skip{position:fixed;width:.05rem;height:.05rem;margin:.5rem;padding:.3rem .5rem;-webkit-transform:translateY(.4rem);transform:translateY(.4rem);border-radius:.1rem;background-color:rgba(0,0,0,.87);color:#fff;font-size:.64rem;opacity:0;overflow:hidden}.md-skip:focus{width:auto;height:auto;clip:auto;-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1;z-index:10}@page{margin:25mm}.md-clipboard{position:absolute;top:.3rem;right:.3rem;width:1.4rem;height:1.4rem;border-radius:.1rem;font-size:.8rem;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-clipboard:before{transition:color .25s,opacity .25s;color:rgba(0,0,0,.07);content:"\E14D"}.codehilite:hover .md-clipboard:before,.md-typeset .highlight:hover .md-clipboard:before,pre:hover .md-clipboard:before{color:rgba(0,0,0,.54)}.md-clipboard:focus:before,.md-clipboard:hover:before{color:#536dfe}.md-clipboard__message{display:block;position:absolute;top:0;right:1.7rem;padding:.3rem .5rem;-webkit-transform:translateX(.4rem);transform:translateX(.4rem);transition:opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);transition:transform .25s cubic-bezier(.9,.1,.9,0),opacity .175s;transition:transform .25s cubic-bezier(.9,.1,.9,0),opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);border-radius:.1rem;background-color:rgba(0,0,0,.54);color:#fff;font-size:.64rem;white-space:nowrap;opacity:0;pointer-events:none}.md-clipboard__message--active{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1;pointer-events:auto}.md-clipboard__message:before{content:attr(aria-label)}.md-clipboard__message:after{display:block;position:absolute;top:50%;right:-.2rem;width:0;margin-top:-.2rem;border-color:transparent rgba(0,0,0,.54);border-style:solid;border-width:.2rem 0 .2rem .2rem;content:""}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}.md-content__inner:before{display:block;height:.4rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__icon{position:relative;margin:.4rem 0;padding:0;float:right}.md-typeset .md-content__icon{color:rgba(0,0,0,.26)}.md-header{position:fixed;top:0;right:0;left:0;height:2.4rem;transition:background-color .25s,color .25s;background-color:#3f51b5;color:#fff;box-shadow:none;z-index:2;-webkit-backface-visibility:hidden;backface-visibility:hidden}.no-js .md-header{transition:none;box-shadow:none}.md-header[data-md-state=shadow]{transition:background-color .25s,color .25s,box-shadow .25s;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.md-header-nav{padding:0 .2rem}.md-header-nav__button{position:relative;transition:opacity .25s;z-index:1}.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo *{display:block}.no-js .md-header-nav__button.md-icon--search{display:none}.md-header-nav__topic{display:block;position:absolute;transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(1.25rem);transform:translateX(1.25rem);transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(-1.25rem);transform:translateX(-1.25rem)}.no-js .md-header-nav__topic{position:static}.no-js .md-header-nav__topic+.md-header-nav__topic{display:none}.md-header-nav__title{padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-header-nav__title[data-md-state=active] .md-header-nav__topic{-webkit-transform:translateX(-1.25rem);transform:translateX(-1.25rem);transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic{-webkit-transform:translateX(1.25rem);transform:translateX(1.25rem)}.md-header-nav__title[data-md-state=active] .md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:1;z-index:0;pointer-events:auto}.md-header-nav__source{display:none}.md-hero{transition:background .25s;background-color:#3f51b5;color:#fff;font-size:1rem;overflow:hidden}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition-delay:.1s}[data-md-state=hidden] .md-hero__inner{pointer-events:none;-webkit-transform:translateY(.625rem);transform:translateY(.625rem);transition:opacity .1s 0s,-webkit-transform 0s .4s;transition:transform 0s .4s,opacity .1s 0s;transition:transform 0s .4s,opacity .1s 0s,-webkit-transform 0s .4s;opacity:0}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}.md-footer-nav{background-color:rgba(0,0,0,.87);color:#fff}.md-footer-nav__inner{padding:.2rem;overflow:auto}.md-footer-nav__link{padding-top:1.4rem;padding-bottom:.4rem;transition:opacity .25s}.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}[dir=rtl] .md-footer-nav__link--prev{float:right}.md-footer-nav__link--next{width:75%;float:right;text-align:right}[dir=rtl] .md-footer-nav__link--next{float:left;text-align:left}.md-footer-nav__button{transition:background .25s}.md-footer-nav__title{position:relative;padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-1rem;padding:0 1rem;color:hsla(0,0%,100%,.7);font-size:.75rem}.md-footer-meta{background-color:rgba(0,0,0,.895)}.md-footer-meta__inner{padding:.2rem;overflow:auto}html .md-footer-meta.md-typeset a{color:hsla(0,0%,100%,.7)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:#fff}.md-footer-copyright{margin:0 .6rem;padding:.4rem 0;color:hsla(0,0%,100%,.3);font-size:.64rem}.md-footer-copyright__highlight{color:hsla(0,0%,100%,.7)}.md-footer-social{margin:0 .4rem;padding:.2rem 0 .6rem}.md-footer-social__link{display:inline-block;width:1.6rem;height:1.6rem;font-size:.8rem;text-align:center}.md-footer-social__link:before{line-height:1.9}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;padding:0 .6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title:before{display:none;content:"\E5C4"}[dir=rtl] .md-nav__title:before{content:"\E5C8"}.md-nav__title .md-nav__button{display:none}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 .6rem}.md-nav__item:last-child{padding-bottom:.6rem}.md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-right:.6rem;padding-left:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__button img{width:100%;height:auto}.md-nav__link{display:block;margin-top:.625em;transition:color .125s;text-overflow:ellipsis;cursor:pointer;overflow:hidden}.md-nav__item--nested>.md-nav__link:after{content:"\E313"}html .md-nav__link[for=__toc]{display:none}html .md-nav__link[for=__toc]~.md-nav{display:none}html .md-nav__link[for=__toc]+.md-nav__link:after{display:none}.md-nav__link[data-md-state=blur]{color:rgba(0,0,0,.54)}.md-nav__link--active,.md-nav__link:active{color:#3f51b5}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:#536dfe}.md-nav__source,.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 2.2rem 0 3.6rem;text-overflow:ellipsis;z-index:2}[dir=rtl] .md-search__input{padding:0 3.6rem 0 2.2rem}.md-search__input::-webkit-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input:-ms-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-ms-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-webkit-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input:-ms-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::-ms-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;transition:color .25s cubic-bezier(.1,.7,.1,1),opacity .25s;font-size:1.2rem;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=__search]{top:.3rem;left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem;left:auto}.md-search__icon[for=__search]:before{content:"\E8B6"}.md-search__icon[type=reset]{top:.3rem;right:.5rem;-webkit-transform:scale(.125);transform:scale(.125);transition:opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);opacity:0}[dir=rtl] .md-search__icon[type=reset]{right:auto;left:.5rem}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{-webkit-transform:scale(1);transform:scale(1);opacity:1}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .1rem .1rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background-color:#fff;box-shadow:inset 0 .05rem 0 rgba(0,0,0,.07);overflow-y:auto;-webkit-overflow-scrolling:touch}.md-search-result{color:rgba(0,0,0,.87);word-break:break-word}.md-search-result__meta{padding:0 .8rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-size:.64rem;line-height:1.8rem}.md-search-result__list{margin:0;padding:0;border-top:.05rem solid rgba(0,0,0,.07);list-style:none}.md-search-result__item{box-shadow:0 -.05rem 0 rgba(0,0,0,.07)}.md-search-result__link{display:block;transition:background .25s;outline:0;overflow:hidden}.md-search-result__link:hover,.md-search-result__link[data-md-state=active]{background-color:rgba(83,109,254,.1)}.md-search-result__link:hover .md-search-result__article:before,.md-search-result__link[data-md-state=active] .md-search-result__article:before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:.6rem}.md-search-result__article{position:relative;padding:0 .8rem;overflow:auto}.md-search-result__article--document:before{position:absolute;left:0;margin:.1rem;transition:opacity .25s;color:rgba(0,0,0,.54);content:"\E880"}[dir=rtl] .md-search-result__article--document:before{right:0;left:auto}.md-search-result__article--document .md-search-result__title{margin:.55rem 0;font-size:.8rem;font-weight:400;line-height:1.4}.md-search-result__title{margin:.5em 0;font-size:.64rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:1.65rem;margin:.5em 0;color:rgba(0,0,0,.54);font-size:.64rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:12.1rem;padding:1.2rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:2.4rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .2rem;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}@-webkit-keyframes md-source__facts--done{0%{height:0}to{height:.65rem}}@keyframes md-source__facts--done{0%{height:0}to{height:.65rem}}@-webkit-keyframes md-source__fact--done{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes md-source__fact--done{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.md-source{display:block;padding-right:.6rem;transition:opacity .25s;font-size:.65rem;line-height:1.2;white-space:nowrap}[dir=rtl] .md-source{padding-right:0;padding-left:.6rem}.md-source:hover{opacity:.7}.md-source:after{display:inline-block;height:2.4rem;content:"";vertical-align:middle}.md-source__icon{display:inline-block;width:2.4rem;height:2.4rem;content:"";vertical-align:middle}.md-source__icon svg{width:1.2rem;height:1.2rem;margin-top:.6rem;margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem;margin-left:0}.md-source__icon+.md-source__repository{margin-left:-2.2rem;padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2.2rem;margin-left:0;padding-right:2rem;padding-left:0}.md-source__repository{display:inline-block;max-width:100%;margin-left:.6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:.55rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:md-source__facts--done .25s ease-in;animation:md-source__facts--done .25s ease-in}.md-source__fact{float:left}[dir=rtl] .md-source__fact{float:right}[data-md-state=done] .md-source__fact{-webkit-animation:md-source__fact--done .4s ease-out;animation:md-source__fact--done .4s ease-out}.md-source__fact:before{margin:0 .1rem;content:"\00B7"}.md-source__fact:first-child:before{display:none}.md-source-file{display:inline-block;margin:1em .5em 1em 0;padding-right:.25rem;border-radius:.1rem;background-color:rgba(0,0,0,.07);font-size:.64rem;list-style-type:none;cursor:pointer;overflow:hidden}.md-source-file:before{display:inline-block;margin-right:.25rem;padding:.25rem;background-color:rgba(0,0,0,.26);color:#fff;font-size:.8rem;content:"\E86F";vertical-align:middle}html .md-source-file{transition:background .4s,color .4s,box-shadow .4s cubic-bezier(.4,0,.2,1)}html .md-source-file:before{transition:inherit}html body .md-typeset .md-source-file{color:rgba(0,0,0,.54)}.md-source-file:hover{box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36)}.md-source-file:hover:before{background-color:#536dfe}.md-tabs{width:100%;transition:background .25s;background-color:#3f51b5;color:#fff;overflow:auto}.md-tabs__list{margin:0 0 0 .2rem;padding:0;list-style:none;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-right:.6rem;padding-left:.6rem}.md-tabs__link{display:block;margin-top:.8rem;transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);font-size:.7rem;opacity:.7}.md-tabs__link--active,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:.02s}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:.04s}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:.06s}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:.08s}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[data-md-state=hidden]{pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{-webkit-transform:translateY(50%);transform:translateY(50%);transition:color .25s,opacity .1s,-webkit-transform 0s .4s;transition:color .25s,transform 0s .4s,opacity .1s;transition:color .25s,transform 0s .4s,opacity .1s,-webkit-transform 0s .4s;opacity:0}.md-typeset .admonition,.md-typeset details{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;margin:1.5625em 0;padding:0 .6rem;border-left:.2rem solid #448aff;border-radius:.1rem;font-size:.64rem;overflow:auto}[dir=rtl] .md-typeset .admonition,[dir=rtl] .md-typeset details{border-right:.2rem solid #448aff;border-left:none}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin:1em 0}.md-typeset .admonition>.admonition-title,.md-typeset .admonition>summary,.md-typeset details>.admonition-title,.md-typeset details>summary{margin:0 -.6rem;padding:.4rem .6rem .4rem 2rem;border-bottom:.05rem solid rgba(68,138,255,.1);background-color:rgba(68,138,255,.1);font-weight:700}[dir=rtl] .md-typeset .admonition>.admonition-title,[dir=rtl] .md-typeset .admonition>summary,[dir=rtl] .md-typeset details>.admonition-title,[dir=rtl] .md-typeset details>summary{padding:.4rem 2rem .4rem .6rem}.md-typeset .admonition>.admonition-title:last-child,.md-typeset .admonition>summary:last-child,.md-typeset details>.admonition-title:last-child,.md-typeset details>summary:last-child{margin-bottom:0}.md-typeset .admonition>.admonition-title:before,.md-typeset .admonition>summary:before,.md-typeset details>.admonition-title:before,.md-typeset details>summary:before{position:absolute;left:.6rem;color:#448aff;font-size:1rem;content:"\E3C9"}[dir=rtl] .md-typeset .admonition>.admonition-title:before,[dir=rtl] .md-typeset .admonition>summary:before,[dir=rtl] .md-typeset details>.admonition-title:before,[dir=rtl] .md-typeset details>summary:before{right:.6rem;left:auto}.md-typeset .admonition.abstract,.md-typeset .admonition.summary,.md-typeset .admonition.tldr,.md-typeset details.abstract,.md-typeset details.summary,.md-typeset details.tldr{border-left-color:#00b0ff}[dir=rtl] .md-typeset .admonition.abstract,[dir=rtl] .md-typeset .admonition.summary,[dir=rtl] .md-typeset .admonition.tldr,[dir=rtl] .md-typeset details.abstract,[dir=rtl] .md-typeset details.summary,[dir=rtl] .md-typeset details.tldr{border-right-color:#00b0ff}.md-typeset .admonition.abstract>.admonition-title,.md-typeset .admonition.abstract>summary,.md-typeset .admonition.summary>.admonition-title,.md-typeset .admonition.summary>summary,.md-typeset .admonition.tldr>.admonition-title,.md-typeset .admonition.tldr>summary,.md-typeset details.abstract>.admonition-title,.md-typeset details.abstract>summary,.md-typeset details.summary>.admonition-title,.md-typeset details.summary>summary,.md-typeset details.tldr>.admonition-title,.md-typeset details.tldr>summary{border-bottom-color:rgba(0,176,255,.1);background-color:rgba(0,176,255,.1)}.md-typeset .admonition.abstract>.admonition-title:before,.md-typeset .admonition.abstract>summary:before,.md-typeset .admonition.summary>.admonition-title:before,.md-typeset .admonition.summary>summary:before,.md-typeset .admonition.tldr>.admonition-title:before,.md-typeset .admonition.tldr>summary:before,.md-typeset details.abstract>.admonition-title:before,.md-typeset details.abstract>summary:before,.md-typeset details.summary>.admonition-title:before,.md-typeset details.summary>summary:before,.md-typeset details.tldr>.admonition-title:before,.md-typeset details.tldr>summary:before{color:#00b0ff;content:""}.md-typeset .admonition.info,.md-typeset .admonition.todo,.md-typeset details.info,.md-typeset details.todo{border-left-color:#00b8d4}[dir=rtl] .md-typeset .admonition.info,[dir=rtl] .md-typeset .admonition.todo,[dir=rtl] .md-typeset details.info,[dir=rtl] .md-typeset details.todo{border-right-color:#00b8d4}.md-typeset .admonition.info>.admonition-title,.md-typeset .admonition.info>summary,.md-typeset .admonition.todo>.admonition-title,.md-typeset .admonition.todo>summary,.md-typeset details.info>.admonition-title,.md-typeset details.info>summary,.md-typeset details.todo>.admonition-title,.md-typeset details.todo>summary{border-bottom-color:rgba(0,184,212,.1);background-color:rgba(0,184,212,.1)}.md-typeset .admonition.info>.admonition-title:before,.md-typeset .admonition.info>summary:before,.md-typeset .admonition.todo>.admonition-title:before,.md-typeset .admonition.todo>summary:before,.md-typeset details.info>.admonition-title:before,.md-typeset details.info>summary:before,.md-typeset details.todo>.admonition-title:before,.md-typeset details.todo>summary:before{color:#00b8d4;content:""}.md-typeset .admonition.hint,.md-typeset .admonition.important,.md-typeset .admonition.tip,.md-typeset details.hint,.md-typeset details.important,.md-typeset details.tip{border-left-color:#00bfa5}[dir=rtl] .md-typeset .admonition.hint,[dir=rtl] .md-typeset .admonition.important,[dir=rtl] .md-typeset .admonition.tip,[dir=rtl] .md-typeset details.hint,[dir=rtl] .md-typeset details.important,[dir=rtl] .md-typeset details.tip{border-right-color:#00bfa5}.md-typeset .admonition.hint>.admonition-title,.md-typeset .admonition.hint>summary,.md-typeset .admonition.important>.admonition-title,.md-typeset .admonition.important>summary,.md-typeset .admonition.tip>.admonition-title,.md-typeset .admonition.tip>summary,.md-typeset details.hint>.admonition-title,.md-typeset details.hint>summary,.md-typeset details.important>.admonition-title,.md-typeset details.important>summary,.md-typeset details.tip>.admonition-title,.md-typeset details.tip>summary{border-bottom-color:rgba(0,191,165,.1);background-color:rgba(0,191,165,.1)}.md-typeset .admonition.hint>.admonition-title:before,.md-typeset .admonition.hint>summary:before,.md-typeset .admonition.important>.admonition-title:before,.md-typeset .admonition.important>summary:before,.md-typeset .admonition.tip>.admonition-title:before,.md-typeset .admonition.tip>summary:before,.md-typeset details.hint>.admonition-title:before,.md-typeset details.hint>summary:before,.md-typeset details.important>.admonition-title:before,.md-typeset details.important>summary:before,.md-typeset details.tip>.admonition-title:before,.md-typeset details.tip>summary:before{color:#00bfa5;content:""}.md-typeset .admonition.check,.md-typeset .admonition.done,.md-typeset .admonition.success,.md-typeset details.check,.md-typeset details.done,.md-typeset details.success{border-left-color:#00c853}[dir=rtl] .md-typeset .admonition.check,[dir=rtl] .md-typeset .admonition.done,[dir=rtl] .md-typeset .admonition.success,[dir=rtl] .md-typeset details.check,[dir=rtl] .md-typeset details.done,[dir=rtl] .md-typeset details.success{border-right-color:#00c853}.md-typeset .admonition.check>.admonition-title,.md-typeset .admonition.check>summary,.md-typeset .admonition.done>.admonition-title,.md-typeset .admonition.done>summary,.md-typeset .admonition.success>.admonition-title,.md-typeset .admonition.success>summary,.md-typeset details.check>.admonition-title,.md-typeset details.check>summary,.md-typeset details.done>.admonition-title,.md-typeset details.done>summary,.md-typeset details.success>.admonition-title,.md-typeset details.success>summary{border-bottom-color:rgba(0,200,83,.1);background-color:rgba(0,200,83,.1)}.md-typeset .admonition.check>.admonition-title:before,.md-typeset .admonition.check>summary:before,.md-typeset .admonition.done>.admonition-title:before,.md-typeset .admonition.done>summary:before,.md-typeset .admonition.success>.admonition-title:before,.md-typeset .admonition.success>summary:before,.md-typeset details.check>.admonition-title:before,.md-typeset details.check>summary:before,.md-typeset details.done>.admonition-title:before,.md-typeset details.done>summary:before,.md-typeset details.success>.admonition-title:before,.md-typeset details.success>summary:before{color:#00c853;content:""}.md-typeset .admonition.faq,.md-typeset .admonition.help,.md-typeset .admonition.question,.md-typeset details.faq,.md-typeset details.help,.md-typeset details.question{border-left-color:#64dd17}[dir=rtl] .md-typeset .admonition.faq,[dir=rtl] .md-typeset .admonition.help,[dir=rtl] .md-typeset .admonition.question,[dir=rtl] .md-typeset details.faq,[dir=rtl] .md-typeset details.help,[dir=rtl] .md-typeset details.question{border-right-color:#64dd17}.md-typeset .admonition.faq>.admonition-title,.md-typeset .admonition.faq>summary,.md-typeset .admonition.help>.admonition-title,.md-typeset .admonition.help>summary,.md-typeset .admonition.question>.admonition-title,.md-typeset .admonition.question>summary,.md-typeset details.faq>.admonition-title,.md-typeset details.faq>summary,.md-typeset details.help>.admonition-title,.md-typeset details.help>summary,.md-typeset details.question>.admonition-title,.md-typeset details.question>summary{border-bottom-color:rgba(100,221,23,.1);background-color:rgba(100,221,23,.1)}.md-typeset .admonition.faq>.admonition-title:before,.md-typeset .admonition.faq>summary:before,.md-typeset .admonition.help>.admonition-title:before,.md-typeset .admonition.help>summary:before,.md-typeset .admonition.question>.admonition-title:before,.md-typeset .admonition.question>summary:before,.md-typeset details.faq>.admonition-title:before,.md-typeset details.faq>summary:before,.md-typeset details.help>.admonition-title:before,.md-typeset details.help>summary:before,.md-typeset details.question>.admonition-title:before,.md-typeset details.question>summary:before{color:#64dd17;content:""}.md-typeset .admonition.attention,.md-typeset .admonition.caution,.md-typeset .admonition.warning,.md-typeset details.attention,.md-typeset details.caution,.md-typeset details.warning{border-left-color:#ff9100}[dir=rtl] .md-typeset .admonition.attention,[dir=rtl] .md-typeset .admonition.caution,[dir=rtl] .md-typeset .admonition.warning,[dir=rtl] .md-typeset details.attention,[dir=rtl] .md-typeset details.caution,[dir=rtl] .md-typeset details.warning{border-right-color:#ff9100}.md-typeset .admonition.attention>.admonition-title,.md-typeset .admonition.attention>summary,.md-typeset .admonition.caution>.admonition-title,.md-typeset .admonition.caution>summary,.md-typeset .admonition.warning>.admonition-title,.md-typeset .admonition.warning>summary,.md-typeset details.attention>.admonition-title,.md-typeset details.attention>summary,.md-typeset details.caution>.admonition-title,.md-typeset details.caution>summary,.md-typeset details.warning>.admonition-title,.md-typeset details.warning>summary{border-bottom-color:rgba(255,145,0,.1);background-color:rgba(255,145,0,.1)}.md-typeset .admonition.attention>.admonition-title:before,.md-typeset .admonition.attention>summary:before,.md-typeset .admonition.caution>.admonition-title:before,.md-typeset .admonition.caution>summary:before,.md-typeset .admonition.warning>.admonition-title:before,.md-typeset .admonition.warning>summary:before,.md-typeset details.attention>.admonition-title:before,.md-typeset details.attention>summary:before,.md-typeset details.caution>.admonition-title:before,.md-typeset details.caution>summary:before,.md-typeset details.warning>.admonition-title:before,.md-typeset details.warning>summary:before{color:#ff9100;content:""}.md-typeset .admonition.fail,.md-typeset .admonition.failure,.md-typeset .admonition.missing,.md-typeset details.fail,.md-typeset details.failure,.md-typeset details.missing{border-left-color:#ff5252}[dir=rtl] .md-typeset .admonition.fail,[dir=rtl] .md-typeset .admonition.failure,[dir=rtl] .md-typeset .admonition.missing,[dir=rtl] .md-typeset details.fail,[dir=rtl] .md-typeset details.failure,[dir=rtl] .md-typeset details.missing{border-right-color:#ff5252}.md-typeset .admonition.fail>.admonition-title,.md-typeset .admonition.fail>summary,.md-typeset .admonition.failure>.admonition-title,.md-typeset .admonition.failure>summary,.md-typeset .admonition.missing>.admonition-title,.md-typeset .admonition.missing>summary,.md-typeset details.fail>.admonition-title,.md-typeset details.fail>summary,.md-typeset details.failure>.admonition-title,.md-typeset details.failure>summary,.md-typeset details.missing>.admonition-title,.md-typeset details.missing>summary{border-bottom-color:rgba(255,82,82,.1);background-color:rgba(255,82,82,.1)}.md-typeset .admonition.fail>.admonition-title:before,.md-typeset .admonition.fail>summary:before,.md-typeset .admonition.failure>.admonition-title:before,.md-typeset .admonition.failure>summary:before,.md-typeset .admonition.missing>.admonition-title:before,.md-typeset .admonition.missing>summary:before,.md-typeset details.fail>.admonition-title:before,.md-typeset details.fail>summary:before,.md-typeset details.failure>.admonition-title:before,.md-typeset details.failure>summary:before,.md-typeset details.missing>.admonition-title:before,.md-typeset details.missing>summary:before{color:#ff5252;content:""}.md-typeset .admonition.danger,.md-typeset .admonition.error,.md-typeset details.danger,.md-typeset details.error{border-left-color:#ff1744}[dir=rtl] .md-typeset .admonition.danger,[dir=rtl] .md-typeset .admonition.error,[dir=rtl] .md-typeset details.danger,[dir=rtl] .md-typeset details.error{border-right-color:#ff1744}.md-typeset .admonition.danger>.admonition-title,.md-typeset .admonition.danger>summary,.md-typeset .admonition.error>.admonition-title,.md-typeset .admonition.error>summary,.md-typeset details.danger>.admonition-title,.md-typeset details.danger>summary,.md-typeset details.error>.admonition-title,.md-typeset details.error>summary{border-bottom-color:rgba(255,23,68,.1);background-color:rgba(255,23,68,.1)}.md-typeset .admonition.danger>.admonition-title:before,.md-typeset .admonition.danger>summary:before,.md-typeset .admonition.error>.admonition-title:before,.md-typeset .admonition.error>summary:before,.md-typeset details.danger>.admonition-title:before,.md-typeset details.danger>summary:before,.md-typeset details.error>.admonition-title:before,.md-typeset details.error>summary:before{color:#ff1744;content:""}.md-typeset .admonition.bug,.md-typeset details.bug{border-left-color:#f50057}[dir=rtl] .md-typeset .admonition.bug,[dir=rtl] .md-typeset details.bug{border-right-color:#f50057}.md-typeset .admonition.bug>.admonition-title,.md-typeset .admonition.bug>summary,.md-typeset details.bug>.admonition-title,.md-typeset details.bug>summary{border-bottom-color:rgba(245,0,87,.1);background-color:rgba(245,0,87,.1)}.md-typeset .admonition.bug>.admonition-title:before,.md-typeset .admonition.bug>summary:before,.md-typeset details.bug>.admonition-title:before,.md-typeset details.bug>summary:before{color:#f50057;content:""}.md-typeset .admonition.example,.md-typeset details.example{border-left-color:#651fff}[dir=rtl] .md-typeset .admonition.example,[dir=rtl] .md-typeset details.example{border-right-color:#651fff}.md-typeset .admonition.example>.admonition-title,.md-typeset .admonition.example>summary,.md-typeset details.example>.admonition-title,.md-typeset details.example>summary{border-bottom-color:rgba(101,31,255,.1);background-color:rgba(101,31,255,.1)}.md-typeset .admonition.example>.admonition-title:before,.md-typeset .admonition.example>summary:before,.md-typeset details.example>.admonition-title:before,.md-typeset details.example>summary:before{color:#651fff;content:""}.md-typeset .admonition.cite,.md-typeset .admonition.quote,.md-typeset details.cite,.md-typeset details.quote{border-left-color:#9e9e9e}[dir=rtl] .md-typeset .admonition.cite,[dir=rtl] .md-typeset .admonition.quote,[dir=rtl] .md-typeset details.cite,[dir=rtl] .md-typeset details.quote{border-right-color:#9e9e9e}.md-typeset .admonition.cite>.admonition-title,.md-typeset .admonition.cite>summary,.md-typeset .admonition.quote>.admonition-title,.md-typeset .admonition.quote>summary,.md-typeset details.cite>.admonition-title,.md-typeset details.cite>summary,.md-typeset details.quote>.admonition-title,.md-typeset details.quote>summary{border-bottom-color:hsla(0,0%,62%,.1);background-color:hsla(0,0%,62%,.1)}.md-typeset .admonition.cite>.admonition-title:before,.md-typeset .admonition.cite>summary:before,.md-typeset .admonition.quote>.admonition-title:before,.md-typeset .admonition.quote>summary:before,.md-typeset details.cite>.admonition-title:before,.md-typeset details.cite>summary:before,.md-typeset details.quote>.admonition-title:before,.md-typeset details.quote>summary:before{color:#9e9e9e;content:""}.codehilite .o,.codehilite .ow,.md-typeset .highlight .o,.md-typeset .highlight .ow{color:inherit}.codehilite .ge,.md-typeset .highlight .ge{color:#000}.codehilite .gr,.md-typeset .highlight .gr{color:#a00}.codehilite .gh,.md-typeset .highlight .gh{color:#999}.codehilite .go,.md-typeset .highlight .go{color:#888}.codehilite .gp,.md-typeset .highlight .gp{color:#555}.codehilite .gs,.md-typeset .highlight .gs{color:inherit}.codehilite .gu,.md-typeset .highlight .gu{color:#aaa}.codehilite .gt,.md-typeset .highlight .gt{color:#a00}.codehilite .gd,.md-typeset .highlight .gd{background-color:#fdd}.codehilite .gi,.md-typeset .highlight .gi{background-color:#dfd}.codehilite .k,.md-typeset .highlight .k{color:#3b78e7}.codehilite .kc,.md-typeset .highlight .kc{color:#a71d5d}.codehilite .kd,.codehilite .kn,.md-typeset .highlight .kd,.md-typeset .highlight .kn{color:#3b78e7}.codehilite .kp,.md-typeset .highlight .kp{color:#a71d5d}.codehilite .kr,.codehilite .kt,.md-typeset .highlight .kr,.md-typeset .highlight .kt{color:#3e61a2}.codehilite .c,.codehilite .cm,.md-typeset .highlight .c,.md-typeset .highlight .cm{color:#999}.codehilite .cp,.md-typeset .highlight .cp{color:#666}.codehilite .c1,.codehilite .ch,.codehilite .cs,.md-typeset .highlight .c1,.md-typeset .highlight .ch,.md-typeset .highlight .cs{color:#999}.codehilite .na,.codehilite .nb,.md-typeset .highlight .na,.md-typeset .highlight .nb{color:#c2185b}.codehilite .bp,.md-typeset .highlight .bp{color:#3e61a2}.codehilite .nc,.md-typeset .highlight .nc{color:#c2185b}.codehilite .no,.md-typeset .highlight .no{color:#3e61a2}.codehilite .nd,.codehilite .ni,.md-typeset .highlight .nd,.md-typeset .highlight .ni{color:#666}.codehilite .ne,.codehilite .nf,.md-typeset .highlight .ne,.md-typeset .highlight .nf{color:#c2185b}.codehilite .nl,.md-typeset .highlight .nl{color:#3b5179}.codehilite .nn,.md-typeset .highlight .nn{color:#ec407a}.codehilite .nt,.md-typeset .highlight .nt{color:#3b78e7}.codehilite .nv,.codehilite .vc,.codehilite .vg,.codehilite .vi,.md-typeset .highlight .nv,.md-typeset .highlight .vc,.md-typeset .highlight .vg,.md-typeset .highlight .vi{color:#3e61a2}.codehilite .nx,.md-typeset .highlight .nx{color:#ec407a}.codehilite .il,.codehilite .m,.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo,.md-typeset .highlight .il,.md-typeset .highlight .m,.md-typeset .highlight .mf,.md-typeset .highlight .mh,.md-typeset .highlight .mi,.md-typeset .highlight .mo{color:#e74c3c}.codehilite .s,.codehilite .sb,.codehilite .sc,.md-typeset .highlight .s,.md-typeset .highlight .sb,.md-typeset .highlight .sc{color:#0d904f}.codehilite .sd,.md-typeset .highlight .sd{color:#999}.codehilite .s2,.md-typeset .highlight .s2{color:#0d904f}.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sx,.md-typeset .highlight .se,.md-typeset .highlight .sh,.md-typeset .highlight .si,.md-typeset .highlight .sx{color:#183691}.codehilite .sr,.md-typeset .highlight .sr{color:#009926}.codehilite .s1,.codehilite .ss,.md-typeset .highlight .s1,.md-typeset .highlight .ss{color:#0d904f}.codehilite .err,.md-typeset .highlight .err{color:#a61717}.codehilite .w,.md-typeset .highlight .w{color:transparent}.codehilite .hll,.md-typeset .highlight .hll{display:block;margin:0 -.6rem;padding:0 .6rem;background-color:rgba(255,235,59,.5)}.md-typeset .codehilite,.md-typeset .highlight{position:relative;margin:1em 0;padding:0;border-radius:.1rem;background-color:hsla(0,0%,92.5%,.5);color:#37474f;line-height:1.4;-webkit-overflow-scrolling:touch}.md-typeset .codehilite code,.md-typeset .codehilite pre,.md-typeset .highlight code,.md-typeset .highlight pre{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;overflow:auto;vertical-align:top}.md-typeset .codehilite code::-webkit-scrollbar,.md-typeset .codehilite pre::-webkit-scrollbar,.md-typeset .highlight code::-webkit-scrollbar,.md-typeset .highlight pre::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset .codehilite code::-webkit-scrollbar-thumb,.md-typeset .codehilite pre::-webkit-scrollbar-thumb,.md-typeset .highlight code::-webkit-scrollbar-thumb,.md-typeset .highlight pre::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset .codehilite code::-webkit-scrollbar-thumb:hover,.md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,.md-typeset .highlight code::-webkit-scrollbar-thumb:hover,.md-typeset .highlight pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset pre.codehilite,.md-typeset pre.highlight{overflow:visible}.md-typeset pre.codehilite code,.md-typeset pre.highlight code{display:block;padding:.525rem .6rem;overflow:auto}.md-typeset .codehilitetable,.md-typeset .highlighttable{display:block;margin:1em 0;border-radius:.2em;font-size:.8rem;overflow:hidden}.md-typeset .codehilitetable tbody,.md-typeset .codehilitetable td,.md-typeset .highlighttable tbody,.md-typeset .highlighttable td{display:block;padding:0}.md-typeset .codehilitetable tr,.md-typeset .highlighttable tr{display:flex}.md-typeset .codehilitetable .codehilite,.md-typeset .codehilitetable .highlight,.md-typeset .codehilitetable .linenodiv,.md-typeset .highlighttable .codehilite,.md-typeset .highlighttable .highlight,.md-typeset .highlighttable .linenodiv{margin:0;border-radius:0}.md-typeset .codehilitetable .linenodiv,.md-typeset .highlighttable .linenodiv{padding:.525rem .6rem}.md-typeset .codehilitetable .linenos,.md-typeset .highlighttable .linenos{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.26);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset .codehilitetable .linenos pre,.md-typeset .highlighttable .linenos pre{margin:0;padding:0;background-color:transparent;color:inherit;text-align:right}.md-typeset .codehilitetable .code,.md-typeset .highlighttable .code{flex:1;overflow:hidden}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{box-shadow:none}.md-typeset [id^="fnref:"]{display:inline-block}.md-typeset [id^="fnref:"]:target{margin-top:-3.8rem;padding-top:3.8rem;pointer-events:none}.md-typeset [id^="fn:"]:before{display:none;height:0;content:""}.md-typeset [id^="fn:"]:target:before{display:block;margin-top:-3.5rem;padding-top:3.5rem;pointer-events:none}.md-typeset .footnote{color:rgba(0,0,0,.54);font-size:.64rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{transition:color .25s}.md-typeset .footnote li:target{color:rgba(0,0,0,.87)}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:#536dfe}.md-typeset .footnote-ref{display:inline-block;pointer-events:auto}.md-typeset .footnote-ref:before{display:inline;margin:0 .2em;border-left:.05rem solid rgba(0,0,0,.26);font-size:1.25em;content:"";vertical-align:-.25rem}.md-typeset .footnote-backref{display:inline-block;-webkit-transform:translateX(.25rem);transform:translateX(.25rem);transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s,-webkit-transform .25s .125s;color:rgba(0,0,0,.26);font-size:0;opacity:0;vertical-align:text-bottom}[dir=rtl] .md-typeset .footnote-backref{-webkit-transform:translateX(-.25rem);transform:translateX(-.25rem)}.md-typeset .footnote-backref:before{display:inline-block;font-size:.8rem;content:"\E31B"}[dir=rtl] .md-typeset .footnote-backref:before{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.md-typeset .headerlink{display:inline-block;margin-left:.5rem;-webkit-transform:translateY(.25rem);transform:translateY(.25rem);transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s,-webkit-transform .25s .25s;opacity:0}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem;margin-left:0}html body .md-typeset .headerlink{color:rgba(0,0,0,.26)}.md-typeset h1[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h1[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h1[id] .headerlink:focus,.md-typeset h1[id]:hover .headerlink,.md-typeset h1[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h1[id] .headerlink:focus,.md-typeset h1[id]:hover .headerlink:hover,.md-typeset h1[id]:target .headerlink{color:#536dfe}.md-typeset h2[id]:before{display:block;margin-top:-8px;padding-top:8px;content:""}.md-typeset h2[id]:target:before{margin-top:-3.4rem;padding-top:3.4rem}.md-typeset h2[id] .headerlink:focus,.md-typeset h2[id]:hover .headerlink,.md-typeset h2[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h2[id] .headerlink:focus,.md-typeset h2[id]:hover .headerlink:hover,.md-typeset h2[id]:target .headerlink{color:#536dfe}.md-typeset h3[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h3[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h3[id] .headerlink:focus,.md-typeset h3[id]:hover .headerlink,.md-typeset h3[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h3[id] .headerlink:focus,.md-typeset h3[id]:hover .headerlink:hover,.md-typeset h3[id]:target .headerlink{color:#536dfe}.md-typeset h4[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h4[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h4[id] .headerlink:focus,.md-typeset h4[id]:hover .headerlink,.md-typeset h4[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h4[id] .headerlink:focus,.md-typeset h4[id]:hover .headerlink:hover,.md-typeset h4[id]:target .headerlink{color:#536dfe}.md-typeset h5[id]:before{display:block;margin-top:-11px;padding-top:11px;content:""}.md-typeset h5[id]:target:before{margin-top:-3.55rem;padding-top:3.55rem}.md-typeset h5[id] .headerlink:focus,.md-typeset h5[id]:hover .headerlink,.md-typeset h5[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h5[id] .headerlink:focus,.md-typeset h5[id]:hover .headerlink:hover,.md-typeset h5[id]:target .headerlink{color:#536dfe}.md-typeset h6[id]:before{display:block;margin-top:-11px;padding-top:11px;content:""}.md-typeset h6[id]:target:before{margin-top:-3.55rem;padding-top:3.55rem}.md-typeset h6[id] .headerlink:focus,.md-typeset h6[id]:hover .headerlink,.md-typeset h6[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h6[id] .headerlink:focus,.md-typeset h6[id]:hover .headerlink:hover,.md-typeset h6[id]:target .headerlink{color:#536dfe}.md-typeset .MJXc-display{margin:.75em 0;padding:.75em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset .critic.comment,.md-typeset del.critic,.md-typeset ins.critic{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-.25em 0 0 #dfd}.md-typeset .critic.comment{background-color:hsla(0,0%,92.5%,.5);color:#37474f;box-shadow:.25em 0 0 hsla(0,0%,92.5%,.5),-.25em 0 0 hsla(0,0%,92.5%,.5)}.md-typeset .critic.comment:before{padding-right:.125em;color:rgba(0,0,0,.26);content:"\E0B7";vertical-align:-.125em}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:.8rem;padding-left:.8rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset details{display:block;padding-top:0}.md-typeset details[open]>summary:after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.md-typeset details:not([open]){padding-bottom:0}.md-typeset details:not([open])>summary{border-bottom:none}.md-typeset details summary{padding-right:2rem}[dir=rtl] .md-typeset details summary{padding-left:2rem}.no-details .md-typeset details:not([open])>*{display:none}.no-details .md-typeset details:not([open]) summary{display:block}.md-typeset summary{display:block;outline:none;cursor:pointer}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset summary:after{position:absolute;top:.4rem;right:.6rem;color:rgba(0,0,0,.26);font-size:1rem;content:"\E313"}[dir=rtl] .md-typeset summary:after{right:auto;left:.6rem}.md-typeset .emojione{width:1rem;vertical-align:text-top}.md-typeset code.codehilite,.md-typeset code.highlight{margin:0 .29412em;padding:.07353em 0}.md-typeset .superfences-content{display:none;order:99;width:100%;background-color:#fff}.md-typeset .superfences-content>*{margin:0;border-radius:0}.md-typeset .superfences-tabs{display:flex;position:relative;flex-wrap:wrap;margin:1em 0;border:.05rem solid rgba(0,0,0,.07);border-radius:.2em}.md-typeset .superfences-tabs>input{display:none}.md-typeset .superfences-tabs>input:checked+label{font-weight:700}.md-typeset .superfences-tabs>input:checked+label+.superfences-content{display:block}.md-typeset .superfences-tabs>label{width:auto;padding:.6rem;transition:color .125s;font-size:.64rem;cursor:pointer}html .md-typeset .superfences-tabs>label:hover{color:#536dfe}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em;left:auto}.md-typeset .task-list-control .task-list-indicator:before{position:absolute;top:.15em;left:-1.25em;color:rgba(0,0,0,.26);font-size:1.25em;content:"\E835";vertical-align:-.25em}[dir=rtl] .md-typeset .task-list-control .task-list-indicator:before{right:-1.25em;left:auto}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator:before{content:"\E834"}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a:after{color:rgba(0,0,0,.54);content:" [" attr(href) "]"}.md-typeset code,.md-typeset pre{white-space:pre-wrap}.md-typeset code{box-shadow:none;-webkit-box-decoration-break:initial;box-decoration-break:slice}.md-clipboard,.md-content__icon,.md-footer,.md-header,.md-sidebar,.md-tabs,.md-typeset .headerlink{display:none}}@media only screen and (max-width:44.9375em){.md-typeset pre{margin:1em -.8rem;border-radius:0}.md-typeset pre>code{padding:.525rem .8rem}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}.codehilite .hll,.md-typeset .highlight .hll{margin:0 -.8rem;padding:0 .8rem}.md-typeset>.codehilite,.md-typeset>.highlight{margin:1em -.8rem;border-radius:0}.md-typeset>.codehilite code,.md-typeset>.codehilite pre,.md-typeset>.highlight code,.md-typeset>.highlight pre{padding:.525rem .8rem}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em -.8rem;border-radius:0}.md-typeset>.codehilitetable .codehilite>code,.md-typeset>.codehilitetable .codehilite>pre,.md-typeset>.codehilitetable .highlight>code,.md-typeset>.codehilitetable .highlight>pre,.md-typeset>.codehilitetable .linenodiv,.md-typeset>.highlighttable .codehilite>code,.md-typeset>.highlighttable .codehilite>pre,.md-typeset>.highlighttable .highlight>code,.md-typeset>.highlighttable .highlight>pre,.md-typeset>.highlighttable .linenodiv{padding:.5rem .8rem}.md-typeset>p>.MJXc-display{margin:.75em -.8rem;padding:.25em .8rem}.md-typeset>.superfences-tabs{margin:1em -.8rem;border:0;border-top:.05rem solid rgba(0,0,0,.07);border-radius:0}.md-typeset>.superfences-tabs code,.md-typeset>.superfences-tabs pre{padding:.525rem .8rem}}@media only screen and (min-width:100em){html{font-size:137.5%}}@media only screen and (min-width:125em){html{font-size:150%}}@media only screen and (max-width:59.9375em){body[data-md-state=lock]{overflow:hidden}.ios body[data-md-state=lock] .md-container{display:none}html .md-nav__link[for=__toc]{display:block;padding-right:2.4rem}html .md-nav__link[for=__toc]:after{color:inherit;content:"\E8DE"}html .md-nav__link[for=__toc]+.md-nav__link{display:none}html .md-nav__link[for=__toc]~.md-nav{display:flex}html [dir=rtl] .md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav__source{display:block;padding:0 .2rem;background-color:rgba(50,64,144,.9675);color:#fff}.md-search__overlay{position:absolute;top:.2rem;left:.2rem;width:1.8rem;height:1.8rem;-webkit-transform-origin:center;transform-origin:center;transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:transform .3s .1s,opacity .2s .2s;transition:transform .3s .1s,opacity .2s .2s,-webkit-transform .3s .1s;border-radius:1rem;background-color:#fff;overflow:hidden;pointer-events:none}[dir=rtl] .md-search__overlay{right:.2rem;left:auto}[data-md-toggle=search]:checked~.md-header .md-search__overlay{transition:opacity .1s,-webkit-transform .4s;transition:transform .4s,opacity .1s;transition:transform .4s,opacity .1s,-webkit-transform .4s;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;width:100%;height:100%;-webkit-transform:translateX(5%);transform:translateX(5%);transition:right 0s .3s,left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:right 0s .3s,left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;transition:right 0s .3s,left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;-webkit-transform:translateX(0);transform:translateX(0);transition:right 0s 0s,left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:right 0s 0s,left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;transition:right 0s 0s,left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;opacity:1}[dir=rtl] [data-md-toggle=search]:checked~.md-header .md-search__inner{right:0;left:auto}html [dir=rtl] .md-search__inner{right:100%;left:auto;-webkit-transform:translateX(-5%);transform:translateX(-5%)}.md-search__input{width:100%;height:2.4rem;font-size:.9rem}.md-search__icon[for=__search]{top:.6rem;left:.8rem}.md-search__icon[for=__search][for=__search]:before{content:"\E5C4"}[dir=rtl] .md-search__icon[for=__search][for=__search]:before{content:"\E5C8"}.md-search__icon[type=reset]{top:.6rem;right:.8rem}.md-search__output{top:2.4rem;bottom:0}.md-search-result__article--document:before{display:none}}@media only screen and (max-width:76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-header-nav__button.md-icon--home,.md-header-nav__button.md-logo{display:none}.md-hero__inner{margin-top:2.4rem;margin-bottom:1.2rem}.md-nav{background-color:#fff}.md-nav--primary,.md-nav--primary .md-nav{display:flex;position:absolute;top:0;right:0;left:0;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}html .md-nav--primary .md-nav__title{position:relative;height:5.6rem;padding:3rem .8rem .2rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-weight:400;line-height:2.4rem;white-space:nowrap;cursor:pointer}html .md-nav--primary .md-nav__title:before{display:block;position:absolute;top:.2rem;left:.2rem;width:2rem;height:2rem;color:rgba(0,0,0,.54)}html .md-nav--primary .md-nav__title~.md-nav__list{background-color:#fff;box-shadow:inset 0 .05rem 0 rgba(0,0,0,.07)}html .md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}html .md-nav--primary .md-nav__title--site{position:relative;background-color:#3f51b5;color:#fff}html .md-nav--primary .md-nav__title--site .md-nav__button{display:block;position:absolute;top:.2rem;left:.2rem;width:3.2rem;height:3.2rem;font-size:2.4rem}html .md-nav--primary .md-nav__title--site:before{display:none}html [dir=rtl] .md-nav--primary .md-nav__title:before{right:.2rem;left:auto}html [dir=rtl] .md-nav--primary .md-nav__title--site .md-nav__button{right:.2rem;left:auto}.md-nav--primary .md-nav__list{flex:1;overflow-y:auto}.md-nav--primary .md-nav__item{padding:0;border-top:.05rem solid rgba(0,0,0,.07)}[dir=rtl] .md-nav--primary .md-nav__item{padding:0}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:2.4rem}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"\E315"}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"\E314"}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link:after{position:absolute;top:50%;right:.6rem;margin-top:-.6rem;color:inherit;font-size:1.2rem}[dir=rtl] .md-nav--primary .md-nav__link:after{right:auto;left:.6rem}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem;padding-left:0}.md-nav__toggle~.md-nav{display:flex;-webkit-transform:translateX(100%);transform:translateX(100%);transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s;transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);opacity:0}[dir=rtl] .md-nav__toggle~.md-nav{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.no-csstransforms3d .md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1}.no-csstransforms3d .md-nav__toggle:checked~.md-nav{display:flex}.md-sidebar--primary{position:fixed;top:0;left:-12.1rem;width:12.1rem;height:100%;-webkit-transform:translateX(0);transform:translateX(0);transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);background-color:#fff;z-index:3}[dir=rtl] .md-sidebar--primary{right:-12.1rem;left:auto}.no-csstransforms3d .md-sidebar--primary{display:none}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);-webkit-transform:translateX(12.1rem);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{-webkit-transform:translateX(-12.1rem);transform:translateX(-12.1rem)}.no-csstransforms3d [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{display:block}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;margin:0}.md-tabs{display:none}}@media only screen and (min-width:60em){.md-content{margin-right:12.1rem}[dir=rtl] .md-content{margin-right:0;margin-left:12.1rem}.md-header-nav__button.md-icon--search{display:none}.md-header-nav__source{display:block;width:11.5rem;max-width:11.5rem;margin-left:1.4rem;padding-right:.6rem}[dir=rtl] .md-header-nav__source{margin-right:1.4rem;margin-left:0;padding-right:0;padding-left:.6rem}.md-search{padding:.2rem}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);cursor:pointer}[dir=rtl] .md-search__overlay{right:0;left:auto}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-search__inner{position:relative;width:11.5rem;padding:.1rem 0;float:right;transition:width .25s cubic-bezier(.1,.7,.1,1)}[dir=rtl] .md-search__inner{float:left}.md-search__form,.md-search__input{border-radius:.1rem}.md-search__input{width:100%;height:1.8rem;padding-left:2.2rem;transition:background-color .25s cubic-bezier(.1,.7,.1,1),color .25s cubic-bezier(.1,.7,.1,1);background-color:rgba(0,0,0,.26);color:inherit;font-size:.8rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input+.md-search__icon{color:inherit}.md-search__input::-webkit-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input:-ms-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::-ms-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::placeholder{color:hsla(0,0%,100%,.7)}.md-search__input:hover{background-color:hsla(0,0%,100%,.12)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.1rem .1rem 0 0;background-color:#fff;color:rgba(0,0,0,.87);text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__output{top:1.9rem;transition:opacity .4s;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem;padding-left:0}.md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem;padding-left:.8rem}.md-sidebar--secondary{display:block;margin-left:100%;-webkit-transform:translate(-100%);transform:translate(-100%)}[dir=rtl] .md-sidebar--secondary{margin-right:100%;margin-left:0;-webkit-transform:translate(100%);transform:translate(100%)}}@media only screen and (min-width:76.25em){.md-content{margin-left:12.1rem}[dir=rtl] .md-content{margin-right:12.1rem}.md-content__inner{margin-right:1.2rem;margin-left:1.2rem}.md-header-nav__button.md-icon--menu{display:none}.md-nav[data-md-state=animate]{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav__toggle~.md-nav{max-height:0;overflow:hidden}.no-js .md-nav__toggle~.md-nav{display:none}.md-nav[data-md-state=expand],.md-nav__toggle:checked~.md-nav{max-height:100%}.no-js .md-nav[data-md-state=expand],.no-js .md-nav__toggle:checked~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--nested>.md-nav__link:after{display:inline-block;-webkit-transform-origin:.45em .45em;transform-origin:.45em .45em;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;vertical-align:-.125em}.js .md-nav__item--nested>.md-nav__link:after{transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link:after{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}.md-search__scrollwrap{width:34.4rem}.md-sidebar--secondary{margin-left:61rem}[dir=rtl] .md-sidebar--secondary{margin-right:61rem;margin-left:0}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{font-size:0;visibility:hidden}.md-tabs--active~.md-main .md-nav--primary .md-nav__title{display:block;padding:0}.md-tabs--active~.md-main .md-nav--primary .md-nav__title--site{display:none}.no-js .md-tabs--active~.md-main .md-nav--primary .md-nav{display:block}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{font-size:0;visibility:hidden}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none;font-size:.7rem;overflow:auto;visibility:visible}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested>.md-nav__link{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block}.md-tabs--active~.md-main .md-nav[data-md-level="1"]{max-height:none;overflow:visible}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:0}.md-tabs--active~.md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title{display:none}}@media only screen and (min-width:45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}[dir=rtl] .md-footer-copyright{float:right}.md-footer-social{padding:.6rem 0;float:right}[dir=rtl] .md-footer-social{float:left}}@media only screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(45);transform:scale(45)}}@media only screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(60);transform:scale(60)}}@media only screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(75);transform:scale(75)}}@media only screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}.md-search__scrollwrap{width:23.4rem}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}} \ No newline at end of file diff --git a/docs/assets/stylesheets/application.982221ab.css b/docs/assets/stylesheets/application.982221ab.css deleted file mode 100644 index a3762ca..0000000 --- a/docs/assets/stylesheets/application.982221ab.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}small,sub,sup{font-size:80%}sub,sup{position:relative;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{margin:0;padding:0;border:0;outline-style:none;background:transparent;font-size:inherit}input{border:0;outline:0}.md-clipboard:before,.md-icon,.md-nav__button,.md-nav__link:after,.md-nav__title:before,.md-search-result__article--document:before,.md-source-file:before,.md-typeset .admonition>.admonition-title:before,.md-typeset .admonition>summary:before,.md-typeset .critic.comment:before,.md-typeset .footnote-backref,.md-typeset .task-list-control .task-list-indicator:before,.md-typeset details>.admonition-title:before,.md-typeset details>summary:before,.md-typeset summary:after{font-family:Material Icons;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-content__icon,.md-footer-nav__button,.md-header-nav__button,.md-nav__button,.md-nav__title:before,.md-search-result__article--document:before{display:inline-block;margin:.2rem;padding:.4rem;font-size:1.2rem;cursor:pointer}.md-icon--arrow-back:before{content:""}.md-icon--arrow-forward:before{content:""}.md-icon--menu:before{content:""}.md-icon--search:before{content:""}[dir=rtl] .md-icon--arrow-back:before{content:""}[dir=rtl] .md-icon--arrow-forward:before{content:""}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";font-family:Helvetica Neue,Helvetica,Arial,sans-serif}code,kbd,pre{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern";font-feature-settings:"kern";font-family:Courier New,Courier,monospace}.md-typeset{font-size:.8rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset blockquote,.md-typeset ol,.md-typeset p,.md-typeset ul{margin:1em 0}.md-typeset h1{margin:0 0 2rem;color:rgba(0,0,0,.54);font-size:1.5625rem;line-height:1.3}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{margin:2rem 0 .8rem;font-size:1.25rem;line-height:1.4}.md-typeset h3{margin:1.6rem 0 .8rem;font-size:1rem;font-weight:400;letter-spacing:-.01em;line-height:1.5}.md-typeset h2+h3{margin-top:.8rem}.md-typeset h4{font-size:.8rem}.md-typeset h4,.md-typeset h5,.md-typeset h6{margin:.8rem 0;font-weight:700;letter-spacing:-.01em}.md-typeset h5,.md-typeset h6{color:rgba(0,0,0,.54);font-size:.64rem}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.05rem dotted rgba(0,0,0,.26)}.md-typeset a{color:#3f51b5;word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color .125s}.md-typeset a:active,.md-typeset a:hover{color:#536dfe}.md-typeset code,.md-typeset pre{background-color:hsla(0,0%,92.5%,.5);color:#37474f;font-size:85%;direction:ltr}.md-typeset code{margin:0 .29412em;padding:.07353em 0;border-radius:.1rem;box-shadow:.29412em 0 0 hsla(0,0%,92.5%,.5),-.29412em 0 0 hsla(0,0%,92.5%,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:none;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{position:relative;margin:1em 0;border-radius:.1rem;line-height:1.4;-webkit-overflow-scrolling:touch}.md-typeset pre>code{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:none;box-decoration-break:none;overflow:auto}.md-typeset pre>code::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset kbd{padding:0 .29412em;border-radius:.15rem;border:.05rem solid #c9c9c9;border-bottom-color:#bcbcbc;background-color:#fcfcfc;color:#555;font-size:85%;box-shadow:0 .05rem 0 #b0b0b0;word-break:break-word}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.05rem dotted rgba(0,0,0,.54);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sub,.md-typeset sup{margin-left:.07812em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.07812em;margin-left:0}.md-typeset blockquote{padding-left:.6rem;border-left:.2rem solid rgba(0,0,0,.26);color:rgba(0,0,0,.54)}[dir=rtl] .md-typeset blockquote{padding-right:.6rem;padding-left:0;border-right:.2rem solid rgba(0,0,0,.26);border-left:initial}.md-typeset ul{list-style-type:disc}.md-typeset ol,.md-typeset ul{margin-left:.625em;padding:0}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em;margin-left:0}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em;margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em;margin-left:0}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin:.5em 0 .5em .625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em;margin-left:0}.md-typeset dd{margin:1em 0 1em 1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em;margin-left:0}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:inline-block;max-width:100%;border-radius:.1rem;font-size:.64rem;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{min-width:5rem;padding:.6rem .8rem;background-color:rgba(0,0,0,.54);color:#fff;vertical-align:top}.md-typeset table:not([class]) td{padding:.6rem .8rem;border-top:.05rem solid rgba(0,0,0,.07);vertical-align:top}.md-typeset table:not([class]) tr{transition:background-color .125s}.md-typeset table:not([class]) tr:hover{background-color:rgba(0,0,0,.035);box-shadow:inset 0 .05rem 0 #fff}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{font-size:125%;overflow-x:hidden}body,html{height:100%}body{position:relative;font-size:.5rem}hr{display:block;height:.05rem;padding:0;border:0}.md-svg{display:none}.md-grid{max-width:61rem;margin-right:auto;margin-left:auto}.md-container,.md-main{overflow:auto}.md-container{display:table;width:100%;height:100%;padding-top:2.4rem;table-layout:fixed}.md-main{display:table-row;height:100%}.md-main__inner{height:100%;padding-top:1.5rem;padding-bottom:.05rem}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);opacity:0;z-index:3}.md-flex{display:table}.md-flex__cell{display:table-cell;position:relative;vertical-align:top}.md-flex__cell--shrink{width:0}.md-flex__cell--stretch{display:table;width:100%;table-layout:fixed}.md-flex__ellipsis{display:table-cell;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-skip{position:fixed;width:.05rem;height:.05rem;margin:.5rem;padding:.3rem .5rem;clip:rect(.05rem);-webkit-transform:translateY(.4rem);transform:translateY(.4rem);border-radius:.1rem;background-color:rgba(0,0,0,.87);color:#fff;font-size:.64rem;opacity:0;overflow:hidden}.md-skip:focus{width:auto;height:auto;clip:auto;-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1;z-index:10}@page{margin:25mm}.md-clipboard{position:absolute;top:.3rem;right:.3rem;width:1.4rem;height:1.4rem;border-radius:.1rem;font-size:.8rem;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-clipboard:before{transition:color .25s,opacity .25s;color:rgba(0,0,0,.07);content:"\E14D"}.codehilite:hover .md-clipboard:before,.md-typeset .highlight:hover .md-clipboard:before,pre:hover .md-clipboard:before{color:rgba(0,0,0,.54)}.md-clipboard:focus:before,.md-clipboard:hover:before{color:#536dfe}.md-clipboard__message{display:block;position:absolute;top:0;right:1.7rem;padding:.3rem .5rem;-webkit-transform:translateX(.4rem);transform:translateX(.4rem);transition:opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);transition:transform .25s cubic-bezier(.9,.1,.9,0),opacity .175s;transition:transform .25s cubic-bezier(.9,.1,.9,0),opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);border-radius:.1rem;background-color:rgba(0,0,0,.54);color:#fff;font-size:.64rem;white-space:nowrap;opacity:0;pointer-events:none}.md-clipboard__message--active{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1;pointer-events:auto}.md-clipboard__message:before{content:attr(aria-label)}.md-clipboard__message:after{display:block;position:absolute;top:50%;right:-.2rem;width:0;margin-top:-.2rem;border-color:transparent rgba(0,0,0,.54);border-style:solid;border-width:.2rem 0 .2rem .2rem;content:""}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}.md-content__inner:before{display:block;height:.4rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__icon{position:relative;margin:.4rem 0;padding:0;float:right}.md-typeset .md-content__icon{color:rgba(0,0,0,.26)}.md-header{position:fixed;top:0;right:0;left:0;height:2.4rem;transition:background-color .25s,color .25s;background-color:#3f51b5;color:#fff;box-shadow:none;z-index:2;-webkit-backface-visibility:hidden;backface-visibility:hidden}.no-js .md-header{transition:none;box-shadow:none}.md-header[data-md-state=shadow]{transition:background-color .25s,color .25s,box-shadow .25s;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.md-header-nav{padding:0 .2rem}.md-header-nav__button{position:relative;transition:opacity .25s;z-index:1}.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo *{display:block}.no-js .md-header-nav__button.md-icon--search{display:none}.md-header-nav__topic{display:block;position:absolute;transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(1.25rem);transform:translateX(1.25rem);transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(-1.25rem);transform:translateX(-1.25rem)}.no-js .md-header-nav__topic{position:static}.no-js .md-header-nav__topic+.md-header-nav__topic{display:none}.md-header-nav__title{padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-header-nav__title[data-md-state=active] .md-header-nav__topic{-webkit-transform:translateX(-1.25rem);transform:translateX(-1.25rem);transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic{-webkit-transform:translateX(1.25rem);transform:translateX(1.25rem)}.md-header-nav__title[data-md-state=active] .md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:1;z-index:0;pointer-events:auto}.md-header-nav__source{display:none}.md-hero{transition:background .25s;background-color:#3f51b5;color:#fff;font-size:1rem;overflow:hidden}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition-delay:.1s}[data-md-state=hidden] .md-hero__inner{pointer-events:none;-webkit-transform:translateY(.625rem);transform:translateY(.625rem);transition:opacity .1s 0s,-webkit-transform 0s .4s;transition:transform 0s .4s,opacity .1s 0s;transition:transform 0s .4s,opacity .1s 0s,-webkit-transform 0s .4s;opacity:0}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}.md-footer-nav{background-color:rgba(0,0,0,.87);color:#fff}.md-footer-nav__inner{padding:.2rem;overflow:auto}.md-footer-nav__link{padding-top:1.4rem;padding-bottom:.4rem;transition:opacity .25s}.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}[dir=rtl] .md-footer-nav__link--prev{float:right}.md-footer-nav__link--next{width:75%;float:right;text-align:right}[dir=rtl] .md-footer-nav__link--next{float:left;text-align:left}.md-footer-nav__button{transition:background .25s}.md-footer-nav__title{position:relative;padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-1rem;padding:0 1rem;color:hsla(0,0%,100%,.7);font-size:.75rem}.md-footer-meta{background-color:rgba(0,0,0,.895)}.md-footer-meta__inner{padding:.2rem;overflow:auto}html .md-footer-meta.md-typeset a{color:hsla(0,0%,100%,.7)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:#fff}.md-footer-copyright{margin:0 .6rem;padding:.4rem 0;color:hsla(0,0%,100%,.3);font-size:.64rem}.md-footer-copyright__highlight{color:hsla(0,0%,100%,.7)}.md-footer-social{margin:0 .4rem;padding:.2rem 0 .6rem}.md-footer-social__link{display:inline-block;width:1.6rem;height:1.6rem;font-size:.8rem;text-align:center}.md-footer-social__link:before{line-height:1.9}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;padding:0 .6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title:before{display:none;content:"\E5C4"}[dir=rtl] .md-nav__title:before{content:"\E5C8"}.md-nav__title .md-nav__button{display:none}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 .6rem}.md-nav__item:last-child{padding-bottom:.6rem}.md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-right:.6rem;padding-left:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__button img{width:100%;height:auto}.md-nav__link{display:block;margin-top:.625em;transition:color .125s;text-overflow:ellipsis;cursor:pointer;overflow:hidden}.md-nav__item--nested>.md-nav__link:after{content:"\E313"}html .md-nav__link[for=__toc]{display:none}html .md-nav__link[for=__toc]~.md-nav{display:none}html .md-nav__link[for=__toc]+.md-nav__link:after{display:none}.md-nav__link[data-md-state=blur]{color:rgba(0,0,0,.54)}.md-nav__link--active,.md-nav__link:active{color:#3f51b5}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:#536dfe}.md-nav__source,.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 2.2rem 0 3.6rem;text-overflow:ellipsis;z-index:2}[dir=rtl] .md-search__input{padding:0 3.6rem 0 2.2rem}.md-search__input::-webkit-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input:-ms-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-ms-input-placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::placeholder{transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-webkit-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input:-ms-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::-ms-input-placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;transition:color .25s cubic-bezier(.1,.7,.1,1),opacity .25s;font-size:1.2rem;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=__search]{top:.3rem;left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem;left:auto}.md-search__icon[for=__search]:before{content:"\E8B6"}.md-search__icon[type=reset]{top:.3rem;right:.5rem;-webkit-transform:scale(.125);transform:scale(.125);transition:opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);opacity:0}[dir=rtl] .md-search__icon[type=reset]{right:auto;left:.5rem}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{-webkit-transform:scale(1);transform:scale(1);opacity:1}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .1rem .1rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background-color:#fff;box-shadow:inset 0 .05rem 0 rgba(0,0,0,.07);overflow-y:auto;-webkit-overflow-scrolling:touch}.md-search-result{color:rgba(0,0,0,.87);word-break:break-word}.md-search-result__meta{padding:0 .8rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-size:.64rem;line-height:1.8rem}.md-search-result__list{margin:0;padding:0;border-top:.05rem solid rgba(0,0,0,.07);list-style:none}.md-search-result__item{box-shadow:0 -.05rem 0 rgba(0,0,0,.07)}.md-search-result__link{display:block;transition:background .25s;outline:0;overflow:hidden}.md-search-result__link:hover,.md-search-result__link[data-md-state=active]{background-color:rgba(83,109,254,.1)}.md-search-result__link:hover .md-search-result__article:before,.md-search-result__link[data-md-state=active] .md-search-result__article:before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:.6rem}.md-search-result__article{position:relative;padding:0 .8rem;overflow:auto}.md-search-result__article--document:before{position:absolute;left:0;margin:.1rem;transition:opacity .25s;color:rgba(0,0,0,.54);content:"\E880"}[dir=rtl] .md-search-result__article--document:before{right:0;left:auto}.md-search-result__article--document .md-search-result__title{margin:.55rem 0;font-size:.8rem;font-weight:400;line-height:1.4}.md-search-result__title{margin:.5em 0;font-size:.64rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:1.65rem;margin:.5em 0;color:rgba(0,0,0,.54);font-size:.64rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:12.1rem;padding:1.2rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:2.4rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .2rem;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}@-webkit-keyframes md-source__facts--done{0%{height:0}to{height:.65rem}}@keyframes md-source__facts--done{0%{height:0}to{height:.65rem}}@-webkit-keyframes md-source__fact--done{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes md-source__fact--done{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.md-source{display:block;padding-right:.6rem;transition:opacity .25s;font-size:.65rem;line-height:1.2;white-space:nowrap}[dir=rtl] .md-source{padding-right:0;padding-left:.6rem}.md-source:hover{opacity:.7}.md-source:after{display:inline-block;height:2.4rem;content:"";vertical-align:middle}.md-source__icon{display:inline-block;width:2.4rem;height:2.4rem;content:"";vertical-align:middle}.md-source__icon svg{width:1.2rem;height:1.2rem;margin-top:.6rem;margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem;margin-left:0}.md-source__icon+.md-source__repository{margin-left:-2.2rem;padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2.2rem;margin-left:0;padding-right:2rem;padding-left:0}.md-source__repository{display:inline-block;max-width:100%;margin-left:.6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:.55rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:md-source__facts--done .25s ease-in;animation:md-source__facts--done .25s ease-in}.md-source__fact{float:left}[dir=rtl] .md-source__fact{float:right}[data-md-state=done] .md-source__fact{-webkit-animation:md-source__fact--done .4s ease-out;animation:md-source__fact--done .4s ease-out}.md-source__fact:before{margin:0 .1rem;content:"\00B7"}.md-source__fact:first-child:before{display:none}.md-source-file{display:inline-block;margin:1em .5em 1em 0;padding-right:.25rem;border-radius:.1rem;background-color:rgba(0,0,0,.07);font-size:.64rem;list-style-type:none;cursor:pointer;overflow:hidden}.md-source-file:before{display:inline-block;margin-right:.25rem;padding:.25rem;background-color:rgba(0,0,0,.26);color:#fff;font-size:.8rem;content:"\E86F";vertical-align:middle}html .md-source-file{transition:background .4s,color .4s,box-shadow .4s cubic-bezier(.4,0,.2,1)}html .md-source-file:before{transition:inherit}html body .md-typeset .md-source-file{color:rgba(0,0,0,.54)}.md-source-file:hover{box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36)}.md-source-file:hover:before{background-color:#536dfe}.md-tabs{width:100%;transition:background .25s;background-color:#3f51b5;color:#fff;overflow:auto}.md-tabs__list{margin:0 0 0 .2rem;padding:0;list-style:none;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-right:.6rem;padding-left:.6rem}.md-tabs__link{display:block;margin-top:.8rem;transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);font-size:.7rem;opacity:.7}.md-tabs__link--active,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:.02s}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:.04s}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:.06s}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:.08s}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[data-md-state=hidden]{pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{-webkit-transform:translateY(50%);transform:translateY(50%);transition:color .25s,opacity .1s,-webkit-transform 0s .4s;transition:color .25s,transform 0s .4s,opacity .1s;transition:color .25s,transform 0s .4s,opacity .1s,-webkit-transform 0s .4s;opacity:0}.md-typeset .admonition,.md-typeset details{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;margin:1.5625em 0;padding:0 .6rem;border-left:.2rem solid #448aff;border-radius:.1rem;font-size:.64rem;overflow:auto}[dir=rtl] .md-typeset .admonition,[dir=rtl] .md-typeset details{border-right:.2rem solid #448aff;border-left:none}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin:1em 0}.md-typeset .admonition>.admonition-title,.md-typeset .admonition>summary,.md-typeset details>.admonition-title,.md-typeset details>summary{margin:0 -.6rem;padding:.4rem .6rem .4rem 2rem;border-bottom:.05rem solid rgba(68,138,255,.1);background-color:rgba(68,138,255,.1);font-weight:700}[dir=rtl] .md-typeset .admonition>.admonition-title,[dir=rtl] .md-typeset .admonition>summary,[dir=rtl] .md-typeset details>.admonition-title,[dir=rtl] .md-typeset details>summary{padding:.4rem 2rem .4rem .6rem}.md-typeset .admonition>.admonition-title:last-child,.md-typeset .admonition>summary:last-child,.md-typeset details>.admonition-title:last-child,.md-typeset details>summary:last-child{margin-bottom:0}.md-typeset .admonition>.admonition-title:before,.md-typeset .admonition>summary:before,.md-typeset details>.admonition-title:before,.md-typeset details>summary:before{position:absolute;left:.6rem;color:#448aff;font-size:1rem;content:"\E3C9"}[dir=rtl] .md-typeset .admonition>.admonition-title:before,[dir=rtl] .md-typeset .admonition>summary:before,[dir=rtl] .md-typeset details>.admonition-title:before,[dir=rtl] .md-typeset details>summary:before{right:.6rem;left:auto}.md-typeset .admonition.abstract,.md-typeset .admonition.summary,.md-typeset .admonition.tldr,.md-typeset details.abstract,.md-typeset details.summary,.md-typeset details.tldr{border-left-color:#00b0ff}[dir=rtl] .md-typeset .admonition.abstract,[dir=rtl] .md-typeset .admonition.summary,[dir=rtl] .md-typeset .admonition.tldr,[dir=rtl] .md-typeset details.abstract,[dir=rtl] .md-typeset details.summary,[dir=rtl] .md-typeset details.tldr{border-right-color:#00b0ff}.md-typeset .admonition.abstract>.admonition-title,.md-typeset .admonition.abstract>summary,.md-typeset .admonition.summary>.admonition-title,.md-typeset .admonition.summary>summary,.md-typeset .admonition.tldr>.admonition-title,.md-typeset .admonition.tldr>summary,.md-typeset details.abstract>.admonition-title,.md-typeset details.abstract>summary,.md-typeset details.summary>.admonition-title,.md-typeset details.summary>summary,.md-typeset details.tldr>.admonition-title,.md-typeset details.tldr>summary{border-bottom-color:.05rem solid rgba(0,176,255,.1);background-color:rgba(0,176,255,.1)}.md-typeset .admonition.abstract>.admonition-title:before,.md-typeset .admonition.abstract>summary:before,.md-typeset .admonition.summary>.admonition-title:before,.md-typeset .admonition.summary>summary:before,.md-typeset .admonition.tldr>.admonition-title:before,.md-typeset .admonition.tldr>summary:before,.md-typeset details.abstract>.admonition-title:before,.md-typeset details.abstract>summary:before,.md-typeset details.summary>.admonition-title:before,.md-typeset details.summary>summary:before,.md-typeset details.tldr>.admonition-title:before,.md-typeset details.tldr>summary:before{color:#00b0ff;content:""}.md-typeset .admonition.info,.md-typeset .admonition.todo,.md-typeset details.info,.md-typeset details.todo{border-left-color:#00b8d4}[dir=rtl] .md-typeset .admonition.info,[dir=rtl] .md-typeset .admonition.todo,[dir=rtl] .md-typeset details.info,[dir=rtl] .md-typeset details.todo{border-right-color:#00b8d4}.md-typeset .admonition.info>.admonition-title,.md-typeset .admonition.info>summary,.md-typeset .admonition.todo>.admonition-title,.md-typeset .admonition.todo>summary,.md-typeset details.info>.admonition-title,.md-typeset details.info>summary,.md-typeset details.todo>.admonition-title,.md-typeset details.todo>summary{border-bottom-color:.05rem solid rgba(0,184,212,.1);background-color:rgba(0,184,212,.1)}.md-typeset .admonition.info>.admonition-title:before,.md-typeset .admonition.info>summary:before,.md-typeset .admonition.todo>.admonition-title:before,.md-typeset .admonition.todo>summary:before,.md-typeset details.info>.admonition-title:before,.md-typeset details.info>summary:before,.md-typeset details.todo>.admonition-title:before,.md-typeset details.todo>summary:before{color:#00b8d4;content:""}.md-typeset .admonition.hint,.md-typeset .admonition.important,.md-typeset .admonition.tip,.md-typeset details.hint,.md-typeset details.important,.md-typeset details.tip{border-left-color:#00bfa5}[dir=rtl] .md-typeset .admonition.hint,[dir=rtl] .md-typeset .admonition.important,[dir=rtl] .md-typeset .admonition.tip,[dir=rtl] .md-typeset details.hint,[dir=rtl] .md-typeset details.important,[dir=rtl] .md-typeset details.tip{border-right-color:#00bfa5}.md-typeset .admonition.hint>.admonition-title,.md-typeset .admonition.hint>summary,.md-typeset .admonition.important>.admonition-title,.md-typeset .admonition.important>summary,.md-typeset .admonition.tip>.admonition-title,.md-typeset .admonition.tip>summary,.md-typeset details.hint>.admonition-title,.md-typeset details.hint>summary,.md-typeset details.important>.admonition-title,.md-typeset details.important>summary,.md-typeset details.tip>.admonition-title,.md-typeset details.tip>summary{border-bottom-color:.05rem solid rgba(0,191,165,.1);background-color:rgba(0,191,165,.1)}.md-typeset .admonition.hint>.admonition-title:before,.md-typeset .admonition.hint>summary:before,.md-typeset .admonition.important>.admonition-title:before,.md-typeset .admonition.important>summary:before,.md-typeset .admonition.tip>.admonition-title:before,.md-typeset .admonition.tip>summary:before,.md-typeset details.hint>.admonition-title:before,.md-typeset details.hint>summary:before,.md-typeset details.important>.admonition-title:before,.md-typeset details.important>summary:before,.md-typeset details.tip>.admonition-title:before,.md-typeset details.tip>summary:before{color:#00bfa5;content:""}.md-typeset .admonition.check,.md-typeset .admonition.done,.md-typeset .admonition.success,.md-typeset details.check,.md-typeset details.done,.md-typeset details.success{border-left-color:#00c853}[dir=rtl] .md-typeset .admonition.check,[dir=rtl] .md-typeset .admonition.done,[dir=rtl] .md-typeset .admonition.success,[dir=rtl] .md-typeset details.check,[dir=rtl] .md-typeset details.done,[dir=rtl] .md-typeset details.success{border-right-color:#00c853}.md-typeset .admonition.check>.admonition-title,.md-typeset .admonition.check>summary,.md-typeset .admonition.done>.admonition-title,.md-typeset .admonition.done>summary,.md-typeset .admonition.success>.admonition-title,.md-typeset .admonition.success>summary,.md-typeset details.check>.admonition-title,.md-typeset details.check>summary,.md-typeset details.done>.admonition-title,.md-typeset details.done>summary,.md-typeset details.success>.admonition-title,.md-typeset details.success>summary{border-bottom-color:.05rem solid rgba(0,200,83,.1);background-color:rgba(0,200,83,.1)}.md-typeset .admonition.check>.admonition-title:before,.md-typeset .admonition.check>summary:before,.md-typeset .admonition.done>.admonition-title:before,.md-typeset .admonition.done>summary:before,.md-typeset .admonition.success>.admonition-title:before,.md-typeset .admonition.success>summary:before,.md-typeset details.check>.admonition-title:before,.md-typeset details.check>summary:before,.md-typeset details.done>.admonition-title:before,.md-typeset details.done>summary:before,.md-typeset details.success>.admonition-title:before,.md-typeset details.success>summary:before{color:#00c853;content:""}.md-typeset .admonition.faq,.md-typeset .admonition.help,.md-typeset .admonition.question,.md-typeset details.faq,.md-typeset details.help,.md-typeset details.question{border-left-color:#64dd17}[dir=rtl] .md-typeset .admonition.faq,[dir=rtl] .md-typeset .admonition.help,[dir=rtl] .md-typeset .admonition.question,[dir=rtl] .md-typeset details.faq,[dir=rtl] .md-typeset details.help,[dir=rtl] .md-typeset details.question{border-right-color:#64dd17}.md-typeset .admonition.faq>.admonition-title,.md-typeset .admonition.faq>summary,.md-typeset .admonition.help>.admonition-title,.md-typeset .admonition.help>summary,.md-typeset .admonition.question>.admonition-title,.md-typeset .admonition.question>summary,.md-typeset details.faq>.admonition-title,.md-typeset details.faq>summary,.md-typeset details.help>.admonition-title,.md-typeset details.help>summary,.md-typeset details.question>.admonition-title,.md-typeset details.question>summary{border-bottom-color:.05rem solid rgba(100,221,23,.1);background-color:rgba(100,221,23,.1)}.md-typeset .admonition.faq>.admonition-title:before,.md-typeset .admonition.faq>summary:before,.md-typeset .admonition.help>.admonition-title:before,.md-typeset .admonition.help>summary:before,.md-typeset .admonition.question>.admonition-title:before,.md-typeset .admonition.question>summary:before,.md-typeset details.faq>.admonition-title:before,.md-typeset details.faq>summary:before,.md-typeset details.help>.admonition-title:before,.md-typeset details.help>summary:before,.md-typeset details.question>.admonition-title:before,.md-typeset details.question>summary:before{color:#64dd17;content:""}.md-typeset .admonition.attention,.md-typeset .admonition.caution,.md-typeset .admonition.warning,.md-typeset details.attention,.md-typeset details.caution,.md-typeset details.warning{border-left-color:#ff9100}[dir=rtl] .md-typeset .admonition.attention,[dir=rtl] .md-typeset .admonition.caution,[dir=rtl] .md-typeset .admonition.warning,[dir=rtl] .md-typeset details.attention,[dir=rtl] .md-typeset details.caution,[dir=rtl] .md-typeset details.warning{border-right-color:#ff9100}.md-typeset .admonition.attention>.admonition-title,.md-typeset .admonition.attention>summary,.md-typeset .admonition.caution>.admonition-title,.md-typeset .admonition.caution>summary,.md-typeset .admonition.warning>.admonition-title,.md-typeset .admonition.warning>summary,.md-typeset details.attention>.admonition-title,.md-typeset details.attention>summary,.md-typeset details.caution>.admonition-title,.md-typeset details.caution>summary,.md-typeset details.warning>.admonition-title,.md-typeset details.warning>summary{border-bottom-color:.05rem solid rgba(255,145,0,.1);background-color:rgba(255,145,0,.1)}.md-typeset .admonition.attention>.admonition-title:before,.md-typeset .admonition.attention>summary:before,.md-typeset .admonition.caution>.admonition-title:before,.md-typeset .admonition.caution>summary:before,.md-typeset .admonition.warning>.admonition-title:before,.md-typeset .admonition.warning>summary:before,.md-typeset details.attention>.admonition-title:before,.md-typeset details.attention>summary:before,.md-typeset details.caution>.admonition-title:before,.md-typeset details.caution>summary:before,.md-typeset details.warning>.admonition-title:before,.md-typeset details.warning>summary:before{color:#ff9100;content:""}.md-typeset .admonition.fail,.md-typeset .admonition.failure,.md-typeset .admonition.missing,.md-typeset details.fail,.md-typeset details.failure,.md-typeset details.missing{border-left-color:#ff5252}[dir=rtl] .md-typeset .admonition.fail,[dir=rtl] .md-typeset .admonition.failure,[dir=rtl] .md-typeset .admonition.missing,[dir=rtl] .md-typeset details.fail,[dir=rtl] .md-typeset details.failure,[dir=rtl] .md-typeset details.missing{border-right-color:#ff5252}.md-typeset .admonition.fail>.admonition-title,.md-typeset .admonition.fail>summary,.md-typeset .admonition.failure>.admonition-title,.md-typeset .admonition.failure>summary,.md-typeset .admonition.missing>.admonition-title,.md-typeset .admonition.missing>summary,.md-typeset details.fail>.admonition-title,.md-typeset details.fail>summary,.md-typeset details.failure>.admonition-title,.md-typeset details.failure>summary,.md-typeset details.missing>.admonition-title,.md-typeset details.missing>summary{border-bottom-color:.05rem solid rgba(255,82,82,.1);background-color:rgba(255,82,82,.1)}.md-typeset .admonition.fail>.admonition-title:before,.md-typeset .admonition.fail>summary:before,.md-typeset .admonition.failure>.admonition-title:before,.md-typeset .admonition.failure>summary:before,.md-typeset .admonition.missing>.admonition-title:before,.md-typeset .admonition.missing>summary:before,.md-typeset details.fail>.admonition-title:before,.md-typeset details.fail>summary:before,.md-typeset details.failure>.admonition-title:before,.md-typeset details.failure>summary:before,.md-typeset details.missing>.admonition-title:before,.md-typeset details.missing>summary:before{color:#ff5252;content:""}.md-typeset .admonition.danger,.md-typeset .admonition.error,.md-typeset details.danger,.md-typeset details.error{border-left-color:#ff1744}[dir=rtl] .md-typeset .admonition.danger,[dir=rtl] .md-typeset .admonition.error,[dir=rtl] .md-typeset details.danger,[dir=rtl] .md-typeset details.error{border-right-color:#ff1744}.md-typeset .admonition.danger>.admonition-title,.md-typeset .admonition.danger>summary,.md-typeset .admonition.error>.admonition-title,.md-typeset .admonition.error>summary,.md-typeset details.danger>.admonition-title,.md-typeset details.danger>summary,.md-typeset details.error>.admonition-title,.md-typeset details.error>summary{border-bottom-color:.05rem solid rgba(255,23,68,.1);background-color:rgba(255,23,68,.1)}.md-typeset .admonition.danger>.admonition-title:before,.md-typeset .admonition.danger>summary:before,.md-typeset .admonition.error>.admonition-title:before,.md-typeset .admonition.error>summary:before,.md-typeset details.danger>.admonition-title:before,.md-typeset details.danger>summary:before,.md-typeset details.error>.admonition-title:before,.md-typeset details.error>summary:before{color:#ff1744;content:""}.md-typeset .admonition.bug,.md-typeset details.bug{border-left-color:#f50057}[dir=rtl] .md-typeset .admonition.bug,[dir=rtl] .md-typeset details.bug{border-right-color:#f50057}.md-typeset .admonition.bug>.admonition-title,.md-typeset .admonition.bug>summary,.md-typeset details.bug>.admonition-title,.md-typeset details.bug>summary{border-bottom-color:.05rem solid rgba(245,0,87,.1);background-color:rgba(245,0,87,.1)}.md-typeset .admonition.bug>.admonition-title:before,.md-typeset .admonition.bug>summary:before,.md-typeset details.bug>.admonition-title:before,.md-typeset details.bug>summary:before{color:#f50057;content:""}.md-typeset .admonition.example,.md-typeset details.example{border-left-color:#651fff}[dir=rtl] .md-typeset .admonition.example,[dir=rtl] .md-typeset details.example{border-right-color:#651fff}.md-typeset .admonition.example>.admonition-title,.md-typeset .admonition.example>summary,.md-typeset details.example>.admonition-title,.md-typeset details.example>summary{border-bottom-color:.05rem solid rgba(101,31,255,.1);background-color:rgba(101,31,255,.1)}.md-typeset .admonition.example>.admonition-title:before,.md-typeset .admonition.example>summary:before,.md-typeset details.example>.admonition-title:before,.md-typeset details.example>summary:before{color:#651fff;content:""}.md-typeset .admonition.cite,.md-typeset .admonition.quote,.md-typeset details.cite,.md-typeset details.quote{border-left-color:#9e9e9e}[dir=rtl] .md-typeset .admonition.cite,[dir=rtl] .md-typeset .admonition.quote,[dir=rtl] .md-typeset details.cite,[dir=rtl] .md-typeset details.quote{border-right-color:#9e9e9e}.md-typeset .admonition.cite>.admonition-title,.md-typeset .admonition.cite>summary,.md-typeset .admonition.quote>.admonition-title,.md-typeset .admonition.quote>summary,.md-typeset details.cite>.admonition-title,.md-typeset details.cite>summary,.md-typeset details.quote>.admonition-title,.md-typeset details.quote>summary{border-bottom-color:.05rem solid hsla(0,0%,62%,.1);background-color:hsla(0,0%,62%,.1)}.md-typeset .admonition.cite>.admonition-title:before,.md-typeset .admonition.cite>summary:before,.md-typeset .admonition.quote>.admonition-title:before,.md-typeset .admonition.quote>summary:before,.md-typeset details.cite>.admonition-title:before,.md-typeset details.cite>summary:before,.md-typeset details.quote>.admonition-title:before,.md-typeset details.quote>summary:before{color:#9e9e9e;content:""}.codehilite .o,.codehilite .ow,.md-typeset .highlight .o,.md-typeset .highlight .ow{color:inherit}.codehilite .ge,.md-typeset .highlight .ge{color:#000}.codehilite .gr,.md-typeset .highlight .gr{color:#a00}.codehilite .gh,.md-typeset .highlight .gh{color:#999}.codehilite .go,.md-typeset .highlight .go{color:#888}.codehilite .gp,.md-typeset .highlight .gp{color:#555}.codehilite .gs,.md-typeset .highlight .gs{color:inherit}.codehilite .gu,.md-typeset .highlight .gu{color:#aaa}.codehilite .gt,.md-typeset .highlight .gt{color:#a00}.codehilite .gd,.md-typeset .highlight .gd{background-color:#fdd}.codehilite .gi,.md-typeset .highlight .gi{background-color:#dfd}.codehilite .k,.md-typeset .highlight .k{color:#3b78e7}.codehilite .kc,.md-typeset .highlight .kc{color:#a71d5d}.codehilite .kd,.codehilite .kn,.md-typeset .highlight .kd,.md-typeset .highlight .kn{color:#3b78e7}.codehilite .kp,.md-typeset .highlight .kp{color:#a71d5d}.codehilite .kr,.codehilite .kt,.md-typeset .highlight .kr,.md-typeset .highlight .kt{color:#3e61a2}.codehilite .c,.codehilite .cm,.md-typeset .highlight .c,.md-typeset .highlight .cm{color:#999}.codehilite .cp,.md-typeset .highlight .cp{color:#666}.codehilite .c1,.codehilite .ch,.codehilite .cs,.md-typeset .highlight .c1,.md-typeset .highlight .ch,.md-typeset .highlight .cs{color:#999}.codehilite .na,.codehilite .nb,.md-typeset .highlight .na,.md-typeset .highlight .nb{color:#c2185b}.codehilite .bp,.md-typeset .highlight .bp{color:#3e61a2}.codehilite .nc,.md-typeset .highlight .nc{color:#c2185b}.codehilite .no,.md-typeset .highlight .no{color:#3e61a2}.codehilite .nd,.codehilite .ni,.md-typeset .highlight .nd,.md-typeset .highlight .ni{color:#666}.codehilite .ne,.codehilite .nf,.md-typeset .highlight .ne,.md-typeset .highlight .nf{color:#c2185b}.codehilite .nl,.md-typeset .highlight .nl{color:#3b5179}.codehilite .nn,.md-typeset .highlight .nn{color:#ec407a}.codehilite .nt,.md-typeset .highlight .nt{color:#3b78e7}.codehilite .nv,.codehilite .vc,.codehilite .vg,.codehilite .vi,.md-typeset .highlight .nv,.md-typeset .highlight .vc,.md-typeset .highlight .vg,.md-typeset .highlight .vi{color:#3e61a2}.codehilite .nx,.md-typeset .highlight .nx{color:#ec407a}.codehilite .il,.codehilite .m,.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo,.md-typeset .highlight .il,.md-typeset .highlight .m,.md-typeset .highlight .mf,.md-typeset .highlight .mh,.md-typeset .highlight .mi,.md-typeset .highlight .mo{color:#e74c3c}.codehilite .s,.codehilite .sb,.codehilite .sc,.md-typeset .highlight .s,.md-typeset .highlight .sb,.md-typeset .highlight .sc{color:#0d904f}.codehilite .sd,.md-typeset .highlight .sd{color:#999}.codehilite .s2,.md-typeset .highlight .s2{color:#0d904f}.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sx,.md-typeset .highlight .se,.md-typeset .highlight .sh,.md-typeset .highlight .si,.md-typeset .highlight .sx{color:#183691}.codehilite .sr,.md-typeset .highlight .sr{color:#009926}.codehilite .s1,.codehilite .ss,.md-typeset .highlight .s1,.md-typeset .highlight .ss{color:#0d904f}.codehilite .err,.md-typeset .highlight .err{color:#a61717}.codehilite .w,.md-typeset .highlight .w{color:transparent}.codehilite .hll,.md-typeset .highlight .hll{display:block;margin:0 -.6rem;padding:0 .6rem;background-color:rgba(255,235,59,.5)}.md-typeset .codehilite,.md-typeset .highlight{position:relative;margin:1em 0;padding:0;border-radius:.1rem;background-color:hsla(0,0%,92.5%,.5);color:#37474f;line-height:1.4;-webkit-overflow-scrolling:touch}.md-typeset .codehilite code,.md-typeset .codehilite pre,.md-typeset .highlight code,.md-typeset .highlight pre{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;overflow:auto;vertical-align:top}.md-typeset .codehilite code::-webkit-scrollbar,.md-typeset .codehilite pre::-webkit-scrollbar,.md-typeset .highlight code::-webkit-scrollbar,.md-typeset .highlight pre::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset .codehilite code::-webkit-scrollbar-thumb,.md-typeset .codehilite pre::-webkit-scrollbar-thumb,.md-typeset .highlight code::-webkit-scrollbar-thumb,.md-typeset .highlight pre::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset .codehilite code::-webkit-scrollbar-thumb:hover,.md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,.md-typeset .highlight code::-webkit-scrollbar-thumb:hover,.md-typeset .highlight pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset pre.codehilite,.md-typeset pre.highlight{overflow:visible}.md-typeset pre.codehilite code,.md-typeset pre.highlight code{display:block;padding:.525rem .6rem;overflow:auto}.md-typeset .codehilitetable,.md-typeset .highlighttable{display:block;margin:1em 0;border-radius:.2em;font-size:.8rem;overflow:hidden}.md-typeset .codehilitetable tbody,.md-typeset .codehilitetable td,.md-typeset .highlighttable tbody,.md-typeset .highlighttable td{display:block;padding:0}.md-typeset .codehilitetable tr,.md-typeset .highlighttable tr{display:flex}.md-typeset .codehilitetable .codehilite,.md-typeset .codehilitetable .highlight,.md-typeset .codehilitetable .linenodiv,.md-typeset .highlighttable .codehilite,.md-typeset .highlighttable .highlight,.md-typeset .highlighttable .linenodiv{margin:0;border-radius:0}.md-typeset .codehilitetable .linenodiv,.md-typeset .highlighttable .linenodiv{padding:.525rem .6rem}.md-typeset .codehilitetable .linenos,.md-typeset .highlighttable .linenos{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.26);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset .codehilitetable .linenos pre,.md-typeset .highlighttable .linenos pre{margin:0;padding:0;background-color:transparent;color:inherit;text-align:right}.md-typeset .codehilitetable .code,.md-typeset .highlighttable .code{flex:1;overflow:hidden}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{box-shadow:none}.md-typeset [id^="fnref:"]{display:inline-block}.md-typeset [id^="fnref:"]:target{margin-top:-3.8rem;padding-top:3.8rem;pointer-events:none}.md-typeset [id^="fn:"]:before{display:none;height:0;content:""}.md-typeset [id^="fn:"]:target:before{display:block;margin-top:-3.5rem;padding-top:3.5rem;pointer-events:none}.md-typeset .footnote{color:rgba(0,0,0,.54);font-size:.64rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{transition:color .25s}.md-typeset .footnote li:target{color:rgba(0,0,0,.87)}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:#536dfe}.md-typeset .footnote-ref{display:inline-block;pointer-events:auto}.md-typeset .footnote-ref:before{display:inline;margin:0 .2em;border-left:.05rem solid rgba(0,0,0,.26);font-size:1.25em;content:"";vertical-align:-.25rem}.md-typeset .footnote-backref{display:inline-block;-webkit-transform:translateX(.25rem);transform:translateX(.25rem);transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s,-webkit-transform .25s .125s;color:rgba(0,0,0,.26);font-size:0;opacity:0;vertical-align:text-bottom}[dir=rtl] .md-typeset .footnote-backref{-webkit-transform:translateX(-.25rem);transform:translateX(-.25rem)}.md-typeset .footnote-backref:before{display:inline-block;font-size:.8rem;content:"\E31B"}[dir=rtl] .md-typeset .footnote-backref:before{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.md-typeset .headerlink{display:inline-block;margin-left:.5rem;-webkit-transform:translateY(.25rem);transform:translateY(.25rem);transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s,-webkit-transform .25s .25s;opacity:0}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem;margin-left:0}html body .md-typeset .headerlink{color:rgba(0,0,0,.26)}.md-typeset h1[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h1[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h1[id] .headerlink:focus,.md-typeset h1[id]:hover .headerlink,.md-typeset h1[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h1[id] .headerlink:focus,.md-typeset h1[id]:hover .headerlink:hover,.md-typeset h1[id]:target .headerlink{color:#536dfe}.md-typeset h2[id]:before{display:block;margin-top:-8px;padding-top:8px;content:""}.md-typeset h2[id]:target:before{margin-top:-3.4rem;padding-top:3.4rem}.md-typeset h2[id] .headerlink:focus,.md-typeset h2[id]:hover .headerlink,.md-typeset h2[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h2[id] .headerlink:focus,.md-typeset h2[id]:hover .headerlink:hover,.md-typeset h2[id]:target .headerlink{color:#536dfe}.md-typeset h3[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h3[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h3[id] .headerlink:focus,.md-typeset h3[id]:hover .headerlink,.md-typeset h3[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h3[id] .headerlink:focus,.md-typeset h3[id]:hover .headerlink:hover,.md-typeset h3[id]:target .headerlink{color:#536dfe}.md-typeset h4[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h4[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h4[id] .headerlink:focus,.md-typeset h4[id]:hover .headerlink,.md-typeset h4[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h4[id] .headerlink:focus,.md-typeset h4[id]:hover .headerlink:hover,.md-typeset h4[id]:target .headerlink{color:#536dfe}.md-typeset h5[id]:before{display:block;margin-top:-11px;padding-top:11px;content:""}.md-typeset h5[id]:target:before{margin-top:-3.55rem;padding-top:3.55rem}.md-typeset h5[id] .headerlink:focus,.md-typeset h5[id]:hover .headerlink,.md-typeset h5[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h5[id] .headerlink:focus,.md-typeset h5[id]:hover .headerlink:hover,.md-typeset h5[id]:target .headerlink{color:#536dfe}.md-typeset h6[id]:before{display:block;margin-top:-11px;padding-top:11px;content:""}.md-typeset h6[id]:target:before{margin-top:-3.55rem;padding-top:3.55rem}.md-typeset h6[id] .headerlink:focus,.md-typeset h6[id]:hover .headerlink,.md-typeset h6[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h6[id] .headerlink:focus,.md-typeset h6[id]:hover .headerlink:hover,.md-typeset h6[id]:target .headerlink{color:#536dfe}.md-typeset .MJXc-display{margin:.75em 0;padding:.75em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset .critic.comment,.md-typeset del.critic,.md-typeset ins.critic{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-.25em 0 0 #dfd}.md-typeset .critic.comment{background-color:hsla(0,0%,92.5%,.5);color:#37474f;box-shadow:.25em 0 0 hsla(0,0%,92.5%,.5),-.25em 0 0 hsla(0,0%,92.5%,.5)}.md-typeset .critic.comment:before{padding-right:.125em;color:rgba(0,0,0,.26);content:"\E0B7";vertical-align:-.125em}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:.8rem;padding-left:.8rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset details{display:block;padding-top:0}.md-typeset details[open]>summary:after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.md-typeset details:not([open]){padding-bottom:0}.md-typeset details:not([open])>summary{border-bottom:none}.md-typeset details summary{padding-right:2rem}[dir=rtl] .md-typeset details summary{padding-left:2rem}.no-details .md-typeset details:not([open])>*{display:none}.no-details .md-typeset details:not([open]) summary{display:block}.md-typeset summary{display:block;outline:none;cursor:pointer}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset summary:after{position:absolute;top:.4rem;right:.6rem;color:rgba(0,0,0,.26);font-size:1rem;content:"\E313"}[dir=rtl] .md-typeset summary:after{right:auto;left:.6rem}.md-typeset .emojione{width:1rem;vertical-align:text-top}.md-typeset code.codehilite,.md-typeset code.highlight{margin:0 .29412em;padding:.07353em 0}.md-typeset .superfences-content{display:none;order:99;width:100%;background-color:#fff}.md-typeset .superfences-content>*{margin:0;border-radius:0}.md-typeset .superfences-tabs{display:flex;position:relative;flex-wrap:wrap;margin:1em 0;border:.05rem solid rgba(0,0,0,.07);border-radius:.2em}.md-typeset .superfences-tabs>input{display:none}.md-typeset .superfences-tabs>input:checked+label{font-weight:700}.md-typeset .superfences-tabs>input:checked+label+.superfences-content{display:block}.md-typeset .superfences-tabs>label{width:auto;padding:.6rem;transition:color .125s;font-size:.64rem;cursor:pointer}html .md-typeset .superfences-tabs>label:hover{color:#536dfe}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em;left:auto}.md-typeset .task-list-control .task-list-indicator:before{position:absolute;top:.15em;left:-1.25em;color:rgba(0,0,0,.26);font-size:1.25em;content:"\E835";vertical-align:-.25em}[dir=rtl] .md-typeset .task-list-control .task-list-indicator:before{right:-1.25em;left:auto}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator:before{content:"\E834"}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a:after{color:rgba(0,0,0,.54);content:" [" attr(href) "]"}.md-typeset code,.md-typeset pre{white-space:pre-wrap}.md-typeset code{box-shadow:none;-webkit-box-decoration-break:initial;box-decoration-break:slice}.md-clipboard,.md-content__icon,.md-footer,.md-header,.md-sidebar,.md-tabs,.md-typeset .headerlink{display:none}}@media only screen and (max-width:44.9375em){.md-typeset pre{margin:1em -.8rem;border-radius:0}.md-typeset pre>code{padding:.525rem .8rem}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}.codehilite .hll,.md-typeset .highlight .hll{margin:0 -.8rem;padding:0 .8rem}.md-typeset>.codehilite,.md-typeset>.highlight{margin:1em -.8rem;border-radius:0}.md-typeset>.codehilite code,.md-typeset>.codehilite pre,.md-typeset>.highlight code,.md-typeset>.highlight pre{padding:.525rem .8rem}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em -.8rem;border-radius:0}.md-typeset>.codehilitetable .codehilite>code,.md-typeset>.codehilitetable .codehilite>pre,.md-typeset>.codehilitetable .highlight>code,.md-typeset>.codehilitetable .highlight>pre,.md-typeset>.codehilitetable .linenodiv,.md-typeset>.highlighttable .codehilite>code,.md-typeset>.highlighttable .codehilite>pre,.md-typeset>.highlighttable .highlight>code,.md-typeset>.highlighttable .highlight>pre,.md-typeset>.highlighttable .linenodiv{padding:.5rem .8rem}.md-typeset>p>.MJXc-display{margin:.75em -.8rem;padding:.25em .8rem}.md-typeset>.superfences-tabs{margin:1em -.8rem;border:0;border-top:.05rem solid rgba(0,0,0,.07);border-radius:0}.md-typeset>.superfences-tabs code,.md-typeset>.superfences-tabs pre{padding:.525rem .8rem}}@media only screen and (min-width:100em){html{font-size:137.5%}}@media only screen and (min-width:125em){html{font-size:150%}}@media only screen and (max-width:59.9375em){body[data-md-state=lock]{overflow:hidden}.ios body[data-md-state=lock] .md-container{display:none}html .md-nav__link[for=__toc]{display:block;padding-right:2.4rem}html .md-nav__link[for=__toc]:after{color:inherit;content:"\E8DE"}html .md-nav__link[for=__toc]+.md-nav__link{display:none}html .md-nav__link[for=__toc]~.md-nav{display:flex}html [dir=rtl] .md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav__source{display:block;padding:0 .2rem;background-color:rgba(50,64,144,.9675);color:#fff}.md-search__overlay{position:absolute;top:.2rem;left:.2rem;width:1.8rem;height:1.8rem;-webkit-transform-origin:center;transform-origin:center;transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:transform .3s .1s,opacity .2s .2s;transition:transform .3s .1s,opacity .2s .2s,-webkit-transform .3s .1s;border-radius:1rem;background-color:#fff;overflow:hidden;pointer-events:none}[dir=rtl] .md-search__overlay{right:.2rem;left:auto}[data-md-toggle=search]:checked~.md-header .md-search__overlay{transition:opacity .1s,-webkit-transform .4s;transition:transform .4s,opacity .1s;transition:transform .4s,opacity .1s,-webkit-transform .4s;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;width:100%;height:100%;-webkit-transform:translateX(5%);transform:translateX(5%);transition:right 0s .3s,left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:right 0s .3s,left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;transition:right 0s .3s,left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;-webkit-transform:translateX(0);transform:translateX(0);transition:right 0s 0s,left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:right 0s 0s,left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;transition:right 0s 0s,left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;opacity:1}[dir=rtl] [data-md-toggle=search]:checked~.md-header .md-search__inner{right:0;left:auto}html [dir=rtl] .md-search__inner{right:100%;left:auto;-webkit-transform:translateX(-5%);transform:translateX(-5%)}.md-search__input{width:100%;height:2.4rem;font-size:.9rem}.md-search__icon[for=__search]{top:.6rem;left:.8rem}.md-search__icon[for=__search][for=__search]:before{content:"\E5C4"}[dir=rtl] .md-search__icon[for=__search][for=__search]:before{content:"\E5C8"}.md-search__icon[type=reset]{top:.6rem;right:.8rem}.md-search__output{top:2.4rem;bottom:0}.md-search-result__article--document:before{display:none}}@media only screen and (max-width:76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-header-nav__button.md-icon--home,.md-header-nav__button.md-logo{display:none}.md-hero__inner{margin-top:2.4rem;margin-bottom:1.2rem}.md-nav{background-color:#fff}.md-nav--primary,.md-nav--primary .md-nav{display:flex;position:absolute;top:0;right:0;left:0;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}html .md-nav--primary .md-nav__title{position:relative;height:5.6rem;padding:3rem .8rem .2rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-weight:400;line-height:2.4rem;white-space:nowrap;cursor:pointer}html .md-nav--primary .md-nav__title:before{display:block;position:absolute;top:.2rem;left:.2rem;width:2rem;height:2rem;color:rgba(0,0,0,.54)}html .md-nav--primary .md-nav__title~.md-nav__list{background-color:#fff;box-shadow:inset 0 .05rem 0 rgba(0,0,0,.07)}html .md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}html .md-nav--primary .md-nav__title--site{position:relative;background-color:#3f51b5;color:#fff}html .md-nav--primary .md-nav__title--site .md-nav__button{display:block;position:absolute;top:.2rem;left:.2rem;width:3.2rem;height:3.2rem;font-size:2.4rem}html .md-nav--primary .md-nav__title--site:before{display:none}html [dir=rtl] .md-nav--primary .md-nav__title:before{right:.2rem;left:auto}html [dir=rtl] .md-nav--primary .md-nav__title--site .md-nav__button{right:.2rem;left:auto}.md-nav--primary .md-nav__list{flex:1;overflow-y:auto}.md-nav--primary .md-nav__item{padding:0;border-top:.05rem solid rgba(0,0,0,.07)}[dir=rtl] .md-nav--primary .md-nav__item{padding:0}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:2.4rem}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"\E315"}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"\E314"}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link:after{position:absolute;top:50%;right:.6rem;margin-top:-.6rem;color:inherit;font-size:1.2rem}[dir=rtl] .md-nav--primary .md-nav__link:after{right:auto;left:.6rem}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem;padding-left:0}.md-nav__toggle~.md-nav{display:flex;-webkit-transform:translateX(100%);transform:translateX(100%);transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s;transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);opacity:0}[dir=rtl] .md-nav__toggle~.md-nav{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.no-csstransforms3d .md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav{-webkit-transform:translateX(0);transform:translateX(0);transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1}.no-csstransforms3d .md-nav__toggle:checked~.md-nav{display:flex}.md-sidebar--primary{position:fixed;top:0;left:-12.1rem;width:12.1rem;height:100%;-webkit-transform:translateX(0);transform:translateX(0);transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);background-color:#fff;z-index:3}[dir=rtl] .md-sidebar--primary{right:-12.1rem;left:auto}.no-csstransforms3d .md-sidebar--primary{display:none}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);-webkit-transform:translateX(12.1rem);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{-webkit-transform:translateX(-12.1rem);transform:translateX(-12.1rem)}.no-csstransforms3d [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{display:block}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;margin:0}.md-tabs{display:none}}@media only screen and (min-width:60em){.md-content{margin-right:12.1rem}[dir=rtl] .md-content{margin-right:0;margin-left:12.1rem}.md-header-nav__button.md-icon--search{display:none}.md-header-nav__source{display:block;width:11.5rem;max-width:11.5rem;margin-left:1.4rem;padding-right:.6rem}[dir=rtl] .md-header-nav__source{margin-right:1.4rem;margin-left:0;padding-right:0;padding-left:.6rem}.md-search{padding:.2rem}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);cursor:pointer}[dir=rtl] .md-search__overlay{right:0;left:auto}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-search__inner{position:relative;width:11.5rem;padding:.1rem 0;float:right;transition:width .25s cubic-bezier(.1,.7,.1,1)}[dir=rtl] .md-search__inner{float:left}.md-search__form,.md-search__input{border-radius:.1rem}.md-search__input{width:100%;height:1.8rem;padding-left:2.2rem;transition:background-color .25s cubic-bezier(.1,.7,.1,1),color .25s cubic-bezier(.1,.7,.1,1);background-color:rgba(0,0,0,.26);color:inherit;font-size:.8rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input+.md-search__icon{color:inherit}.md-search__input::-webkit-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input:-ms-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::-ms-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::placeholder{color:hsla(0,0%,100%,.7)}.md-search__input:hover{background-color:hsla(0,0%,100%,.12)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.1rem .1rem 0 0;background-color:#fff;color:rgba(0,0,0,.87);text-overflow:none}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__output{top:1.9rem;transition:opacity .4s;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem;padding-left:0}.md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem;padding-left:.8rem}.md-sidebar--secondary{display:block;margin-left:100%;-webkit-transform:translate(-100%);transform:translate(-100%)}[dir=rtl] .md-sidebar--secondary{margin-right:100%;margin-left:0;-webkit-transform:translate(100%);transform:translate(100%)}}@media only screen and (min-width:76.25em){.md-content{margin-left:12.1rem}[dir=rtl] .md-content{margin-right:12.1rem}.md-content__inner{margin-right:1.2rem;margin-left:1.2rem}.md-header-nav__button.md-icon--menu{display:none}.md-nav[data-md-state=animate]{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav__toggle~.md-nav{max-height:0;overflow:hidden}.no-js .md-nav__toggle~.md-nav{display:none}.md-nav[data-md-state=expand],.md-nav__toggle:checked~.md-nav{max-height:100%}.no-js .md-nav[data-md-state=expand],.no-js .md-nav__toggle:checked~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--nested>.md-nav__link:after{display:inline-block;-webkit-transform-origin:.45em .45em;transform-origin:.45em .45em;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;vertical-align:-.125em}.js .md-nav__item--nested>.md-nav__link:after{transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link:after{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}.md-search__scrollwrap{width:34.4rem}.md-sidebar--secondary{margin-left:61rem}[dir=rtl] .md-sidebar--secondary{margin-right:61rem;margin-left:0}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{font-size:0;visibility:hidden}.md-tabs--active~.md-main .md-nav--primary .md-nav__title{display:block;padding:0}.md-tabs--active~.md-main .md-nav--primary .md-nav__title--site{display:none}.no-js .md-tabs--active~.md-main .md-nav--primary .md-nav{display:block}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{font-size:0;visibility:hidden}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none;font-size:.7rem;overflow:auto;visibility:visible}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested>.md-nav__link{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block}.md-tabs--active~.md-main .md-nav[data-md-level="1"]{max-height:none;overflow:visible}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:0}.md-tabs--active~.md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title{display:none}}@media only screen and (min-width:45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}[dir=rtl] .md-footer-copyright{float:right}.md-footer-social{padding:.6rem 0;float:right}[dir=rtl] .md-footer-social{float:left}}@media only screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(45);transform:scale(45)}}@media only screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(60);transform:scale(60)}}@media only screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(75);transform:scale(75)}}@media only screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}.md-search__scrollwrap{width:23.4rem}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}} \ No newline at end of file diff --git a/docs/basicusage.html b/docs/basicusage.html index 9daa426..5b1300f 100644 --- a/docs/basicusage.html +++ b/docs/basicusage.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,81 +229,6 @@ - - - -
    - + diff --git a/docs/changelog.html b/docs/changelog.html index 2b30b9e..a2c184e 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -139,7 +139,7 @@ - + Skip to content @@ -229,81 +229,6 @@ - - - -
    @@ -636,12 +561,60 @@ -
  • - +
  • + + + + + +
  • + @@ -683,6 +656,13 @@
    - + diff --git a/docs/credit.html b/docs/credit.html new file mode 100644 index 0000000..0dadaae --- /dev/null +++ b/docs/credit.html @@ -0,0 +1,1185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Saved credentail access - AutoConnect for ESP8266/ESP32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content + + + +
    + +
    + +
    + + + + +
    +
    + + +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    + + +
    +
    + + + +

    Saved credentail access

    + +

    Saved credential in EEPROM

    +

    AutoConnect stores the established WiFi connection in the EEPROM of the ESP8266/ESP32 module and equips the class to access it from the sketch. You can read, write or erase the credentials using this class individually. It's AutoConnectCredential class which provides the access method to the saved credentials in EEPROM.1

    +

    AutoConnectCredential

    +

    Include header

    +
    #include <AutoConnectCredential.h>
    +
    + +

    Constructors

    +
    AutoConnectCredential();
    +
    + +

    AutoConnectCredential default constructor. The default offset value is 0. If the offset value is 0, the credential area starts from the top of the EEPROM. AutoConnect sometimes overwrites data when using this area with user sketch.

    +

    AutoConnectCredential(uint16_t offset);
    +
    +
    +
    Parameter
    +
    offsetSpecies offset from the top of the EEPROM for the credential area together. The offset value is from 0 to the flash sector size.
    +

    +

    Public member functions

    +

    entries

    +
    uint8_t entries(void)
    +
    + +

    Returns number of entries as contained credentials. +

    +
    Return value
    +
    Number of entries as contained credentials.
    +

    +

    load

    +
    int8_t load(const char* ssid, struct station_config* config)
    +
    + +

    Load a credential entry and store to config. +

    +
    Parameters
    +
    ssidSSID to be loaded.
    +
    configstation_config
    +
    Return value
    +
    Save the specified SSID's credential entry to station_config pointed to by the parameter as config. -1 is returned if the SSID is not saved.
    +

    +

    load

    +
    bool load(int8_t entry, struct station_config* config)
    +
    + +

    Load a credential entry and store to config. +

    +
    Parameters
    +
    entrySpecifies the index number based 0 to be loaded.
    +
    configstation_config
    +
    Return value
    +
    Save the specified credential entry to station_config pointed to by the parameter as config. -1 is returned if specified number is not saved.
    +

    +

    save

    +
    bool save(const struct station_config* config)
    +
    + +

    Save a credentail entry. +

    +
    Parameter
    +
    configstation_config to be saved.
    +
    Return value
    +
    trueSuccessfully saved.
    +
    falseFailed to save.
    +

    +

    del

    +
    bool del(const char* ssid)
    +
    + +

    Delete a credential the specified SSID. +

    +
    Parameter
    +
    ssidSSID to be deleted.
    +
    Return value
    +
    trueSuccessfully deleted.
    +
    falseFailed to delete.
    +

    +

    The data structures

    +

    station_config

    +

    A structure is included in the ESP8266 SDK. You can use it in the sketch like as follows:

    +
    extern "C" {
    +#include <user_interface.h>
    +}
    +
    + +
    struct station_config {
    +  uint8 ssid[32];
    +  uint8 password[64];
    +  uint8 bssid_set;
    +  uint8 bssid[6];
    +};
    +
    + +

    The credential entry

    +

    A data structure of the credential saving area in EEPROM as the below. 2

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Byte offsetLengthValue
    08AC_CREDT
    81Number of contained entries (uint8_t)
    92Container size, excluding size of AC_CREDT and size of the number of entries(width for uint16_t type).
    11variableSSID terminated by 0x00. Max length is 32 bytes.
    variablevariablePassword plain text terminated by 0x00. Max length is 64 bytes.
    variable6BSSID
    variableContained the next entries. (Continuation SSID+Password+BSSID)
    variable10x00. End of container.
    +
    +
    +
      +
    1. +

      An example using AutoConnectCredential is provided as an example of a library sketch to delete saved credentials. 

      +
    2. +
    3. +

      There may be 0xff as an invalid data in the credential saving area. The 0xff area would be reused. 

      +
    4. +
    +
    + + + + + + + + + +
    +
    +
    +
    + + + + +
    + + + + + + + + + + \ No newline at end of file diff --git a/docs/datatips.html b/docs/datatips.html index b13587a..11ceaa6 100644 --- a/docs/datatips.html +++ b/docs/datatips.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
    @@ -756,12 +679,60 @@ -
  • - +
  • + + + + + +
  • + @@ -931,16 +902,20 @@

    Here, represent examples the typical method for the data type conversion for the AutoConnectElements value of custom Web pages.

    Integer

    Use int() or toInt() of String.

    -
    AutoConnectInput& input = aux.getElement<AutoConnectInput>("INPUT");
    +

    AutoConnectInput& input = aux.getElement<AutoConnectInput>("INPUT");
     int value = input.value.toInt();
     
    - +You can shorten it and write as like: +
    int value = aux["INPUT"].value.toInt();
    +

    Float

    Use float() or toFloat() of String.

    -
    AutoConnectInput& input = aux.getElement<AutoConnectInput>("INPUT");
    +

    AutoConnectInput& input = aux.getElement<AutoConnectInput>("INPUT");
     float value = input.value.toFloat();
     
    - +You can shorten it and write as like: +
    float value = aux["INPUT"].value.toFloat();
    +

    Date & Time

    The easiest way is to use the Arduino Time Library. Sketches must accommodate differences in date and time formats depending on the time zone. You can absorb the difference in DateTime format by using sscanf function.1

    #include <TimeLib.h>
    @@ -948,7 +923,7 @@
     time_t tm;
     int Year, Month, Day, Hour, Minute, Second;
     
    -AutoConnectInput& input = aux.getElement<AutoConnectInput>("INPUT");
    +AutoConnectInput& input = aux.["INPUT"].as<AutoConnectInput>();
     sscanf(input.value.c_str(), "%d-%d-%d %d:%d:%d", &Year, &Month, &Day, &Hour, &Minute, &Second);
     tm.Year = CalendarYrToTm(Year);
     tm.Month = Month;
    @@ -961,7 +936,7 @@
     

    IP address

    To convert a String to an IP address, use IPAddress::fromString. To stringize an instance of an IP address, use IPAddress::toString.

    IPAddress ip;
    -AutoConnectInput& input aux.getElement<AutoConnectInput>("INPUT");
    +AutoConnectInput& input aux["INPUT"].as<AutoConnectInput>();
     ip.fromString(input.value);
     input.value = ip.toString();
     
    @@ -1012,9 +987,9 @@ AutoConnect portal; String checkIPAddress(AutoConnectAux& aux, PageArgument& args) { - AutoConnectAux* input_page = portal.aux("/"); - AutoConnectInput& ipaddress = input_page->getElement<AutoConnectInput>("ipaddress"); - AutoConnectText& result = aux.getElement<AutoConnectText>("result"); + AutoConnectAux& input_page = *portal.aux("/"); + AutoConnectInput& ipaddress = input_page["ipaddress"].as<AutoConnectInput>(); + AutoConnectText& result = aux["result"].as<AutoConnectText>(); if (ipaddress.isValid()) { result.value = "IP Address " + ipaddress.value + " is OK."; @@ -1163,7 +1138,7 @@
    - + diff --git a/docs/faq.html b/docs/faq.html index 93177bc..bf43a7d 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,81 +229,6 @@ - - - -
    @@ -636,12 +561,60 @@ -
  • - +
  • + + + + + +
  • + @@ -732,40 +705,6 @@ How erase the credentials saved in EEPROM? - -
  • @@ -991,40 +930,6 @@ How erase the credentials saved in EEPROM? - -
  • @@ -1207,7 +1112,7 @@ For AutoConnect menus to work properly, call How change esp8266ap for SSID name in Captive portal?

    You can change both by using AutoConnectConfig::apid and AutoConnectConfig::psk. Refer to section Change SSID and Password for SoftAP in Advanced usage.

    How change HTTP port?

    -

    HTTP port number is defined as a macro in AutoConnect.h header file. You can change it directly with several editors and must re-compile.

    +

    HTTP port number is defined as a macro in AutoConnectDefs.h header file. You can change it directly with several editors and must re-compile.

    #define AUTOCONNECT_HTTPPORT    80
     
    @@ -1243,117 +1148,7 @@ wdt reset
  • How erase the credentials saved in EEPROM?

    -

    Make some sketches for erasing the EEPROM area, or some erasing utility is needed. You can prepare the sketch to erase the saved credential with AutoConnectCredential. The AutoConnectCrendential class provides the access method to the saved credential in EEPROM and library source file is including it.

    -

    A class description of AutoConnectCredential is follows.

    -

    Include header

    -
    #include <AutoConnectCredential.h>
    -
    - -

    Constructor

    -
    AutoConnectCredential();
    -
    - -

    AutoConnectCredential default constructor. The default offset value is 0. If the offset value is 0, the credential storage area starts from the top of the EEPROM. AutoConnect sometimes overwrites data when using this area with user sketch.

    -
    AutoConnectCredential(uint16_t offset);
    -
    - -

    Specify offset from the top of the EEPROM for the credential storage area together. The offset value is from 0 to the flash sector size.

    -

    Public member functions

    -
      -
    • -

      uint8_t entries()
      - Returns number of entries as contained credentials.

      -
    • -
    • -

      int8_t load(const char* ssid, struct station_config* config)
      - Load a credential entry specified ssid to config. Returns -1 as unsuccessfully loaded.

      -
    • -
    • -

      bool load(int8_t entry, struct station_config* config)
      - Load a credential entry to config. The entry parameter specify to index of the entry.

      -
    • -
    • -

      bool save(const struct station_config* config)
      - Save a credential entry stored in config to EEPROM. Returns the true as succeeded.

      -
    • -
    • -

      bool del(const char* ssid)
      - Delete a credential entry specified ssid. Returns the true as successfully deleted.

      -
    • -
    -

    Data structures

    -
      -
    • station_config
      - A structure is included in the ESP8266 SDK. You can use it in the sketch like as follows.
    • -
    -
    extern "C" {
    -#include <user_interface.h>
    -}
    -
    - -
    struct station_config {
    -    uint8 ssid[32];
    -    uint8 password[64];
    -    uint8 bssid_set;
    -    uint8 bssid[6];
    -};
    -
    - -
      -
    • EEPROM data structure
      - A data structure of the credential saving area in EEPROM as the below. 1
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Byte offsetLengthValue
    08AC_CREDT
    81Number of contained entries (uint8_t)
    92Container size, excluding size of AC_CREDT and size of the number of entries(width for uint16_t type).
    11variableSSID terminated by 0x00. Max length is 32 bytes.
    variablevariablePassword plain text terminated by 0x00. Max length is 64 bytes.
    variable6BSSID
    variableContained the next entries. (Continuation SSID+Password+BSSID)
    variable10x00. End of container.
    +

    Make some sketches for erasing the EEPROM area, or some erasing utility is needed. You can prepare the sketch to erase the saved credential with AutoConnectCredential. The AutoConnectCrendential class provides the access method to the saved credential in EEPROM and library source file is including it. Refer to 'Saved credential access' on section Appendix for details.

    Hint

    With the ESPShaker, you can access EEPROM interactively from the serial monitor, and of course you can erase saved credentials.

    @@ -1401,12 +1196,12 @@ wdt reset
    #define AC_DEBUG
     
    -

    PageBuilder.h 2

    +

    PageBuilder.h 1

    #define PB_DEBUG
     

    4. Reports the issue to AutoConnect Github repository

    -

    If you can not solve AutoConnect problems please report to Issues. And please make your question comprehensively, not a statement. Include all relevant information to start the problem diagnostics as follows:3

    +

    If you can not solve AutoConnect problems please report to Issues. And please make your question comprehensively, not a statement. Include all relevant information to start the problem diagnostics as follows:2

    • Hardware module
    • Arduino core version Including the upstream commit ID if necessary
    • @@ -1424,14 +1219,11 @@ wdt reset

        -
      1. -

        There may be 0xff as an invalid data in the credential saving area. The 0xff area would be reused. 

        -
      2. -

        PageBuilder.h exists in the libraries/PageBuilder/src directory under your sketch folder. 

        +

        PageBuilder.h exists in the libraries/PageBuilder/src directory under your sketch folder. 

      3. -

        Without this information, the reproducibility of the problem is reduced, making diagnosis and analysis difficult. 

        +

        Without this information, the reproducibility of the problem is reduced, making diagnosis and analysis difficult. 

      @@ -1455,7 +1247,7 @@ wdt reset @@ -1517,7 +1309,7 @@ wdt reset
    - + diff --git a/docs/gettingstarted.html b/docs/gettingstarted.html index 7481975..e4bc5a6 100644 --- a/docs/gettingstarted.html +++ b/docs/gettingstarted.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,81 +229,6 @@ - - - -
    @@ -704,12 +629,60 @@ -
  • - +
  • + + + + + +
  • + @@ -969,7 +942,7 @@ Or, "RESET" can be selected. The ESP8266 resets and reboots. Af
    - + diff --git a/docs/howtoembed.html b/docs/howtoembed.html index 7a7eee9..c3a0ebe 100644 --- a/docs/howtoembed.html +++ b/docs/howtoembed.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
    - + diff --git a/docs/images/ac_upload_flow.svg b/docs/images/ac_upload_flow.svg new file mode 100644 index 0000000..e2b7fd3 --- /dev/null +++ b/docs/images/ac_upload_flow.svg @@ -0,0 +1,973 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + Upload + + + + + + + + + + + + + + + + + + + + + + + + + Submit + + Web Browser + + File + + + HTTPUploadStatus { String filename; String name;} + RequestHandler::upload() + + + + HTTPUploadStatus + name + value + + + + + + + + REGISTER + + AutoConnectAux::onUpload(uplooadHandler) + INVOKE uploadHandler + value + + + AutoConnectFile + COPY + COPY + + + + REGISTER + WebServer::on(reqHandler) + + INVOKE reqHandler + FunctionreqHandler() + + + + + Sketch + + + + Built-in uploader + + + + AutoConnect + + + + ESP8266WebServerWebServer w/ESP32 + + POST /{URL}Upload=File + CREATE + AutoConnectFile + + SAVE + + + diff --git a/docs/images/acfile.png b/docs/images/acfile.png new file mode 100644 index 0000000000000000000000000000000000000000..40fbb3b8636e48a49daf50c0f58e4e152d178b69 GIT binary patch literal 4870 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 literal 0 HcmV?d00001 diff --git a/docs/images/upload.gif b/docs/images/upload.gif new file mode 100644 index 0000000000000000000000000000000000000000..0ebbab3e3bf7a5965101466ee54fb782e87fdf5e GIT binary patch literal 183630 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⋘H;Kv$|29-p^> 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
    >(2<9LJD$6?R93>YHEcf7}cJjjQ<$d5e9 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index d3b11f0..f378947 100644 --- a/docs/index.html +++ b/docs/index.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,81 +229,6 @@ - - - -
    @@ -769,12 +694,60 @@ -
  • - +
  • + + + + + +
  • + @@ -1011,14 +984,10 @@ Install third-party platform using the Boards Manager of Arduino IDE. P Install third-party platform using the Boards Manager of Arduino IDE. You can add multiple URLs into Additional Board Manager URLs field, separating them with commas. Package URL is https://dl.espressif.com/dl/package_esp32_index.json for ESP32.

    Additional library (Required)

    The PageBuilder library to build HTML for ESP8266WebServer is needed.
    -To install the PageBuilder library into your Arduino IDE, you can use the Library Manager. Select the board of ESP8266 series in the Arduino IDE, open the library manager and search keyword 'PageBuilder' with the topic 'Communication', then you can see the PageBuilder. The latest version is required 1.3.2 later.1

    +To install the PageBuilder library into your Arduino IDE, you can use the Library Manager. Select the board of ESP8266 series in the Arduino IDE, open the library manager and search keyword 'PageBuilder' with the topic 'Communication', then you can see the PageBuilder. The latest version is required 1.3.3 later.1

    Additional library (Optional)

    -

    By adding the ArduinoJson library, AutoConnect will be able to handle the custom Web pages described with JSON. With AutoConnect v0.9.7 you can insert user-owned web pages that can consist of representative HTML elements as styled TEXT, INPUT, BUTTON, CHECKBOX, SELECT, SUBMIT and invoke them from the AutoConnect menu. These HTML elements can be added by sketches using the AutoConnect API. Further it possible importing the custom Web pages declarations described with JSON which stored in PROGMEM, SPIFFS, or SD. ArduinoJson version 5 is required to use this feature.2

    -
    -

    AutoConnect supports ArduinoJson version 5 only

    -

    ArduinoJson version 6 is just released, Arduino Library Manager installs the ArduinoJson version 6 by default. Open the Arduino Library Manager and make sure that ArduinoJson version 5 is installed.

    -
    +

    By adding the ArduinoJson library, AutoConnect will be able to handle the custom Web pages described with JSON. Since AutoConnect v0.9.7 you can insert user-owned web pages that can consist of representative HTML elements as styled TEXT, INPUT, BUTTON, CHECKBOX, SELECT, SUBMIT and invoke them from the AutoConnect menu. These HTML elements can be added by sketches using the AutoConnect API. Further it possible importing the custom Web pages declarations described with JSON which stored in PROGMEM, SPIFFS, or SD. ArduinoJson is required to use this feature.2 AutoConnect can work with ArduinoJson both version 5 and version 6.

    Install the AutoConnect

    Clone or download from the AutoConnect GitHub repository.

    @@ -1038,7 +1007,7 @@ To install the PageBuilder library into your Arduino IDE, you can use the Li
    1. -

      Since AutoConnect v0.9.7, PageBuilder v1.3.2 later is required. 

      +

      Since AutoConnect v0.9.8, PageBuilder v1.3.3 later is required. 

    2. Using the AutoConnect API natively allows you to sketch custom Web pages without JSON. 

      @@ -1113,7 +1082,7 @@ To install the PageBuilder library into your Arduino IDE, you can use the Li
    - + diff --git a/docs/license.html b/docs/license.html index 9fbfe41..e004ed4 100644 --- a/docs/license.html +++ b/docs/license.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -225,81 +225,6 @@ - - - -
    @@ -632,12 +557,60 @@ -
  • - +
  • + + + + + +
  • + @@ -777,7 +750,7 @@ IN THE SOFTWARE.

    - + diff --git a/docs/lsbegin.html b/docs/lsbegin.html index 973608b..a39801f 100644 --- a/docs/lsbegin.html +++ b/docs/lsbegin.html @@ -38,15 +38,15 @@ - + - Appendix - AutoConnect for ESP8266/ESP32 + Inside AutoConnect::begin - AutoConnect for ESP8266/ESP32 - + @@ -57,7 +57,7 @@ - + @@ -164,7 +164,7 @@ AutoConnect for ESP8266/ESP32 - Appendix + Inside AutoConnect::begin
    @@ -229,81 +229,6 @@ - - - -
    @@ -638,17 +563,38 @@ +
  • + + + + + +
  • + @@ -755,10 +730,10 @@ -

    Appendix

    +

    Inside AutoConnect::begin

    AutoConnect::begin logic sequence

    -

    Several parameters as follows of AutoConnectConfig affect the behavior of AutoConnect::begin function. Each parameter affects the behaves in interacted order with the priority and apply to the logic sequence of AutoConnect::begin.

    +

    Several parameters as follows of AutoConnectConfig affect the behavior of AutoConnect::begin function. Each parameter affects the behaves in interacted order with the priority and apply to the logic sequence of AutoConnect::begin.

    • immediateStart : The captive portal start immediately, without first WiFi.begin.
    • autoReconenct : Attempt re-connect with past SSID by saved credential.
    • @@ -767,9 +742,9 @@

    You can use these parameters in combination with sketch requirements and need to understand correctly the behavior caused by the parameters. The following chart shows the AutoConnect::begin logic sequence including the effect of these parameters.

    -

    For example, AutoConnect::begin will not exits without the portalTimeout while the connection not establishes, but WebServer will start to work. A DNS server that detects the probe of the captive portal is also effective. So, your sketch may work seemingly, but it will close with inside a loop of the AutoConnect::begin function. Especially when invoking AutoConnect::begin in the setup(), execution control does not pass to the loop().

    -

    As different scenes, you may use the immediateStart effectively. Equipped the external switch to activate the captive portal with the ESP module, combined with the portalTime and the retainPortal it will become WiFi active connection feature. You can start AutoConnect::begin at any point in the loop(), which allows your sketch can behave both the offline mode and the online mode.

    -

    The retainPortal option allows the DNS server to continue operation after exiting from AutoConnect::begin. AutoConnect traps captive portal detection from the client and redirects it to the AutoConnect menu. That trap will answer all unresolved addresses with SoftAP's IP address. If the URI handler for the source request is undefined, it returns a 302 response with SoftAPIP/_ac to the client. This is the mechanism of AutoConnect's captive portal. Captive portal probes will frequently occur while you are attempting on the client device's WiFi connection Apps and these implementations are varied each OS, so it not realistic to identify all probing URIs. Therefore, while retainPortal is enabled, it is not preferable to executing the sketch under the WiFi connection Apps on the client device. (Probably not work correctly) You need to exit from the WiFi connection Apps once.

    +

    For example, AutoConnect::begin will not exits without the portalTimeout while the connection not establishes, but WebServer will start to work. A DNS server that detects the probe of the captive portal is also effective. So, your sketch may work seemingly, but it will close with inside a loop of the AutoConnect::begin function. Especially when invoking AutoConnect::begin in the setup(), execution control does not pass to the loop().

    +

    As different scenes, you may use the immediateStart effectively. Equipped the external switch to activate the captive portal with the ESP module, combined with the portalTime and the retainPortal it will become WiFi active connection feature. You can start AutoConnect::begin at any point in the loop(), which allows your sketch can behave both the offline mode and the online mode.

    +

    The retainPortal option allows the DNS server to continue operation after exiting from AutoConnect::begin. AutoConnect traps captive portal detection from the client and redirects it to the AutoConnect menu. That trap will answer all unresolved addresses with SoftAP's IP address. If the URI handler for the source request is undefined, it returns a 302 response with SoftAPIP/_ac to the client. This is the mechanism of AutoConnect's captive portal. Captive portal probes will frequently occur while you are attempting on the client device's WiFi connection Apps and these implementations are varied each OS, so it not realistic to identify all probing URIs. Therefore, while retainPortal is enabled, it is not preferable to executing the sketch under the WiFi connection Apps on the client device. (Probably not work correctly) You need to exit from the WiFi connection Apps once.

    Please consider these kinds of influence when you make sketches.

    The AutoConnect::begin 3rd parameter

    @@ -810,13 +785,13 @@ - -
    @@ -726,12 +651,60 @@ -
  • - +
  • + + + + + +
  • + @@ -1003,7 +976,7 @@ Enter SSID and Passphrase and tap "apply" to starts WiFi connec
    - + diff --git a/docs/menuize.html b/docs/menuize.html index afd0c24..f2b2626 100644 --- a/docs/menuize.html +++ b/docs/menuize.html @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -229,83 +229,6 @@ - - - - - -
    - + diff --git a/docs/search/search_index.json b/docs/search/search_index.json index e93423e..9e00790 100644 --- a/docs/search/search_index.json +++ b/docs/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"AutoConnect for ESP8266/ESP32 \u00b6 An Arduino library for ESP8266/ESP32 WLAN configuration at run time with web interface. Overview \u00b6 To the dynamic configuration for joining to WLAN with SSID and PSK accordingly. It an Arduino library united with ESP8266WebServer class for ESP8266 or WebServer class for ESP32. Easy implementing the Web interface constituting the WLAN for ESP8266/ESP32 WiFi connection. With this library to make a sketch easily which connects from ESP8266/ESP32 to the access point at runtime by the web interface without hard-coded SSID and password. No need pre-coded SSID & password \u00b6 It is no needed hard-coding in advance the SSID and Password into the sketch to connect between ESP8266/ESP32 and WLAN. You can input SSID & Password from a smartphone via the web interface at runtime. Simple usage \u00b6 AutoConnect control screen will be displayed automatically for establishing new connections. It aids by the captive portal when vested the connection cannot be detected. By using the AutoConnect menu , to manage the connections convenient. Store the established connection \u00b6 The connection authentication data as credentials are saved automatically in EEPROM of ESP8266/ESP32 and You can select the past SSID from the AutoConnect menu . Easy to embed in \u00b6 AutoConnect can be placed easily in your sketch. It's \" begin \" and \" handleClient \" only. Lives with your sketches \u00b6 The sketches which provide the web page using ESP8266WebServer there is, AutoConnect will not disturb it. AutoConnect can use an already instantiated ESP8266WebServer object, or itself can assign it. This effect also applies to ESP32. The corresponding class for ESP32 will be the WebServer. Easy to add the custom Web pages ENHANCED w/v0.9.7 \u00b6 You can easily add your owned web pages that can consist of representative HTML elements and invoke them from the menu. Further it possible importing the custom Web pages declarations described with JSON which stored in PROGMEM, SPIFFS, or SD. Installation \u00b6 Requirements \u00b6 Supported hardware \u00b6 Generic ESP8266 modules (applying the ESP8266 Community's Arduino core) Adafruit HUZZAH ESP8266 (ESP-12) ESP-WROOM-02 Heltec WiFi Kit 8 NodeMCU 0.9 (ESP-12) / NodeMCU 1.0 (ESP-12E) Olimex MOD-WIFI-ESP8266 SparkFun Thing SweetPea ESP-210 ESP32Dev Board (applying the Espressif's arduino-esp32 core) SparkFun ESP32 Thing WEMOS LOLIN D32 Ai-Thinker NodeMCU-32S Heltec WiFi Kit 32 M5Stack And other ESP8266/ESP32 modules supported by the Additional Board Manager URLs of the Arduino-IDE. About flash size on the module The AutoConnect sketch size is relatively large. Large flash capacity is necessary. 512Kbyte (4Mbits) flash inclusion module such as ESP-01 is not recommended. Required libraries \u00b6 AutoConnect requires the following environment and libraries. Arduino IDE The current upstream at the 1.8 level or later is needed. Please install from the official Arduino IDE download page . This step is not required if you already have a modern version. ESP8266 Arduino core AutoConnect targets sketches made on the assumption of ESP8266 Community's Arduino core . Stable 2.4.0 or higher required and the latest release is recommended. Install third-party platform using the Boards Manager of Arduino IDE. Package URL is http://arduino.esp8266.com/stable/package_esp8266com_index.json ESP32 Arduino core Also, to apply AutoConnect to ESP32, the arduino-esp32 core provided by Espressif is needed. Stable 1.0.1 or required and the latest release is recommended. Install third-party platform using the Boards Manager of Arduino IDE. You can add multiple URLs into Additional Board Manager URLs field, separating them with commas. Package URL is https://dl.espressif.com/dl/package_esp32_index.json for ESP32. Additional library (Required) The PageBuilder library to build HTML for ESP8266WebServer is needed. To install the PageBuilder library into your Arduino IDE, you can use the Library Manager . Select the board of ESP8266 series in the Arduino IDE, open the library manager and search keyword ' PageBuilder ' with the topic ' Communication ', then you can see the PageBuilder . The latest version is required 1.3.2 later . 1 Additional library (Optional) By adding the ArduinoJson library, AutoConnect will be able to handle the custom Web pages described with JSON. With AutoConnect v0.9.7 you can insert user-owned web pages that can consist of representative HTML elements as styled TEXT, INPUT, BUTTON, CHECKBOX, SELECT, SUBMIT and invoke them from the AutoConnect menu. These HTML elements can be added by sketches using the AutoConnect API. Further it possible importing the custom Web pages declarations described with JSON which stored in PROGMEM, SPIFFS, or SD. ArduinoJson version 5 is required to use this feature. 2 AutoConnect supports ArduinoJson version 5 only ArduinoJson version 6 is just released, Arduino Library Manager installs the ArduinoJson version 6 by default. Open the Arduino Library Manager and make sure that ArduinoJson version 5 is installed. Install the AutoConnect \u00b6 Clone or download from the AutoConnect GitHub repository . When you select Download, you can import it to Arduino IDE immediately. After downloaded, the AutoConnect-master.zip file will be saved in your download folder. Then in the Arduino IDE, navigate to \"Sketch > Include Library\" . At the top of the drop down list, select the option to \"Add .ZIP Library...\" . Details for Arduino official page . Supported by Library manager. AutoConnect was added to the Arduino IDE library manager. It can be used with the PlatformIO library also. window.onload = function() { Gifffer(); }; Since AutoConnect v0.9.7, PageBuilder v1.3.2 later is required. \u21a9 Using the AutoConnect API natively allows you to sketch custom Web pages without JSON. \u21a9","title":"Overview"},{"location":"index.html#autoconnect-for-esp8266esp32","text":"An Arduino library for ESP8266/ESP32 WLAN configuration at run time with web interface.","title":"AutoConnect for ESP8266/ESP32"},{"location":"index.html#overview","text":"To the dynamic configuration for joining to WLAN with SSID and PSK accordingly. It an Arduino library united with ESP8266WebServer class for ESP8266 or WebServer class for ESP32. Easy implementing the Web interface constituting the WLAN for ESP8266/ESP32 WiFi connection. With this library to make a sketch easily which connects from ESP8266/ESP32 to the access point at runtime by the web interface without hard-coded SSID and password.","title":"Overview"},{"location":"index.html#no-need-pre-coded-ssid-password","text":"It is no needed hard-coding in advance the SSID and Password into the sketch to connect between ESP8266/ESP32 and WLAN. You can input SSID & Password from a smartphone via the web interface at runtime.","title":" No need pre-coded SSID & password"},{"location":"index.html#simple-usage","text":"AutoConnect control screen will be displayed automatically for establishing new connections. It aids by the captive portal when vested the connection cannot be detected. By using the AutoConnect menu , to manage the connections convenient.","title":" Simple usage"},{"location":"index.html#store-the-established-connection","text":"The connection authentication data as credentials are saved automatically in EEPROM of ESP8266/ESP32 and You can select the past SSID from the AutoConnect menu .","title":" Store the established connection"},{"location":"index.html#easy-to-embed-in","text":"AutoConnect can be placed easily in your sketch. It's \" begin \" and \" handleClient \" only.","title":" Easy to embed in"},{"location":"index.html#lives-with-your-sketches","text":"The sketches which provide the web page using ESP8266WebServer there is, AutoConnect will not disturb it. AutoConnect can use an already instantiated ESP8266WebServer object, or itself can assign it. This effect also applies to ESP32. The corresponding class for ESP32 will be the WebServer.","title":" Lives with your sketches"},{"location":"index.html#easy-to-add-the-custom-web-pages-enhanced-wv097","text":"You can easily add your owned web pages that can consist of representative HTML elements and invoke them from the menu. Further it possible importing the custom Web pages declarations described with JSON which stored in PROGMEM, SPIFFS, or SD.","title":" Easy to add the custom Web pages ENHANCED w/v0.9.7"},{"location":"index.html#installation","text":"","title":"Installation"},{"location":"index.html#requirements","text":"","title":"Requirements"},{"location":"index.html#supported-hardware","text":"Generic ESP8266 modules (applying the ESP8266 Community's Arduino core) Adafruit HUZZAH ESP8266 (ESP-12) ESP-WROOM-02 Heltec WiFi Kit 8 NodeMCU 0.9 (ESP-12) / NodeMCU 1.0 (ESP-12E) Olimex MOD-WIFI-ESP8266 SparkFun Thing SweetPea ESP-210 ESP32Dev Board (applying the Espressif's arduino-esp32 core) SparkFun ESP32 Thing WEMOS LOLIN D32 Ai-Thinker NodeMCU-32S Heltec WiFi Kit 32 M5Stack And other ESP8266/ESP32 modules supported by the Additional Board Manager URLs of the Arduino-IDE. About flash size on the module The AutoConnect sketch size is relatively large. Large flash capacity is necessary. 512Kbyte (4Mbits) flash inclusion module such as ESP-01 is not recommended.","title":"Supported hardware"},{"location":"index.html#required-libraries","text":"AutoConnect requires the following environment and libraries. Arduino IDE The current upstream at the 1.8 level or later is needed. Please install from the official Arduino IDE download page . This step is not required if you already have a modern version. ESP8266 Arduino core AutoConnect targets sketches made on the assumption of ESP8266 Community's Arduino core . Stable 2.4.0 or higher required and the latest release is recommended. Install third-party platform using the Boards Manager of Arduino IDE. Package URL is http://arduino.esp8266.com/stable/package_esp8266com_index.json ESP32 Arduino core Also, to apply AutoConnect to ESP32, the arduino-esp32 core provided by Espressif is needed. Stable 1.0.1 or required and the latest release is recommended. Install third-party platform using the Boards Manager of Arduino IDE. You can add multiple URLs into Additional Board Manager URLs field, separating them with commas. Package URL is https://dl.espressif.com/dl/package_esp32_index.json for ESP32. Additional library (Required) The PageBuilder library to build HTML for ESP8266WebServer is needed. To install the PageBuilder library into your Arduino IDE, you can use the Library Manager . Select the board of ESP8266 series in the Arduino IDE, open the library manager and search keyword ' PageBuilder ' with the topic ' Communication ', then you can see the PageBuilder . The latest version is required 1.3.2 later . 1 Additional library (Optional) By adding the ArduinoJson library, AutoConnect will be able to handle the custom Web pages described with JSON. With AutoConnect v0.9.7 you can insert user-owned web pages that can consist of representative HTML elements as styled TEXT, INPUT, BUTTON, CHECKBOX, SELECT, SUBMIT and invoke them from the AutoConnect menu. These HTML elements can be added by sketches using the AutoConnect API. Further it possible importing the custom Web pages declarations described with JSON which stored in PROGMEM, SPIFFS, or SD. ArduinoJson version 5 is required to use this feature. 2 AutoConnect supports ArduinoJson version 5 only ArduinoJson version 6 is just released, Arduino Library Manager installs the ArduinoJson version 6 by default. Open the Arduino Library Manager and make sure that ArduinoJson version 5 is installed.","title":"Required libraries"},{"location":"index.html#install-the-autoconnect","text":"Clone or download from the AutoConnect GitHub repository . When you select Download, you can import it to Arduino IDE immediately. After downloaded, the AutoConnect-master.zip file will be saved in your download folder. Then in the Arduino IDE, navigate to \"Sketch > Include Library\" . At the top of the drop down list, select the option to \"Add .ZIP Library...\" . Details for Arduino official page . Supported by Library manager. AutoConnect was added to the Arduino IDE library manager. It can be used with the PlatformIO library also. window.onload = function() { Gifffer(); }; Since AutoConnect v0.9.7, PageBuilder v1.3.2 later is required. \u21a9 Using the AutoConnect API natively allows you to sketch custom Web pages without JSON. \u21a9","title":"Install the AutoConnect"},{"location":"acelements.html","text":"The elements for the custom Web pages \u00b6 Representative HTML elements for making the custom Web page are provided as AutoConnectElements. AutoConnectButton : Labeled action button AutoConnectCheckbox : Labeled checkbox AutoConnectElement : General tag AutoConnectInput : Labeled text input box AutoConnectRadio : Labeled radio button AutoConnectSelect : Selection list AutoConnectSubmit : Submit button AutoConnectText : Style attributed text Layout on a custom Web page \u00b6 The elements of the page created by AutoConnectElements are aligned vertically exclude the AutoConnectRadio . You can specify the direction to arrange the radio buttons as AutoConnectRadio vertically or horizontally. This basic layout depends on the CSS of the AutoConnect menu so you can not change drastically. Form and AutoConnectElements \u00b6 All AutoConnectElements placed on custom web pages will be contained into one form. Its form is fixed and created by AutoConnect. The form value (usually the text or checkbox you entered) is sent by AutoConnectSubmit using the POST method with HTTP. The post method sends the actual form data which is a query string whose contents are the name and value of AutoConnectElements. You can retrieve the value for the parameter with the sketch from the query string with ESP8266WebServer::arg function or PageArgument class of the AutoConnect::on handler when the form is submitted. AutoConnectElement - A basic class of elements \u00b6 AutoConnectElement is a base class for other element classes and has common attributes for all elements. It can also be used as a variant of each element. The following items are attributes that AutoConnectElement has and are common to other elements. Sample AutoConnectElement element(\"element\", \"
    \"); On the page: Constructor \u00b6 AutoConnectElement( const char * name, const char * value) name \u00b6 Each element has a name. The name is the String data type. You can identify each element by the name to access it with sketches. value \u00b6 The value is the string which is a source to generate an HTML code. Characteristics of Value vary depending on the element. The value of AutoConnectElement is native HTML code. A string of value is output as HTML as it is. type \u00b6 The type indicates the type of the element and represented as the ACElement_t enumeration type in the sketch. Since AutoConnectElement also acts as a variant of other elements, it can be applied to handle elements collectively. At that time, the type can be referred to by the typeOf() function. The following example changes the font color of all AutoConnectText elements of a custom Web page to gray. AutoConnectAux customPage; AutoConnectElementVT & elements = customPage.getElements(); for (AutoConnectElement & elm : elements) { if (elm.typeOf() == AC_Text) { AutoConnectText & text = reinterpret_cast < AutoConnectText &> (elm); text.style = \"color:gray;\" ; } } The enumerators for ACElement_t are as follows: AutoConnectButton: AC_Button AutoConnectCheckbox: AC_Checkbox AutoConnectElement: AC_Element AutoConnectInput: AC_Input AutoConnectRadio: AC_Radio AutoConnectSelect: AC_Select AutoConnectSubmit: AC_Submit AutoConnectText: AC_Text Uninitialized element: AC_Unknown Furthermore, to convert an entity that is not an AutoConnectElement to its native type, you must re-interpret that type with c++. AutoConnectButton \u00b6 AutoConnectButton generates an HTML < button type = \"button\" > tag and locates a clickable button to a custom Web page. Currently AutoConnectButton corresponds only to name, value, an onclick attribute of HTML button tag. An onclick attribute is generated from an action member variable of the AutoConnectButton, which is mostly used with a JavaScript to activate a script. Sample AutoConnectButton button(\"button\", \"OK\", \"myFunction()\"); On the page: Constructor \u00b6 AutoConnectButton( const char * name, const char * value, const String & action) name \u00b6 It is the name of the AutoConnectButton element and matches the name attribute of the button tag. It also becomes the parameter name of the query string when submitted. value \u00b6 It becomes a value of the value attribute of an HTML button tag. action \u00b6 action is String data type and is an onclick attribute fire on a mouse click on the element. It is mostly used with a JavaScript to activate a script. 1 For example, the following code defines a custom Web page that copies a content of Text1 to Text2 by clicking Button . const char * scCopyText = R\"( )\" ; ACInput(Text1, \"Text1\" ); ACInput(Text2, \"Text2\" ); ACButton(Button, \"COPY\" , \"CopyText()\" ); ACElement(TextCopy, scCopyText); AutoConnectCheckbox \u00b6 AutoConnectCheckbox generates an HTML < input type = \"checkbox\" > tag and a < label > tag. It places horizontally on a custom Web page by default. Sample AutoConnectCheckbox checkbox(\"checkbox\", \"uniqueapid\", \"Use APID unique\", false); On the page: Constructor \u00b6 AutoConnectCheckbox( const char * name, const char * value, const char * label, const bool checked) name \u00b6 It is the name of the AutoConnectCheckbox element and matches the name attribute of the input tag. It also becomes the parameter name of the query string when submitted. value \u00b6 It becomes a value of the value attribute of an HTML < input type = \"checkbox\" > tag. label \u00b6 A label is an optional string. A label is always arranged on the right side of the checkbox. Specification of a label will generate an HTML