From fff117c9ffd3284337431ba3bf2445800828d385 Mon Sep 17 00:00:00 2001 From: Abbas Hussain Date: Thu, 12 Mar 2020 11:31:55 -0700 Subject: [PATCH 1/9] Add design details in doc --- docs/dev/Pagination.md | 403 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 403 insertions(+) create mode 100644 docs/dev/Pagination.md diff --git a/docs/dev/Pagination.md b/docs/dev/Pagination.md new file mode 100644 index 0000000000..3900262d06 --- /dev/null +++ b/docs/dev/Pagination.md @@ -0,0 +1,403 @@ +# Opendistro SQL Cursor (Pagination) Support + +## 1. Overview + +In database area, cursor is “a control structure that enables traversal over the records”. It is especially helpful for traversing large result set on a page by page basis. Without pagination or persistence, the entire result set will be resident in memory until last row comes in. + +In our SQL plugin the current functionality inherited is broken and missing for most queries. And it is challenging for JOIN query whose result set cannot be paginated by native ES Scroll easily. + +Support for cursor is a fundamental requirement of any SQL engine. + + +## 2. Requirements + +General cursor support: https://github.com/opendistro-for-elasticsearch/sql/issues/16 + +### 2.1 Use Case + +There are two typical use cases of cursor: + +* In the absence of cursor they are limited by the max of 10000 documents by Elasticsearch by default. The max number fo results could be changed using `index.max_result_window` setting on index level. Since the number of docs for an index can vary, the user would not know unless they see inconsistent result, and they have to change this setting manually which is not a very good experience. +* Interaction with SQL plugin via Kibana or other web interfaces to skim through only the first few pages of a large result set. +* Integration with BI tools or other batch processing program via JDBC/ODBC driver to load full result set for analysis. + +### 2.2 Functionalities + +Based on the use cases, the following capabilities are required: + +* **Paging**: Paginate and transfer large result set to client side. +* **Efficient**: Make tradeoff between efficiency and system resource usage. +* **Reliable**: Ensure no orphan context left and kept consuming resource in any case. +* **Variety**: Should be able to work with different format types like JDBC, CSV etc + +### 2.3 Scope + +**Phase I**: + +* Type of Query + * *SELECT* : Already supported but in the hint manner which mixed long cursor ID with same query itself for each following fetch after the first one. +* Format type: We will consider **format for JDBC driver** only for now as it used by both JDBC and ODBC driver. It is also used by SQL CLI. +* JDBC support for cursor + +**Phase II:** + +* *SELECT* with GROUP BY (aggregation query) +* *EQUI-JOINS*: Since we only have query plan framework (unfinished physical plan) for equi-joins, we will be supporting this. +* Support for text based formats such as CSV , RAW (pipe separated). +* ODBC support for cursor + +**Out of Scope:** + +* *Non EQUI-JOINS:* Nested Loop joins are used for such queries. It does not use scroll optimization like HashJoin and needs to bring in all the data to the coordinating node for correct results. +* *MULTI_QUERY:* Same problem as Nested Loop + +## 3. Design + +### 3.1 Different Type of Cursors + +Every cursor uses temporary resources to hold its data. These resources can be memory, a disk paging file, temporary disk files, or even temporary storage in the database. The cursor is called a client-side cursor when these resources are located on the client machine. The cursor is called a server-side cursor when these resources are located on the server machine. + +**(a) Client-Side Cursors** +With a non-keyset client-side cursor, the server sends the entire result set across the network to the client machine. The client machine provides and manages the temporary resources needed by the cursor and result set. The client-side application can browse through the entire result set to determine which rows it requires. + +**Pros:** + +* One obvious benefit of the client-side cursor is quick response. After the result set has been downloaded to the client machine, browsing through the rows is very fast. Your application is generally more scalable with client-side cursors because the cursor's resource requirements are placed on each separate client and not on the server. + +**Cons: ** + +* Client-side cursors may place a significant load on your workstation if they include too many rows +* Since we are limited by Elasticsearch to get all the results we ***cannot*** materialize this. +* This will require significant work for each client JDBC driver, ODBC driver, SQL CLI, Kibana on how to maintain the client resources and parse the state. It is therefore not scalable. +* This defeats the purpose of pagination if we load the whole data to client side, as the user/application might only need the first few pages and discard the rest. This will also put pressure on network traffic and can increase latency. + + +**(b) Server-Side Cursors** +With a server-side cursor, the server manages the result set using resources provided by the server machine. The server-side cursor returns only the requested data over the network. This type of cursor can sometimes provide better performance than the client-side cursor, especially in situations where excessive network traffic is a problem. + +**Pros: ** + +* The client does not need to cache large amounts of data or maintain information about the cursor position because the server is doing that. +* If you are going to access only some of the data in the result set, or access the data just a few times, a server-side cursor minimizes network traffic. +* Scalable to many clients as they shielded by implementation details of how the cursor context is handled, and allows for creating a clear , consistent and compatible interface. + +**Cons:** + +* A server-side cursor is — at least temporarily — consuming precious server resources for every active client. + + +Based on the cons of client side cursors, and the limitation imposed by Elasticsearch, implementing client side cursor is not feasible. + + +### 3.2 Protocol + +Here is a sample of the request response API for the cursor queries. The client only needs cursor field to fetch the next page. This interface allows clients to de-couple the parsing logic of state. + +Since we are implementing server side cursors, either SQL plugin or Elasticsearch needs to maintain state which consumes hardware resources like memory, file descriptors etc. The conserve such resources we provide a clear cursor API to clear resources explicitly, before it is automatically cleaned after expiry. + +``` +# 1.Creates a cursor +POST _opendistro/_sql?format=jdbc +{ + "query": "SELECT * FROM accounts", + "fetch_size": 5 +} + +# Response +{ + "status": 200, + "total": 100, + "size": 5, + "schema": [...], + "datarows": [...], + "cursor": "cursorId" +} + +# 2.Fetch next page by cursor provided in previous response +POST _opendistro/_sql?format=jdbc +{ + "cursor": "cursorId" +} +# Response +{ + "datarows": [...], + "cursor": "cursorId" +} + +# No cursor in the last page +{ + "datarows": [...] +} + + +# 4.Clear the state forcibly earlier than last page be reached +POST _opendistro/_sql/close +{ + "cursor": "cursorId" +} + +# Response +{ + "succeeded" : true +} + +``` + +### 3.3 Support in JDBC + +To use the pagination functionality programmatically using the[JDBC 4.1 specification](https://download.oracle.com/otn-pub/jcp/jdbc-4_1-mrel-spec/jdbc4.1-fr-spec.pdf?AuthParam=1574798710_305327d63d91e91e19dd80953454597a), page size is being used as performance hint given by `Statement.setFetchSize()` and “applied to each result set produced by the statement”. We need to re-implement `Statement.executequery()` and `ResultSet.next()` to take advantage of cursor. + +We will not support backward scroll on result set. The `Statement` must be created with a `ResultSet` type of `ResultSet.TYPE_FORWARD_ONLY`. Attempt to scroll backwards or otherwise jump around in the `ResultSet` should throw an exception. + +A basic use case of using cursor is shown below. To support Tableau or other existing BI tools, we will turn on the cursor support by default if the backend SQL Plugin supports pagination. + +``` +Statement stmt = conn.createStatement(); + +// Turn the cursor on +stmt.setFetchSize(20); +ResultSet rs = stmt.executeQuery("SELECT firstname, lastname FROM mytable"); + +while (rs.next()) +{ + System.out.print("a row was returned."); +} + +// Explicitly close the cursor +rs.close(); + +// Turn the cursor off. +// A hint to fallback on default implementation to fetch max results where possible. +st.setFetchSize(0); +rs = st.executeQuery("SELECT * FROM mytable"); +while (rs.next()) +{ + System.out.print("many rows were returned."); +} +rs.close(); + +// Close the statement. +st.close(); + +``` + + + + +### 3.4 Integrating with SQL Plugin + +[Image: Cursor_Context_2.jpg] +Since we are supporting cursor for different type of queries using different implementation, we*** may*** need to maintain some state (context). This **context** is used when we fetch next batch of results. Maintaining context is not a requirement, but may be needed. + +### 3.6 Different approaches for different SQL queries + +**3.6.1 SELECT ** + +Simple SELECT with WHERE and ORDER BY clause can be supported by using the following Elasticsearch APIs +**(A) From and Size** +From ideal pagination point of view from and size is API needed by the client. Pagination of results can be done by using the from and size but the cost becomes prohibitive when the deep pagination is reached. The `index.max_result_window` which defaults to 10,000 is a safeguard, search requests take heap memory and time proportional to `from + size`. + +**Cons: **Inefficient + +**(B) [Scroll](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-scroll)** +While a `search` request returns a single “page” of results, the `scroll` API can be used to retrieve large numbers of results (or even all results) from a single search request, in much the same way as you would use a cursor on a traditional database. + +**Pros:** A scroll returns all the documents which matched the search at the time of the initial search request. It ignores any subsequent changes to these documents. + +**Cons: **Normally, the background merge process optimizes the index by merging together smaller segments to create new, bigger segments. Once the smaller segments are no longer needed they are deleted. This process continues during scrolling, but an open search context prevents the old segments from being deleted since they are still in use. Keeping older segments alive means that more disk space and file handles are needed. Ensure that you have configured your nodes to have ample free file handles + + +**(C) [Search After](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-search-after)** +The Scroll API is recommended for efficient deep scrolling but scroll contexts are costly and it is not recommended to use it for real time user requests. The search_after parameter circumvents this problem by providing a live cursor. The idea is to use the results from the previous page to help the retrieval of the next page. + +**Cons: **It is very similar to the `scroll` API but unlike it, the `search_after` parameter is stateless, it is always resolved against the latest version of the searcher. For this reason the sort order may change during a walk depending on the updates and deletes of your index. + + +**Decision:** +**(A)** does not meet efficiency requirement. **(C)** has consistency problems. So Scroll** (B)** would be the right solution , as it is consistent can be implemented in a stateless manner on plugin side. Even though it does maintains context natively, it expires eventually if not used. + +**3.6.2 SELECT WITH GROUP BY** +The [terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) is meant to return the top terms and does not allow pagination. If we want to retrieve all terms or all combinations of terms in a nested terms aggregation we should eventually migrate to [Composite aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html) which allows to paginate over all possible terms rather than setting a size greater than the cardinality of the field in the terms aggregation. + +This aggregation can be used to paginate all buckets from a multi-level aggregation efficiently. This aggregation provides a way to stream all buckets of a specific aggregation similarly to what scroll does for documents. + +How to paginate using Composite Aggregation natively without pagination support: + +``` +# initial query +curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d' +{ + "aggs" : { + "my_buckets": { + "composite" : { + "size": 2, <-----fetch_size + "sources" : [ + { "date": { "date_histogram": { "field": "timestamp", "calendar_interval": "1d" } } }, + { "product": { "terms": {"field": "product" } } } + + ] + } + } + } +} +' + +# Response +{ + ... + "aggregations": { + "my_buckets": { + "after_key": { + "date": 1494288000000, + "product": "mad max" + + }, + "buckets": [ + { + "key": { + "date": 1494201600000, + "product": "rocky" + }, + "doc_count": 1 + }, + { + "key": { + "date": 1494288000000, + "product": "mad max" + }, + "doc_count": 2 + } + ] + } + } +} + + +# Paginating using after parameter: +curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d' +{ + "aggs" : { + "my_buckets": { + "composite" : { + "size": 2, + "sources" : [ + { "date": { "date_histogram": { "field": "timestamp", "calendar_interval": "1d", "order": "desc" } } }, + { "product": { "terms": {"field": "product", "order": "asc" } } } + ], + "after": { "date": 1494288000000, "product": "mad max" } + } + } + } +} +' + +``` + + +Since all the information needed to retrieve the next page requires the original query and after keys, this can be implemented in a stateless manner by decoding it in `cursor Id` + +**3.6.3 JOINS** + +Query context contains unfinished physical plan with state in each operator which consists of hash table in Join and remaining rows in Join and Scroll. + +**3.6.3.1 Connect to Same Node From Client Side**:** **One option is to try to connect to the same node with query plan all the time. However, it seems that either ***ELB/ALB Session Sticky*** or ***Keep-Alive HTTP Connection*** requires setup on ELB/ALB side. + +* Pros: + * Easy: to implement and understand because query plan execution is identical as before. +* Cons: + * Dependency: on configuration of load balancer. + * Workload skew: because of no load balance any more. + + +[Image: image.png] TODO: +* * * * * * * * * * * * ***********Diagram-1: Always connect to same data node* + +**3.6.3.2 Context Lookup:** In the case that requests dispatched to different nodes is inevitable, context lookup in cluster is required with the following approaches. + +**A) Reroute to Node with Context Inside ES**: route the request to stateful node with the context, fetch result set and return to client side: + +* Pros: + * Lightweight: only 1 node maintains the context with small footprint in memory. +* Cons: + * One more hop: to pass the result from stateful node to “coordinator” node. + * Workload skew. + * Concurrency control. + + +[Image: image.png] TODO: +* * * * * * * * * * * * ***********Diagram-2: Reroute request to the node with context* + +**B) ****Persist Context to ES Index**: persist context to ES index and query it from any node that is serving client request. + +* Pros: + * Explicit node communication logic is not required since ES query API can take care of the context lookup. + * In the event of loss of node the context is not lost, as index will be replicated by ES. +* Cons: + * Extra overhead: of (de-)serialization and network communication incurred by ES query. + * Index maintenance: ES index is not designed for frequent update so new context should be appended. It is possible that the index becomes huge without deleting old context documents in the case of large context. + + +[Image: image.png] TODO: +* * * * * * * * * * * * ***********Diagram-3: Persist context to ES index* + + +**3.6.3.3 Context Rebuild** +Instead of maintain the context, this solution focus on rebuild the context on the fly. +Let us take an example join query + +``` +{ + "query": "SELECT a.name, b.name FROM A as a JOIN B as B on a.name = b.name" + "fetch_size": 10 +} +``` + +In the current implementation, the HashJoin scrolls both the tables block-by-block till it exhausts all the rows from both tables and passes the whole result set to the client. + +For cursor, instead of fetching rows exhaustively we can scroll the until we have enough rows needed by the client. There ***may*** be more rows than requested by `fetch_size`. We can pass the extra datarows to client including `fetch_size` datarows, and serialize the unfinished physical plan in cursor Id (which includes the scroll Id of both the tables). + +For subsequent request for next pages, we have all the information needed to retrieve next page as the execution plan and scroll Ids can be decode from `cursor Id` + +Pros: + +* Stateless implementation. +* Fixed Space Complexity. +* No need to maintain the context. + +Cons: + +* We will be sending extra datarows to the client than initially requested by the client using fetch_size but this can be handled transparently by the JDBC driver which is our major use case. + + + +* ***(A)*** is good option for cursor used by customers in the ***interactive*** way who just glance over a few pages. This will require major work to implement the transport action to communicate “context host node” with “coordinator node“. It will also require home grown solution to clear the context by the plugin. This can be big blocker if implementation needs changes on Elasticsearch. +* ***(3.6.3.3)*** From the point of view of SQL plugin this approach is stateless and resolves the node to node communication problem. Since the scroll context will be handled natively by Elasticsearch, contexts will cleared automatically when it timeouts or explicitly by using `clear cursor` API. This solution also aligns with the stateless solution for simple and aggregation queries. + +**Based on above analysis *3.6.3.3 *is the solution to go ahead for* *JOINS*.*** + + +**3.6.4 SUBQUERY** +Right now subqueries are converted internally to simple queries or JOINS. So, if the above cases work subqueries should be handled. + + +### 3.6 Other Formats + +To support additional text formats such as CSV, RAW or TABLE (*format=table*) in future, the only additional change required is to how to send the `cursor`. This can be achieved by sending the `cursor` through `Cursor` HTTP header. + +Right now there is inconsistency in results for `csv` and `jdbc` format. This is because CSV and JDBC result formatting have 2 parallel codebases, so fix in one wouldn't work with another and one needs to always remember to double check. Example: CSV formatter supported all aggregations (Percentile, Numeric SimpleValue, Numeric Multiple), and JDBC supported only one: Numeric SimpleValue. ***This would be another major work to cleanly support other text formats.*** + +**Recommendation**: The` csv` (or other formats) should use results of JDBC formatter and do simple transformation of results. The logic, that is currently not presented in JDBC formatter must be brought there. + + +## 4. Detailed Design + +### 4.1 General flow: + +**4.1.1 First page request:** + +[Image: CursorInitialRequestFlow.jpg] TODO: +**4.1.2 Subsequent page request and last page request ** + +[Image: CursorISubsequentRequestFlow.png] TODO: + + From 8549bd279ac32fed27790260e4970620ae45a07b Mon Sep 17 00:00:00 2001 From: Abbas Hussain Date: Thu, 12 Mar 2020 11:42:16 -0700 Subject: [PATCH 2/9] Added images for pagination doc --- docs/dev/img/cursor-initial-request-flow.jpg | Bin 0 -> 54043 bytes docs/dev/img/cursor-subsequent-request-flow.png | Bin 0 -> 63329 bytes docs/dev/img/equi-join-approach-1.png | Bin 0 -> 29396 bytes docs/dev/img/equi-join-approach-2.png | Bin 0 -> 51968 bytes docs/dev/img/equi-join-approach-3.png | Bin 0 -> 40627 bytes docs/dev/img/high-level-cursor-design.jpg | Bin 0 -> 28868 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/dev/img/cursor-initial-request-flow.jpg create mode 100644 docs/dev/img/cursor-subsequent-request-flow.png create mode 100644 docs/dev/img/equi-join-approach-1.png create mode 100644 docs/dev/img/equi-join-approach-2.png create mode 100644 docs/dev/img/equi-join-approach-3.png create mode 100644 docs/dev/img/high-level-cursor-design.jpg diff --git a/docs/dev/img/cursor-initial-request-flow.jpg b/docs/dev/img/cursor-initial-request-flow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6c06cc27c62ce778a6e4461576f00cd613c20d2 GIT binary patch literal 54043 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 E0TX{PRR910 literal 0 HcmV?d00001 diff --git a/docs/dev/img/cursor-subsequent-request-flow.png b/docs/dev/img/cursor-subsequent-request-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..c5239c8404d9fff2a6b9af918042b13a198282c6 GIT binary patch literal 63329 zcmc$`XIK-_w>}Dp0-{J!u+UMlAS47xA~l`R2{nLV3JHOb3Q0hk3Ic+H6&oP-u7Fac zN>!;=x)f1RsnVO=iJtR6zjHs_`#kr{eSpc#p2;q2uf6tK>wSl07bo1t_1o7=NJwnN z+oA~)5>ku6pQY?Npv3-ncZY<8f_fOnJ1kU0V=x0Hc0o}8&UP7tg4q19T@dsxV`D0h zBxJA+DQq6ckQ7RaWV3+tP~ZmeR4ALupfLie|DH4k8G{ahj1PdI?!a9L!o*B`Ff}v= z!+riePof91{;OI?b|izzB<(WBni_(Ds`faNC=6B@n;*0bf&{Mdtgt{P@Cg(HM`t(S z;0^qNK>=Ws0JFWoDT2dc26_dO?HOU>S|CtEh#644$KKZ6(P5V{3OHvnLIQygTp%Tc zE&d8Bh{p~EO0ZD4A;=H{2Ra9ah+B6f(MUYTe^etLU0@iA{%>RiX9k=a%n5)Zj7?1_ zE+A8syVt)F2?BY12AlQoF|e_ri6QLYjj#w#;C~4)P{5!7jRGRU03xO`NOT?v5Fm*0 zUvdkiGrchacRWGBBL#v(cnp$T-erso zNBO`R7{?Gna0C&!#D_q=y~0^!0*3=!LEO<4TtuW#gd+`wq(NPvV5SEWhB6VNjWJM{ z$Pgzw#!cV~44mf<1sU_gP(Iu+D$qI-2Mr~IQKsNvN4BjQ4NXPDMUHp`83lA4YX{tS zg(98p>?md!B9diBfrqfMk&#f~o-v*Sw)X^?!QdiK91m}g@^*xnx?yeUAQaRA=N5?o z14@Nta>B#7s1S&=0OuWOPcm_0M!I=I%$SjI78m5s4Yg&519b^m&N_4@7+asuCRuIrx zEIA0u71&Z)aAz|bl;&+rGl6noE-YiS5GEHEZcJf&vqDe~6k9L^1>NyopDqXa4?;W7jYP9 z4BQdy6OIdXGQ~h}D2Ayk4DW_;qnOfQ#!h6cz>UHUN6|?b4lFRto`?cPf@v%wOz3C| zbO94cL@+pxAa{|QEpQ3K+ObUN$iJd=a&d&yfL^=c$S^Yj#GC6F6plxsSrDL%Y)7X- zL@vM@#WF&@Z3!Hv3)hPnVGOh5L!3|$3?xJVb8}%soa`75;4qvElLiZfnIJq|`B-nV z2&lj{!px3l5@CY2!vzJ}TFXKuM${*PTp6n*|fl zLNEos-k#Gjy%R>OevCI%+vjY6`DLgWs z6E1QVB5=T^aR?ucg$iLl1U8Z6;zo3J2aF9CFV=mY0~X`WcQm8%>>vaeZX^#V1Af_V zd@hPd;uF{*-Vs4TRG5%Yp+Eys;fN3)HWkWpM*!mw1e*ns$Xtf8GsT@k!L!K5T&$Np za3h?=qLWZGpHK>xAIW#a;_wU#-vp?Z&%t=&uuNkr$Q|zG92wzY>gLT05s*M2PlBy0 zIgl9~=mC76V1{+~K!gQ`*%7z|tUH|R>JUUEIPkpeJbXf&Kw;rX5*tK?lIga_NIPS+ zH^rWSa$%Y9?Wr`MU^tfU1Hv04NG>LJrcRNz0(%jOf%g;;>|DVV51u!eK)3`h(;3Rg@=chc zFa+1w-rWlU35B6VWHg>?2Zg%uJ!mXPKClg7ol*95hG{U&0RxZ3h&3t%1k4i^=f$>z z1S4TV-a&u@VuSg%Tn?HB6@o;zE@HC>r89*roZMMx-Hga|fsgz})S?ii@EDAWx2F^%A$i1zL<6E{#8g-VYg!Z2tW z1B-S?k;55bJV68HSN2f+}YB%cUl92x`5J^>X0Gz||T zxDi;PLV>BhiwT?U;LQ}dVM&Y#ZYYIrD-1MtLWMy?Lr7ecP$7&hHX+V{EkuS2fP*(2 z;^2v(2r#aqP$w|mJq)nC;)UdnVv_7Jp)|6i0BKAxv-dD@;Ft!29DTgKxi}2h(Jc%i za`kYxb!CK+gdt>mnus6dL3V{ZK!N=qX@bO(n1moFK5&5*Vp(2P0zDW<1@4Hb#&`&Z z&*OW#@4V_AHHNf?Dg2oEE&U|dgA5|-fR4s75^HxU{mwpGpu62U3b z3nM~0u)_(+Ft-SyQ*Z=^fb;V3K$Ao!j;>~G3fuw7H*<7{BIp!6*VO~WF^!}+5ky#l z4+`ZK#timw6A)d*!X~+M!Fb@4B6Q$W!i08=a7ZxVL;%{4gqzR>$RO_sCfv>xgb0T4 z_*58<;fCTmI2ndbpz{PO+#vB2I?d?Hw zHimfx0Tt4~B!U1=0hwUPf=~iRMCFqaU^Cz{IM4?}#KBmOOb=5G31!FSB7{7^ej)Lc zFfP&4)CcL{!-8-_!|>t_G14*EmWJVyxLgJa6GkB-(V)O!IGM=^^+b5Gor94MRD>rn zELc1|h{%H^RuPzkozRPdh8ep8MjtC49mo*_#*?9fU@p}i&gS95>;w>J770m0GhK}V z(}i_MgxPul4?;a%IMA>NSNBk&_|lk0$I>F`z&ghYpuoXS80pS{1^KXoftzk1FDB2! z$C-^~aDABJ_8c(Bk%|Pn^V~2bN2;Uv3rM%1&>&U_g6>3jbY{7DJAk;Zp#)&{Uk3qVT(ezhLd?r z0gcHfa6D62ylYAZfpb>8AcDY1@i+@#%54n7?bAC@S)h7phz%hL@3=UOuW_Fh6q{qp`L6{ z5e{$S}bPf&zY&^kso=!ryus|122fm{a!VPq!MPlKOBCvxQAXqFff&=2R z1R|6z87;Dfc<{O2G&UWMgnD@s@upspVGe8;q;U{}U_uN6dKn7FdjqwS9NYtqSy-?G zmmZFU!q9=CBp)waB*?@E7RG|Pd%L*7!R#QagV3Aq#pA&tM33-rq6ZC+4fhN|g?Qu4 z0=Xz5o9BiyWzxOD#%MYe13>^wTqH7eX49N(O~T+9uP{Q8x2Fr#hvDkYb2AHqfvBOj z;4m7OMHLY^4rbz!6KP&95V9=>Zco5KMFIzVH!hcE90`qd5-S?l76$l(Xipd5Nq9JL z@Zk_p#>ON^I@m|#<;;j6gz^HN@Io3jh+s@|7BWNGp24OdFAsVI49*368I#=MRC|a$ z5Jm)Xu^y%*dshsF8RqHE@(dNw@GOq06W4A(}sSqI! zE+9apg#GWRn=f2*FHk%ef*Up)G+&Biu#)BbhSK-7&K>EqnGz9XkfscW+cu z`GauS3OWu4Nu6+2;-7dGCmAli1rgRLr^r_Y4aMnQ`fzE@`mIVA*ek)M;~||fr9Xcj zDS5aw>htTsx3cwjXUhwZwB2{R`^PNg^CRLN;~i3z`qMA2vR=N?j9um~jg^dVNc!v( za-fTGH}jEmwpGFWK#G@oZpF$ddrKi=UE}GvmWMmPJea$$RPm`HGws_zo6PN>kM&|6 zo-^0_@_200ow3s$+8@6FsgX|rR<1r+ml0?_p;&qJ7p79@`8o~h3!d7 zdLwW5KYhM3*IN-~uw|>Bk5pBcD(*+5b<;7immxlcuk6W^K&{r&RK znUd{(*f4Pg^?>v(>AjKb+dFT-*bG!C{G4`ulpy=<|ZyEZfYu6o@jO=eGt&^a+7 z&VO1;I_@G#CBQ1`S76YCmkKtO8PMKH$=&zxCuHY;fA=*)xqS+kkP_D{4?;LfDJp77 zUf;so&~S6r+Wo|aZ3D<~Y?@||c3zs*;=P%lpBk*@`;M>sMe{%y*?7J_G4rb-kzEGb z|8d`b>8OaQ#~Bwge?m9>?Rf$*$CIej*Kn0x_GrYtB41D2>V1Un;Ja0o`qLWbopF+D zm=7Np{6-3}Yi)PDd%rmK zt-8>k@%dhO=f6RRE`1DO{5^eY67un2=)b-fME`sWk{Zy<)JGv#oz=g+a~?Vx{HSa` zMtk9N$Rk+YLAH2CY7e&51!su6v3>vP+~zKE4|ALIKaVJD{Q&I~_vqyRr!Qt7znM37 zYs$s6&OgdJJ?fV!b^|3VU)&BkD}?gAN!-pUrRqyVBVv(W8uGC(NKOlDKi}H&$~9v8 zL&Ux96r*x2TcBHdC%`Qo;>W=)FTkDO#gEq|ksA54Vm)f)Ki<_Z2D~3;?IYlOC$Kc?6Mi= z1rJYd?2)-1VGo&ByT$8~@MN0h?4^}IOXFkXk9`XZ!rKnD&8*bzV0(8Jgod8Ms7{_3 zx|$}3wV+Z;zTIyBO=5(05F}^ZZ`7k!JJp=la=E?_ca{8U}33*a|vk=98D;+Xb)A`**WC4_`ep zUe?xww1`=rKNhauheqvN5NqPp zHn;G%iE(1ZcuOzF{zm+rA1lfOr-gr(V!?pjtp}*aJUa}TZU4kSb|suWtr;^<8Y=S- z%1J2gO5JYywuBW_yR6oi5fGER@cn8_#9N>p$F|W^&@Vy2+`O=ys9a;l8?+tz;k=%l zZN5gaRoD}rkrV?8BZ7_~!G z2)+3^2+P_m(gJw(mN8d}FtQ)SL>)D&^#pLnSX4Wd+Qd z9TmejQaa0*#(qg3EXovgG75e@DN)_LnDDdNdUctlKai8CnHRgd)H^%){w+z!=mOGgKNji!rTN|^uj$jtLWo6A4L8=Tk~c>J%*<>eB}?1t%68%z%71Q?`# z+Whjk*UG|Bb|FqPqUK4-*ukacsg}_cqw;58)2zSvJP+zei&zMeR#+>-u=$IAm<%F~ zuKB7bpYHstHRt%uj}LeKb6O(e9HBiQ4{X>YqZRcmVkLhSTATn|gKWZT21Rvt?k(Xn}8!1q^CafuCGCHu2bNg#Tc% zL-+4?#eD2BUiHu<*UMIByE5AHihyq0~eG{xtVyO7;HPJwF zLDl;G%b4K`U&cR|Av*J5LOPMLMya~kGfx|Deg9hbjHhnW;x0eBAu z?c|hCa?y3ybA69S8z{8P^$!*H#y|*9vbc5IfK`|ce;P}u+;TN##pb;l zK0IdUlGp$qbiH@zq1XU=mDqX=HHx=vugpE}*`EgVG@5r#hoFa77k@o1zFDwn-zeoKFX8DV-H`?&px2z*$T&X2Mn=T!AeiwgkcfL-wJXAj? zZO?ZHiTilDqdE@j(yXd76KV%ijK;{*$+0bS!x{Ugf1Fz@Pl8?3IgE?r%QR+Wo3laEYtgdx%CuV{NCX&8W>&=aGp)`;{5^~Q zQ5Br1Ul{9tEbaQ=-FREnJLfj>w)f7t2)kjk)(^$KIRSdeY(_f%L_2?dmDbVNPaa;x z4|g0lw!paG)!T1t6Os#Y-OA0zoW9DAbekysAJBz0GE{iYHT62jeP7?{OD8F6G#mH9 z>5>STB6u+=5N$o%N5Z9k-PUsIopZcZzlp(y-zXt$r+tvq6P)$^hHDoCVj|RLQQ1_r zfoBIu_BEq?S+yKzJIBtU6Jwm+66SkHJ74gRWgk*fn6U!(j%I(3-Zj}xRwUFdV0(OT zKdQAlUmu`~w3^$#dFmBLp!fa?k0p_sf+zX>tgi;#$q|?{WG$oI(L(Fmuh$2fu9)&$ z2+UgXsKwr&FPb--NDmt;9%>GIYY+ra%{m`3l-ZV0bcR;&5vePoImf&r>V6zYF-tS2g!!Yy?lbK7rH0r{iPR-1D>_b{aELyqVOsyop;ns}(b! zvt${oU%NXokdJb)i+-)xG1zgp?^`{@iD{)P$~Yw8?lt{TelCuC$#;N6KP~zdZMAtp z5oM$I9I$;Q2My+Ro751ZB_-R0iQg+WzaQ5>ks8u|8TMnq>M+qJ*M;=%TzJ0(ui@f> z(EKJdzWFZVmOQmw#X%Pl!P}41YMxTn+yb~1vZuG%ynQ7o@;|IIo5)o+d77X^R4Yzi`mKu$;p4)y!cv1K`hwyVLz02Bs2DTe;v){KqyT59=+lr9wx6S-K;7W}IZ(av1=*;*PwlVm?yHRt>ZuhFy=2=mDs+m zzt2=A;mF)rC{82%d{;uBjd8%bYi*Zc+#9~2^qBKZTZ5Oj`ER8*ooSNVTc{B#>q^c+ zT-5n<)$bP8Q@{KcaVz)Y(H?Ep@OVW3r$AC=@BRAbcSYQ8e4ZEA=$!br**@lhSKaRF%{o4ZtN5=w z9R||vn^E(E!e5RBx=%|3kHu&oHOuC#dZ2Hsg20J%*#gI6H#2j5a84R zsVgpFVr0^9s#MSCoJmQan{3+7Cc~NE`A;vrWnamrTU;HPO+UJ!WIgH9wNvE&nyHp0 z$vLWNwVU%5@&pyCm?~=F7at9fR!_-~ikj-;`6p)iU44D212n;BWfy^^xg$k2`#cj8nOv?iKY8owWjYl(f2 z&cE5zi}&bhU2+-j(Y=g|2`~WdoX(Frm_P1|3_w~>-Ax_ESt#FXfAr~Wotm8ax+opp zYf4~)(`S3m_;o85N6qV9S~xaTx)zxnwJHlPmsWJUwHMPm75FLx8t^2(LHi^u<7i?= zIj>9SEev(k_Bz{QFb)x&(IqsK;q2lR>NxrJqQQMRT5;!e@KFlxN_g8w~ z^D>-Yq`g@VKOn!Mzo~To>|m6fl&nH!s)Gl9?}dQ60qujA@?eOlZ)#Pq6)CdJ_2zKd zNY?k=VH-EV!#2$(@fFghc5R|hG{cpp&0E&YDADld$g#d-wHgVBjL(kQk5OT_Hft3zoKDtA2hBpmS5>23o8 z|6kq3`SRJv%@+^TH(JRt4$Bzf^HbvX#^cV?GU(>TAv+Jmd|3ATdPwh~n$*>yCyFN; z&EFhbcc+wXv7htW(y$a_penV)Au&A{J7Yn$ek5sZb zO?>o#j4JgFzg|jvb!G4dl1a`oFcGPpjo-)^xYXr!f1K?p_%?SnN@jv}9G;yM-*;Ad z`!&&%h15nsCE)#h`FiOhf8Lv2W0tJp=)Mx2)t;*2^j@{`EAcVKS#iv|Gp!k|E#Kb+ zQ_JowV9v%jPvo?y31aR$59|5MTI+6*J9A=~@~%?N7bT?&#( z_o^PI_0`y?+J2W;KbkPyXCN)5Vx&XgSL7_Ib2`1YD@6j4PEgDcU4mDfNo~qd_4ms& z)`@%5cz!c_-It&`ivH0A1^?K1>5?r;hg2nG5LMg1b&~M|>w^wUV)`#5V3Qkmj-GAR zn7_%nr;bRKKyNsP;JKNa<3u$|V+$=V(JlVUFV7uz5NTf0LGn>OTV?(f6)EaSWjD%C zW@cBZ=DxWB=}73iJP?6;HY6YYJ^NP2<4v0c?q^L(h?7@m>;0p*=Dq%AX>WKS9!FSv zTxsac#818N9oxP}ZR&R`?w&}U$kLwWO$Ms1Gvs&aewHsgV(@-}83!%WeU#p!mDMy@ zjJou_B0CBDB|1iSW+(dnP?X!=_B%6wE|O8Xp-PJ|ZEuHM)Y~H!)e7cCLg+%{I&0M? zxkQ7(4yD^;*S^TWC^BXlN6Mih*6*c(vNNql7t4x%+7H_g*Uz9m@0&7W&rD!a`|Jix z7Ib%>*umDgad7g1Zp~z#p0-Nv+IUfwoU={Qz-Tq(bAnSbkT(FIj?JlYok}bQk^V5FwZON@U)~fpWfFv(Y-IK-g*7pM$ z8k^9eXMbKS&U;q*A#I{*W;j0`!K}u!EX-2W(aPqVqH?DkCM=#+BXcyQQhP4m(tzc| z8aDR4a+4J#nO9v>?8YMw=W91cpQuz+vb;+-3K&*fZ%*2fMM7)yZI<~GR@MmzQqTfl z6fL$ojG`JJ-L}b=? z?U0J78F4%RMKhHjRHk&bo~r)^E``23cL%IcSvp z&iUGQ<;B>Qfrd>z_~5~;WRlm3Awn7EVykffRtEKb3YTb6j zUiU!@ADD8{aw|V$j_KuEZPZC>9X!6{=<$hx--cG{a?#ob$3>x4R7H%aC3$EFrOrN7 z-io`Yb4%%S6v-v6T=odUTgPmHu=|LM?(}4<%IqoLc zUu}LZTVac{N6dpZ^svgoc-&Uk#tgL%>&mN-z@mnH<;AF+yrs%(m6tSBO8J~h-K5Y6 zP`!C#{b?h9sUT|M`}*j4n`gS6-m=HE0%|zb&2s*cS({XS@aoX0&B}|ip;;QzR+n_w zP5yMv9yuhU0VcP!jvqOzxCpFCNq*qb%R6qiG;g>zF!?Rwdq+Q9YHoRRfvl(M5d&?d zEAdgB@_3G>Ah9yBR<^|$X^qcs7+3mnd z5lZh^y=`f}Z=z)?opZc($nyK;hT05_Rq0S+;9bMj9!f^Kh?6CEO>)FAy?8@^wrsSz z(!#iYxBal%pMke43KL3;2I=k5{Soy_RaNV=;5gH}b4T+Dr5VNDe8I7ni_7KS^Y~$$ zu8CArI$%jRMTIS2(V@^IoHxGiHyzojTIv!N75(*=&UD8g z>@DTaqjytU<&h41WPPMzHw@<#w`hG96-*^q-AJ2|msaNwHf(j?sA*B2iWj~m5ml9v zTZh(IwH<$3B(hN&j-QT`yPP^vm;YK@^L+UN0l~}-y5~GRl@Jd@)M(R`l&RFW&Teln zwIhlobu)%!NU1LUiAF~21=_q}C}3y#`_BKoz)`B&sQ6r#SfeWwMT~m(t8yT&)-LDS z6~e+d`AZnpfGTQ7zczS4t7Sj9$spdlk5ewi-WSlR?mj55nzKpM;PkV!7{#E&#}#pv z1E0P%Ts5u0#SonPZ&S|3G#G|jIZxXxa0w!)d-D}$j?e3d@6MI60Jy(4-A*;+U zHCd0QbHUepT4%k|uMyZ`y%HM(pY^w&1scY0o-F+>6rnh}yX6-8;FZ|;ptCf!rS<)1 zt^!1v9A}tHi&+YybUFcqzBT2b{o6Y%Uz_~LptK{Qzqk+nbuQk2A|kzE%8IA6$vkq{L~Bjeq4~;|`b7ALfIqi`HjM?sYDe?? z_MIs2=$X5GXB zi^S1Li`taQ&!cO{b(}W+(Q>FfF{e()u&(qWyEj)Ax^yAOHODtyn{1pAj_f&~m;Z6D z-2K|$Ji!A?Mqwff`JAJ;Gh5DT9HlcRKXaj=tbD~|zgGFwelJV86}Wbj-Nj49(i=61 zdiVDt$@RD2>k78DZ2GdTG+CBYN*7(2uowW7-yKhseG1Whz3hH6YC=DYq~J-|)bHR2 z^>@odnVerdB@jKHnErM*z9yx1D>L+S#!#6{uuW&*7WAXM7YZGihk=hCa9MxPup5FqXyTCfld&hb z$ua6y^@;cxOPKPnqM6UWC843Er6S3Wx2JF4nv~+W7+YUZ9mu#8C~c{U`q}rmmhbdv zm&`i+X#G4>P1Wvpl8hF6Z;Euh3Aa)dF#&a0l#J!|COB#i~*80yLV2@_q~2)fiz1R!hi@#@STPi!?@t{ zgaCS7-9`hx&>?Ge$$vM(#iDjowH}Y9uW+0wo)$%-dejLjkZ2^DSi8Q$Ily#&C>^-mAjw3wPB}I z_F~^fAR$hY9lGrHv#{Glbn957vmE{pEiWmZai^THr)($XY;D}fcmtZZ&7gd=s%-pN z`u!W1#5zz$uJh~}`Il~-RSk(J|4YPzDGyn*|MJsEQcRD<$3(Wo#sA6nK5Hp~z&Eo9 zy`Q`kkABpPPn@5%yI^9KE?#vr+ParhTwYfqn)wR1elM-rWYK!NR}Z86qwRICpY5>T z#ryW_Wb-7_Po&8o^+xx-(-*`#-S16m(Z86z_~vMT_xbc&J9f4~W`6EZcyGV^zGQL} zofWV9O+K1%G_U9ku7cn!xb}6i8~`B(t_6O5@%Aq|rS=9!9}~k(Fgo#wCjddfF0`(y z;CPPbc50dOf6-w0$_hsJP zb+T1hcsS&~HRE~u%DnA6wP#^7RAfHX5EW73jgMo zem_#-9~`1%cF$4pPh{rypZJF2l>QI`+1q$%`FPOaS*6}8k}IoikhlJKaYo5}xx`>8 zwsc6%VwU>pjS;XR>t1NL&*e8{Zqh+3FXlqj)1u4AfnkYgyY2sBU`W&d14#zAZ3l3q z!c+dkDn?F4>$pR;suqibXJP>y!*6#6@8TnW2~~^u?wuLyFYukdsi#Enyd>^hf7l~d zO#ABHGiNmaqObNX#xv*F{X6~Nr6&5)0AAOEyQ#W37_S9oT~qn_#xc9L%FY0`jWIF8 zM+FrFuqjVx6na{`GMBL)k9q%ACa>c$clqDS?7jEE<6oD(3`=$_!Ne%%^>^!6#JPzl z#oxE<|CXcdy?qTpEDYs0lC9@nP7)TG_a6Jlolx92-YeeOy!?Ne`k?-Sra6<-bHD#( z$bb7heYYL?7f0E6>Tbo|;i~D0)sAf>Q@Zr_ zOkB1}+Mp1Z&VKf4-F+*qZe9C3+e(*+YSG$(r#Rdd@uu*!=$(go$lvc~yeRuw0sB`? z_wa*E)4#HA==7giwH6E58F^D>QS{qfFfz=mT{&TP78+;}|&h#J94Eg%}7Jwj;8QS6B zfn=!iFDF%lL*aS*9fS{-*dhE7h{$@0tY$+{*{bKYcC%JeAZfJ6^hlZnC*O zy6gN&7yS!AaW;OQ)`|QpN9VUxyf|eu+UPVMJj%IT=dg47gN%bbOqmq7>3b zR`%#?#q`#+RK?4B|5GM@;Ju9vvO;q6mY3)1D4wxeo#aNtV8Ohn?|3Ybz?pg^r?T7qYR{`#!@_RfEC740EA&GB=a40J6d_WX=E8!> zuk~HMjZ9CwEUjxL)NS2?f*spC{yfNqo7! z+uN64<=hXOjy{u?QX@gQ+jREsy|OdLO&U`5q=p@TOZv)A!!<`A=F*fGv*PWBk4SCt zcGR*xT8U|Q@Wa~Lo!p(=yZKe>v;C7hboL(Io!ns47yRflP;buqo=NF_&#n|~U2`<$ z+2x|t^z)k?l`Hlh+eY#lfFcP}j>;KFD?fQdUwrm4uJU8NLj(dZ|hg6ca)c3G!@glN@R!Q z0!DcajWz7iiT#Eli46prZq9hJe|f76Y>Tz@6)2k}hLK*q1;_{)Vva$KhN(-6#zlL> z;u@bqR;Y|dSbCQS{vqdK_dA@{=*z2sDGUX&?9atOZ}eW8D}aSjO2*4eHf}e0%>qE? zmpV>X3)C(^SjSFu2WA`^Iljs2*>1-x-glicM@I5n3IJ4(eLA}A_uKum-Tamg0Il`; zcu9S(gRE2HRSxmx*wTMSweTQ4HORao;Yj*kzJ$=!*-dG|WF=B+|CUqJ~@mSbqF@ zhJWN6aVC8U7;EV9jb_h)rdvIMN8J}&#;NBV&2s5k5p}06e%t=)eDN^!`8({B^(4~9 zVsd{VHOuqjl$F%G|QH!Je3X7seH`PWp)$tyz_eOW&`Pib0q z(i$(30BEYzaH=(mGwPc6e!x z*B-3a(Pc4A>1>_#T@2tS2gS@)Z?bN`;N{OK{1W+4OhIT~S_X&{okkVQr&9RD5HJF?a9$mk0*RyRz)?nlP4Q)1## z(>3^qi7SwCXX}-Z7kz^FmW<>zFadZjY)Jb{)RbeP>;f?RJ-Yq#U(=xRRux0H>pySt z^nNw!^i2CkA2$|2wR?0=Bq(ovwp9cGxrZu>+v5&d1;jtdwVwbO10{#z0L-=hMfDSa zZm=~mk7#iJe{9w_#B~FtmeKwJ5&)F$ZFyvY#Z&C(y{{^wH+n7{xs~LsQS)c--D?B!V+VgdqKJ7Qhd8g+I>qOC_m$RIEsanB zz8Mz_fQ}6-ioBV2N?P$+Y27m6_!qONc}~gL%U>H_t-R6CE}8^%k0C5t6vMiS3Bq=g zjQMOkCA0mGp=NX)pi?uM&+haLzB!k9s4-#UCcqe~PY#eaTG8e$K&1}0tsA)&Q2J93 zclx>IYjmt> z7}`8#N0wWjjm~t$CgRR#vXx_08R-^F`D^}Vk;UN3pN)`~Fr-#Xl<{5Z9SUB(fGXrq z)+*F1;ne#V>-<%{`Yt3b0ra$&335YT?*Fq%jwtO(X~m(%^gS^EA84)DqI7c0;>@8- zw=EW9;)aIa;i$ULl->@u;fi$QlJWXhnY}vG&@Up2{s?i8wy5}~M9%3UP131KcIWf^ zOFJfqL>)@=NxuLVi}_@#%dXGMC-*<$Ag$#v5q}njGKagM>T5+cTuZUUTYv-cGu|jgsqXtV3Bl}Wm(Xm-M62F%$F9ReBrzFc^xQ%Z zFvCxJ(Zl0Fg#|zET>UKB)c&#f`;`#C5%ZGGqAsPy#*8WHk@&cPikOw3H39&{{;^^5 z6fFB-_ygY}kiP1+kSE1=uC8f6rZzuBu3mcf!O6U-POU`MpjndpvL&T%v|WU}zvQ!RojYYXZ>t9a3Kbw@@&k^)9_e zLeKji|LZB}!L*&^4N6E6%16ym$43z=tJ`}vb}NvN`MCuvk>mVY_RIHAUI9H3Iifu7DEqOP|Lt&LwzVN+ye^YP!-b==TC#Qmj z)<;|PCPmd4%PZ7TCo3x^(GXVNp4V!NvLeBzcE>(;{15FSxnhzeN=wurXGCt(XiqYWW{wemevpD16VjT4_z*mjeQs_Kkb6!}vj~ZmyQt`-qtT zviF^Wk%={4hgMp?=8=KKysxq9ssil&CR%&OB{#M0;@ewh|p*`4tUyrJ=^-69>OwRNDa3f;H`7R+^(uIgDOO z8kV+JC6rEy=83S)SIhLNR>9{E09#wffbWklwd~v5Y}rxV%bFKIb-Mw2!EJ%|gq@pu zq?~6nEJc=0`##eaFwU{)i(7L|IF%{Eibu(q$AhP{LJ|F`qKFWIIe{tpnF4f9g;M(}dB z>L&22$w%k5#iwfyT!Q=Ae&1xV9N(d6H33ksN=kp$m?vIrP0ys3+QpA4-n0aqvJBlb z8XE^XkIatz$jeMWeWr1bLCpM$l>o1z%FTsrj~%&oCE2e zeH*b>0Z+(=g;p_MdjvG!I8gV0JpBDVCG(F>)^waUipj4nyjGUdz`LO_?j5MKxbOit zagJUBP=LZ?t4dmQtPG8BXivl2aaKITnZ3LGVW-kF?bPeOseS;avm=@F-u7&k;>hdf zs;Z<%pj)TVl`6`ZJ6k~%*W*R{2X>9V)@j-0pibM(S_V9qLV(`;F*8EDYh#C}ci0*5 ziB0SBGRY}qm^z{0EsVw?kil5N`WnUr~Ws2z|Ij&u-lE*5m zqRHY5TO9U?ricz_LK6(osjkU4Hr=wjp4D_|z<7rr<%h>|T@~6)kkrfMJVrkq$Wy*o z52ZavW`i{Cq8UojIn-A+Co;+TBZG4R$*meympl)Jdklr&?YpeMQCH@qO3vzQy|k_H zCY7{5;%r+6DywR(L;P^xt08U3j~#NOI*o}@Gn;=uQTcqlRc1f$j@ON#lw9R|bjY2e z#&vDpky|QqL1#{B3_y4I?SJ>M=#li#$y3`Nw>qzRV1g99f2Q|54RA1fdQ9HxCbUO3 zL()$L0gN|(zo~50z-V#m-hknJi9YfjV606Ewr3{yDE&@v)>!LjSexK6=rF{~vs=I7 zlKRoZX}%IB`cN4`xz9x)=eoYimD1#&WU}q zE2C&a-H=n|yV@D@wD@?b`m-{CyV$)V4Mbgn4*&=FY4^r^@xS{fGg_bS?Aq@8AMO0m zb;(CsKTgk-9s`tlC*@ptQi%+2lM%mO;&x!eMShg7;%xkq!ShyR_>8x7>FS>)@rHaM z>}K$lv>OFmKcFF9<(iShI>LgR<+_IXwH5EnQhMzm>7(-lP~WJAj*=n+{m#kL9_NtO zDSy@S)LbsU*H~k_oz@3~$U&yexSCoU*Sj>mujQn@;RgymWbpMFqJv{}q;C3_imd8~ zK6SE5y{VFhl(~Vt)WbLncgOWB21o%w$cR2UbM*Xya>mS;o48FoOoPw=dIE4<0p{pZ zh3ub4Mdw?cQ)=HYzB$?Z{t@BVb4A4ph7NHdrY7(kJn7Z3D=LeO#F3plJ&eQjPsr>F z+3~#gl4;eC>FoW}=QO9*#(MhM4d1OM-7llovhNG-M;`=w5ynZ)QR8k~BY&YV$7$FI z2zT>~VD~%i#SsX=d*yEnc7GrvX_dZi!&Vo|bx?wRanWhiK*C!;ep6t@>YpRD*E{Dd zM*!O3*o`8q=*8tg17k<7c3JqZ&tn%y0bjiP$;+SnGCT`Vi3*r5>`5PEzcZsJXDx2- ze^Nw#xAL(qF2Ri_T$}OnOyK^9El&Wx_m`eaWuH8Kix<*q8NP4vPaEKxTmD7f_bjD@ zn{Ngj+04KqwKb)qEEb8xBR}uoed(LGH1ms|IF=PtO^?^;eah_hmHWWw9Cyo)Jc73)WKsskLzSsBeGjHt-g*JO8>jDPhaCxvQyO2AW0L#}1uJR?&ayUN~LdER~{|M6(`s$Qk|3jmnG^lpn0A1lV5wT z!47ZCD&Ms~Cc56MjH#qp0qn%hUupy4?@kL1v_|>)Y1JFWC zsU1o!$YZrt0M|JfpzX$&I2i5)qN}SagDuvpr78=4K0<&`U!s@;xbFwK&K1k2I9pi- zRttmYddQUSBCcWB38dv%RpreJfLdMDo10Vwa3T-2zkAWsg~LB z1qg9nhoZGCM9);_~L}_+eLrF{)HbF~?)71h4ZuQzHgMC}lKiJ%Lujv}+;!CaYoAn0MW z1;m!A%*sZ0=Fj8f|A^yq!w(_vZX~pQIKQRB|M)|~cfeRQ>KJxO4CFCgaF*#nPQ~(n zC6kDrerLmF*ifmhInJq8y4k(`nEI<}cXvF6W-T;9d%KgD07^YPcNs`&989y4U;9%j zKdUQ7>?Gvj}P z0xuJdBIDXIeP_+{jwu}vum!T_6#)F!C2v%ESRF?5H!vJ4opRFu2xz-t322T9kjsSq z77J$2lCF8iSP$q!SMs9x{g4D@C2Y;H#7Q}G^1JF|vLoUbxyJSP?vE+k=u+zd zsQTq9-_OmpfyDmP0+8HF(ET$cz)v%YuLNGu@Kd*{vf3;9lpHanU(wgZ{`}~&yyT6+ zLfpNn5{xR5T5!khuG5RPs@~VfgtAnD((wL@)_NeL1@9vDGd|qe5-o2Uy;FWeU7v(8 zWfpifDxq_8-qGTG`&YV0t16ThLOY*xSMOLBDZZ?(N(O(4o;y_NmZSU6(R+~?7audq zeXvbVQpe?{>@yeAT}kKYy$K02^mX2{&rpOQS9iPB;Qjxe=4xvLIiTZ6p~cblkM10( zv+2`i?l#ohxeIfyhJErdw*A8Vsr2(U=V}7AIi{Z-fb5%#M%|1!Rj9CW?f+jX$nARW zAO0sP_&1aWhVgU=$T^F%g#R5|f7F%&7U8XZVfA7Q)JfhTZCFJc0REK#!34j2N0t_U zD7jY_FK2@H12W~5rk&H4a-T?kVvGHw)kT}5WTuj#boT5G`~VaK(i^c`1`?>(@dL(+ zMcYGm=Zxd;0jlnD^wacFz_P_R)da@h+Dv+n+GI)XV&*%R9jIX|9rh%7O!_9=`b5bq zdZb}!e>oZWO631q9pY5$X6JKe|2y$ndF)uga^x}M?N31ZUfHXX$t9ZmT{KpaTOqW% z`HF{Vvr(t@zg&Tfsn17ZOs$w>m%*=+N_baE(o9Wa;qNWb4Dl55tXgC0A)#axe=`aTO}D7Q!_7^MJj z8n(%|PxM!>rES!{-ZHRVd$MJ3(*MQTd>l{{7=t*|IW|P09#a*{7Y^5JHqt*<0D1 z_Nr9K77=BZU3O%iDw~7~8QFAN-`87pUDthIeeV1I{r>rk$3vXw`+Xd*hi|(;5B{z7g`;Wqwzx+3y@IhT~4(jC_PdwN8uge76jhB?U(P*rAyPC&8sJN zSsNCmdGLZKf^{25{l>bHe{JM}AglCd-cCW!xmTIdxi^nb?>uM9V>)%gM4agC<6O3k zv18Z!xb_ciU!u=ndk~8j*XoY>d4c_hd>@W+HI2w9YCPE47mnf*@3gtFk?yarY-Hnv zr~Z56V7Q2P6h7ruBz_z_&Lh+fw)3B_&PR9kpJ(CE6$5yE1}l-tVTt!!#?7CVl2 z{_&X2NN)eEgt=D;+5}d4byE@N=p%{D(^0eJ4~~=IvSZW{Pfk{o&CvcM2%$U{k5T)S zcI#`Rd%vm2V4SYp4VXXdm7Y}AYEFCAXPto`J9QN{pX^(MKYWh+FEP3Vy931*cCa-2 z^7Kz6oxB3HJDb^!Q}4Hu4n{bwvI|ar%6JEs9xsvfU%Lvo==ZMT#$-K1`@XKz?XVfG zdKt|se;H8k!c&iCcC_)EC9#z8PK$asKuaadcn7nARB5?8c)tl9g}4YR>}#cMK+2%^ zC?D)d6y1B51-rbj*h0-1(AZa1UcjWdU3o}}2X)Ku{W<=%k!BW=8KaS|?utN3uzf5BFgpDs;bB-{#A^YY30yCZw$qqrJN&O!5Ds&Ira)uV~zuJFK&YZ~htoXzB%yK5$F{$?h z_nK5 zj>$#J?XZxCm<=u^ct&u{U=>JyA2a{c+Ru>Qua|Tdzt0)!>-S(8IO>mReRnt<7jIql z`^50&n|}HnVN}yYU?mn_aTXJUXT@{?He7U|mG-&)$0CC#OtJ$k(E!VUK(@*4nQXzd zJs5>|B6v_|Y_6s#upHq&idp3Qw zetyH?5we3`F6lWddK2bGn~gEQ+UGUPZ90n{-#)wrXK>-YH=0cE{kGQU=b^RFoBe)Q z?Wj}3Ztmll68q7rK~s;>FK;HLb5tVfo<6C%6egJHMcEC{ORp0dhrgER&00QPSw*GO~7gMlYrl&wTa67uecmBx$ zeEZLDW(JBMyG>*2p~*f3;K*>)ck~nOq#;a(k{u>pQM_Abr9wq9_NeR}5FIanb2%Fx zzPhGEJ%>Q)w^* zOL-mjUR0!i6tu`HZkynAb^t{x@R?4eBY-6mu`P%1I@7z&=HFI`Qt+n%)Mm>M=?o3x>*LTXPG4GY=m4}lV^6&vhP&juxYL^}%2Dq|L@nOm0 zu`)YjfUkDu{P8IquSjig0PW*6T?4q0PRGW==x|t)!@I2T$V9)X6b}TxaJl>g{#^&L zn{NvWzaAi=@53;=+85UDR+%D3#=h48X$WqIupB_|LbSuzZ#)^&kJVz`Cu5FCy$hZO zh3pZ-V{EHn-WFyCeU0(4`_FYp>=#u*vk-=aalkSmq`Km>KQ>j{cx)#`D_YUEfiec|T z;kqqddC%z|f!xo+Tn<#C(l9BhvR+jH$(z$hh9M~yx0Y@+4ge2l!#LQd2Nm`M2h^XJ zt$AO$kZw{PH^2}rcV3ZplFH#@&8^W6gc*pZB6QNNU(v}WPhI*vhHmDvv+8_g33HDd zX-F33a*)5Z;vHHnTT}>{q((*>xXgxkKGS3CUIX{|VTV}A$3881x^B0L&UW(TLV~cx zNG7^jb;0C(`gv2N4iO=Bh|Ba(bw~>(??|HG8#Rhc$1$gKXQ-4~<+}s7UbmH&QzCgm zZ(lx?4U0dOjsM)L{4cc~TJ6vpT5C`R5I_0Dk@Fuq!hbaLoO)51jo>Sri{r2L^>u%a zF=v#a_fp2`{dw@^6VY<6a(}W}L?f*G$BE`0ESDBL zLSej6@+~iaDEI7Rt9COpd*+*VGOuc1Hs=05g!gy;ToWEEm^z>bwdFL}nZ z6yecE`IEfP>U%oeB!*+&W=e|kAMM^BUe&!q%=iAnG<^=$zgtSeW#e4vooVZzIT}oq zG!Q6@)S!L2lv~O6J91m-$Xnio&F!E6w8*IIT=QN?~%plj2Ze zBh4^V|HS*=0k9f!MvHR8`?QF>}s7Dn%Y)9X_sE zMy$ey0O$_lM?t8t4hZCSw#LfWPCH1{CNb)Lsm#o@9) z0~W)IVWe6-r1_P<8gN)-D=@ z_Gm7I*}e!M)Q2*uAII*oM?Ha;LVozL7&2!1LZg9zBlvv(^)sDH3R^p`BgNhN4oPYN zozgXsL&e$EEWJUz{T+SXh>!>|D31E=?Ucc>BV9lC^gQq6a>1!KL_`MEYNYHcMrmKT zRB=UVx*?lAX?g<*_Bd={(o^L&YlTFFAc7G@`850_$$m(0MQYddyMxA}O0S`bs)|~3 z6pWPU%YUdb=cIz=CaO)V-9zHB?=*#87F)Dbv9_I6W3fb1V`SGpoYzt3{7O|7M0m)3 zMpAxjPIMN~juZ@{raSUC|o1{P^|S7{t1xdTCSL(Ye; zd$tggGhGAseXKF0yIeXM| zGTMFMN@yjxJT@B^n>ZJ8w3Dn5Rp0a1*l%TkCJzG{;DC%{4UA55wgV^W%i=s&VePp} zFH}s=Ihi_3u}2Zz1c|k4~Sst5}?+RSyD#C zZ}YHZ%b*GCyEQ|lN8~|A_#p*EA-RlS{tSBA0n%+(pW`Mt~XM6MG^UL4z zBvm-+?{8RQs8qM<_Wvg;oeg;i8q;0EEk`D0dOeq7B`1h@GXVmaL(5H^UhAmvo_cXS+9oDj&~Qz<6E3znlnq)TQ7#+O%Hn~n zLfijr6U(4+WR}>VUJx~}!?AAPZxpGk8e>osJ@OkPE-A0(P|rZ}SO!OM)q!?cOH)mI zp!>5z5_*!DgCf*n7578-g6fd&zPec3YB7Kx!&K~^v^i_=}1BWXigemgct@UrW{WJrG z^4?5{96x>BDhh;)nAty<%38UVFf-oQsYSFXbCL&HI=f@ngZx`a(`Xyq7O|XFaj4cq z#oxDSzv15k$K;2 zIqzuH2B4RwqORROiYXQarx1Bu{!>8zF~>lE?Ld3V=H5OeG65a4&{5Hs`{L{-v_Jd_ z=Kl|WLbm7qzrb*s_~V;*5frB**K>c1jkOW!EROSe9iRnb8-aD4V69D67KaA*KB z=CZ;sHKCu!3P*o$_Z1QRf1srQ1(V*FI0x`Rzl3Md3=Pjk;aj(!ME(Yz;{#KN0Hb3g zxXA$6EEA8xc^be;&LWNAU$|~FAVFp_RyWy^bNNrO_y7DS{)BCF{|^}N9|mzQ^lOKu z&MFt6n}$`H?XE%fd+pF)+FK0_q#c5q?RtT%VL)c3V|{?MtTU48he=yqx-@ZZw8S3uPV8jthi?&mwfYGM{*p^AL6p2 zNAf`{UBD}6qGaxlnp8TxZGnHkZCdT)55@xU2`|M9nm&WXLdA<~U`Rk{K;GNXFxc~! zxwOM3MKX<&WOr8IuLB`D07_p=B;C;Rp%KsZnr&66=s8HjjQuvk(~A$7<9jXE6WYD( zy{MVJx2+>Sc#Q_()8~Lpc!^M~A>_PTW~+JhY#71}0H+UD>t!z<)ZFK`}y( z0V@Qn@qv+8+-X9&8ajqqw458SR)RSw#q=)Tou^1r;;4xq`xLu z%=H;NxUE6J5(?2?C-c4roVzbam$e$|vMmhKCBW`{pfhn)WIk!`4-|T*`=BMgG4v+0 z-#ALl;1Jqym>c%pnzsW0M;y+v{uaP9tgVxsLfA2h!w5388=|1*`DMrvhNeL{1*{O_ z{iW^TyWWh>-%8}!B$gof>wR$ko&a@f^9YCaG$sSdiyS`cHAf{eSOVIafCyw&JCR)b zDK}VR^T(K74d;FaXpW#a;djY~S0E43Irbe?vp(1|&!k7BG#L09fa z6Vi|&(TG&o#)(Yeoys76V4%3==xmd?+tPHJa~ofmV9nf%B$-* z9kCt*KxiI2=+Z4aS{r-%TkfE3oemaJW81+gt5X4QcCf&Yjv0OIio{VLI?hi;$V>{o z)=fYq3r$^nRHCQqd$gd?5uu=^rV;-)Bpty6nJV_vI-wLSa{+`$ix70`AUV_LtKCRo z9Pet};?Zx&Dfblw2)}WlB1Fsp;^H}(Pumo~bhI>M$egrN!nsJ*4}q5+6N~}d5UM!< z4e2;qZtu<3E&z1H0HLRNrV3kx(0qTPwrbHG&YL>z&X604(Urm0wT*>B$R!2>NIj#VQ9%BmntPG^PF zne6dWEkN z#flq~<2N2mUxpB2Wf&GvPj&%FracvI&HD+!LC4GP4ME~#-Y!%1Qw|WBn5La5(tOd# z^1&clPMSEXe%w@MWuR^%z;Cj0YSHnRy4BWFBA}M)iIO2DyTlwNhH&Zt(JyuD)eKb1 zA^B|#3=?$aC)pO#enf$gKbWHU*p;PXXyB^-Xfg@t5GX04W4AE>+z;(hHaCVS{|d5@ zf+tMC0>0z>*A&h7=st{n)s$(mpMZ+RtdM^E0Xe9rg>L!&fa+&*#1{_dZ@bF!o|`{3 z+F;I}`*!&Fz6e!(X#aYgahR{OFtm^zoja`K^^`!l1O1hw!IPO9T0F8 zQ*NUV-o#kK@uPlZgRD}JAk0?owMzLH zEXQG8Ss%KVMip)Wgq<_{#m*@y{l(7xbPshDonVcX<5TbqJX<1YMZ8zV*~_)}@mq+g>j z<(EU=pY6vbnl>fJd44cSeY&6R>7#oHWP#YsLYAkuNIW6T6_B!kO~i8+OJlT;OTrJZ zxe$0CsBw7JLEeW0KTR8r^gY-9bP^(VC!_I#{hub$RcoALPxsJ|B|wy1a)iI&LZ7?; z&39GWVEO~TQ(?pVp2b^4VG^>`)L0c6eE1Ll!+QFx>bU7DL&_$qXSB{(g^%6$k4k4Y z6ZDx?Imw-PC&=IP{UlWJCed_E3P&ADZl1s!91MpYhae|64|i$XTOmGnh{nARHGB&R zG%W@?Y`6~yk$YCo|7;~@r{E__yHce4*EIG(swC{((SLjCaNz5;n=FMllgy;XdT%y9 z5gyFPq`YY=`+6K%J-HkNNPuBA==N>lbXlkc%(@KrWPTPS*%3($jG|YO;dTeW1BrbK z1kp7haw`_+R(52nHw0$k3{wsh)Bcn1J!w67jDU$5;iRISIt}(YDQ+SesO;{LOUj)3 z)_s0x5F92B08;D={XhC{+1U)1>>tN(VpwK82*5ml!gJv zGDUJ?MF%C5Lt#V-F;+*HUqmW(IGrsvW`>)wt zKmlp1N{S~>eDaxn(CJ8yEH4QJ_tN_}F>&tH(~)iXg7f?7u1>xHvJU|AUS#JTj0`A3x_zQvgTKg`onQK`q1zy@rHDR$22p0 z%t?6aRng26T|7F;*MZ;YvYniRgICaX`u=&H;sf+1n7+$icEeUlb|Vv$2%Cq1Zop#L zgtE9NymT1*2(vz6HMB`~Abu(U8pzgK$UzjrVl)Sab7AwCiiz7QYDR!v$(q{K(WxI@EI_K&Gm6OQ1NueUM40HBtgo;^@_1kWoC(w&kA;9y6 z227`}lt^I&@hEgXgbgx$YhD5x(IiO9F13VF8IiUOUb1;^nO{(qXPk@V@FCqOhsB!5 zm-cLjS0xP36>F#{9X{&yx~jkobDR5L44X=v_offnUy?VN*iFwUN<#O$D_9e(RGMU0 zmbf-Q+>anQ2v6?=w7NSGN~eXec%=O1unJ#pv0P1I!9mL%bw*h{60`ZLET18*5#`IC zA%FA3v8jv}uQcf{f%1_FIs#_fqJR~Q8AOeCxpbp~OwrJfBPpE?;xeoJazNfz!#Pb# zq%7xl+U?sl$o5SorFsPD$LK_0N|^IuR>9)t^2?QTeUiRVp5&8nzIq4+u<=g?@DWWd zXt*)q`Mezmi<4D<0D=4ry4=1jjku}>Buv)Wb3EAenRIY44!e+ND{=5!fg>f{L5GUB znjelhO$YhWV3iUm#^upepzHH?D-)(G#{Llh9MjGbCa%GP{o)bHU!q?8^}&TP10rnS ziMI@5IxM(8bU73^^xcnTm_2y$_WFL)FGKX1)LU7O@RCg>OhAVgqHt#9^IvWvCB8Qz zXpRo=B{Jj+l;&5$kjq9OqMR;FvQ0M5@74br?_>GpLEdy+I83io!bo_K9cy;rPsdBW z&<$?lZVi+xQxKuN3en@4HiNpYzDTR9B2Db+-B)Fa5P8p!Bhx<{tyLB3-%^sS>(txM zUi`ven{vh=u2M%&ua$kQ)^D$BPw4B$hio5TdF;;KVh0`}HbuQvu7_&BB>rd}V#P{Bn?=b`U7Mc|=r3x>_o&M0YKx!ujl^udCXw&M$e z(WlygIA1`SAVMreCt|u@gbF6ztk6#CxMbokajo^vsgUj$hlqEy#`UN6&*dRCg}~Z% zsXnq`1tL7pI;nP-UVVegq&%=jATogJu$cDG6$Y6ARKE$n1wwGQD}gXx*33g)TgNCJ z8mtSze-2~JI@Hce*K$CovxoTx02~_~r5kx%Z~ZROI`sxJn5ICog!vG0W>2v+Qe4Eea_HB)7@UWW&`mZR+A@{Ks#Qoxo~v@vd}_hDsTSsr{iCy za{R3Y@Ka>Vm%#>Jf{x;wDo(w2f;M|bH@C+KMKlht-8>i;C!0=Hs3LNy!t&7_5oP(vKsc*=gFhBsXWI@Togosn?Jr2F?zs&Tf`wFa`}9O-v`d_rgac&Sp*(US zf%aVt3jr#4fG@qskzKeR@Ycg?jl7_NjQvR|3Os=}@w{HCJQeb}j)j>m84nYE=$gBF z+rTB*cVWKAvlEJ*o00`$S?;2V^?XweZTajlM3`Sig4vN`8T{535Y#TtJ@6e#$4VdF z;p$4O_yHpO_dEc})~xWm-riW4zq$~fZ=JCSTKURRd=z>>xK2=J1p>?P8|KJ9m+gbV z9QZ9lUl4lV=kxb-P3r_e%!wcy;ez?g1dv1Jq=Pv=dV&#CeQEeq``QQHa9PQxO1h0D`8R;4`_ z<|Y;$;0Tufa{s)QO{jI63!X-loXagF;bU5_Lj}5HmY?NI0K~aZL?FBLrEMzQ zd~Qc@TtXV9PnnJ++KYBcKE76OX7~LYD49(YbO4$ySt$gn5B3R z^!f`nqcHbxLWt4D4}p(I0@-Gev}H#(2BF%H1mVUt?W)f0{YY|B)~jj|@ij48ICB2| zVk<=2TVydIyBn#z&`7q@;x3mW7SOJhr~x(GC+wS|VpVtDViu=HaH`4X7>Yc@UIAm< zb!QHcxnKY6=FtF?j5Mu_fwf<6bbALv6Gi!pJnSuNW{~Vu?a?yn6YmV({NjOskSupT z+{PW1PDb#7r_UWiKdrQL9!p|T?`9iN7jO&!M#P?nV< z@$74{Q@hZ%yG}Y0Uv%#2g>|@KKWN8)*@xJtyPNXYi9Fo=-)74T2B>r*g1ocSyze>p zWE#9$@38m5pkHO=P~1${)u^*cks%H>qeR-a29f+n7FQhb0GbU+?;ikDku9K-ZtMyp z$&q0WNUddwH^p@)g;UJJV}>D9ZfP2^N4Ud%5Each*=n&z`|=G62i@r+(lfs00q}6{ z$-niMKNmsX33fdKJb06Z;99DNdY#-FHa(WENo%TyFZ(5GzMz&6IoUpF~ELGR;U6uxrCj;I93Rx&fLBxUG zs9XQbSL;LhM63DbdC(_#z)}OzMV#k2($>?UmN0K6Fu>2%_a4`e#>X_#wIUI~@ zbD(8~VZy5eyFM?SgyGc+J;}x)dW`UhqrdSZE;8JY&x}Or{bCne@?+Hz(sz$z zm5}1dG~Gd>9eC42FuGVFic(|cPo2C+!sIqL;5hi+MZ_hHMXwgwC=9>R1Hl4*`=iIm z^q)?}UMIc-Wa&7?eDFi0F^2A>at+T(#!)5q!>9c3%BqiFP zoL%%rh6&^ni7Lu?6gO!Ga@7RW(#nkoh^yc5Hi4HqyI?Ie%948o^9I}WI53AoUt@2A#**WD|+q{WHZhPi{ zg!^14+JH{5X!3yf{$6mE^I=1P9)%~*py@lf1mRacNAPn*2Z~ttce982(Q?J#%)FOW zicWS*+*?eBuPXR*_g&pXIl~Uh#@Ns_EqQ=^T`!rcjm5&cRQWYOG~oVY>^l=V)-AWy zVGn&r`Mgeq3`zXABGXvRBo50*S&GjPaG`_D_SFJDXpGcUvW2HURTyuwV_^F`ML*j; zWWW(*Zb8615m!C>vzp%D!HD;*?E4Y}r{gi(S_z9obte^pnzZnKy&j0;|#=(A}1E#z;2YIurhwhn&Nu_2pd^ zO78&1E7SvZQsoHSh=nAV7xnz;~(1tMa6$-EY>h@BL`=^P!9|sZ*Yln&jE+ zk*B|0+-9&O{#hW{LDtutY#9Q)06~Y{WziHO}uDX&@YkpcVhL?u?yXz(Hiy3Ks z+j+&TFz5FDHYt3f|9f+vd%As(=TJa9opc5X=!auyl08MK#oNG~E#iBE3~0 zMwN{{m1s>Nm))J}b(jRfFl?7uKHCY5?SpH^(-Sp)PHu)2-DhIK#?=B2B`ZH+4^<|9=MC>UZkj^JT3bJ8bcARhy8S=WT03B?cEv> zPu^ z9Qm>2@lK+FoRrSFRFo%Fay*-d)@5j~D%HRXXN0zs?ck8L{#vD^CTImpBrHce9 zK&){XrEY5Ep>DH@o=}V3v;$_oa4E%7&@(DGm>o5c$Rd~>&m2A!(3od*5PCr}h3MS& zb3art6TvFVE(-Qg?%gI11w>38&4|vSJtULKbVw}KTc-L&vrQzSD-2+6fpkKWJD>Pe zo=rNzJrhn1M9;XsG9MCx3w=DN>5D_HlcdIdnvJ{0pe)|9roZe`Gr~_zIpoZzbLH9=$#I@8raqU*bwRVV_P$PkmQV!m?9hXE&5UX+&B zb3`97D2PtR$B}<6LG?b_x~_2tB;3_S#O{`L_YSaDOKMD0kP6YAt~~0~;7++pv;?nV z(6O^2cnark=K@ZKL6lm^!;v5Ct48TjtnwcP(1!d=4x9B48AYusnlCJ@1n=-4AtClj z9o*i%CH^Tj_(a)zKaoN>J({DpAlR!b{cp2yKAHxpaTR>Y68x zusM2)X;R@jC2}NCxj#5q>nTRH&{RlsJYbV+1i$BuA#p>>-qhDKGWBRNHaUpSP^#$% z0JN5-n8=Ob2nRE66^ugFNg`B+VIDPAVZu#^BMIDT)w^51$gXw|0Jaxnqa+`8qh`m` zeTF$!ylklv*R-ZT9K*|xZdQLMe?^UG&?F-&htYUZHLf=42loNoNDl_8?g_m5Hg??x z^~FF=^&g`M-6m6qF5e*O{4s$X>pXB`}YDOm)wn(5xNAam?gy?SlWde~% zswSKrUPE5e!*d)*Q-X;Ouy<%bF}aS`?g&*u6-4t#6s6o@qB{~r2zJojH<|t_4C0N0 z$!IxtBlBGtd^8|z1u&I$B#pd|skfx1?clS^zzblbPo6l>* z)*|yOP6=6|S~6I4;FpbV)Jqty@!08E>2UaSC8s+%Lho?d-+zFKUBoXU0RvGX>fN=H z{qz1JrNT1~A{WhNX=O`a6X~^0=?oh59@id^7D4gD7xkhM28k$d>2Z0_+q29kJhnfd z6htM;eJka>5x1J=eDW%N@r@h~1NV4WLVxztN+Az0R@@e6z4}KZ$ zKQ{FU7o=+IQ1?xP4TI&XrRG{`j|X2}9qburla#*sR@#_sioDm-Ae5Ev#oA#Cmr_Gc znaH97)Mj6QU(Vi0*^f0R+S0IVp@c08m64FnPu1`Fb5x*|#S5cpvJeh5*NH=oET2C% z{|UL531v=QSSciV1odWEJ6G*u@BvzB-d??d8&~>y=Nqm@v1B>ZQnd8N3*@~M#`0&@ z#ec||`?N{q)5Tr1(p(vRr7@&8xGp=KdrCxo<}HOuMne}PDosWF`>ASK{yd-e-^D-p z?Iu*NA=S7lh1VT_Q03Z&9bD(7;esV!=gt^oQ{Kz}<%iFvqM(#~@hBTOKP^T~YZXl` zqNrpd$9n*g-`?*^sKq6KJm-CA^a4xdBlvs*bDG^&!;{h4>0SfM{{U04QU^MG{MOV6 z-qaDek8lpPEt#y%z)Wf>vwTEE?Ih!tF+Y zzV!6{RK7g8T_@ydDAtYxyB;@}%8k#LlYlwqv&q(M z1W}Z!T#;1c#&Zcy9|QRf=B%CpNTg%S8NrywucdL3Z^$VXpGx-_4m)xU5a-rKs=G*e?AMuCsCcO9j_Kv?(QT|{aN#4v<_h?$TD4i;th19Uf zT!~ii!UglE{v0=p6ck$NHTVY}TyHwoY)BawCYD?5qmoHQtEfouxmGUjyA?~phV#0V z$M?a~ZXc`X)fJZOkXP0{*C_hEMpP-{va6B3GkKGpWaEwii@ivL5IQL{aIK zmG9=

