Skip to content

Commit

Permalink
deploy: 16ddc8a
Browse files Browse the repository at this point in the history
  • Loading branch information
cziter15 committed Jun 19, 2024
1 parent 5b0d549 commit 5c814a7
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions ks_mqtt_connector_8h_source.html
Original file line number Diff line number Diff line change
Expand Up @@ -207,32 +207,32 @@
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a00194e36edb73cbc7db830d42490fff4"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a00194e36edb73cbc7db830d42490fff4">ksf::comps::ksMqttConnector::wifiConnWp</a></div><div class="ttdeci">std::weak_ptr&lt; ksWifiConnector &gt; wifiConnWp</div><div class="ttdoc">Weak pointer to WiFi connector.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:55</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a232ba38af05678ff7ae8bc1ab6ede034"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a232ba38af05678ff7ae8bc1ab6ede034">ksf::comps::ksMqttConnector::netClientUq</a></div><div class="ttdeci">std::unique_ptr&lt; WiFiClient &gt; netClientUq</div><div class="ttdoc">Shared pointer to WiFiClient used to connect to MQTT.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:52</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a2acc73077e7b4ef0d5f7cd03ad75da19"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a2acc73077e7b4ef0d5f7cd03ad75da19">ksf::comps::ksMqttConnector::prefix</a></div><div class="ttdeci">std::string prefix</div><div class="ttdoc">Saved MQTT prefix.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:68</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a327f16a26deb354be7374bdb0e26cdbd"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a327f16a26deb354be7374bdb0e26cdbd">ksf::comps::ksMqttConnector::subscribe</a></div><div class="ttdeci">void subscribe(const std::string &amp;topic, bool skipDevicePrefix=false, ksMqttConnector::QosLevel=ksMqttConnector::QosLevel::QOS_AT_LEAST_ONCE)</div><div class="ttdoc">Subscribes to MQTT topic.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:145</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a327f16a26deb354be7374bdb0e26cdbd"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a327f16a26deb354be7374bdb0e26cdbd">ksf::comps::ksMqttConnector::subscribe</a></div><div class="ttdeci">void subscribe(const std::string &amp;topic, bool skipDevicePrefix=false, ksMqttConnector::QosLevel=ksMqttConnector::QosLevel::QOS_AT_LEAST_ONCE)</div><div class="ttdoc">Subscribes to MQTT topic.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:146</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a3401589baf730b3cfa12fcd47369509b"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a3401589baf730b3cfa12fcd47369509b">ksf::comps::ksMqttConnector::getReconnectCounter</a></div><div class="ttdeci">uint32_t getReconnectCounter() const</div><div class="ttdoc">Retrieves MQTT reconnect counter.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:157</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a5218003f79bceb2207178361fc124aeb"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a5218003f79bceb2207178361fc124aeb">ksf::comps::ksMqttConnector::init</a></div><div class="ttdeci">bool init(ksApplication *app) override</div><div class="ttdoc">Instantiates the MQTT connector component.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:42</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a5b3892df535c4e3d814f49682a6dd3ed"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a5b3892df535c4e3d814f49682a6dd3ed">ksf::comps::ksMqttConnector::lastSuccessConnectionTime</a></div><div class="ttdeci">uint64_t lastSuccessConnectionTime</div><div class="ttdoc">Time of connection to MQTT broker in seconds.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:57</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a61ba0c64348bc892107da76723b78525"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a61ba0c64348bc892107da76723b78525">ksf::comps::ksMqttConnector::mqttClientUq</a></div><div class="ttdeci">std::unique_ptr&lt; PubSubClient &gt; mqttClientUq</div><div class="ttdoc">Shared pointer to PubSubClient used to connect to MQTT.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:53</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a6a2c69fad3a041cf706ff66b88afb663"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a6a2c69fad3a041cf706ff66b88afb663">ksf::comps::ksMqttConnector::~ksMqttConnector</a></div><div class="ttdeci">virtual ~ksMqttConnector()</div><div class="ttdoc">Destructor (for uniqueptr purposes).</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a700ac5e8f17b9ab152a8c5ecb1d9e1fa"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a700ac5e8f17b9ab152a8c5ecb1d9e1fa">ksf::comps::ksMqttConnector::onAnyMessage</a></div><div class="ttdeci">std::shared_ptr&lt; ksf::evt::ksEvent&lt; const std::string_view &amp;, const std::string_view &amp; &gt; &gt; onAnyMessage</div><div class="ttdoc">onAnyMessage event that user can bind to.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:104</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a728a903955e41f665a71722eaf16a492"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a728a903955e41f665a71722eaf16a492">ksf::comps::ksMqttConnector::loop</a></div><div class="ttdeci">bool loop(ksApplication *app) override</div><div class="ttdoc">Executes MQTT connection logic.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:225</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a728a903955e41f665a71722eaf16a492"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a728a903955e41f665a71722eaf16a492">ksf::comps::ksMqttConnector::loop</a></div><div class="ttdeci">bool loop(ksApplication *app) override</div><div class="ttdoc">Executes MQTT connection logic.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:226</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a72c01e2f4d6d2115d5b11f7330f75971"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a72c01e2f4d6d2115d5b11f7330f75971">ksf::comps::ksMqttConnector::certFingerprint</a></div><div class="ttdeci">std::unique_ptr&lt; ksCertFingerprint &gt; certFingerprint</div><div class="ttdoc">Shared pointer to fingerprint validator.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:72</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a79283a0a011bab07f8010c02b33b1a63"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a79283a0a011bab07f8010c02b33b1a63">ksf::comps::ksMqttConnector::login</a></div><div class="ttdeci">std::string login</div><div class="ttdoc">Saved MQTT login.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:66</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a8e80106d4063007faf9f1bc7eb1c889c"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a8e80106d4063007faf9f1bc7eb1c889c">ksf::comps::ksMqttConnector::usePersistentSession</a></div><div class="ttdeci">bool usePersistentSession</div><div class="ttdoc">Use persistent session or not.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:61</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a90dbb9c15993dd07c37385274bd54f49"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a90dbb9c15993dd07c37385274bd54f49">ksf::comps::ksMqttConnector::getConnectionTimeSeconds</a></div><div class="ttdeci">uint32_t getConnectionTimeSeconds() const</div><div class="ttdoc">Retrieves connection time in seconds.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:260</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a90dbb9c15993dd07c37385274bd54f49"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a90dbb9c15993dd07c37385274bd54f49">ksf::comps::ksMqttConnector::getConnectionTimeSeconds</a></div><div class="ttdeci">uint32_t getConnectionTimeSeconds() const</div><div class="ttdoc">Retrieves connection time in seconds.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:261</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_a95b20ca302d48003c755183b21d65215"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#a95b20ca302d48003c755183b21d65215">ksf::comps::ksMqttConnector::sendConnectionStatus</a></div><div class="ttdeci">bool sendConnectionStatus</div><div class="ttdoc">Send connection status to MQTT or not.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:60</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_aa0371f700a74e710804fc4e7c99e75e4"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#aa0371f700a74e710804fc4e7c99e75e4">ksf::comps::ksMqttConnector::unsubscribe</a></div><div class="ttdeci">void unsubscribe(const std::string &amp;topic, bool skipDevicePrefix=false)</div><div class="ttdoc">Unsubscribes the MQTT topic.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:151</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_aa273e290cb18e2ea76db22a7c059b48e"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#aa273e290cb18e2ea76db22a7c059b48e">ksf::comps::ksMqttConnector::isConnected</a></div><div class="ttdeci">bool isConnected() const</div><div class="ttdoc">Retrieves connection state.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:255</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_aa0371f700a74e710804fc4e7c99e75e4"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#aa0371f700a74e710804fc4e7c99e75e4">ksf::comps::ksMqttConnector::unsubscribe</a></div><div class="ttdeci">void unsubscribe(const std::string &amp;topic, bool skipDevicePrefix=false)</div><div class="ttdoc">Unsubscribes the MQTT topic.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:152</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_aa273e290cb18e2ea76db22a7c059b48e"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#aa273e290cb18e2ea76db22a7c059b48e">ksf::comps::ksMqttConnector::isConnected</a></div><div class="ttdeci">bool isConnected() const</div><div class="ttdoc">Retrieves connection state.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:256</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_aa3c8abf7dcaecaa90dafe5bdfe08b466"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#aa3c8abf7dcaecaa90dafe5bdfe08b466">ksf::comps::ksMqttConnector::setupConnection</a></div><div class="ttdeci">void setupConnection(const std::string broker, const std::string &amp;port, std::string login, std::string password, std::string prefix, const std::string &amp;fingerprint)</div><div class="ttdoc">Sets up MQTT connection.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:66</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_aacb8a4b214c5ea6d71c74469fec167ce"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#aacb8a4b214c5ea6d71c74469fec167ce">ksf::comps::ksMqttConnector::onDisconnected</a></div><div class="ttdeci">std::shared_ptr&lt; ksf::evt::ksEvent&lt;&gt; &gt; onDisconnected</div><div class="ttdoc">onDisconnected event that user can bind to.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:107</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ab101e26b5ea98a8b3e35295ab2b00680"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ab101e26b5ea98a8b3e35295ab2b00680">ksf::comps::ksMqttConnector::publish</a></div><div class="ttdeci">void publish(const std::string &amp;topic, const std::string &amp;payload, bool retain=false, bool skipDevicePrefix=false)</div><div class="ttdoc">Publishes a message to the MQTT topic.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:156</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ab101e26b5ea98a8b3e35295ab2b00680"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ab101e26b5ea98a8b3e35295ab2b00680">ksf::comps::ksMqttConnector::publish</a></div><div class="ttdeci">void publish(const std::string &amp;topic, const std::string &amp;payload, bool retain=false, bool skipDevicePrefix=false)</div><div class="ttdoc">Publishes a message to the MQTT topic.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:157</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ab2b5431473acbcaa5907d63743e9ca84"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ab2b5431473acbcaa5907d63743e9ca84">ksf::comps::ksMqttConnector::portNumber</a></div><div class="ttdeci">uint16_t portNumber</div><div class="ttdoc">Saved MQTT port number.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:70</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ac9219e05b7ebd1c2614a36bb8155efe7"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ac9219e05b7ebd1c2614a36bb8155efe7">ksf::comps::ksMqttConnector::mqttConnectedInternal</a></div><div class="ttdeci">void mqttConnectedInternal()</div><div class="ttdoc">Connects to the MQTT broker (internal function).</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:108</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ad3410bf2428ffe086fad10bbffb5384c"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ad3410bf2428ffe086fad10bbffb5384c">ksf::comps::ksMqttConnector::connectToBroker</a></div><div class="ttdeci">bool connectToBroker()</div><div class="ttdoc">Connects to the MQTT broker.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:173</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ac9219e05b7ebd1c2614a36bb8155efe7"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ac9219e05b7ebd1c2614a36bb8155efe7">ksf::comps::ksMqttConnector::mqttConnectedInternal</a></div><div class="ttdeci">void mqttConnectedInternal()</div><div class="ttdoc">Connects to the MQTT broker (internal function).</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:109</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ad3410bf2428ffe086fad10bbffb5384c"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ad3410bf2428ffe086fad10bbffb5384c">ksf::comps::ksMqttConnector::connectToBroker</a></div><div class="ttdeci">bool connectToBroker()</div><div class="ttdoc">Connects to the MQTT broker.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:174</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_adac57d480a69d329fa59cf5ec897978b"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#adac57d480a69d329fa59cf5ec897978b">ksf::comps::ksMqttConnector::reconnectTimer</a></div><div class="ttdeci">ksSimpleTimer reconnectTimer</div><div class="ttdoc">Timer that counts time between reconnection attempts.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:64</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ae1e46595b6c1a5760c31149355e751c4"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ae1e46595b6c1a5760c31149355e751c4">ksf::comps::ksMqttConnector::postInit</a></div><div class="ttdeci">bool postInit(ksApplication *app) override</div><div class="ttdoc">Method that handles component post-initialization.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:60</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_ae97565fa36122cb841acbb418928da1a"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#ae97565fa36122cb841acbb418928da1a">ksf::comps::ksMqttConnector::broker</a></div><div class="ttdeci">std::string broker</div><div class="ttdoc">Saved MQTT broker.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:69</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_aeb2e99942201a89db129abe571115db6"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#aeb2e99942201a89db129abe571115db6">ksf::comps::ksMqttConnector::onConnected</a></div><div class="ttdeci">std::shared_ptr&lt; ksf::evt::ksEvent&lt;&gt; &gt; onConnected</div><div class="ttdoc">onConnected event that user can bind to.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:106</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_af3130af3aa3b1591a42e42896bf62eb1"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#af3130af3aa3b1591a42e42896bf62eb1">ksf::comps::ksMqttConnector::mqttMessageInternal</a></div><div class="ttdeci">void mqttMessageInternal(const char *topic, const uint8_t *payload, uint32_t length)</div><div class="ttdoc">Called when MQTT message arrives (internal function).</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:115</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_af3130af3aa3b1591a42e42896bf62eb1"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#af3130af3aa3b1591a42e42896bf62eb1">ksf::comps::ksMqttConnector::mqttMessageInternal</a></div><div class="ttdeci">void mqttMessageInternal(const char *topic, const uint8_t *payload, uint32_t length)</div><div class="ttdoc">Called when MQTT message arrives (internal function).</div><div class="ttdef"><b>Definition</b> ksMqttConnector.cpp:116</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_af38f406daf37f94b37cb74c9d7831cae"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#af38f406daf37f94b37cb74c9d7831cae">ksf::comps::ksMqttConnector::password</a></div><div class="ttdeci">std::string password</div><div class="ttdoc">Saved MQTT password.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:67</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_af7928b7e420a6e8b98b17e5b43127d27"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#af7928b7e420a6e8b98b17e5b43127d27">ksf::comps::ksMqttConnector::reconnectCounter</a></div><div class="ttdeci">uint32_t reconnectCounter</div><div class="ttdoc">MQTT reconnection counter.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:58</div></div>
<div class="ttc" id="aclassksf_1_1comps_1_1ks_mqtt_connector_html_afc9123d68f055d4709f9f455cfb655f9"><div class="ttname"><a href="classksf_1_1comps_1_1ks_mqtt_connector.html#afc9123d68f055d4709f9f455cfb655f9">ksf::comps::ksMqttConnector::wasConnected</a></div><div class="ttdeci">bool wasConnected</div><div class="ttdoc">True if connected in previous loop.</div><div class="ttdef"><b>Definition</b> ksMqttConnector.h:62</div></div>
Expand Down

0 comments on commit 5c814a7

Please sign in to comment.