eNeEEIi$!}I5Vw8-y{Xa30QQ4S^_C-R8#x$b9}GB|+hVk@gIZB_91JiwO~h zbJVUH+dM>8{!f}5{Il+}ulDd0O`Ic*BjA`N@{XyrToF%-CMCV=q;oFs>77iP!#brC ztp@K5)H|=#;;X%J);MCeovJRuC!O{B<^nQ=l69Ji4U@N3UZh=Mi}AKZ)sGFvp-$`QXPCwL zyn7^B8QDw7BV=0@&4JBYFS@Fzoc4hvP`i5uFz-nN;Rh zmda5s=1_Po?WbnwGABqwp)9pq%$E`-b2aI)E!CWsfjGvCM_Z??9|YV_%ax=zU|=ZAX8PpGL?$V5q}t$sb2YX=;%{X8G|*vQ-YU=uRo6N8%mK}CnZ;2OH8=)xVtG* z9~pbjlerm3IuX0XzzW-l}m1HuTwzl zv!eKSWL2&#-Yq)pi1!wR;thb-THlN9=9PdXN2%zXCp5klbCHiFq=w=wgr(%-CdK0f zSEjnlf#9u-tS2FDiFSS?AFO0vF-o7(_sVOd#1tMT?rC=|C5o1lOAU&Y)|n+qj}+?@ zpPS@jz(DJ9kiWdbDWee)AcbLpQ=Pw~L{SW4s}De;p6C}Db9s0oUXBZi#gz8~-h6cM zrHNL(3c1)}9-a~EmMpIDcOXVr`s@LIy&sh2$5_||&yDxf#E-jNU_R9BV22^yGg@L6 zRDgoVk1PG{lBHh(+7V)I?!3m0;AW15tOko?F6chkTpX};K})sp-(4W@WG$<7hd z!?i_@t2};_GQO_taRD&353%$x&b&G21Gll@7Nat{EA#J4B1Fq5SyUoJ0~4?eV)vrkYjJ!cykTbqZA=*c!>EL;?$)tOP_WzO=_n*UN#Pc%SYi2s)8!WMnQ< zpG`HgT?XJ71HLC{c|1fh2r3eCh;@O7QA@odJ)k!zh~jkXkJe@i(9Af~(Aoz_VwVA) zJMCq1RM8dg3tbYN=+0At7d=v%tkljQM;{nZx3w9X<{i+CD5V9Tr|*?oce^uSjKL94DM($&UsI3N4hURK5cu(qefb-8e7b15|_3I}O?u(-eZ^C>NFb3(BJPMj`?j#px=u z?Fo8uAadxFKfim1fK=pofu%IOI_?oI4HK$|5`@!-34$K*1{D7E*W`J$ysy zvg8L+fZlGzk>SYbK12BEt~KTEh)&d#iM~&un5d3Alv;mTN(EI*@ZlyjAKQS|^>x-T zgxwKy`*uO1C_xIvgO}9MOy#Z8t_m{ruxj;8FigMsjGNJs&b!=QOLmT6KNLk-Zbp$z zq`?2HyW~L`{4`Py26g4BeAQK|5fjc)5QR&OoBJa+oE_=gtJgiq-MCgOn`3O!7)Q3g z*Va~#M@I@L96R|~d6Dz;Y=7Z*9(FA{hC3bpGeS2sf~kBSzGleP0+Yf`&`Y3wi7f1+f?P94C;tbLa+nZw@$3n>4mk4=6?xYxw@m*^)4R90&eIbbYi|(KHwE;?_mM@ z7KSjXryPPVs0)eq5o00&?Qbn6Bup}wkFEBQUytp3ZY-_s3QS1V3#&GeEqukhPoUAG zHg{h6JX=|h3~eTsKxg=+P5GtkkNqY-D8)Ke(#H`fO9o)nryr*w*{wO*2_~OthGJe3 zG=`8H%Myhxmc~+>hGMLpO8^6@{!ZE~Z^zz|=)EY5m*x?krg2yG(~9g47b(Y?(JPh# z>zVrKR-QQGz>1Lx&4YwA2a1m60Pms@{e_y~)YT*PT{sqW>c>er=$vB0xPu8%Y$1i9 zdOUqKQUCQym$ZG6a00{J*>JR6sjlrw<6v54N&Hs{7;CBUL_W<6FY2EqPHzKbH|e|w zN`4oM%!a6!kWyoRo|tOusO)XYF-FPJDmP=!OaPFq25Y!#2v+aD#_)2i$h4!;^!~lX zml?Lh(7vECPCi8DNW!Z3DUAGAcozcVo+5x}NL8U+815XW;|-|_m33^2=T04-;Un7h z+n!_<6ww()`k@)d7nD~SJJA@P2pvVTm7Sq)>~o1n?#RhlydleRA_(~CyG=?KHq8Cr2>AL`1obj~Xj{R;jM^#d-UHPq){;RTjQH zoH?t!uE|GAFX$R{C(-IYb(2Dd0Ku)GgXAVyay}H?D){#1dnYVZb?*p@Qzjn zi+B-6^-6twE8)WhhR<567yhDo0^U)zKE}k}W>o1Uend^HtiWj!Zbg%xb!SIGcKz5r z?tr6LSvd#E@8-s!1z;V*8T6OT-GWNL5 zaXVC9dPZflt_}ZE==~!+Om}s!v+(c{c=lKjT-0b`r#$1cPKFVTJE|S3<(9gjjFzAKz2) z--%78RDMJ?7Ht ze^a06y1kUkEu#|2?XSxktaO~KBYX3^4t6_>%h23@(1wJqh(s42|gEESWydQw4_k}>py7o=Tg)4Gvkj*MVlj!(KH8;3cRm~#4alDNM< z#o&MJCC%L{-XfZ78_(8k3Xc(|Q0bgCq+D9(JBQ=na@+1WKsLhBa)4acYyAa815~?M zRHg@z)>b40Xda6JO`=Dm-G%tcq!NDWLq?ftw!;%5MlwpJJiba6TtnEwm0znY?2ErF6WQO``qAxY|NPQR=Tykx>lx)~5$iEob)3nLubNG%^r7qN za_a)KSuql5mo!#k`5aib1?o^lN}C@Kmt$EV+4{aa*vjFl+$6UiXQw_guKw2*S`_V+ z0^wtnMjBnbOG!r_Y8c~N|^IcC;^QqUa{Ujj#Em>996U%yJCWo9I@78gA@wx8iR$~tFY zc$Kj63#4F-X0bn_y+4(ax}Q0;PqTX?S|t20Z8l0M`OsuR zqmm{jaog*6)QqZJpKeuFH4ymMirxIsx|66M02IZQweAd8v-akUlV`o;n=I#r$p!;A z$rDqCws?GPVy|4HgR2@)WhL`)ubg;oJ{0Zy?n*D^KraBt>+=U3azM*D8O&vFcDU9#SG*GH8`FV>MFJL;78j zcqbv*F=e%$kkuBVEA%^fFFdCucwu5fa_LI{;rJ^n=Z(KNIoMH=ZQX*lTHYzxcjTxe z{|1_vhU?oT-oy9cGneAlvETPG?{5S*LJ)FQHM-rCeSp!W)*k%(!JrjLV7AG@xyf>p zFM~Di+W$VY{k2JA-*)Y7`R#SX1-Vy&;Z%6W3oL|jHTd-Afnbl(uPrcmcd)jN5%)iC zAs%U`U^%=!ARL{{5ZMyQG6k(j-KrloDScTK5eUOF664#!90 zv4>UX^*?QZ-UT6M6Z-VE+nXPV9&Gwg6P>`|-MT_<|J(Z^0Q-uIV-X;JI~#T(g9(;f z`w=?oO-sC-mcL8JJ;dh4C?abPG8f@c#oiD5`q+w|5-+Y#Rc?}}je$XRpp}^2rzqkJ6nWw8NA6r8rEhi+sB5o(3_a34+MZvv zDfX?7cFuzOVhcf$y4cRtJ+c^fL#lZ8qC2UFCM0BSm5TU%mCQ44vvRFAe&M;+4LD56 zR*Y|Q2sA%<{mk}3^|rlANIVdfVE5w5NINNgT220n zg5}@wvfw`>4|E1mxDeq>hVE&r5eBxW5q}{el%%k>3{O5icNiX~1x5JPr_#cmxtGX^ zu2)t#hlEr-J0h4r8xEJ9Jcw4Pcm=ifXNg6=Mv{|-T)|BhO3cBcHb##BVVS^d2smB} z%ObJvz-B@P*`50Yrqs2>fsE;VOU!J1ds7hn^J{+Ba=%|iLz63#&&QIk^$E{g%jBT? znLxqtF@kzB%>7OBJG8_*jv8+RtYMF^X$bCH-+t~9W?T*|^u#)}Xe6#AGiioKjNhUj z@u!m=c2@p}>;u3QE+jTVi~qsTKXs$B;*WpozKAJxyd|E&l~|4G7Oo5Mb&J5KOi>oj}33f(a^wfFD0=h;69?R#l3g#iRMI!)~Dlh!cgGgZj}}U9>OXd|35qq z{ck$^peXknkpR*~VJAj5KH@4aUm5~Yh4T{<3g_BfHB257n*__2U77|M;z}>V~L&mC~i8kax}fIc`ofGhjM4w$uh$6k`2F_1{CtH9WXMMJ&pQ4O&<|cJn*;K-u4o}& z>&E}#7js0-d`NK(eIZVs{l7c`xGYGk<(b?akzo0rH_eurjt8x^whyXlWKx8WDUWx2 zNT}$b-TlNAj}bzJpYwRfQhMpC7QIiC(7B#BvS z>@5qe-M{xH@=XF5;PbcOX#BLH|MlGzJ|cywAp!Zt@BRSa@c;A^?( zk(z1Ow;VLLu`MIkkrVyALo;REV0w~p=!47l-Xv`Q6szp-JY>-cBW@eqdxggl6@D~C z9`zyOc5%d&H3X#7bQI!r7UC{ZyS^&Ma#;P)^mMB6_cQhQm3$j*Q z$Q@dT3siOc^-$R6?L^`MZgK8t|n+)V7m)Q=AfF^rX7rl$z zRRj8oQXtI-Xmn-9m$x-=uc~AMz~bJcLT>~b(-8vyw~ZhSw?|}o!!!zsvR-90JFg=j zGWc+&UiO+0`F*If%d$2(+#bM|@eBHJ9(DJk#^Npo<$_~kD+MzK4f+1%HvpmxLt5L6 zGGgePLu@|?Acr`1ATljVv!6Y4ZzXMS#P>(L*$|Q(0w2J6jcOMH7zN2wHY zQITtp*Yau{{~Yf$T%RNcdx#6F4nMJ=J{?{nn9{^Vr(d1o_kC42mrdm~bKvX9DUOU< zx;!Lo&SQeyx=$_m*d~%8@$T}4-AJ4h2M}?J^wJdAS6=|;^M-DF=v3BOE`sF%|Bt=i zix&#wC(2DeH+boogtTZpJPNs@{=RUvh~0h9D zr;c`I82oThmZ!!BpJ1I612XhPAJce0^<&jLl&yq#w+&Y6&sScCtKaUDewT7$Jj!cy zn=8W%AKMY8Kfzh|#$24pK){ylD*=1g#)gq$^!T)%IHSuW$`dCw4(o_UtSez01W#D( zDP6J%vA8&>(0MmMxsCSlMePBHvpP~>E}94Q-I=*u>g^5CmD+P|3?Vq36%v?I9hq_8 z8Hz=vG`r!f7IioEy2r4Bs4@T~>{k;nOV++`gS2V?O2-%+Zd3E34yS~5g?|FX5b3DiK+<)B1ao-o$<@$Wi z&w0MzulH+Yew%zJ-y57=P}ewq*>JgDJxTgW?}yN!M1H%(=FKX2Y6b@Jkd08NsMDnd zAg$Sf)7y)Rm1v98CHUS*KM#OAxZAuN*v7|PBdKMSxMwu0_8s8_?e;8-T>6E1AfdY; zWPP07M7c1w|4vynUQ%DNO+`8PbJ91UGMhI~?Tr6$4%x~x;`52F4e#Ly#7-JY?i1az z0otytH>qbS{Ma0fA6(xhIi}FK++v?*EY>?cJlTo#y{E&BNJL%15uH9*Z>5R% z$LzN!pmHV6$FIorc+lN&vZfRRng002S|UxBg`zzJ8#x9SDUnQ_RvijDKY)?#i? zGp&~K?oZhaHQuU4Lc*IgM_3*;5!~if5gex!noPc9NTi*kKVDgSEQWY51x9)Uks$%} zIBm-+Yu^eo&Z1W3y0o2m&~SA>Q>MM?OC!os{6bMWX|=z^?z{i_R)-TbUd$b_ll$o} zbfR=CSF*CLdp_LD_+t5rnhC5LaPZ#Zh-u%1W%Ksga?^FtY*WjdP+sc@>9vaG|rc=dK#$`C6gLG zI-g_WP}19AgJB~zC*2$O702Sm=q9RLGNWD~AG}FHv09$-bq~JHLNk%-xcdpOW*P3+ z6Ln^{;!UR>_OdgUVa$?Q+lto7Kf*T%8%&FKOjF~NwEQDJ%$#aOIa4Xnt zjX7q^P9Ldhej$f(Vfl%%BJ_ff8yIR7<9HudEoYcyUrVea%&OURe&X2`f3HU&C^dk? zy-Yo3nY>P@^{v=kM@askCJ&O$0&^k&P+z3s04qT6O-_?*nc zpP#EHb(vJ~rZV{H(ZW!0k99!omG^j7>2dCf~{7K@yMH z9uFlP>t!xhUXBf>Ji!X~Nnklay)K*a@QZJTHE0XpGN!10Wpq$F_oS0zsS;Z(9lIWT zQJ9Y`J4nlxToj^?3^kur5DdQ4j3vicmdL`y&E97i%CW(!ulhZpVKO!kyj!n#)fR`g z%f@BzALb9B+UqY?8?&4MGUT$?E19BgjC?)?a>+M#7xoARY-cnb(oRe*4qewD9IC-O zsEG9l`L=P?BGZJI>Tgc+buHG5?%|V?TRZ)LMJEX(MsZg|_4|qEV(zkkHP+%rNSx1I zz<6=!d)Wj7D|o!*lpL&k`gQQi5I!fl()A^c%bqJ*thrZFvTK=m;1-WuFRZ&W`x`>E+tW9VhLaprPyt)k-6WSm9@G#UKC)YU3c<1cjH2 z9Ft=QsoM+`A@dE1A-Qt-tsZHjGAsd5j+4dstkUzZEB_`2UMEcxprnlMW?H z6Fu^YWA|=x>y5s4T&hJ(+eO3sBvs$!1Hp=O zA7%8^@X-*hMOqSysWoP=Pc`RBvqsO5cD}W_Bq>H_8}!Y|OQ`)eiFu||=6-@o_LSCu zix_VemtL@onboP2dvg6xbKAc3zxY=Cg9Tw;Skan0u8`_hx0%hICB>Lf#`yVs-sxhei5BjX#O6oP-Arid_AHtP+0|egaJ6M7#>1pc`2=m{5bO{qk^df56y%0Yi!k1TE_5MxLXug(9o%N z)he6CIMIemeX{7vh!!~^wCa`~mq&(=JbWDujWxq1#>2fo7m-u~*(HSq$Si!0YKDfa ztSj4LtYLl9ukSe4w{OY7#3^&027hseW`Qz}BKm}1oYW`4+Sru2Nqw`is2mqr8@|(W z{{UZ4HHiEQ^cSLM;(&bFI3@Tu4$}qBJh>0RZA!ceLrJndInqbsMZEpcvTe`beMdJ! za3A2O0zxsAoT+$kOZe8puruxB6@AvW40YC<1&%IeplQv2%&8MKAnW{23XF*d$L(Pj zvlVf*rK4^QU*Npcd6n>l;ff^X zpiWJ_b9{Dvu)gJ^`cUc$gI9+@EAg2zta}>@uYm{Uvx6^e)Gvtt1(sspxvt=~z8IW4>w}$1B1tMs$-;s} z+pX*1MaBEUn9-62H$py^#9+e603c`Su-8#tFW)49;wvH#u_T2~1BK#DG>bE2 z(+W9+8|}zm*k7WDq&&8-P6LA``hrvn!%t(f_T73OuMw|zY@ZfF=BryWL$|(hG9lh4$ZizHlh%_&^bUalpIz zsI%P5FQe}0dnID4)<-g9z~$_Sq|3~A@(q_zyA^E=TcCKC)3TM-5lCC&$hhNpj3*F939G?agAH}M0CS-+Ym7vubX(*JS=qbta>to;7mYkiPh(p^bdI^;_pG} zdo5mI;-;a7-1LFSJsRdJLUZSS{s0fKDQkEdEH*#~VGF#r=T_e#VcPKoQ19*Y>G@S6 z?-(bvaTxD_M!yINqxAW>#uV1s&YJCKYo)Laj9y!1H^jL%Q z;)&9ll)4X|!O{%~ zR?^1iX%$@=L&Mr@1q*-}U0VA1sV9j2NMX%B(>`JFHZjUnb`fp6seK}bO>K?lK~=jf zZCR2VgW<)&tE1AiyBnXY1{9dgsB8b`0?61X9^LBh<`7AuBN*iuJXKK4#$9loDSP$U za_B`p!MVA*s!MPd`crJl@B$QglK|xaVxOv=7z8X?B_PKI*D;mZ;o~QGR2O zoR0=DR5fI8ryvF-nyo>-mk*{Ue9ko@$GQInuKxu|_Z|#xewC8dNCcnN22&H~cWa@7VAJqpwa|Ay?@1eZUaKQQh;Ek~j&eJOY|3?Q! z;=^DBkq?n0UA2A;e~Bqy!{jT8`q|g#Xo8X)g_#A}+v;DZzb*3NA@t^21R60ayV}se zv^D}^@U_2T@Xc0PfPx|mpYpr>;Ax0*aja{2yqez%^QZ<7z2?;#P<7Cwds?n31yx)B z1=w#tOZ+oNnOo{RNxAVLpcI*X-F3U1NM7Z3HM2Bn^p$|D%ZotVIAzQTH%`$Vla2r( zLwt+~jRKLc?ERy?505Ekp09+Ux*kAx2Zvff2iSA)9?e;HS0kxv z%fK5hns5=y!^8*ZU0k3AaM z)=IgfboBFP9P#Xnb0@hk`JOM4g-1c{IeHX|fBW*z{XqYq9wN(`**@^#@sbC5^f*k! zz;s>bWWjVaZb>Mi;W?p7IBvrskb-d`ujE(Uyp73Y#aGoQ*! zm(l1Ch(w`wLES4mfsG1oqQT8e_F0|Jfw=NmZv|%$pvF!h8nCl8-V9Pn+X8^P>Q`Z! zn4h8{1IuDs0JaVn54?;`+(O92tdRk07OCbCk)k<@t04BQxjyXh*B&r~H9ET%j;s*_ z<*r0BDtF0$o83(nKYrH6L%FtW0(`x0;KCqsIjn}lmtEywhW6K}mRdT*@+J%NbHJq% zN0$oo`HxH0LAKFFyp=&szA?2#^A3JT;Q08{u+k4is+F%FK{5FAe0Qde+;0=hv*)!# z+QMfhU%UOV1{?3d;avTr=Wm!QMx6?_dJo_tBZ>`metq4#E<~qu(}3>j>rS$0x2x~N zli*s~Ys0nNqyERWMEn;>w@GcW{~}6lB_p^lEdE|aQ{nz3wT&8;f~@#=yQYY}n_z7i z^+bsd)-R#!d7S+khT8X>{|+3#hIby+@*(%oY$$v^r3roVsvBn4-ZXVTalhYfhXUs|KEF*IZ+ zF@M&81Pfx34J$j>32vXfAJVLOD1Ykw!X04{)g;XOsA=HO}B*4JtJL*Qz=uSms zMKca;Th3c{)FJ!18L(|)v3Vba_5(b0^xfM7lhDmni+^@Bm69Cz3lNhDWvS*|5QTO` zXgcF*HkdhD^+*Jvo4-0Cw%e;;Vmn8;3x=Z>90|@EIenaz8!)!XhdTFW(Hr19cN1^I zwqO7Z*jexhwVzw`RvBx!PhnX?$%>q#IcFi!$lA-}HY{~Q2ei~9I{#SelGqKH1m-hK z1@<7|T5uD|3__=&@frl*K8t_=g1A{-s&7i=Nu_{3H)ALwoZ z&R)8fg4u={gFf^g)?lDki~>W+c94l63Z=Q;5L&{OO(Q2T}2 zl`gb^Bi?Y`8sep=PDWpLf01KY))9D+{)XqqvO{W8khkVqKgxf-%ix|tG39}z9V$Vr z-(qj^%9nyuX%1|DxU?uJa?RG1q*uUo(9!17P3X-Xc9g&*HT@gY7TAc`h;1$0L2(DR zEK-cR`L`f5H(~Op5hSR|3cp#cGjs3x*8U0(z;0B}=5>=_D_`3vTMJbGy8i{{^rP15;k4iDT zHOfaanoUPw?BkGndwpq~yDM;lB?Se5>kUAFCa&(jh+pK6I^p$LnubRK;OO}w}ApRSj z7DW?i{4azOjF^{HG7mghoHXw+Ni~PTjTs_)Qv_y2padgHGAio`*|)?3>NPDeCYh-S%q&C__{5x`$!?bY@h?&WM;_55)p3g^|e=*RKQTR&e{)1@OS^aa@ ziGXuZ7VBS&sWk~6YYPz~ZEJ=3RdGxLq5F4cUH#W$BTcTBI#A;RHItnuu!2iSh z>)=2e)z%V0D*-a0FtD-v`#kz(OMKWUtxy(VLehwrC)&jR&jcWjHznGQ-hMjF6fUB{BJ5->Z{t%;l?c& zSswqp99Jpf8j?)%Q2@_PlbZ^H8~G_AM(W?~tTX&_p|^bAn01F7dWXwIhFuNIf9$!H z{-OjZgO1Pci*Ow9puyvbPrK^a^0gXGjbm@Bj@3{(n>o;&6Zw)5*~UXqh8m~H-x?>l zFE%NR#9I*A*IOGvngiPlc#fST-gdS$%5r&AMdO!b|7rBhRdFX<5I0T`zV}26M!W-) zc5FF|WUJARcsq^e5pES#dqZ#b`6901!T6ph3*uacY!EuyG7vO%|3%I2RZX<)%y@7$ z3r?o|SsU;v;)9(k;VC027pgv!xsg-4zbAUg-2Z&YH2imfMHg~Gs)d)o_aH6b2S|{% zK_m|#etWDqAx02FdyC;%JX}PjWzm(XHCvvkO9z<+^{3w}9&m`IezvuC0*-8R^eBq| zd1OO%+U|d4exMBJP6b&Q+N3)g01(W14i>(IwRMa7Z<0iGo2m)jV;d>Pi)K>P19wKx z2q?UFJ+7R>C`d)T1N5a&)1PzgkVUOAuz1Zjvx%(k`g|Gc8=>xi%gDy}>L=*eFhr;u zi@5Q7?ZU+<~px?qYq zAV9fNI~~({U$hH_QxBq}fuv5x2%M&F4;(W=2>>e)E(pe2Rxsmug%Zr0^PfVNrN*N; zlF>8#nr;r7l0&2)Zs3@@5sZW$#M@At^+5e{#n^M@F{)%;!E;k6#T!j#AV+cz(S!&p zy?1wzpIHxdG_zo5Uj$`ebMP>*8u~8g(g`}Ih59*-ajP$)3KVrZxY$B4aYYFCOmD$+ zly9V>RA5rA{2KKbHsw>#<_U69X%%CU4N(mZy*uDQJ*hv3tZln3;3zgbQ8*Le#m`X~O}T@&jfztJv>KYBAzu630Y{Xb%Z5_@G*GV|i+f{g56eq>yW#Fhd?+60ApW?})G34vAAl`M83V4q zU;Ra~4jKl?qyIL{-{N_9p&&P^W4PK{kcLn1P=^JmyhIQOMsp+sy~u|8K0>2W)CI9~ z>TEUyP&PSTj@!N#CfERG!`GoldDu_k(W}x3EO8;=cF94uof0)sm?2HSAu3B{YzqKF)%nn3Gr)h$B^e6}%+$UdE`gm)eaJq&`$m$1N34%Es?jxgZ3hG<6v2j|3QshWeHjRt?UOun z_m7@`pH4c$$axgh&BYWd0yWB%=!BV|eIbn8coZ+0$S}>N{^Ymu-|nT3-pOl`Qbgxx zY}lng3oFRxb9smndT}9O@9D}bH3a>pk;((P>oiyu$~Wa3oqDDADRJkd&EPQMKKTW9 zilpISk)?6$tU5D!`1TV8t<6r()%|l6HRiR8aN!L=44Sni@BL%c4wS{7k{ukm(-^re zvisDr&4062$a>Y6wb2IBZd)|OH`)xP<|zi8`qML|SQ9v=omf`0j`l)zJ`0CqG4cg` zS+(O1quxRnh(6JEu!ZK5#b$b2nXrNBUQjcW1*U-*whhhW2tvyIqa^@9i~91d8aTkd z*6jeAGcEn&_w#ON?VVU3KtUFWm5Yv>7O`Cq6xlNi$3_X7(!$8UvP&|l92DIpDCZ6W z2dt3oa1I=oh{!CMOtu4?En>&^f!Vp?8yJE0qU-?bV6-`}Kwb=lZrUN|JLo~(&;ddV z;wev{)uCJ_lvbegS;n*qM|s>rp7z#tL0CjOHXj3v=R62lI!cgG=?TEVydB2*OQa;D z?dwI^3b3I@|Akf5hYw;b& znIllP5L_dZturG#M>yv1@5QUxh{Y}2BaoLg7UkH|&XEcV5l$gA;o3OZ?%=<VUz58iBdk+`Q#$^R}`MaKj<9!F<$T!689rt4m2OmIjUBg z9m=C|+WbSz2s>qvv&NMLMq12#nbQPHj?{ga7F@~^E8z5uS8X3fz#Fa}g6YW1T zyv6dq#R+Yp^pLHsl9u}mgPGpKk?IqGR^GlnP;vA7d5>z<*+du$^TGbiF@UmjX3zFA z$q-isPoAa0zl(JIs06zWS8)zhcfpE}rvbfJBZA#1_fA??GY&vJg*~n`*o!bLK*5Sp zUK6BEeRFITLZ_(Lqc2hj7SM%JP7d-$?X!H|iw5c_3Nh5@hmikyf+}buR6M-lwsQZ@ zG>ky;PH=2{P56t7QFtPYS0oP&o`7>uaIxh_kk?ijKt_Wkdt9&^>e7sK>zhDb|Hgi7 zmNfZ8qDa58A=ymfM^Sw3BMTL6ccFM2AogbG$rhdk)L`CigV$rtKKhBj5m^7=Y1|~+ z5Izgj^AgEq=mkMoikmiElY$+tQuw!ud%NT@Ta{LTXq-XQQ$(SUueJk1prYal$_gc2;TgWCv1e&#sufX`HSWed;$81SVHB-t$8qieCoR{Mcb8?q&zAAq}+^C zM&+GdSuc6={??d^6=T(B>6p4La1_?_P8>HSDPS0aHXa- zjb9zOf7!Y)lE(|7@`0cX%9Z=X`(5-7=o!ez8SkalF|dNW-Q z)4BU_knBSzC)sa3##|NG;tb=DzG7hLO(Z=g4;wKxOJ;{zqgAM@Kx-)2fnjPWh_}gf zBMzZOjt`GIxooo9q}(&?R@y!Xg0?=EE#e9mCwS2ma{atytF!cQ+ree*m9xj=RJ3a4 ze46V7WHN5(K_zQQLiT*Uj%$`e4R8l0V?;R|QADSw#c!wQFTGftJmKKoelV5Dp-<_!gSn4Yj(AEc3@L3N4;JYELw~H^| z8#(|Q^A9@ixNG=0Oow5ER<|o^1_oAfPEH|IoU>rPUj#}e{nkVgt1cA=hA>W&vF>K6B+kKi z*QCGyZF~W!f1A-uq7LfB>!TY5TLRF$t7!Eq0ZG+s)BDhKlXM?+0N19=n*%rr81mcr}|ya#9Q+s#AftB%lisEjB9sZ#6JN&(!Utnk971F zg@7Z^(H1<)8UZN-w`l=-_y{=y&`sWe_Uq*~bdQB7Xb@ae##6tcVt`@;Mr!e)-+pWZ z*V6*-M41R^&sJgNk*zXV!@a&6fZYZbPYvIfTh~hT)p}Zx8}u+6ix`}gn{OF+u0Tnc zVnCeC5Q!n&3c|9+``gRF#70#REL9+j*IMJy3r6({v;aWq_>zI$==)m`2Ue@{t^cZ(Iqe?mED z-)`maY(rAJ4o|1c6qogr?XFxeGeA7@T|laW`fEfK69GCDcSt38<@SM*?v&SEUGu$o zDXRYQoiQ*65olMPR(bRkcvRkCdS&FFIO%y+2!*1=k<9{V#4YKKY;YPyC=O_2p*jQr zz-ELN>(0&y`oY}KWE)CMWb2)R$U6cik=!yF$c@LbM!`RqJo+PEuATW ztc>^qv?;%JQ#CZ9%{&B2!p=+6@&yv7IMjh(x7&kDCWWcc4JQyq1fWpL@$ySCn204w z|9H)q+FEu4l?CRTRh=3=2l>`wI~k!8*k!(-0s6r#&!=3DD_I+AJ=~E@iNVuXqK9l= zHL<6c>tt;>xZO9%)oz&_ktQS439i;XEeoqi?FHJ>%m3KYsm4k&tL45Hq!c}DMnM&; z82c^r%Zi5TM@lYVcF16>3VoCHxKn2(9WfBahtprIp1_B zSq332RZd@-6$!Kh4b%7{vmb5|4u$p?q*#wuvfGy2FMYxdT0=h}yv?@^j;zVkHm)ZOKssJ#Xehk~1#ESo-@fF`L8kvsEW{L>`$dmGfR zJs$qqD*uq{@ECtnu_>n!;orjTe;Rim?8OFGeO6W307!y7$ zr{S-{G&?{3jjx{~N*esoox>Q39tu^`=&>pWqNn*bs6WT~!4% znCkv*F!hH_*{T@E`fNe~%;M$^_QTcsq+SlO^wG@4r&1VMIG5yq)lF#0P+)|?72g&5 zh<=z)B=qD$Ma<$?rQ-8kT z|2R&y=&QDDVP>+EpdKojTuWxrkrwO;kf7KURr@v){(=HI$s(M;-}>y>w$=;WW@?`e z;{Z?M!hc3Kf7KbShwF1y3qMuH zmpAu+7Uf5oX6uIS!0LyQ%0n`(@xLk*RNd4bA7uS|Q1ow~Is+(a9)#&<1*lID!AUXAlM!u6$=R?a-A#!K{Wm^kmJBlpqDDkXHN(~XtE)2hxc{Z9TZ*=-vr&ub)+^%H)j=AJT2#byVr|> z=k2}>0GaWWxi?f}E^~)vmx&G>HO=Ou6qOS~Sh%6VBOsCV!C1#8;eyNidc4OtDu1$q zu<4)n1>}O7a%7Fyq{YJ8p!#`dl(vl`SGuqZNC8l=~fLz2rpo_ zCx=j>tI~-M|3!)v)#-yS@*jf}ukH2KWY#7* zu4D*mRx8Bl;g(H?#_b7e+yt~Qi2v8CDW0t1FG{P|F8t`ah3(`%PUyhnSa1>ym~Qh5Xs$OReeY#t~2E`A^Z@xmj?gZwOr3x38nN;y>+)XS~|4)1y) zY4ht+M;50W^@ibc5j6t*mby^CVK=ElAq_kYJA@ODYnBuE<_Y=c|7cP?SVHaNF3G5t3dO?F-7WjB#7uu!C9#oSl#7YyNH#UP5?h~^WgO@ z@S?j5+9L*0xrBp9c(2@_2%0TWWqRNKoCnaxY(@I_QUGr6QCw30weyFt*h9rx8bse- z>PVtq%WYI%dP!2ik>?~ZaPSm&gT4W`gX+AofpG|*nq+_~<%G9Vw zH<+v+)FC<*rOUh{{yM=R2^DK(lXZAh=zQ~s9>kg zxkEAuvyPRcy9(>#vc@0|qzrcOzxBclnDN~2jVD`iP#+8m4AYW^e!zZWT=uaL1~6I0 z#L_}5u$PW?dGErIWWb;4)yE1Y`o1iEV9k89{xPrP8P*>x&p7%cphV zm&ttP6S;R^L|zc@45JY2x%KYs*BQX;%D5$u^m078=(Pa5?aW5~k7z^3;2&m?_$h{^ zQaWOB_t74fw@OMqycaLvwM%R7zj!qUGEPGcp~dW$k*L`xao*{h5P?`Pi;(>M=3q9* zr=ax^rQB#_!&Fw^%is`=c;b62bti&ZDqj8;ffb(~ODWkVqKJ(p?Wi$UNN)#!J8W{` zu)VTKYPGb#UOLkT>FOS$gU%*pdEUzj7f*ZT*F;VV&W(zthCM!NpK+lwv(ijDL{RzL zA@8+2R{XVxHVtnDU`!=1`XAlAmz%+x*h8itbm#>e%2W-NE(nnhk#|wwP7B!C-TA&- zE;_8J5pa4H<~`BJmLr##m4z_gs|R>nju0s^EP=8xls6qo3*Pq)NB?8el2yF5vl#B} zjCDwLPCIF@u+J~jf_*e@Xd9~eLdek>Aik_|R3ApB9ZF<$q#F7Xz=% zbmzoTqy%xX%m;B09&7!_o8PcbK*QE*RHs7I<18?XZ` z=4lNTlDSWO6ybtS-%8C7gB-(FFvrrx_c*s};|bXqmgLwVrlnYEre$#JP@)!0^CVTs%aDIqb@PUKutgO6IjQv8nX4YDuo7+j42thart+ z0jqvjSp&q!gyz<~i;_KP#K*mNj|a5VGb$&0K~^=$7O-V)KYr8xJt1h;jYuM6&>&@{ z;$$?&YUx?8Pg9TJ*9a-YbFt?RgsG$%2W*dhM-cB=Ah9AO=xR^+7WmzVXB<6eUf)~|LG|{zo6k=K4GmsUHQ%fjP9>ywHS^*xOuqKsE zUM6QjVa7%fp204u%$C&1-AZ0`jG!EJq=N91bVAY!*cs^o))dtZJOa-5>+H3mZAoBW zTmYh@SIS92mE>F#-@h)5QmZ?q4k$q;i!@}iJb+A=!+kjTw~d2Dl`u(*sDmhzVxw>n zxUxTmpWpG3C>)9K@;j7Dd0RRrnCUG3RdRo0;pW&;X==B`rh`}qcG4gR_CrBal5{mW zYLia-7=kC>M3AdM=;7RQ>#LY3)nRG6TFUm8_xmExu^R@6zB+`rg^6H(*4rxXzX`&f zo9b%XkjX;Km?fY-eUO5O{Q`Ivci=KvG7VW?jXVh^9mA`6KaKZ7r|{ikaKN_I!R{^H7_rhqLHHoDJ>df|6`O7Gp#@S0((;Zaxi7h0c5Q(zL6|0!Ph zP}|Rb;x=~%Gr5xfo>3b7d%SG!%3<6rhf~6Qq)b`G4N7cnkbw;agt4UJ!dM~+wJ8NG zS<5REi=klk{JGzi?346n@T^H(5MSkD{XV1A&kx!-xcr+gnu3VQ-x?epJMQsFKNSoM z-;vpiujmX}EMFmug=R!&z=lCi2$&YVS30^<~m2q;q?sbWgxB%Y=k{@>F&c}J2( z^5iCe@U!n#s$HOI>1JP+Zz6DNQQ@h3vWOjTq?ihn^B2OJu`DgqE*kcTv0D#oA773Y zXIdJG2tGKa5-=7Tyr1GQ``w;rVEC+2li6pUs;>lh=Xl*+VmykIeC}tPn2$|?F70t! z>-Tr25s8YEMDn5WI8whRA3=~7;nl0bUUxIHZ42nUIb8gf8A-$<+5L1w6PeE_bUu;{ zA(#@AcDK5bmA7qimRpjB_WU|lgrb*cpwz(PknsX`5lKjM+I85;wh}tQkG=3?Yd{=L za4PGWEL;0J9&O$jU1`sB?i0rXM5(=uOWS!J{g0pR(b6INkzGxhNTp&t=`?cvYo_R{ zOz{g;kr(Vw3|wjYo`+pGe2>WuIZuJF5j*^t>OhM!hote50Aqt)i@1DBWwO*oO@Ydo zjMIWIUQiYo4?1ZrrW_n7@b(Qpo<*XihyFw+>eDJGp7z=q5qnnM$~uqQ zV&Lc>!S7He3-2O+={O)eu%tC;$wv1>?yEq^lXpd}?53%MY3^xSG2;1-5AW70kY zQ?p;oW?Db~^}}apea$FIMqgETI{vpBx{ra(CV2AkV*zd1m`7BHS55PDSerZv9(bzE zUM&gaatJ}5&Ig3E~Y4y=kfb_@&|dUq?i!Y6YI1q zm&unlv}= ze+htUXeg>`)E{O@jq|6F``A_aEok`G4`{**xK!FhajEo`8n?Eay9%&+3=q*yfRmo-Keo?`R={fr zzb?TWt)E)3QYQW~KFG^uPA0k)>yTR>%ul`%|Gutg%uje;MI7wAX&+%1rN{O3hHvw6 zI(1NNn)fVxyk8#Vp<-h4LzIG2#VN#Jv}}Er;!3?w?UYV@pjK(kYt8s2T~J5;O}WNd z|0Sz14TDxB?pkn!(!cMS_7dD;7^kyn)qnT%W)h#4qMh}CD44zLt9GC zeU&TX57$rQM?wsFTx}UGeoDAEYC|YC2DobSGoZn6xyfa(X_?YCQF)-lCuU1cpf-wl z5A~O>biiYxd$f)JW!>j%$Q%*S7LFHkds;j~ZNy%}>#K#2lSxf|~EuL)4f`i2P zEiW{`4zX?pPqQwUy(!OZoA5uzz7OLWc5=M<>iobJa^FS{dJOH>hkDytY>?w}@N&V8 z>H?P+$oJ0x0WJsixmErtXMc0v>*#|h4wPV$@YGm8+)F?1^%fZVWSlztbIE%8R2tQjR<{Y&zbFN1E87x`V<0h+4 zPB5pfV#aLSx9e4yTkm7P3%(y5+ty{{QEqbzy7r7IK{Zi%a)&?R>JECm?d9J?6DCA;G@JU zexfvR-H()8cW@Lz)D7TAMO@EcjNKvILXU z2b>2r^TeHh>@L)V07wOcX(MlaNwII3QeZP$gEqldM}UXkJRgu~Zx{YT5RSCkEDg(+ zL;qC9nsQKJ81H5%?L;L@MwwaI)AZ6onxfY1Q@pXmvprTX%Ni1ho7eLO4&Q|2&pu=&&=PL; zu*TnCkw;f#`1%D8I*_>t=|mBeL~BZWx{SLrRiA`2j%-gZSwna{ds zeNoD2g6Gy-)ynG8m}_DAKuqah@m`(nJ-BD%oy-xfP(Gh}Iv>Fdc5Wwe4K72nL@DoJPhJjxZa0mrQ?oTFyEF-kT=|mkQT0*wDc^Jdj(6g6MAm2eQ-Ms22 z{C2iV3}o-6wSu;O@O+kKT@XANLY=V8#2woM#k5UZvIKX4MN7P3LjXlKJ6S^R(RMj| zrzmUWM(sa_&_K`~m3o(bdtxvRDH>dk1AhDtqtd7wo`Ydi5%^S;2iGFH1EH8?C5UEh z$!ksVA9#cDL;23bD9t17VnB(>Mu>%@)nfkpYs&Dz zS&?syI7SkI?{8>cT~RYgqzYg%SngCC+z3i~=`*Qxr|-9opV{Xx_`sHB41s74ft*-p zLa*;%-WU-kJW7;IQPn>rxP=IgNd44ns)g6C6o-Z;I5R+&xQXC0;(N}zv0lV4YWBs)6)^RVZJD1B_6_5}%-5|Ox*Ew*{_oN*s;`n6p0Wj|L zdHgnWl>ctp=!TKFFjPFX0Vv91Zmi zE%$aXrM{~BpE3y;gkd@#k}~Xnkw-x>H`shK4X)PPm9KR-l>2+xw0$Zd-=GQe z<;;EE0la5ZaQAuzJ8mDqjB*?wu$xFlh={s~;fEOgF7pGu3?2&-$a~YFe-^^aO%Qb( z(btHV0ZnZcxd{{oA^cXNJ^USsV8-uShm|Xxh`m?{WQv@_N^yK25hopHs6|K{*>I2M z8e|GBhXqE3zL84Q2PwvRi#xohyzV43pXaEvyV2I&m*?-5!<_vIm?>w|7$1c7h=Ck* z7Le;A5O~$>fLWCg^9~ra_QH(90wM$QxJm{(lrd{YK-`!`nmf2OB{+uLGO*b#kq;=c zQ$wbuKhHAm--KlQH~}S)bq4PuP6TkXZoIvFs05nFUgS>l`Ea`jJ23!JAIJ`z=R*Am zZb+pGV=LopseG`6KJR;@FIwR^u3+`$b=jNc4#m~yV%tr~s1yNYq1h;?eEui6+7w;? z_(Tu3_#B9F&oW@sLa8b9p%=w0MMw{y%0s#dWd@Rf9hgSXB#zxoo4*nrBuWtq>^ME3 zBp+M0YD#Cokz>*95E)8XChOm{R+uDeSpk+vJQK%5uly@jt=Bls)pfL1a)=C)|5{@ueI3H_UXx}>q!qud^7;#@S@S zuRQn?Re3Z6<)2n7>c>ZmJy^4xXyk<|sjC)0unH~F%HP)Kk?=msljRL>Ln<`7wdHZk z-Ti1wON;DWLT+yE;3rEvTU*&2u~nHbc*TkI)#L7l^FkC}>qh*(ugy6oCtN9v(jUproYa?a#=`;%HGuM#h`FRoj~*BUgXg?e5wg98w*5o3rcb=-_brbyZdW zE~h8`@Xf*8iLGxxZ+m--4Ga#_(_I$fow?#~LGXj-GhfRciRq zYxB!ivH5FLBCqJQ-Q6!wP$eshp;DKR1WuW#kIle(#SOPA8S>zko=eeBC4Ra1{N z>4Szc1+orPEN6`hmz(%`Nt7Af?DJABrBCJ>YMeHd?Fjo`ZzuetF>Fh=Be7etEvcb- zI*E|bQ-}b!q~Tu|6|T@OS0ynRTh)EMe%3=Qwo+T!#SxaMlly6^Uke=frHQa`7uE*K zo!WLzGR!(UVAc6aOJ`-fvL)6N0&?Q+tj)=4IjC`m28G@5O*U?uy99rS*sVRf29*!G z%I>An4?$t|?E(Gz{j|Yi>S&wwRc)g->SgM|g3A$y>y3*9qqQ8KaW>dpIHpB3T5_^Q zCe)$q_>S|(z1x1|CG&-Y1>C2L$7%HvnlJV(zFE6(&d~c{=whGEZHL|{JG-vE+h6X* zQvdyx;8DfGvcyK5lK8cN(F@7^1b$vMF>rZoEu)Y0FWt{>F=LxsyS&wKHhi|xj%}{^ zO{sNrNeSGxni$nV%Zl_jmKp!`BHH$cHWz!`&f=aV-3Xo6>8hQJ%oKxzLfOQ??k9{eLO MqayuM@`~U80_D&(ivR!s literal 0 HcmV?d00001 diff --git a/docs/dev/img/equi-join-approach-1.png b/docs/dev/img/equi-join-approach-1.png new file mode 100644 index 0000000000000000000000000000000000000000..decc7dedf9de9b7d1be2f47ef8a93693e75c783e GIT binary patch literal 29396 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 literal 0 HcmV?d00001 diff --git a/docs/dev/img/equi-join-approach-2.png b/docs/dev/img/equi-join-approach-2.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5237ee2a70e2df727742e5cad53408b8abf1ab GIT binary patch literal 51968 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 Date: Thu, 12 Mar 2020 12:05:06 -0700 Subject: [PATCH 3/9] Add image links and fix formatting --- docs/dev/Pagination.md | 51 +++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/docs/dev/Pagination.md b/docs/dev/Pagination.md index 3900262d06..1a4f4ee9f0 100644 --- a/docs/dev/Pagination.md +++ b/docs/dev/Pagination.md @@ -67,7 +67,7 @@ With a non-keyset client-side cursor, the server sends the entire result set acr **Cons: ** * Client-side cursors may place a significant load on your workstation if they include too many rows -* Since we are limited by Elasticsearch to get all the results we ***cannot*** materialize this. +* Since we are limited by Elasticsearch to get all the results we **cannot** materialize this. * This will require significant work for each client JDBC driver, ODBC driver, SQL CLI, Kibana on how to maintain the client resources and parse the state. It is therefore not scalable. * This defeats the purpose of pagination if we load the whole data to client side, as the user/application might only need the first few pages and discard the rest. This will also put pressure on network traffic and can increase latency. @@ -75,7 +75,7 @@ With a non-keyset client-side cursor, the server sends the entire result set acr **(b) Server-Side Cursors** With a server-side cursor, the server manages the result set using resources provided by the server machine. The server-side cursor returns only the requested data over the network. This type of cursor can sometimes provide better performance than the client-side cursor, especially in situations where excessive network traffic is a problem. -**Pros: ** +**Pros:** * The client does not need to cache large amounts of data or maintain information about the cursor position because the server is doing that. * If you are going to access only some of the data in the result set, or access the data just a few times, a server-side cursor minimizes network traffic. @@ -191,29 +191,29 @@ Since we are supporting cursor for different type of queries using different imp ### 3.6 Different approaches for different SQL queries -**3.6.1 SELECT ** +**3.6.1 SELECT** Simple SELECT with WHERE and ORDER BY clause can be supported by using the following Elasticsearch APIs **(A) From and Size** From ideal pagination point of view from and size is API needed by the client. Pagination of results can be done by using the from and size but the cost becomes prohibitive when the deep pagination is reached. The `index.max_result_window` which defaults to 10,000 is a safeguard, search requests take heap memory and time proportional to `from + size`. -**Cons: **Inefficient +**Cons:** Inefficient **(B) [Scroll](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-scroll)** While a `search` request returns a single “page” of results, the `scroll` API can be used to retrieve large numbers of results (or even all results) from a single search request, in much the same way as you would use a cursor on a traditional database. **Pros:** A scroll returns all the documents which matched the search at the time of the initial search request. It ignores any subsequent changes to these documents. -**Cons: **Normally, the background merge process optimizes the index by merging together smaller segments to create new, bigger segments. Once the smaller segments are no longer needed they are deleted. This process continues during scrolling, but an open search context prevents the old segments from being deleted since they are still in use. Keeping older segments alive means that more disk space and file handles are needed. Ensure that you have configured your nodes to have ample free file handles +**Cons:** Normally, the background merge process optimizes the index by merging together smaller segments to create new, bigger segments. Once the smaller segments are no longer needed they are deleted. This process continues during scrolling, but an open search context prevents the old segments from being deleted since they are still in use. Keeping older segments alive means that more disk space and file handles are needed. Ensure that you have configured your nodes to have ample free file handles **(C) [Search After](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-search-after)** The Scroll API is recommended for efficient deep scrolling but scroll contexts are costly and it is not recommended to use it for real time user requests. The search_after parameter circumvents this problem by providing a live cursor. The idea is to use the results from the previous page to help the retrieval of the next page. -**Cons: **It is very similar to the `scroll` API but unlike it, the `search_after` parameter is stateless, it is always resolved against the latest version of the searcher. For this reason the sort order may change during a walk depending on the updates and deletes of your index. +**Cons:** It is very similar to the `scroll` API but unlike it, the `search_after` parameter is stateless, it is always resolved against the latest version of the searcher. For this reason the sort order may change during a walk depending on the updates and deletes of your index. + -**Decision:** **(A)** does not meet efficiency requirement. **(C)** has consistency problems. So Scroll** (B)** would be the right solution , as it is consistent can be implemented in a stateless manner on plugin side. Even though it does maintains context natively, it expires eventually if not used. **3.6.2 SELECT WITH GROUP BY** @@ -300,7 +300,7 @@ Since all the information needed to retrieve the next page requires the original Query context contains unfinished physical plan with state in each operator which consists of hash table in Join and remaining rows in Join and Scroll. -**3.6.3.1 Connect to Same Node From Client Side**:** **One option is to try to connect to the same node with query plan all the time. However, it seems that either ***ELB/ALB Session Sticky*** or ***Keep-Alive HTTP Connection*** requires setup on ELB/ALB side. +**3.6.3.1 Connect to Same Node From Client Side**: One option is to try to connect to the same node with query plan all the time. However, it seems that either **Load balancer Session Sticky** or **Keep-Alive HTTP Connection** requires setup on load balancer side. * Pros: * Easy: to implement and understand because query plan execution is identical as before. @@ -309,8 +309,9 @@ Query context contains unfinished physical plan with state in each operator whic * Workload skew: because of no load balance any more. -[Image: image.png] TODO: -* * * * * * * * * * * * ***********Diagram-1: Always connect to same data node* +![equi-join-approach-1](img/equi-join-approach-1.png) + +**Diagram-1: Always connect to same data node** **3.6.3.2 Context Lookup:** In the case that requests dispatched to different nodes is inevitable, context lookup in cluster is required with the following approaches. @@ -324,10 +325,10 @@ Query context contains unfinished physical plan with state in each operator whic * Concurrency control. -[Image: image.png] TODO: -* * * * * * * * * * * * ***********Diagram-2: Reroute request to the node with context* +![equi-join-approach-2](img/equi-join-approach-2.png) +**Diagram-2: Reroute request to the node with context** -**B) ****Persist Context to ES Index**: persist context to ES index and query it from any node that is serving client request. +**B)** **Persist Context to ES Index**: persist context to ES index and query it from any node that is serving client request. * Pros: * Explicit node communication logic is not required since ES query API can take care of the context lookup. @@ -337,11 +338,12 @@ Query context contains unfinished physical plan with state in each operator whic * Index maintenance: ES index is not designed for frequent update so new context should be appended. It is possible that the index becomes huge without deleting old context documents in the case of large context. -[Image: image.png] TODO: -* * * * * * * * * * * * ***********Diagram-3: Persist context to ES index* +![equi-join-approach-3](img/equi-join-approach-3.png) +**Diagram-3: Persist context to ES index** **3.6.3.3 Context Rebuild** + Instead of maintain the context, this solution focus on rebuild the context on the fly. Let us take an example join query @@ -354,7 +356,7 @@ Let us take an example join query In the current implementation, the HashJoin scrolls both the tables block-by-block till it exhausts all the rows from both tables and passes the whole result set to the client. -For cursor, instead of fetching rows exhaustively we can scroll the until we have enough rows needed by the client. There ***may*** be more rows than requested by `fetch_size`. We can pass the extra datarows to client including `fetch_size` datarows, and serialize the unfinished physical plan in cursor Id (which includes the scroll Id of both the tables). +For cursor, instead of fetching rows exhaustively we can scroll the until we have enough rows needed by the client. There **may** be more rows than requested by `fetch_size`. We can pass the extra datarows to client including `fetch_size` datarows, and serialize the unfinished physical plan in cursor Id (which includes the scroll Id of both the tables). For subsequent request for next pages, we have all the information needed to retrieve next page as the execution plan and scroll Ids can be decode from `cursor Id` @@ -370,13 +372,14 @@ Cons: -* ***(A)*** is good option for cursor used by customers in the ***interactive*** way who just glance over a few pages. This will require major work to implement the transport action to communicate “context host node” with “coordinator node“. It will also require home grown solution to clear the context by the plugin. This can be big blocker if implementation needs changes on Elasticsearch. -* ***(3.6.3.3)*** From the point of view of SQL plugin this approach is stateless and resolves the node to node communication problem. Since the scroll context will be handled natively by Elasticsearch, contexts will cleared automatically when it timeouts or explicitly by using `clear cursor` API. This solution also aligns with the stateless solution for simple and aggregation queries. +* *(A)* is good option for cursor used by customers in the *interactive* way who just glance over a few pages. This will require major work to implement the transport action to communicate “context host node” with “coordinator node“. It will also require home grown solution to clear the context by the plugin. This can be big blocker if implementation needs changes on Elasticsearch. +* *(3.6.3.3)* From the point of view of SQL plugin this approach is stateless and resolves the node to node communication problem. Since the scroll context will be handled natively by Elasticsearch, contexts will cleared automatically when it timeouts or explicitly by using `clear cursor` API. This solution also aligns with the stateless solution for simple and aggregation queries. -**Based on above analysis *3.6.3.3 *is the solution to go ahead for* *JOINS*.*** +Based on above analysis *3.6.3.3* is the solution to go ahead for *JOINS*. **3.6.4 SUBQUERY** + Right now subqueries are converted internally to simple queries or JOINS. So, if the above cases work subqueries should be handled. @@ -384,7 +387,7 @@ Right now subqueries are converted internally to simple queries or JOINS. So, if To support additional text formats such as CSV, RAW or TABLE (*format=table*) in future, the only additional change required is to how to send the `cursor`. This can be achieved by sending the `cursor` through `Cursor` HTTP header. -Right now there is inconsistency in results for `csv` and `jdbc` format. This is because CSV and JDBC result formatting have 2 parallel codebases, so fix in one wouldn't work with another and one needs to always remember to double check. Example: CSV formatter supported all aggregations (Percentile, Numeric SimpleValue, Numeric Multiple), and JDBC supported only one: Numeric SimpleValue. ***This would be another major work to cleanly support other text formats.*** +Right now there is inconsistency in results for `csv` and `jdbc` format. This is because CSV and JDBC result formatting have 2 parallel codebases, so fix in one wouldn't work with another and one needs to always remember to double check. Example: CSV formatter supported all aggregations (Percentile, Numeric SimpleValue, Numeric Multiple), and JDBC supported only one: Numeric SimpleValue. **This would be another major work to cleanly support other text formats.** **Recommendation**: The` csv` (or other formats) should use results of JDBC formatter and do simple transformation of results. The logic, that is currently not presented in JDBC formatter must be brought there. @@ -395,9 +398,11 @@ Right now there is inconsistency in results for `csv` and `jdbc` format. This is **4.1.1 First page request:** -[Image: CursorInitialRequestFlow.jpg] TODO: -**4.1.2 Subsequent page request and last page request ** +![cursor-initial-request-flow](img/cursor-initial-request-flow.jpg) + + +**4.1.2 Subsequent page request and last page request** -[Image: CursorISubsequentRequestFlow.png] TODO: +![cursor-subsequent-request-flow](img/cursor-subsequent-request-flow.png) From acc9683401c65d240eb4543653319e3230b9adc2 Mon Sep 17 00:00:00 2001 From: Abbas Hussain Date: Thu, 12 Mar 2020 12:16:51 -0700 Subject: [PATCH 4/9] Image link fix and more formatting --- docs/dev/Pagination.md | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/docs/dev/Pagination.md b/docs/dev/Pagination.md index 1a4f4ee9f0..67b4a6d34c 100644 --- a/docs/dev/Pagination.md +++ b/docs/dev/Pagination.md @@ -64,7 +64,7 @@ With a non-keyset client-side cursor, the server sends the entire result set acr * One obvious benefit of the client-side cursor is quick response. After the result set has been downloaded to the client machine, browsing through the rows is very fast. Your application is generally more scalable with client-side cursors because the cursor's resource requirements are placed on each separate client and not on the server. -**Cons: ** +**Cons:** * Client-side cursors may place a significant load on your workstation if they include too many rows * Since we are limited by Elasticsearch to get all the results we **cannot** materialize this. @@ -93,7 +93,7 @@ Based on the cons of client side cursors, and the limitation imposed by Elastics Here is a sample of the request response API for the cursor queries. The client only needs cursor field to fetch the next page. This interface allows clients to de-couple the parsing logic of state. -Since we are implementing server side cursors, either SQL plugin or Elasticsearch needs to maintain state which consumes hardware resources like memory, file descriptors etc. The conserve such resources we provide a clear cursor API to clear resources explicitly, before it is automatically cleaned after expiry. +Since we are implementing server side cursors, either OpenDistro SQL plugin or Elasticsearch needs to maintain state which consumes hardware resources like memory, file descriptors etc. The conserve such resources we provide a clear cursor API to clear resources explicitly, before it is automatically cleaned after expiry. ``` # 1.Creates a cursor @@ -186,8 +186,9 @@ st.close(); ### 3.4 Integrating with SQL Plugin -[Image: Cursor_Context_2.jpg] -Since we are supporting cursor for different type of queries using different implementation, we*** may*** need to maintain some state (context). This **context** is used when we fetch next batch of results. Maintaining context is not a requirement, but may be needed. +![high-level-cursor-integration](img/high-level-cursor-design.jpg) + +Since we are supporting cursor for different type of queries using different implementation, we _*may*_ need to maintain some state (context). This **context** is used when we fetch next batch of results. Maintaining context is not a requirement, but may be needed. ### 3.6 Different approaches for different SQL queries @@ -200,6 +201,7 @@ From ideal pagination point of view from and size is API needed by the client. P **Cons:** Inefficient **(B) [Scroll](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-scroll)** + While a `search` request returns a single “page” of results, the `scroll` API can be used to retrieve large numbers of results (or even all results) from a single search request, in much the same way as you would use a cursor on a traditional database. **Pros:** A scroll returns all the documents which matched the search at the time of the initial search request. It ignores any subsequent changes to these documents. @@ -208,6 +210,7 @@ While a `search` request returns a single “page” of results, the `scroll` AP **(C) [Search After](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-search-after)** + The Scroll API is recommended for efficient deep scrolling but scroll contexts are costly and it is not recommended to use it for real time user requests. The search_after parameter circumvents this problem by providing a live cursor. The idea is to use the results from the previous page to help the retrieval of the next page. **Cons:** It is very similar to the `scroll` API but unlike it, the `search_after` parameter is stateless, it is always resolved against the latest version of the searcher. For this reason the sort order may change during a walk depending on the updates and deletes of your index. @@ -217,6 +220,7 @@ The Scroll API is recommended for efficient deep scrolling but scroll contexts a **(A)** does not meet efficiency requirement. **(C)** has consistency problems. So Scroll** (B)** would be the right solution , as it is consistent can be implemented in a stateless manner on plugin side. Even though it does maintains context natively, it expires eventually if not used. **3.6.2 SELECT WITH GROUP BY** + The [terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) is meant to return the top terms and does not allow pagination. If we want to retrieve all terms or all combinations of terms in a nested terms aggregation we should eventually migrate to [Composite aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html) which allows to paginate over all possible terms rather than setting a size greater than the cardinality of the field in the terms aggregation. This aggregation can be used to paginate all buckets from a multi-level aggregation efficiently. This aggregation provides a way to stream all buckets of a specific aggregation similarly to what scroll does for documents. @@ -300,7 +304,9 @@ Since all the information needed to retrieve the next page requires the original Query context contains unfinished physical plan with state in each operator which consists of hash table in Join and remaining rows in Join and Scroll. -**3.6.3.1 Connect to Same Node From Client Side**: One option is to try to connect to the same node with query plan all the time. However, it seems that either **Load balancer Session Sticky** or **Keep-Alive HTTP Connection** requires setup on load balancer side. +**3.6.3.1 Connect to Same Node From Client Side**: + +One option is to try to connect to the same node with query plan all the time. However, it seems that either **Load balancer Session Sticky** or **Keep-Alive HTTP Connection** requires setup on load balancer side. * Pros: * Easy: to implement and understand because query plan execution is identical as before. @@ -311,9 +317,11 @@ Query context contains unfinished physical plan with state in each operator whic ![equi-join-approach-1](img/equi-join-approach-1.png) -**Diagram-1: Always connect to same data node** +_*Diagram-1: Always connect to same data node*_ + +**3.6.3.2 Context Lookup:** -**3.6.3.2 Context Lookup:** In the case that requests dispatched to different nodes is inevitable, context lookup in cluster is required with the following approaches. +In the case that requests dispatched to different nodes is inevitable, context lookup in cluster is required with the following approaches. **A) Reroute to Node with Context Inside ES**: route the request to stateful node with the context, fetch result set and return to client side: @@ -326,9 +334,12 @@ Query context contains unfinished physical plan with state in each operator whic ![equi-join-approach-2](img/equi-join-approach-2.png) -**Diagram-2: Reroute request to the node with context** -**B)** **Persist Context to ES Index**: persist context to ES index and query it from any node that is serving client request. +_*Diagram-2: Reroute request to the node with context*_ + +**B)** **Persist Context to ES Index**: + +Persist context to ES index and query it from any node that is serving client request. * Pros: * Explicit node communication logic is not required since ES query API can take care of the context lookup. @@ -339,7 +350,8 @@ Query context contains unfinished physical plan with state in each operator whic ![equi-join-approach-3](img/equi-join-approach-3.png) -**Diagram-3: Persist context to ES index** + +_*Diagram-3: Persist context to ES index*_ **3.6.3.3 Context Rebuild** @@ -356,7 +368,7 @@ Let us take an example join query In the current implementation, the HashJoin scrolls both the tables block-by-block till it exhausts all the rows from both tables and passes the whole result set to the client. -For cursor, instead of fetching rows exhaustively we can scroll the until we have enough rows needed by the client. There **may** be more rows than requested by `fetch_size`. We can pass the extra datarows to client including `fetch_size` datarows, and serialize the unfinished physical plan in cursor Id (which includes the scroll Id of both the tables). +For cursor, instead of fetching rows exhaustively we can scroll the until we have enough rows needed by the client. There _*may*_ be more rows than requested by `fetch_size`. We can pass the extra datarows to client including `fetch_size` datarows, and serialize the unfinished physical plan in cursor Id (which includes the scroll Id of both the tables). For subsequent request for next pages, we have all the information needed to retrieve next page as the execution plan and scroll Ids can be decode from `cursor Id` @@ -389,7 +401,7 @@ To support additional text formats such as CSV, RAW or TABLE (*format=table*) in Right now there is inconsistency in results for `csv` and `jdbc` format. This is because CSV and JDBC result formatting have 2 parallel codebases, so fix in one wouldn't work with another and one needs to always remember to double check. Example: CSV formatter supported all aggregations (Percentile, Numeric SimpleValue, Numeric Multiple), and JDBC supported only one: Numeric SimpleValue. **This would be another major work to cleanly support other text formats.** -**Recommendation**: The` csv` (or other formats) should use results of JDBC formatter and do simple transformation of results. The logic, that is currently not presented in JDBC formatter must be brought there. +**Recommendation**: The `csv` (or other formats) should use results of JDBC formatter and do simple transformation of results. The logic, that is currently not presented in JDBC formatter must be brought there. ## 4. Detailed Design From 44abe7483f043860b53bc5bf53c3ffde1689a924 Mon Sep 17 00:00:00 2001 From: Abbas Hussain Date: Thu, 12 Mar 2020 12:24:17 -0700 Subject: [PATCH 5/9] Fix work undertaken in different phases --- docs/dev/Pagination.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/dev/Pagination.md b/docs/dev/Pagination.md index 67b4a6d34c..ec0ce36ee4 100644 --- a/docs/dev/Pagination.md +++ b/docs/dev/Pagination.md @@ -38,13 +38,17 @@ Based on the use cases, the following capabilities are required: * *SELECT* : Already supported but in the hint manner which mixed long cursor ID with same query itself for each following fetch after the first one. * Format type: We will consider **format for JDBC driver** only for now as it used by both JDBC and ODBC driver. It is also used by SQL CLI. * JDBC support for cursor +* ODBC support for cursor **Phase II:** * *SELECT* with GROUP BY (aggregation query) + +**Phase III:** + * *EQUI-JOINS*: Since we only have query plan framework (unfinished physical plan) for equi-joins, we will be supporting this. * Support for text based formats such as CSV , RAW (pipe separated). -* ODBC support for cursor + **Out of Scope:** From 86721fc82e8680127bf15b1a4ac0a5ecf108d4ba Mon Sep 17 00:00:00 2001 From: Abbas Hussain Date: Thu, 12 Mar 2020 16:57:39 -0700 Subject: [PATCH 6/9] Add cursor setting details --- docs/dev/Pagination.md | 138 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 130 insertions(+), 8 deletions(-) diff --git a/docs/dev/Pagination.md b/docs/dev/Pagination.md index ec0ce36ee4..d0ddbfa5f4 100644 --- a/docs/dev/Pagination.md +++ b/docs/dev/Pagination.md @@ -312,9 +312,9 @@ Query context contains unfinished physical plan with state in each operator whic One option is to try to connect to the same node with query plan all the time. However, it seems that either **Load balancer Session Sticky** or **Keep-Alive HTTP Connection** requires setup on load balancer side. -* Pros: +* **Pros:**: * Easy: to implement and understand because query plan execution is identical as before. -* Cons: +* **Cons:**: * Dependency: on configuration of load balancer. * Workload skew: because of no load balance any more. @@ -329,9 +329,9 @@ In the case that requests dispatched to different nodes is inevitable, context l **A) Reroute to Node with Context Inside ES**: route the request to stateful node with the context, fetch result set and return to client side: -* Pros: +* **Pros:** * Lightweight: only 1 node maintains the context with small footprint in memory. -* Cons: +* **Cons:** * One more hop: to pass the result from stateful node to “coordinator” node. * Workload skew. * Concurrency control. @@ -345,10 +345,10 @@ _*Diagram-2: Reroute request to the node with context*_ Persist context to ES index and query it from any node that is serving client request. -* Pros: +* **Pros:** * Explicit node communication logic is not required since ES query API can take care of the context lookup. * In the event of loss of node the context is not lost, as index will be replicated by ES. -* Cons: +* **Cons:** * Extra overhead: of (de-)serialization and network communication incurred by ES query. * Index maintenance: ES index is not designed for frequent update so new context should be appended. It is possible that the index becomes huge without deleting old context documents in the case of large context. @@ -376,13 +376,13 @@ For cursor, instead of fetching rows exhaustively we can scroll the until we hav For subsequent request for next pages, we have all the information needed to retrieve next page as the execution plan and scroll Ids can be decode from `cursor Id` -Pros: +**Pros:** * Stateless implementation. * Fixed Space Complexity. * No need to maintain the context. -Cons: +**Cons:** * We will be sending extra datarows to the client than initially requested by the client using fetch_size but this can be handled transparently by the JDBC driver which is our major use case. @@ -422,3 +422,125 @@ Right now there is inconsistency in results for `csv` and `jdbc` format. This is ![cursor-subsequent-request-flow](img/cursor-subsequent-request-flow.png) +### 4.2 Settings: +When Elasticsearch bootstraps, SQL plugin will register a few settings in Elasticsearch cluster settings. +Most of the settings are able to change dynamically so you can control the behavior of SQL plugin without need to bounce your cluster. +For cursors we will be exposing the following settings: + +#### opendistro.sql.cursor.enabled + +You can disable cursor for all SQL queries which support pagination. + +The default value is **true**. +This setting is node scope. +This setting can be updated dynamically. +This can be `persistent` and `transient`. + +Example: + +``` +>> curl -H 'Content-Type: application/json' -X PUT localhost:9200/_cluster/settings -d '{ + "transient" : { + "opendistro.sql.cursor.enabled" : "false" + } +}' +``` + +Response: + +``` +{ + "acknowledged" : true, + "persistent" : { }, + "transient" : { + "opendistro" : { + "sql" : { + "cursor" : { + "enabled" : "false" + } + } + } + } +} + +``` + +#### opendistro.sql.cursor.fetch_size + +This setting controls the default page size for all cursor requests. + +The default value is **1000**. +The minimum value is **1**. +The effective max value is controlled by `index.max_result_window` setting. Increase the fetch_size above this will give a 500 error from teh backend. +This setting is node scope. +This setting can be updated dynamically. +This can be `persistent` and `transient`. + +Example: + +``` +>> curl -H 'Content-Type: application/json' -X PUT localhost:9200/_cluster/settings -d '{ + "persistent" : { + "opendistro.sql.cursor.fetch_size" : "100" + } +}' +``` + +Response: + +``` +{ + "acknowledged" : true, + "transient" : { }, + "persistent" : { + "opendistro" : { + "sql" : { + "cursor" : { + "fetch_size" : "100" + } + } + } + } +} + +``` + +#### opendistro.sql.cursor.keep_alive + +This setting controls the how long the cursor context is open for all cursor requests. +You can five the time in human readable time format like `5h` (5 hours) or `20s` (20 seconds) etc. + +The default value is **1m**. +This setting is node scope. +This setting can be updated dynamically. +This can be `persistent` and `transient`. + +Example: + +``` +>> curl -H 'Content-Type: application/json' -X PUT localhost:9200/_cluster/settings -d '{ + "transient" : { + "opendistro.sql.cursor.keep_alive" : "200s" + } +}' +``` + +Response: + +``` +{ + "acknowledged" : true, + "persistent" : { }, + "transient" : { + "opendistro" : { + "sql" : { + "cursor" : { + "keep_alive" : "200s" + } + } + } + } +} + + +``` From a1d2fbcea4cdbdc125297af8f3e35ec75f8c052a Mon Sep 17 00:00:00 2001 From: Abbas Hussain Date: Thu, 12 Mar 2020 17:02:09 -0700 Subject: [PATCH 7/9] Fix setting section formatting --- docs/dev/Pagination.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/dev/Pagination.md b/docs/dev/Pagination.md index d0ddbfa5f4..c25dc2e4fb 100644 --- a/docs/dev/Pagination.md +++ b/docs/dev/Pagination.md @@ -431,10 +431,10 @@ For cursors we will be exposing the following settings: You can disable cursor for all SQL queries which support pagination. -The default value is **true**. -This setting is node scope. -This setting can be updated dynamically. -This can be `persistent` and `transient`. +- The default value is **true**. +- This setting is node scope. +- This setting can be updated dynamically. +- This can be `persistent` and `transient`. Example: @@ -469,12 +469,12 @@ Response: This setting controls the default page size for all cursor requests. -The default value is **1000**. -The minimum value is **1**. -The effective max value is controlled by `index.max_result_window` setting. Increase the fetch_size above this will give a 500 error from teh backend. -This setting is node scope. -This setting can be updated dynamically. -This can be `persistent` and `transient`. +- The default value is **1000**. +- The minimum value is **1**. +- The effective max value is controlled by `index.max_result_window` setting. Increase the fetch_size above this will give a 500 error from teh backend. +- This setting is node scope. +- This setting can be updated dynamically. +- This can be `persistent` and `transient`. Example: @@ -510,10 +510,10 @@ Response: This setting controls the how long the cursor context is open for all cursor requests. You can five the time in human readable time format like `5h` (5 hours) or `20s` (20 seconds) etc. -The default value is **1m**. -This setting is node scope. -This setting can be updated dynamically. -This can be `persistent` and `transient`. +- The default value is **1m**. +- This setting is node scope. +- This setting can be updated dynamically. +- This can be `persistent` and `transient`. Example: From 452656ee935751f91a3bdcdd999deec169c3931f Mon Sep 17 00:00:00 2001 From: Abbas Hussain Date: Thu, 12 Mar 2020 17:03:29 -0700 Subject: [PATCH 8/9] Typo fix --- docs/dev/Pagination.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/dev/Pagination.md b/docs/dev/Pagination.md index c25dc2e4fb..08ae06e255 100644 --- a/docs/dev/Pagination.md +++ b/docs/dev/Pagination.md @@ -471,7 +471,7 @@ This setting controls the default page size for all cursor requests. - The default value is **1000**. - The minimum value is **1**. -- The effective max value is controlled by `index.max_result_window` setting. Increase the fetch_size above this will give a 500 error from teh backend. +- The effective max value is controlled by `index.max_result_window` setting. Increase the fetch_size above this will give a 500 error from Elasticsearch. - This setting is node scope. - This setting can be updated dynamically. - This can be `persistent` and `transient`. From d446a04a56c7f62865a0c8bedb9c06fd31898897 Mon Sep 17 00:00:00 2001 From: Abbas Hussain Date: Thu, 12 Mar 2020 17:23:05 -0700 Subject: [PATCH 9/9] Add Salient Points section in Detailed Design section --- docs/dev/Pagination.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/dev/Pagination.md b/docs/dev/Pagination.md index 08ae06e255..df6ea17312 100644 --- a/docs/dev/Pagination.md +++ b/docs/dev/Pagination.md @@ -421,8 +421,20 @@ Right now there is inconsistency in results for `csv` and `jdbc` format. This is ![cursor-subsequent-request-flow](img/cursor-subsequent-request-flow.png) - -### 4.2 Settings: +### 4.2 Salient Points: + +- By default all requests will be a cursor request - meaning the response will contain `cursor` key to fetch next page of result. This is true for all queries which cursor is supported. +- Cursor is supported only via `POST` HTTP request. +- If `fetch_size` is omitted from request, it will default to **1000**, unless overridden by cluster settings (See below). +- A `fetch_size` value of **0**, will imply no cursor and query will fallback to non-cursor behavior. This will allow to use/not-use cursor on a per query basis. +- If SQL query limit is less than `fetch_size`, no cursor context will be open and all results will be fetched in first page. +- Negative or non-numeric values of `fetch_size` will throw `400` exception. +- If `cursor` is given as JSON field in request, other fields like `fetch_size` , `query`, `filter`, `parameters` will be ignored. +- Like Elasticsearch’s scroll, SQL plugin may keep state in Elasticsearch to support the cursor. Unlike scroll, receiving the last page is enough to guarantee that the Elasticsearch state is cleared. +- Multiple invocations of clearing the cursor, will succeed. +- Using the cursor after context is expired will throw error. + +### 4.3 Settings: When Elasticsearch bootstraps, SQL plugin will register a few settings in Elasticsearch cluster settings. Most of the settings are able to change dynamically so you can control the behavior of SQL plugin without need to bounce your cluster. For cursors we will be exposing the following settings: