You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2025/04/11 14:47:23 UTC

(hbase-site) branch asf-site updated: Published site at 0b3c17302843d1f4d6f3c6b458f837cb9c274510.

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 1cb5dddb2ea Published site at 0b3c17302843d1f4d6f3c6b458f837cb9c274510.
1cb5dddb2ea is described below

commit 1cb5dddb2eaaeb2c68b5cd45726394772a0f584b
Author: jenkins <bu...@apache.org>
AuthorDate: Fri Apr 11 14:47:09 2025 +0000

    Published site at 0b3c17302843d1f4d6f3c6b458f837cb9c274510.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   | 3266 ++++++++++----------
 apidocs/index-all.html                             |    4 +
 apidocs/member-search-index.js                     |    2 +-
 .../AsyncAdminRequestRetryingCaller.Callable.html  |  110 +-
 .../client/AsyncAdminRequestRetryingCaller.html    |  110 +-
 .../hadoop/hbase/rest/RowResultGenerator.html      |  123 +-
 .../org/apache/hadoop/hbase/rest/RowSpec.html      |  769 ++---
 .../hadoop/hbase/rest/ScannerResultGenerator.html  |  226 +-
 book.html                                          |    6 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |    6 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    8 +-
 devapidocs/index-all.html                          |    6 +
 devapidocs/member-search-index.js                  |    2 +-
 .../AsyncAdminRequestRetryingCaller.Callable.html  |    4 +-
 .../client/AsyncAdminRequestRetryingCaller.html    |   25 +-
 .../hadoop/hbase/rest/RowResultGenerator.html      |   10 +-
 .../org/apache/hadoop/hbase/rest/RowSpec.html      |  114 +-
 .../hadoop/hbase/rest/ScannerResultGenerator.html  |   12 +-
 .../AsyncAdminRequestRetryingCaller.Callable.html  |  110 +-
 .../client/AsyncAdminRequestRetryingCaller.html    |  110 +-
 .../AsyncNonMetaRegionLocator.LocateRequest.html   |    2 +-
 ...aRegionLocator.RegionLocationsFutureResult.html |    2 +-
 .../AsyncNonMetaRegionLocator.TableCache.html      |    2 +-
 .../hbase/client/AsyncNonMetaRegionLocator.html    |    2 +-
 .../hadoop/hbase/rest/RowResultGenerator.html      |  123 +-
 .../org/apache/hadoop/hbase/rest/RowSpec.html      |  769 ++---
 .../hadoop/hbase/rest/ScannerResultGenerator.html  |  226 +-
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-management.html                              |    2 +-
 licenses.html                                      |    2 +-
 mailing-lists.html                                 |    2 +-
 metrics.html                                       |    2 +-
 old_news.html                                      |    2 +-
 plugin-management.html                             |    2 +-
 plugins.html                                       |    2 +-
 poweredbyhbase.html                                |    2 +-
 project-info.html                                  |    2 +-
 project-reports.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 scm.html                                           |    2 +-
 sponsors.html                                      |    2 +-
 summary.html                                       |    2 +-
 supportingprojects.html                            |    2 +-
 team.html                                          |    2 +-
 ...estCatalogReplicaLoadBalanceSimpleSelector.html |    4 +-
 ...estCatalogReplicaLoadBalanceSimpleSelector.html |    4 +-
 56 files changed, 3173 insertions(+), 3038 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index bc1e04be68a..d2ee1220546 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -469,7 +469,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 6c2fdf6eb0c..8139f9adb34 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 2.0.6, based on Prawn 2.4.0)
 /Producer (Apache HBase Team)
-/ModDate (D:20250410143001+00'00')
-/CreationDate (D:20250410144400+00'00')
+/ModDate (D:20250411143001+00'00')
+/CreationDate (D:20250411144339+00'00')
 >>
 endobj
 2 0 obj
@@ -1146035,10 +1146035,7 @@ endobj
 endobj
 4441 0 obj
 << /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (hbase.rpc)
->>
+/Dest (hbase.rpc)
 /Subtype /Link
 /Rect [292.68077 718.58 317.07227 732.86]
 /Type /Annot
@@ -1146054,10 +1146051,7 @@ endobj
 endobj
 4443 0 obj
 << /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (shaded.protobuf)
->>
+/Dest (shaded.protobuf)
 /Subtype /Link
 /Rect [74.3745 252.08 129.8355 266.36]
 /Type /Annot
@@ -1336092,1636 +1336086,1636 @@ xref
 0016248652 00000 n 
 0016248700 00000 n 
 0016248896 00000 n 
-0016249054 00000 n 
-0016249169 00000 n 
-0016249330 00000 n 
-0016249378 00000 n 
-0016273235 00000 n 
-0016273596 00000 n 
-0016273645 00000 n 
-0016292283 00000 n 
-0016292631 00000 n 
-0016297755 00000 n 
-0016298103 00000 n 
-0016303602 00000 n 
-0016304006 00000 n 
-0016304054 00000 n 
-0016304248 00000 n 
-0016304428 00000 n 
-0016304661 00000 n 
-0016321569 00000 n 
-0016321957 00000 n 
-0016322005 00000 n 
-0016333117 00000 n 
-0016333478 00000 n 
-0016333526 00000 n 
-0016333574 00000 n 
-0016333622 00000 n 
-0016333670 00000 n 
-0016341012 00000 n 
-0016341405 00000 n 
-0016341453 00000 n 
-0016341689 00000 n 
-0016344491 00000 n 
-0016344852 00000 n 
-0016344900 00000 n 
-0016349957 00000 n 
-0016350318 00000 n 
-0016350366 00000 n 
-0016352067 00000 n 
-0016352415 00000 n 
-0016352463 00000 n 
-0016355591 00000 n 
-0016355939 00000 n 
-0016355987 00000 n 
-0016363458 00000 n 
-0016363819 00000 n 
-0016363867 00000 n 
-0016372332 00000 n 
-0016372706 00000 n 
-0016372754 00000 n 
-0016372802 00000 n 
-0016373287 00000 n 
-0016373335 00000 n 
-0016375664 00000 n 
-0016376040 00000 n 
-0016376088 00000 n 
-0016376306 00000 n 
-0016376540 00000 n 
-0016378871 00000 n 
-0016379232 00000 n 
-0016379280 00000 n 
-0016390607 00000 n 
-0016391018 00000 n 
-0016391066 00000 n 
-0016391263 00000 n 
-0016391460 00000 n 
-0016391581 00000 n 
-0016397916 00000 n 
-0016398277 00000 n 
-0016398325 00000 n 
-0016447905 00000 n 
-0016448279 00000 n 
-0016448327 00000 n 
-0016448375 00000 n 
-0016491053 00000 n 
-0016491401 00000 n 
-0016493296 00000 n 
-0016493644 00000 n 
-0016493692 00000 n 
-0016494698 00000 n 
-0016495046 00000 n 
-0016495094 00000 n 
-0016501261 00000 n 
-0016501622 00000 n 
-0016501670 00000 n 
-0016501718 00000 n 
-0016501766 00000 n 
-0016504024 00000 n 
-0016504372 00000 n 
-0016504420 00000 n 
-0016504468 00000 n 
-0016504516 00000 n 
-0016504564 00000 n 
-0016504612 00000 n 
-0016528264 00000 n 
-0016528653 00000 n 
-0016528701 00000 n 
-0016528896 00000 n 
-0016529120 00000 n 
-0016529168 00000 n 
-0016548467 00000 n 
-0016548873 00000 n 
-0016548921 00000 n 
-0016548977 00000 n 
-0016549124 00000 n 
-0016567786 00000 n 
-0016568192 00000 n 
-0016568417 00000 n 
-0016582483 00000 n 
-0016582903 00000 n 
-0016582951 00000 n 
-0016583157 00000 n 
-0016583364 00000 n 
-0016583593 00000 n 
-0016583824 00000 n 
-0016604046 00000 n 
-0016604448 00000 n 
-0016604496 00000 n 
-0016604693 00000 n 
-0016604889 00000 n 
-0016604937 00000 n 
-0016628185 00000 n 
-0016628578 00000 n 
-0016628626 00000 n 
-0016628871 00000 n 
-0016660410 00000 n 
-0016660784 00000 n 
-0016660832 00000 n 
-0016680151 00000 n 
-0016680512 00000 n 
-0016741939 00000 n 
-0016742300 00000 n 
-0016742348 00000 n 
-0016742396 00000 n 
-0016797168 00000 n 
-0016797529 00000 n 
-0016797577 00000 n 
-0016798190 00000 n 
-0016798238 00000 n 
-0016798286 00000 n 
-0016799942 00000 n 
-0016800323 00000 n 
-0016800371 00000 n 
-0016800569 00000 n 
-0016800617 00000 n 
-0016813248 00000 n 
-0016813663 00000 n 
-0016813711 00000 n 
-0016813759 00000 n 
-0016813982 00000 n 
-0016814030 00000 n 
-0016814227 00000 n 
-0016819033 00000 n 
-0016819394 00000 n 
-0016819782 00000 n 
-0016820130 00000 n 
-0016820178 00000 n 
-0016829888 00000 n 
-0016830281 00000 n 
-0016830329 00000 n 
-0016830614 00000 n 
-0016830663 00000 n 
-0016830712 00000 n 
-0016830761 00000 n 
-0016870710 00000 n 
-0016871108 00000 n 
-0016871156 00000 n 
-0016871204 00000 n 
-0016871390 00000 n 
-0016871578 00000 n 
-0016871766 00000 n 
-0016874915 00000 n 
-0016875276 00000 n 
-0016875324 00000 n 
-0016875704 00000 n 
-0016876052 00000 n 
-0016876100 00000 n 
-0016877986 00000 n 
-0016878347 00000 n 
-0016878395 00000 n 
-0016899279 00000 n 
-0016899653 00000 n 
-0016899701 00000 n 
-0016899749 00000 n 
-0016899797 00000 n 
-0016900309 00000 n 
-0016925760 00000 n 
-0016926121 00000 n 
-0016926169 00000 n 
-0016926217 00000 n 
-0016967473 00000 n 
-0016967834 00000 n 
-0016967882 00000 n 
-0017005463 00000 n 
-0017005824 00000 n 
-0017005872 00000 n 
-0017005920 00000 n 
-0017034154 00000 n 
-0017034528 00000 n 
-0017034576 00000 n 
-0017034624 00000 n 
-0017034672 00000 n 
-0017047366 00000 n 
-0017047740 00000 n 
-0017047788 00000 n 
-0017047836 00000 n 
-0017047884 00000 n 
-0017048593 00000 n 
-0017048641 00000 n 
-0017048689 00000 n 
-0017056822 00000 n 
-0017057209 00000 n 
-0017060304 00000 n 
-0017060678 00000 n 
-0017060726 00000 n 
-0017060774 00000 n 
-0017062177 00000 n 
-0017062525 00000 n 
-0017062573 00000 n 
-0017062621 00000 n 
-0017063021 00000 n 
-0017063369 00000 n 
-0017063417 00000 n 
-0017067538 00000 n 
-0017067941 00000 n 
-0017067989 00000 n 
-0017068161 00000 n 
-0017068359 00000 n 
-0017068533 00000 n 
-0017068745 00000 n 
-0017068957 00000 n 
-0017077280 00000 n 
-0017077713 00000 n 
-0017077761 00000 n 
-0017077809 00000 n 
-0017078025 00000 n 
-0017078327 00000 n 
-0017078375 00000 n 
-0017078569 00000 n 
-0017078827 00000 n 
-0017079249 00000 n 
-0017079597 00000 n 
-0017079645 00000 n 
-0017087061 00000 n 
-0017087422 00000 n 
-0017087470 00000 n 
-0017093547 00000 n 
-0017093908 00000 n 
-0017093956 00000 n 
-0017094004 00000 n 
-0017094052 00000 n 
-0017094100 00000 n 
-0017120010 00000 n 
-0017120397 00000 n 
-0017120445 00000 n 
-0017120493 00000 n 
-0017120541 00000 n 
-0017141186 00000 n 
-0017141573 00000 n 
-0017141621 00000 n 
-0017142984 00000 n 
-0017143332 00000 n 
-0017143380 00000 n 
-0017166914 00000 n 
-0017167275 00000 n 
-0017167323 00000 n 
-0017189331 00000 n 
-0017189692 00000 n 
-0017189740 00000 n 
-0017190148 00000 n 
-0017190196 00000 n 
-0017190244 00000 n 
-0017190292 00000 n 
-0017207029 00000 n 
-0017207390 00000 n 
-0017207438 00000 n 
-0017207826 00000 n 
-0017208174 00000 n 
-0017208222 00000 n 
-0017220784 00000 n 
-0017221195 00000 n 
-0017221243 00000 n 
-0017222232 00000 n 
-0017222409 00000 n 
-0017222576 00000 n 
-0017222699 00000 n 
-0017222747 00000 n 
-0017222795 00000 n 
-0017242608 00000 n 
-0017243016 00000 n 
-0017243064 00000 n 
-0017243287 00000 n 
-0017265429 00000 n 
-0017265840 00000 n 
-0017265982 00000 n 
-0017266030 00000 n 
-0017266078 00000 n 
-0017266126 00000 n 
-0017266294 00000 n 
-0017266479 00000 n 
-0017296103 00000 n 
-0017296501 00000 n 
-0017296704 00000 n 
-0017296907 00000 n 
-0017297109 00000 n 
-0017323507 00000 n 
-0017323896 00000 n 
-0017324096 00000 n 
-0017324296 00000 n 
-0017350432 00000 n 
-0017350821 00000 n 
-0017351020 00000 n 
-0017351220 00000 n 
-0017359647 00000 n 
-0017360045 00000 n 
-0017360253 00000 n 
-0017360463 00000 n 
-0017360672 00000 n 
-0017384306 00000 n 
-0017384708 00000 n 
-0017384900 00000 n 
-0017385092 00000 n 
-0017403699 00000 n 
-0017404092 00000 n 
-0017404140 00000 n 
-0017404271 00000 n 
-0017404319 00000 n 
-0017414750 00000 n 
-0017415124 00000 n 
-0017415172 00000 n 
-0017415220 00000 n 
-0017429188 00000 n 
-0017429617 00000 n 
-0017429665 00000 n 
-0017429713 00000 n 
-0017429841 00000 n 
-0017430011 00000 n 
-0017430139 00000 n 
-0017430267 00000 n 
-0017430395 00000 n 
-0017430443 00000 n 
-0017441886 00000 n 
-0017442378 00000 n 
-0017442427 00000 n 
-0017442555 00000 n 
-0017442604 00000 n 
-0017442730 00000 n 
-0017442861 00000 n 
-0017442910 00000 n 
-0017443035 00000 n 
-0017443159 00000 n 
-0017443293 00000 n 
-0017443427 00000 n 
-0017443564 00000 n 
-0017443689 00000 n 
-0017443827 00000 n 
-0017443959 00000 n 
-0017444008 00000 n 
-0017444132 00000 n 
-0017449326 00000 n 
-0017449747 00000 n 
-0017449795 00000 n 
-0017449920 00000 n 
-0017450041 00000 n 
-0017450089 00000 n 
-0017450214 00000 n 
-0017450335 00000 n 
-0017450383 00000 n 
-0017450506 00000 n 
-0017450629 00000 n 
-0017450677 00000 n 
-0017450802 00000 n 
-0017459189 00000 n 
-0017459550 00000 n 
-0017459598 00000 n 
-0017459647 00000 n 
-0017459696 00000 n 
-0017480237 00000 n 
-0017480612 00000 n 
-0017515599 00000 n 
-0017515947 00000 n 
-0017553857 00000 n 
-0017554205 00000 n 
-0017580078 00000 n 
-0017580426 00000 n 
-0017622219 00000 n 
-0017622567 00000 n 
-0017625763 00000 n 
-0017626111 00000 n 
-0017638121 00000 n 
-0017638568 00000 n 
-0017638616 00000 n 
-0017638670 00000 n 
-0017638819 00000 n 
-0017638953 00000 n 
-0017639090 00000 n 
-0017639229 00000 n 
-0017639370 00000 n 
-0017639512 00000 n 
-0017639692 00000 n 
-0017652164 00000 n 
-0017652572 00000 n 
-0017652750 00000 n 
-0017652936 00000 n 
-0017653138 00000 n 
-0017653359 00000 n 
-0017653566 00000 n 
-0017653763 00000 n 
-0017653939 00000 n 
-0017659745 00000 n 
-0017660147 00000 n 
-0017700804 00000 n 
-0017728567 00000 n 
-0017736653 00000 n 
-0017737028 00000 n 
-0017783069 00000 n 
-0017801969 00000 n 
-0017802375 00000 n 
-0017802423 00000 n 
-0017802702 00000 n 
-0017802750 00000 n 
-0017842521 00000 n 
-0017842895 00000 n 
-0017887400 00000 n 
-0017887798 00000 n 
-0017887991 00000 n 
-0017888184 00000 n 
-0017888395 00000 n 
-0017914301 00000 n 
-0017914681 00000 n 
-0017914729 00000 n 
-0017914777 00000 n 
-0017914960 00000 n 
-0017944654 00000 n 
-0017945061 00000 n 
-0017945239 00000 n 
-0017945419 00000 n 
-0017945602 00000 n 
-0017945782 00000 n 
-0017989826 00000 n 
-0017990219 00000 n 
-0017990415 00000 n 
-0018022278 00000 n 
-0018022707 00000 n 
-0018022904 00000 n 
-0018023041 00000 n 
-0018023090 00000 n 
-0018023295 00000 n 
-0018023499 00000 n 
-0018023643 00000 n 
-0018023692 00000 n 
-0018043216 00000 n 
-0018043627 00000 n 
-0018043762 00000 n 
-0018043810 00000 n 
-0018043944 00000 n 
-0018044088 00000 n 
-0018044137 00000 n 
-0018044185 00000 n 
-0018089859 00000 n 
-0018090233 00000 n 
-0018090282 00000 n 
-0018090331 00000 n 
-0018135221 00000 n 
-0018135582 00000 n 
-0018165176 00000 n 
-0018165550 00000 n 
-0018165598 00000 n 
-0018166938 00000 n 
-0018167314 00000 n 
-0018167362 00000 n 
-0018167410 00000 n 
-0018167579 00000 n 
-0018167627 00000 n 
-0018167810 00000 n 
-0018170810 00000 n 
-0018171204 00000 n 
-0018171252 00000 n 
-0018171713 00000 n 
-0018171899 00000 n 
-0018172094 00000 n 
-0018172272 00000 n 
-0018172449 00000 n 
-0018179918 00000 n 
-0018180293 00000 n 
-0018180341 00000 n 
-0018180389 00000 n 
-0018180437 00000 n 
-0018181311 00000 n 
-0018207198 00000 n 
-0018211761 00000 n 
-0018211810 00000 n 
-0018211859 00000 n 
-0018211908 00000 n 
-0018212264 00000 n 
-0018220013 00000 n 
-0018220361 00000 n 
-0018220409 00000 n 
-0018267177 00000 n 
-0018274494 00000 n 
-0018274869 00000 n 
-0018274918 00000 n 
-0018285608 00000 n 
-0018285969 00000 n 
-0018286017 00000 n 
-0018286065 00000 n 
-0018299409 00000 n 
-0018299770 00000 n 
-0018299818 00000 n 
-0018314242 00000 n 
-0018314603 00000 n 
-0018314651 00000 n 
-0018314699 00000 n 
-0018314747 00000 n 
-0018315370 00000 n 
-0018333388 00000 n 
-0018333736 00000 n 
-0018333784 00000 n 
-0018334289 00000 n 
-0018347000 00000 n 
-0018347443 00000 n 
-0018347491 00000 n 
-0018347539 00000 n 
-0018347680 00000 n 
-0018347808 00000 n 
-0018347959 00000 n 
-0018348097 00000 n 
-0018348145 00000 n 
-0018348274 00000 n 
-0018348322 00000 n 
-0018348447 00000 n 
-0018348495 00000 n 
-0018348622 00000 n 
-0018348837 00000 n 
-0018359252 00000 n 
-0018359632 00000 n 
-0018359680 00000 n 
-0018359816 00000 n 
-0018366894 00000 n 
-0018367382 00000 n 
-0018367430 00000 n 
-0018367478 00000 n 
-0018367649 00000 n 
-0018367839 00000 n 
-0018367888 00000 n 
-0018368138 00000 n 
-0018368366 00000 n 
-0018368611 00000 n 
-0018368660 00000 n 
-0018368854 00000 n 
-0018369064 00000 n 
-0018369277 00000 n 
-0018369326 00000 n 
-0018369519 00000 n 
-0018369752 00000 n 
-0018369937 00000 n 
-0018369986 00000 n 
-0018370179 00000 n 
-0018370228 00000 n 
-0018370622 00000 n 
-0018370816 00000 n 
-0018372977 00000 n 
-0018373344 00000 n 
-0018373392 00000 n 
-0018373587 00000 n 
-0018376981 00000 n 
-0018377357 00000 n 
-0018377405 00000 n 
-0018377453 00000 n 
-0018377639 00000 n 
-0018377687 00000 n 
-0018377881 00000 n 
-0018381570 00000 n 
-0018382009 00000 n 
-0018382057 00000 n 
-0018386317 00000 n 
-0018386847 00000 n 
-0018387042 00000 n 
-0018387227 00000 n 
-0018387421 00000 n 
-0018387619 00000 n 
-0018387814 00000 n 
-0018388000 00000 n 
-0018398613 00000 n 
-0018399034 00000 n 
-0018399082 00000 n 
-0018399278 00000 n 
-0018399500 00000 n 
-0018399717 00000 n 
-0018399933 00000 n 
-0018400166 00000 n 
-0018400214 00000 n 
-0018400262 00000 n 
-0018400310 00000 n 
-0018400542 00000 n 
-0018400777 00000 n 
-0018400825 00000 n 
-0018400873 00000 n 
-0018414996 00000 n 
-0018415383 00000 n 
-0018415432 00000 n 
-0018415481 00000 n 
-0018415530 00000 n 
-0018423684 00000 n 
-0018424045 00000 n 
-0018424094 00000 n 
-0018424143 00000 n 
-0018424192 00000 n 
-0018424241 00000 n 
-0018424290 00000 n 
-0018436512 00000 n 
-0018436899 00000 n 
-0018436948 00000 n 
-0018437549 00000 n 
-0018437897 00000 n 
-0018437945 00000 n 
-0018450397 00000 n 
-0018450760 00000 n 
-0018450808 00000 n 
-0018450856 00000 n 
-0018450904 00000 n 
-0018450952 00000 n 
-0018450999 00000 n 
-0018466056 00000 n 
-0018466419 00000 n 
-0018466467 00000 n 
-0018466515 00000 n 
-0018466563 00000 n 
-0018467222 00000 n 
-0018482347 00000 n 
-0018482682 00000 n 
-0018497787 00000 n 
-0018498150 00000 n 
-0018498198 00000 n 
-0018498246 00000 n 
-0018512224 00000 n 
-0018512587 00000 n 
-0018512635 00000 n 
-0018512683 00000 n 
-0018512731 00000 n 
-0018526032 00000 n 
-0018526395 00000 n 
-0018526443 00000 n 
-0018526491 00000 n 
-0018526539 00000 n 
-0018526587 00000 n 
-0018540491 00000 n 
-0018540854 00000 n 
-0018540902 00000 n 
-0018540950 00000 n 
-0018540998 00000 n 
-0018541046 00000 n 
-0018541094 00000 n 
-0018561566 00000 n 
-0018561929 00000 n 
-0018561977 00000 n 
-0018562025 00000 n 
-0018580482 00000 n 
-0018580845 00000 n 
-0018580893 00000 n 
-0018580941 00000 n 
-0018580989 00000 n 
-0018594706 00000 n 
-0018595054 00000 n 
-0018595102 00000 n 
-0018595150 00000 n 
-0018595198 00000 n 
-0018595246 00000 n 
-0018595294 00000 n 
-0018613903 00000 n 
-0018614266 00000 n 
-0018614314 00000 n 
-0018627886 00000 n 
-0018628249 00000 n 
-0018628297 00000 n 
-0018628345 00000 n 
-0018628393 00000 n 
-0018628441 00000 n 
-0018643462 00000 n 
-0018643825 00000 n 
-0018643873 00000 n 
-0018643921 00000 n 
-0018643969 00000 n 
-0018644017 00000 n 
-0018657951 00000 n 
-0018658314 00000 n 
-0018658362 00000 n 
-0018658410 00000 n 
-0018658458 00000 n 
-0018658506 00000 n 
-0018658554 00000 n 
-0018674736 00000 n 
-0018675099 00000 n 
-0018675147 00000 n 
-0018675195 00000 n 
-0018675243 00000 n 
-0018675919 00000 n 
-0018675967 00000 n 
-0018676015 00000 n 
-0018676063 00000 n 
-0018691448 00000 n 
-0018691811 00000 n 
-0018691859 00000 n 
-0018691907 00000 n 
-0018691955 00000 n 
-0018692003 00000 n 
-0018706244 00000 n 
-0018706607 00000 n 
-0018706655 00000 n 
-0018706703 00000 n 
-0018706751 00000 n 
-0018706799 00000 n 
-0018725793 00000 n 
-0018726156 00000 n 
-0018726204 00000 n 
-0018726252 00000 n 
-0018726300 00000 n 
-0018736413 00000 n 
-0018736776 00000 n 
-0018736824 00000 n 
-0018736872 00000 n 
-0018736920 00000 n 
-0018736968 00000 n 
-0018737016 00000 n 
-0018737064 00000 n 
-0018737112 00000 n 
-0018749366 00000 n 
-0018749729 00000 n 
-0018749777 00000 n 
-0018749825 00000 n 
-0018750298 00000 n 
-0018750346 00000 n 
-0018750394 00000 n 
-0018765393 00000 n 
-0018765756 00000 n 
-0018765804 00000 n 
-0018765852 00000 n 
-0018765900 00000 n 
-0018773349 00000 n 
-0018773697 00000 n 
-0018773816 00000 n 
-0018773938 00000 n 
-0018774067 00000 n 
-0018774197 00000 n 
-0018774322 00000 n 
-0018774449 00000 n 
-0018774572 00000 n 
-0018774697 00000 n 
-0018774825 00000 n 
-0018774952 00000 n 
-0018775086 00000 n 
-0018775219 00000 n 
-0018775351 00000 n 
-0018775484 00000 n 
-0018775612 00000 n 
-0018775741 00000 n 
-0018775863 00000 n 
-0018775984 00000 n 
-0018776111 00000 n 
-0018776237 00000 n 
-0018776366 00000 n 
-0018776494 00000 n 
-0018776633 00000 n 
-0018776771 00000 n 
-0018776896 00000 n 
-0018777020 00000 n 
-0018777144 00000 n 
-0018777267 00000 n 
-0018777397 00000 n 
-0018777527 00000 n 
-0018777648 00000 n 
-0018777771 00000 n 
-0018777899 00000 n 
-0018778027 00000 n 
-0018778145 00000 n 
-0018778265 00000 n 
-0018778389 00000 n 
-0018778513 00000 n 
-0018778669 00000 n 
-0018778825 00000 n 
-0018778964 00000 n 
-0018779105 00000 n 
-0018779264 00000 n 
-0018779424 00000 n 
-0018779568 00000 n 
-0018779714 00000 n 
-0018779878 00000 n 
-0018780042 00000 n 
-0018780168 00000 n 
-0018780295 00000 n 
-0018780417 00000 n 
-0018780541 00000 n 
-0018780669 00000 n 
-0018780799 00000 n 
-0018780927 00000 n 
-0018781055 00000 n 
-0018781177 00000 n 
-0018781301 00000 n 
-0018781421 00000 n 
-0018781541 00000 n 
-0018781654 00000 n 
-0018781772 00000 n 
-0018781899 00000 n 
-0018782026 00000 n 
-0018782144 00000 n 
-0018782264 00000 n 
-0018782400 00000 n 
-0018782536 00000 n 
-0018782659 00000 n 
-0018782782 00000 n 
-0018782903 00000 n 
-0018783025 00000 n 
-0018783154 00000 n 
-0018783285 00000 n 
-0018783402 00000 n 
-0018783520 00000 n 
-0018783639 00000 n 
-0018783758 00000 n 
-0018783878 00000 n 
-0018783999 00000 n 
-0018784127 00000 n 
-0018784257 00000 n 
-0018784399 00000 n 
-0018784541 00000 n 
-0018784688 00000 n 
-0018784837 00000 n 
-0018784964 00000 n 
-0018785092 00000 n 
-0018785220 00000 n 
-0018785348 00000 n 
-0018785478 00000 n 
-0018785608 00000 n 
-0018785741 00000 n 
-0018785875 00000 n 
-0018786001 00000 n 
-0018786128 00000 n 
-0018786246 00000 n 
-0018786364 00000 n 
-0018786494 00000 n 
-0018786624 00000 n 
-0018786754 00000 n 
-0018786886 00000 n 
-0018787012 00000 n 
-0018787138 00000 n 
-0018787270 00000 n 
-0018787403 00000 n 
-0018787528 00000 n 
-0018787653 00000 n 
-0018787779 00000 n 
-0018787907 00000 n 
-0018788030 00000 n 
-0018788154 00000 n 
-0018788294 00000 n 
-0018788434 00000 n 
-0018788569 00000 n 
-0018788706 00000 n 
-0018788848 00000 n 
-0018788991 00000 n 
-0018789155 00000 n 
-0018789320 00000 n 
-0018789476 00000 n 
-0018789633 00000 n 
-0018789765 00000 n 
-0018789898 00000 n 
-0018790021 00000 n 
-0018790144 00000 n 
-0018790274 00000 n 
-0018790406 00000 n 
-0018790544 00000 n 
-0018790682 00000 n 
-0018790812 00000 n 
-0018790943 00000 n 
-0018791065 00000 n 
-0018791189 00000 n 
-0018791311 00000 n 
-0018791434 00000 n 
-0018791564 00000 n 
-0018791694 00000 n 
-0018791835 00000 n 
-0018791976 00000 n 
-0018792123 00000 n 
-0018792270 00000 n 
-0018792440 00000 n 
-0018792610 00000 n 
-0018792762 00000 n 
-0018792914 00000 n 
-0018793056 00000 n 
-0018793199 00000 n 
-0018793337 00000 n 
-0018793475 00000 n 
-0018793600 00000 n 
-0018793727 00000 n 
-0018793852 00000 n 
-0018793979 00000 n 
-0018794104 00000 n 
-0018794229 00000 n 
-0018794360 00000 n 
-0018794492 00000 n 
-0018794619 00000 n 
-0018794747 00000 n 
-0018794880 00000 n 
-0018795014 00000 n 
-0018795144 00000 n 
-0018795276 00000 n 
-0018795402 00000 n 
-0018795529 00000 n 
-0018795656 00000 n 
-0018795785 00000 n 
-0018795907 00000 n 
-0018796031 00000 n 
-0018796175 00000 n 
-0018796319 00000 n 
-0018796441 00000 n 
-0018796565 00000 n 
-0018796694 00000 n 
-0018796825 00000 n 
-0018796957 00000 n 
-0018797091 00000 n 
-0018797216 00000 n 
-0018797343 00000 n 
-0018797464 00000 n 
-0018797587 00000 n 
-0018797718 00000 n 
-0018797851 00000 n 
-0018797993 00000 n 
-0018798137 00000 n 
-0018798279 00000 n 
-0018798423 00000 n 
-0018798572 00000 n 
-0018798723 00000 n 
-0018798867 00000 n 
-0018799012 00000 n 
-0018799138 00000 n 
-0018799266 00000 n 
-0018799390 00000 n 
-0018799516 00000 n 
-0018799645 00000 n 
-0018799774 00000 n 
-0018799899 00000 n 
-0018800025 00000 n 
-0018800156 00000 n 
-0018800287 00000 n 
-0018800427 00000 n 
-0018800569 00000 n 
-0018800701 00000 n 
-0018800833 00000 n 
-0018800971 00000 n 
-0018801109 00000 n 
-0018801241 00000 n 
-0018801373 00000 n 
-0018801508 00000 n 
-0018801644 00000 n 
-0018801774 00000 n 
-0018801905 00000 n 
-0018802040 00000 n 
-0018802175 00000 n 
-0018802318 00000 n 
-0018802461 00000 n 
-0018802602 00000 n 
-0018802744 00000 n 
-0018802872 00000 n 
-0018803001 00000 n 
-0018803131 00000 n 
-0018803261 00000 n 
-0018803388 00000 n 
-0018803515 00000 n 
-0018803634 00000 n 
-0018803755 00000 n 
-0018803895 00000 n 
-0018804035 00000 n 
-0018804159 00000 n 
-0018804284 00000 n 
-0018804405 00000 n 
-0018804528 00000 n 
-0018804653 00000 n 
-0018804780 00000 n 
-0018804897 00000 n 
-0018805014 00000 n 
-0018805132 00000 n 
-0018805251 00000 n 
-0018805366 00000 n 
-0018805482 00000 n 
-0018805599 00000 n 
-0018805717 00000 n 
-0018805836 00000 n 
-0018805956 00000 n 
-0018806075 00000 n 
-0018806196 00000 n 
-0018806315 00000 n 
-0018806436 00000 n 
-0018806571 00000 n 
-0018806708 00000 n 
-0018806826 00000 n 
-0018806946 00000 n 
-0018807071 00000 n 
-0018807197 00000 n 
-0018807326 00000 n 
-0018807456 00000 n 
-0018807579 00000 n 
-0018807703 00000 n 
-0018807836 00000 n 
-0018807969 00000 n 
-0018808085 00000 n 
-0018808202 00000 n 
-0018808335 00000 n 
-0018808470 00000 n 
-0018808604 00000 n 
-0018808740 00000 n 
-0018808864 00000 n 
-0018808989 00000 n 
-0018809112 00000 n 
-0018809237 00000 n 
-0018809390 00000 n 
-0018809543 00000 n 
-0018809686 00000 n 
-0018809830 00000 n 
-0018809955 00000 n 
-0018810081 00000 n 
-0018810203 00000 n 
-0018810325 00000 n 
-0018810451 00000 n 
-0018810578 00000 n 
-0018810695 00000 n 
-0018810813 00000 n 
-0018810947 00000 n 
-0018811081 00000 n 
-0018811210 00000 n 
-0018811339 00000 n 
-0018811463 00000 n 
-0018811589 00000 n 
-0018811716 00000 n 
-0018811843 00000 n 
-0018811968 00000 n 
-0018812095 00000 n 
-0018812221 00000 n 
-0018812348 00000 n 
-0018812475 00000 n 
-0018812603 00000 n 
-0018812726 00000 n 
-0018812850 00000 n 
-0018812971 00000 n 
-0018813094 00000 n 
-0018813229 00000 n 
-0018813365 00000 n 
-0018813493 00000 n 
-0018813622 00000 n 
-0018813742 00000 n 
-0018813865 00000 n 
-0018813992 00000 n 
-0018814119 00000 n 
-0018814247 00000 n 
-0018814377 00000 n 
-0018814495 00000 n 
-0018814615 00000 n 
-0018814730 00000 n 
-0018814847 00000 n 
-0018814964 00000 n 
-0018815083 00000 n 
-0018815201 00000 n 
-0018815321 00000 n 
-0018815449 00000 n 
-0018815577 00000 n 
-0018815702 00000 n 
-0018815828 00000 n 
-0018815959 00000 n 
-0018816091 00000 n 
-0018816219 00000 n 
-0018816347 00000 n 
-0018816473 00000 n 
-0018816602 00000 n 
-0018816732 00000 n 
-0018816864 00000 n 
-0018816993 00000 n 
-0018817124 00000 n 
-0018817253 00000 n 
-0018817383 00000 n 
-0018817507 00000 n 
-0018817632 00000 n 
-0018817759 00000 n 
-0018817888 00000 n 
-0018818020 00000 n 
-0018818152 00000 n 
-0018818276 00000 n 
-0018818402 00000 n 
-0018818532 00000 n 
-0018818663 00000 n 
-0018818790 00000 n 
-0018818919 00000 n 
-0018819047 00000 n 
-0018819175 00000 n 
-0018819306 00000 n 
-0018819438 00000 n 
-0018819567 00000 n 
-0018819696 00000 n 
-0018819843 00000 n 
-0018819990 00000 n 
-0018820114 00000 n 
-0018820239 00000 n 
-0018820364 00000 n 
-0018820490 00000 n 
-0018820624 00000 n 
-0018820759 00000 n 
-0018820890 00000 n 
-0018821023 00000 n 
-0018821157 00000 n 
-0018821293 00000 n 
-0018821415 00000 n 
-0018821537 00000 n 
-0018821657 00000 n 
-0018821777 00000 n 
-0018821904 00000 n 
-0018822032 00000 n 
-0018822160 00000 n 
-0018822290 00000 n 
-0018822417 00000 n 
-0018822545 00000 n 
-0018822672 00000 n 
-0018822801 00000 n 
-0018822933 00000 n 
-0018823067 00000 n 
-0018823228 00000 n 
-0018823389 00000 n 
-0018823512 00000 n 
-0018823637 00000 n 
-0018823763 00000 n 
-0018823891 00000 n 
-0018824021 00000 n 
-0018824151 00000 n 
-0018824279 00000 n 
-0018824407 00000 n 
-0018824533 00000 n 
-0018824660 00000 n 
-0018824787 00000 n 
-0018824914 00000 n 
-0018825034 00000 n 
-0018825156 00000 n 
-0018825280 00000 n 
-0018825405 00000 n 
-0018825538 00000 n 
-0018825671 00000 n 
-0018825792 00000 n 
-0018825914 00000 n 
-0018826041 00000 n 
-0018826170 00000 n 
-0018826289 00000 n 
-0018826409 00000 n 
-0018826526 00000 n 
-0018826645 00000 n 
-0018826764 00000 n 
-0018826884 00000 n 
-0018827006 00000 n 
-0018827130 00000 n 
-0018827260 00000 n 
-0018827390 00000 n 
-0018827529 00000 n 
-0018827670 00000 n 
-0018827798 00000 n 
-0018827926 00000 n 
-0018828049 00000 n 
-0018828219 00000 n 
-0018828344 00000 n 
-0018828468 00000 n 
-0018828594 00000 n 
-0018828720 00000 n 
-0018828844 00000 n 
-0018828969 00000 n 
-0018829094 00000 n 
-0018829219 00000 n 
-0018829337 00000 n 
-0018829457 00000 n 
-0018829577 00000 n 
-0018829699 00000 n 
-0018829820 00000 n 
-0018829941 00000 n 
-0018830102 00000 n 
-0018830263 00000 n 
-0018830384 00000 n 
-0018830507 00000 n 
-0018830631 00000 n 
-0018830756 00000 n 
-0018830874 00000 n 
-0018831072 00000 n 
-0018831194 00000 n 
-0018831312 00000 n 
-0018831436 00000 n 
-0018831561 00000 n 
-0018831687 00000 n 
-0018831815 00000 n 
-0018831944 00000 n 
-0018832076 00000 n 
-0018832196 00000 n 
-0018832317 00000 n 
-0018832451 00000 n 
-0018832586 00000 n 
-0018832706 00000 n 
-0018832828 00000 n 
-0018832956 00000 n 
-0018833086 00000 n 
-0018833210 00000 n 
-0018833335 00000 n 
-0018833453 00000 n 
-0018833572 00000 n 
-0018833699 00000 n 
-0018833826 00000 n 
-0018833951 00000 n 
-0018834076 00000 n 
-0018834207 00000 n 
-0018834339 00000 n 
-0018834456 00000 n 
-0018834575 00000 n 
-0018834695 00000 n 
-0018834817 00000 n 
-0018834951 00000 n 
-0018835086 00000 n 
-0018835210 00000 n 
-0018835336 00000 n 
-0018835458 00000 n 
-0018835580 00000 n 
-0018835704 00000 n 
-0018835758 00000 n 
-0018835882 00000 n 
-0018836030 00000 n 
-0018836178 00000 n 
-0018836305 00000 n 
-0018836432 00000 n 
-0018836573 00000 n 
-0018836714 00000 n 
-0018836834 00000 n 
-0018836956 00000 n 
-0018837076 00000 n 
-0018837198 00000 n 
-0018837327 00000 n 
-0018837457 00000 n 
-0018837594 00000 n 
-0018837732 00000 n 
-0018837850 00000 n 
-0018837970 00000 n 
-0018838094 00000 n 
-0018838219 00000 n 
-0018838339 00000 n 
-0018838461 00000 n 
-0018838583 00000 n 
-0018838706 00000 n 
-0018838827 00000 n 
-0018838949 00000 n 
-0018839073 00000 n 
-0018839198 00000 n 
-0018839318 00000 n 
-0018839440 00000 n 
-0018839572 00000 n 
-0018839704 00000 n 
-0018839828 00000 n 
-0018839953 00000 n 
-0018840093 00000 n 
-0018840233 00000 n 
-0018840353 00000 n 
-0018840475 00000 n 
-0018840611 00000 n 
-0018840747 00000 n 
-0018840867 00000 n 
-0018840989 00000 n 
-0018841113 00000 n 
-0018841238 00000 n 
-0018841359 00000 n 
-0018841482 00000 n 
-0018841633 00000 n 
-0018841786 00000 n 
-0018841904 00000 n 
-0018842022 00000 n 
-0018842156 00000 n 
-0018842290 00000 n 
-0018842414 00000 n 
-0018842466 00000 n 
-0018842818 00000 n 
-0018842944 00000 n 
-0018843061 00000 n 
-0018843179 00000 n 
-0018843298 00000 n 
-0018843417 00000 n 
-0018843545 00000 n 
-0018843674 00000 n 
-0018843797 00000 n 
-0018843922 00000 n 
-0018844048 00000 n 
-0018844176 00000 n 
-0018844294 00000 n 
-0018844412 00000 n 
-0018844529 00000 n 
-0018844648 00000 n 
-0018844770 00000 n 
-0018844894 00000 n 
-0018845053 00000 n 
-0018845212 00000 n 
-0018845356 00000 n 
-0018845501 00000 n 
-0018845583 00000 n 
-0018845811 00000 n 
-0018845971 00000 n 
-0018846127 00000 n 
-0018846346 00000 n 
-0018846551 00000 n 
-0018846828 00000 n 
-0018847092 00000 n 
-0018847326 00000 n 
-0018847575 00000 n 
-0018847920 00000 n 
-0018848253 00000 n 
-0018848510 00000 n 
-0018848771 00000 n 
-0018849056 00000 n 
-0018849302 00000 n 
-0018849498 00000 n 
-0018849812 00000 n 
-0018850021 00000 n 
-0018850235 00000 n 
-0018850483 00000 n 
-0018850721 00000 n 
-0018851062 00000 n 
-0018851339 00000 n 
-0018851696 00000 n 
-0018851997 00000 n 
-0018852370 00000 n 
-0018852580 00000 n 
-0018852781 00000 n 
-0018853003 00000 n 
-0018853232 00000 n 
-0018853445 00000 n 
-0018853642 00000 n 
-0018853831 00000 n 
-0018854060 00000 n 
-0018854257 00000 n 
-0018854518 00000 n 
-0018854728 00000 n 
-0018854946 00000 n 
-0018855184 00000 n 
-0018855382 00000 n 
-0018855561 00000 n 
-0018855814 00000 n 
-0018856037 00000 n 
-0018856308 00000 n 
-0018856606 00000 n 
-0018856897 00000 n 
-0018857127 00000 n 
-0018857377 00000 n 
-0018857631 00000 n 
-0018857829 00000 n 
-0018858079 00000 n 
-0018858341 00000 n 
-0018858691 00000 n 
-0018858913 00000 n 
-0018859195 00000 n 
-0018859569 00000 n 
-0018859784 00000 n 
-0018860022 00000 n 
-0018860325 00000 n 
-0018860591 00000 n 
-0018860881 00000 n 
-0018861259 00000 n 
-0018861605 00000 n 
-0018861855 00000 n 
-0018862105 00000 n 
-0018862379 00000 n 
-0018862745 00000 n 
-0018863007 00000 n 
-0018863206 00000 n 
-0018863451 00000 n 
-0018863674 00000 n 
-0018863996 00000 n 
-0018864310 00000 n 
-0018864716 00000 n 
-0018865042 00000 n 
-0018865332 00000 n 
-0018865615 00000 n 
-0018865825 00000 n 
-0018866020 00000 n 
-0018866254 00000 n 
-0018866456 00000 n 
-0018866722 00000 n 
-0018866924 00000 n 
-0018867150 00000 n 
-0018867356 00000 n 
-0018867582 00000 n 
-0018867776 00000 n 
-0018868114 00000 n 
-0018868428 00000 n 
-0018868663 00000 n 
-0018868904 00000 n 
-0018869099 00000 n 
-0018869294 00000 n 
-0018869599 00000 n 
-0018869794 00000 n 
-0018870040 00000 n 
-0018870378 00000 n 
-0018870613 00000 n 
-0018870847 00000 n 
-0018871042 00000 n 
-0018871264 00000 n 
-0018871474 00000 n 
-0018871772 00000 n 
-0018872058 00000 n 
-0018872360 00000 n 
-0018872610 00000 n 
-0018872844 00000 n 
-0018873246 00000 n 
-0018873516 00000 n 
-0018873898 00000 n 
-0018874200 00000 n 
-0018874446 00000 n 
-0018874789 00000 n 
-0018875042 00000 n 
-0018875245 00000 n 
-0018875447 00000 n 
-0018875714 00000 n 
-0018875943 00000 n 
-0018876127 00000 n 
-0018876392 00000 n 
-0018876575 00000 n 
-0018876781 00000 n 
-0018877063 00000 n 
-0018877405 00000 n 
-0018877607 00000 n 
-0018877798 00000 n 
-0018878079 00000 n 
-0018878291 00000 n 
-0018878512 00000 n 
-0018878723 00000 n 
-0018878965 00000 n 
-0018879183 00000 n 
-0018879426 00000 n 
-0018879687 00000 n 
-0018879934 00000 n 
-0018880200 00000 n 
-0018880462 00000 n 
-0018880676 00000 n 
-0018881010 00000 n 
-0018881293 00000 n 
-0018881579 00000 n 
-0018881810 00000 n 
-0018882020 00000 n 
-0018882218 00000 n 
-0018882480 00000 n 
-0018882698 00000 n 
-0018882932 00000 n 
-0018883202 00000 n 
-0018883448 00000 n 
-0018883702 00000 n 
-0018883960 00000 n 
-0018884158 00000 n 
-0018884380 00000 n 
-0018884686 00000 n 
-0018884901 00000 n 
-0018885126 00000 n 
-0018885333 00000 n 
-0018885567 00000 n 
-0018885769 00000 n 
-0018885959 00000 n 
-0018886146 00000 n 
-0018886476 00000 n 
-0018886715 00000 n 
-0018886913 00000 n 
-0018887131 00000 n 
-0018887333 00000 n 
-0018887539 00000 n 
-0018887757 00000 n 
-0018887971 00000 n 
-0018888181 00000 n 
-0018888411 00000 n 
-0018888617 00000 n 
-0018888835 00000 n 
-0018889057 00000 n 
-0018889363 00000 n 
-0018889601 00000 n 
-0018889915 00000 n 
-0018890145 00000 n 
-0018890415 00000 n 
-0018890725 00000 n 
-0018890932 00000 n 
-0018891193 00000 n 
-0018891392 00000 n 
-0018891626 00000 n 
-0018891901 00000 n 
-0018892203 00000 n 
-0018892470 00000 n 
-0018892720 00000 n 
-0018892962 00000 n 
-0018893196 00000 n 
-0018893442 00000 n 
-0018893700 00000 n 
-0018894066 00000 n 
-0018894296 00000 n 
-0018894538 00000 n 
-0018894916 00000 n 
-0018895298 00000 n 
-0018895620 00000 n 
-0018895850 00000 n 
-0018896116 00000 n 
-0018896366 00000 n 
-0018896605 00000 n 
-0018896911 00000 n 
-0018897142 00000 n 
-0018897424 00000 n 
-0018897622 00000 n 
-0018897888 00000 n 
-0018898158 00000 n 
-0018898452 00000 n 
-0018898710 00000 n 
-0018899036 00000 n 
-0018899318 00000 n 
-0018899520 00000 n 
-0018899767 00000 n 
-0018900052 00000 n 
-0018900239 00000 n 
-0018900449 00000 n 
-0018900655 00000 n 
-0018901006 00000 n 
-0018901235 00000 n 
-0018901419 00000 n 
-0018901732 00000 n 
-0018901939 00000 n 
-0018902173 00000 n 
-0018902423 00000 n 
-0018902629 00000 n 
-0018902903 00000 n 
-0018903113 00000 n 
-0018903355 00000 n 
-0018903562 00000 n 
-0018903823 00000 n 
-0018904030 00000 n 
-0018904252 00000 n 
-0018904502 00000 n 
-0018904692 00000 n 
-0018904902 00000 n 
-0018905164 00000 n 
-0018905390 00000 n 
-0018905577 00000 n 
-0018905774 00000 n 
-0018906073 00000 n 
-0018906391 00000 n 
-0018906666 00000 n 
-0018906863 00000 n 
-0018907066 00000 n 
-0018907308 00000 n 
-0018907559 00000 n 
-0018907740 00000 n 
-0018907939 00000 n 
-0018908141 00000 n 
-0018908332 00000 n 
-0018908521 00000 n 
-0018908720 00000 n 
-0018908907 00000 n 
-0018909144 00000 n 
-0018909343 00000 n 
-0018909625 00000 n 
-0018909812 00000 n 
-0018910069 00000 n 
-0018910256 00000 n 
-0018910455 00000 n 
-0018910634 00000 n 
-0018910913 00000 n 
-0018911103 00000 n 
-0018911365 00000 n 
-0018911719 00000 n 
-0018911953 00000 n 
-0018912147 00000 n 
-0018912373 00000 n 
-0018912667 00000 n 
-0018912897 00000 n 
-0018913235 00000 n 
-0018913481 00000 n 
-0018913747 00000 n 
-0018914101 00000 n 
-0018914388 00000 n 
-0018931372 00000 n 
-0018931418 00000 n 
-0018931693 00000 n 
-0018931968 00000 n 
-0018945142 00000 n 
-0018945358 00000 n 
-0018946714 00000 n 
-0018947632 00000 n 
-0018959359 00000 n 
-0018959580 00000 n 
-0018960936 00000 n 
-0018961853 00000 n 
-0018972751 00000 n 
-0018972977 00000 n 
-0018974333 00000 n 
-0018975251 00000 n 
-0018982137 00000 n 
-0018982352 00000 n 
-0018983708 00000 n 
-0018984625 00000 n 
-0018988911 00000 n 
-0018989127 00000 n 
-0018989470 00000 n 
-0018990389 00000 n 
-0018991668 00000 n 
-0018991892 00000 n 
-0018992212 00000 n 
-0018993351 00000 n 
-0019002870 00000 n 
-0019003100 00000 n 
-0019004456 00000 n 
-0019005373 00000 n 
-0019006648 00000 n 
-0019006874 00000 n 
-0019007190 00000 n 
-0019008329 00000 n 
-0019013191 00000 n 
-0019013403 00000 n 
-0019014759 00000 n 
-0019015675 00000 n 
-0019017760 00000 n 
-0019017975 00000 n 
-0019018301 00000 n 
-0019019219 00000 n 
-0019022703 00000 n 
-0019022917 00000 n 
-0019024273 00000 n 
-0019025189 00000 n 
-0019028887 00000 n 
-0019029108 00000 n 
-0019029424 00000 n 
-0019030341 00000 n 
-0019033896 00000 n 
-0019034122 00000 n 
-0019034426 00000 n 
+0016249024 00000 n 
+0016249139 00000 n 
+0016249270 00000 n 
+0016249318 00000 n 
+0016273175 00000 n 
+0016273536 00000 n 
+0016273585 00000 n 
+0016292223 00000 n 
+0016292571 00000 n 
+0016297695 00000 n 
+0016298043 00000 n 
+0016303542 00000 n 
+0016303946 00000 n 
+0016303994 00000 n 
+0016304188 00000 n 
+0016304368 00000 n 
+0016304601 00000 n 
+0016321509 00000 n 
+0016321897 00000 n 
+0016321945 00000 n 
+0016333057 00000 n 
+0016333418 00000 n 
+0016333466 00000 n 
+0016333514 00000 n 
+0016333562 00000 n 
+0016333610 00000 n 
+0016340952 00000 n 
+0016341345 00000 n 
+0016341393 00000 n 
+0016341629 00000 n 
+0016344431 00000 n 
+0016344792 00000 n 
+0016344840 00000 n 
+0016349897 00000 n 
+0016350258 00000 n 
+0016350306 00000 n 
+0016352007 00000 n 
+0016352355 00000 n 
+0016352403 00000 n 
+0016355531 00000 n 
+0016355879 00000 n 
+0016355927 00000 n 
+0016363398 00000 n 
+0016363759 00000 n 
+0016363807 00000 n 
+0016372272 00000 n 
+0016372646 00000 n 
+0016372694 00000 n 
+0016372742 00000 n 
+0016373227 00000 n 
+0016373275 00000 n 
+0016375604 00000 n 
+0016375980 00000 n 
+0016376028 00000 n 
+0016376246 00000 n 
+0016376480 00000 n 
+0016378811 00000 n 
+0016379172 00000 n 
+0016379220 00000 n 
+0016390547 00000 n 
+0016390958 00000 n 
+0016391006 00000 n 
+0016391203 00000 n 
+0016391400 00000 n 
+0016391521 00000 n 
+0016397856 00000 n 
+0016398217 00000 n 
+0016398265 00000 n 
+0016447845 00000 n 
+0016448219 00000 n 
+0016448267 00000 n 
+0016448315 00000 n 
+0016490993 00000 n 
+0016491341 00000 n 
+0016493236 00000 n 
+0016493584 00000 n 
+0016493632 00000 n 
+0016494638 00000 n 
+0016494986 00000 n 
+0016495034 00000 n 
+0016501201 00000 n 
+0016501562 00000 n 
+0016501610 00000 n 
+0016501658 00000 n 
+0016501706 00000 n 
+0016503964 00000 n 
+0016504312 00000 n 
+0016504360 00000 n 
+0016504408 00000 n 
+0016504456 00000 n 
+0016504504 00000 n 
+0016504552 00000 n 
+0016528204 00000 n 
+0016528593 00000 n 
+0016528641 00000 n 
+0016528836 00000 n 
+0016529060 00000 n 
+0016529108 00000 n 
+0016548407 00000 n 
+0016548813 00000 n 
+0016548861 00000 n 
+0016548917 00000 n 
+0016549064 00000 n 
+0016567726 00000 n 
+0016568132 00000 n 
+0016568357 00000 n 
+0016582423 00000 n 
+0016582843 00000 n 
+0016582891 00000 n 
+0016583097 00000 n 
+0016583304 00000 n 
+0016583533 00000 n 
+0016583764 00000 n 
+0016603986 00000 n 
+0016604388 00000 n 
+0016604436 00000 n 
+0016604633 00000 n 
+0016604829 00000 n 
+0016604877 00000 n 
+0016628125 00000 n 
+0016628518 00000 n 
+0016628566 00000 n 
+0016628811 00000 n 
+0016660350 00000 n 
+0016660724 00000 n 
+0016660772 00000 n 
+0016680091 00000 n 
+0016680452 00000 n 
+0016741879 00000 n 
+0016742240 00000 n 
+0016742288 00000 n 
+0016742336 00000 n 
+0016797108 00000 n 
+0016797469 00000 n 
+0016797517 00000 n 
+0016798130 00000 n 
+0016798178 00000 n 
+0016798226 00000 n 
+0016799882 00000 n 
+0016800263 00000 n 
+0016800311 00000 n 
+0016800509 00000 n 
+0016800557 00000 n 
+0016813188 00000 n 
+0016813603 00000 n 
+0016813651 00000 n 
+0016813699 00000 n 
+0016813922 00000 n 
+0016813970 00000 n 
+0016814167 00000 n 
+0016818973 00000 n 
+0016819334 00000 n 
+0016819722 00000 n 
+0016820070 00000 n 
+0016820118 00000 n 
+0016829828 00000 n 
+0016830221 00000 n 
+0016830269 00000 n 
+0016830554 00000 n 
+0016830603 00000 n 
+0016830652 00000 n 
+0016830701 00000 n 
+0016870650 00000 n 
+0016871048 00000 n 
+0016871096 00000 n 
+0016871144 00000 n 
+0016871330 00000 n 
+0016871518 00000 n 
+0016871706 00000 n 
+0016874855 00000 n 
+0016875216 00000 n 
+0016875264 00000 n 
+0016875644 00000 n 
+0016875992 00000 n 
+0016876040 00000 n 
+0016877926 00000 n 
+0016878287 00000 n 
+0016878335 00000 n 
+0016899219 00000 n 
+0016899593 00000 n 
+0016899641 00000 n 
+0016899689 00000 n 
+0016899737 00000 n 
+0016900249 00000 n 
+0016925700 00000 n 
+0016926061 00000 n 
+0016926109 00000 n 
+0016926157 00000 n 
+0016967413 00000 n 
+0016967774 00000 n 
+0016967822 00000 n 
+0017005403 00000 n 
+0017005764 00000 n 
+0017005812 00000 n 
+0017005860 00000 n 
+0017034094 00000 n 
+0017034468 00000 n 
+0017034516 00000 n 
+0017034564 00000 n 
+0017034612 00000 n 
+0017047306 00000 n 
+0017047680 00000 n 
+0017047728 00000 n 
+0017047776 00000 n 
+0017047824 00000 n 
+0017048533 00000 n 
+0017048581 00000 n 
+0017048629 00000 n 
+0017056762 00000 n 
+0017057149 00000 n 
+0017060244 00000 n 
+0017060618 00000 n 
+0017060666 00000 n 
+0017060714 00000 n 
+0017062117 00000 n 
+0017062465 00000 n 
+0017062513 00000 n 
+0017062561 00000 n 
+0017062961 00000 n 
+0017063309 00000 n 
+0017063357 00000 n 
+0017067478 00000 n 
+0017067881 00000 n 
+0017067929 00000 n 
+0017068101 00000 n 
+0017068299 00000 n 
+0017068473 00000 n 
+0017068685 00000 n 
+0017068897 00000 n 
+0017077220 00000 n 
+0017077653 00000 n 
+0017077701 00000 n 
+0017077749 00000 n 
+0017077965 00000 n 
+0017078267 00000 n 
+0017078315 00000 n 
+0017078509 00000 n 
+0017078767 00000 n 
+0017079189 00000 n 
+0017079537 00000 n 
+0017079585 00000 n 
+0017087001 00000 n 
+0017087362 00000 n 
+0017087410 00000 n 
+0017093487 00000 n 
+0017093848 00000 n 
+0017093896 00000 n 
+0017093944 00000 n 
+0017093992 00000 n 
+0017094040 00000 n 
+0017119950 00000 n 
+0017120337 00000 n 
+0017120385 00000 n 
+0017120433 00000 n 
+0017120481 00000 n 
+0017141126 00000 n 
+0017141513 00000 n 
+0017141561 00000 n 
+0017142924 00000 n 
+0017143272 00000 n 
+0017143320 00000 n 
+0017166854 00000 n 
+0017167215 00000 n 
+0017167263 00000 n 
+0017189271 00000 n 
+0017189632 00000 n 
+0017189680 00000 n 
+0017190088 00000 n 
+0017190136 00000 n 
+0017190184 00000 n 
+0017190232 00000 n 
+0017206969 00000 n 
+0017207330 00000 n 
+0017207378 00000 n 
+0017207766 00000 n 
+0017208114 00000 n 
+0017208162 00000 n 
+0017220724 00000 n 
+0017221135 00000 n 
+0017221183 00000 n 
+0017222172 00000 n 
+0017222349 00000 n 
+0017222516 00000 n 
+0017222639 00000 n 
+0017222687 00000 n 
+0017222735 00000 n 
+0017242548 00000 n 
+0017242956 00000 n 
+0017243004 00000 n 
+0017243227 00000 n 
+0017265369 00000 n 
+0017265780 00000 n 
+0017265922 00000 n 
+0017265970 00000 n 
+0017266018 00000 n 
+0017266066 00000 n 
+0017266234 00000 n 
+0017266419 00000 n 
+0017296043 00000 n 
+0017296441 00000 n 
+0017296644 00000 n 
+0017296847 00000 n 
+0017297049 00000 n 
+0017323447 00000 n 
+0017323836 00000 n 
+0017324036 00000 n 
+0017324236 00000 n 
+0017350372 00000 n 
+0017350761 00000 n 
+0017350960 00000 n 
+0017351160 00000 n 
+0017359587 00000 n 
+0017359985 00000 n 
+0017360193 00000 n 
+0017360403 00000 n 
+0017360612 00000 n 
+0017384246 00000 n 
+0017384648 00000 n 
+0017384840 00000 n 
+0017385032 00000 n 
+0017403639 00000 n 
+0017404032 00000 n 
+0017404080 00000 n 
+0017404211 00000 n 
+0017404259 00000 n 
+0017414690 00000 n 
+0017415064 00000 n 
+0017415112 00000 n 
+0017415160 00000 n 
+0017429128 00000 n 
+0017429557 00000 n 
+0017429605 00000 n 
+0017429653 00000 n 
+0017429781 00000 n 
+0017429951 00000 n 
+0017430079 00000 n 
+0017430207 00000 n 
+0017430335 00000 n 
+0017430383 00000 n 
+0017441826 00000 n 
+0017442318 00000 n 
+0017442367 00000 n 
+0017442495 00000 n 
+0017442544 00000 n 
+0017442670 00000 n 
+0017442801 00000 n 
+0017442850 00000 n 
+0017442975 00000 n 
+0017443099 00000 n 
+0017443233 00000 n 
+0017443367 00000 n 
+0017443504 00000 n 
+0017443629 00000 n 
+0017443767 00000 n 
+0017443899 00000 n 
+0017443948 00000 n 
+0017444072 00000 n 
+0017449266 00000 n 
+0017449687 00000 n 
+0017449735 00000 n 
+0017449860 00000 n 
+0017449981 00000 n 
+0017450029 00000 n 
+0017450154 00000 n 
+0017450275 00000 n 
+0017450323 00000 n 
+0017450446 00000 n 
+0017450569 00000 n 
+0017450617 00000 n 
+0017450742 00000 n 
+0017459129 00000 n 
+0017459490 00000 n 
+0017459538 00000 n 
+0017459587 00000 n 
+0017459636 00000 n 
+0017480177 00000 n 
+0017480552 00000 n 
+0017515539 00000 n 
+0017515887 00000 n 
+0017553797 00000 n 
+0017554145 00000 n 
+0017580018 00000 n 
+0017580366 00000 n 
+0017622159 00000 n 
+0017622507 00000 n 
+0017625703 00000 n 
+0017626051 00000 n 
+0017638061 00000 n 
+0017638508 00000 n 
+0017638556 00000 n 
+0017638610 00000 n 
+0017638759 00000 n 
+0017638893 00000 n 
+0017639030 00000 n 
+0017639169 00000 n 
+0017639310 00000 n 
+0017639452 00000 n 
+0017639632 00000 n 
+0017652104 00000 n 
+0017652512 00000 n 
+0017652690 00000 n 
+0017652876 00000 n 
+0017653078 00000 n 
+0017653299 00000 n 
+0017653506 00000 n 
+0017653703 00000 n 
+0017653879 00000 n 
+0017659685 00000 n 
+0017660087 00000 n 
+0017700744 00000 n 
+0017728507 00000 n 
+0017736593 00000 n 
+0017736968 00000 n 
+0017783009 00000 n 
+0017801909 00000 n 
+0017802315 00000 n 
+0017802363 00000 n 
+0017802642 00000 n 
+0017802690 00000 n 
+0017842461 00000 n 
+0017842835 00000 n 
+0017887340 00000 n 
+0017887738 00000 n 
+0017887931 00000 n 
+0017888124 00000 n 
+0017888335 00000 n 
+0017914241 00000 n 
+0017914621 00000 n 
+0017914669 00000 n 
+0017914717 00000 n 
+0017914900 00000 n 
+0017944594 00000 n 
+0017945001 00000 n 
+0017945179 00000 n 
+0017945359 00000 n 
+0017945542 00000 n 
+0017945722 00000 n 
+0017989766 00000 n 
+0017990159 00000 n 
+0017990355 00000 n 
+0018022218 00000 n 
+0018022647 00000 n 
+0018022844 00000 n 
+0018022981 00000 n 
+0018023030 00000 n 
+0018023235 00000 n 
+0018023439 00000 n 
+0018023583 00000 n 
+0018023632 00000 n 
+0018043156 00000 n 
+0018043567 00000 n 
+0018043702 00000 n 
+0018043750 00000 n 
+0018043884 00000 n 
+0018044028 00000 n 
+0018044077 00000 n 
+0018044125 00000 n 
+0018089799 00000 n 
+0018090173 00000 n 
+0018090222 00000 n 
+0018090271 00000 n 
+0018135161 00000 n 
+0018135522 00000 n 
+0018165116 00000 n 
+0018165490 00000 n 
+0018165538 00000 n 
+0018166878 00000 n 
+0018167254 00000 n 
+0018167302 00000 n 
+0018167350 00000 n 
+0018167519 00000 n 
+0018167567 00000 n 
+0018167750 00000 n 
+0018170750 00000 n 
+0018171144 00000 n 
+0018171192 00000 n 
+0018171653 00000 n 
+0018171839 00000 n 
+0018172034 00000 n 
+0018172212 00000 n 
+0018172389 00000 n 
+0018179858 00000 n 
+0018180233 00000 n 
+0018180281 00000 n 
+0018180329 00000 n 
+0018180377 00000 n 
+0018181251 00000 n 
+0018207138 00000 n 
+0018211701 00000 n 
+0018211750 00000 n 
+0018211799 00000 n 
+0018211848 00000 n 
+0018212204 00000 n 
+0018219953 00000 n 
+0018220301 00000 n 
+0018220349 00000 n 
+0018267117 00000 n 
+0018274434 00000 n 
+0018274809 00000 n 
+0018274858 00000 n 
+0018285548 00000 n 
+0018285909 00000 n 
+0018285957 00000 n 
+0018286005 00000 n 
+0018299349 00000 n 
+0018299710 00000 n 
+0018299758 00000 n 
+0018314182 00000 n 
+0018314543 00000 n 
+0018314591 00000 n 
+0018314639 00000 n 
+0018314687 00000 n 
+0018315310 00000 n 
+0018333328 00000 n 
+0018333676 00000 n 
+0018333724 00000 n 
+0018334229 00000 n 
+0018346940 00000 n 
+0018347383 00000 n 
+0018347431 00000 n 
+0018347479 00000 n 
+0018347620 00000 n 
+0018347748 00000 n 
+0018347899 00000 n 
+0018348037 00000 n 
+0018348085 00000 n 
+0018348214 00000 n 
+0018348262 00000 n 
+0018348387 00000 n 
+0018348435 00000 n 
+0018348562 00000 n 
+0018348777 00000 n 
+0018359192 00000 n 
+0018359572 00000 n 
+0018359620 00000 n 
+0018359756 00000 n 
+0018366834 00000 n 
+0018367322 00000 n 
+0018367370 00000 n 
+0018367418 00000 n 
+0018367589 00000 n 
+0018367779 00000 n 
+0018367828 00000 n 
+0018368078 00000 n 
+0018368306 00000 n 
+0018368551 00000 n 
+0018368600 00000 n 
+0018368794 00000 n 
+0018369004 00000 n 
+0018369217 00000 n 
+0018369266 00000 n 
+0018369459 00000 n 
+0018369692 00000 n 
+0018369877 00000 n 
+0018369926 00000 n 
+0018370119 00000 n 
+0018370168 00000 n 
+0018370562 00000 n 
+0018370756 00000 n 
+0018372917 00000 n 
+0018373284 00000 n 
+0018373332 00000 n 
+0018373527 00000 n 
+0018376921 00000 n 
+0018377297 00000 n 
+0018377345 00000 n 
+0018377393 00000 n 
+0018377579 00000 n 
+0018377627 00000 n 
+0018377821 00000 n 
+0018381510 00000 n 
+0018381949 00000 n 
+0018381997 00000 n 
+0018386257 00000 n 
+0018386787 00000 n 
+0018386982 00000 n 
+0018387167 00000 n 
+0018387361 00000 n 
+0018387559 00000 n 
+0018387754 00000 n 
+0018387940 00000 n 
+0018398553 00000 n 
+0018398974 00000 n 
+0018399022 00000 n 
+0018399218 00000 n 
+0018399440 00000 n 
+0018399657 00000 n 
+0018399873 00000 n 
+0018400106 00000 n 
+0018400154 00000 n 
+0018400202 00000 n 
+0018400250 00000 n 
+0018400482 00000 n 
+0018400717 00000 n 
+0018400765 00000 n 
+0018400813 00000 n 
+0018414936 00000 n 
+0018415323 00000 n 
+0018415372 00000 n 
+0018415421 00000 n 
+0018415470 00000 n 
+0018423624 00000 n 
+0018423985 00000 n 
+0018424034 00000 n 
+0018424083 00000 n 
+0018424132 00000 n 
+0018424181 00000 n 
+0018424230 00000 n 
+0018436452 00000 n 
+0018436839 00000 n 
+0018436888 00000 n 
+0018437489 00000 n 
+0018437837 00000 n 
+0018437885 00000 n 
+0018450337 00000 n 
+0018450700 00000 n 
+0018450748 00000 n 
+0018450796 00000 n 
+0018450844 00000 n 
+0018450892 00000 n 
+0018450939 00000 n 
+0018465996 00000 n 
+0018466359 00000 n 
+0018466407 00000 n 
+0018466455 00000 n 
+0018466503 00000 n 
+0018467162 00000 n 
+0018482287 00000 n 
+0018482622 00000 n 
+0018497727 00000 n 
+0018498090 00000 n 
+0018498138 00000 n 
+0018498186 00000 n 
+0018512164 00000 n 
+0018512527 00000 n 
+0018512575 00000 n 
+0018512623 00000 n 
+0018512671 00000 n 
+0018525972 00000 n 
+0018526335 00000 n 
+0018526383 00000 n 
+0018526431 00000 n 
+0018526479 00000 n 
+0018526527 00000 n 
+0018540431 00000 n 
+0018540794 00000 n 
+0018540842 00000 n 
+0018540890 00000 n 
+0018540938 00000 n 
+0018540986 00000 n 
+0018541034 00000 n 
+0018561506 00000 n 
+0018561869 00000 n 
+0018561917 00000 n 
+0018561965 00000 n 
+0018580422 00000 n 
+0018580785 00000 n 
+0018580833 00000 n 
+0018580881 00000 n 
+0018580929 00000 n 
+0018594646 00000 n 
+0018594994 00000 n 
+0018595042 00000 n 
+0018595090 00000 n 
+0018595138 00000 n 
+0018595186 00000 n 
+0018595234 00000 n 
+0018613843 00000 n 
+0018614206 00000 n 
+0018614254 00000 n 
+0018627826 00000 n 
+0018628189 00000 n 
+0018628237 00000 n 
+0018628285 00000 n 
+0018628333 00000 n 
+0018628381 00000 n 
+0018643402 00000 n 
+0018643765 00000 n 
+0018643813 00000 n 
+0018643861 00000 n 
+0018643909 00000 n 
+0018643957 00000 n 
+0018657891 00000 n 
+0018658254 00000 n 
+0018658302 00000 n 
+0018658350 00000 n 
+0018658398 00000 n 
+0018658446 00000 n 
+0018658494 00000 n 
+0018674676 00000 n 
+0018675039 00000 n 
+0018675087 00000 n 
+0018675135 00000 n 
+0018675183 00000 n 
+0018675859 00000 n 
+0018675907 00000 n 
+0018675955 00000 n 
+0018676003 00000 n 
+0018691388 00000 n 
+0018691751 00000 n 
+0018691799 00000 n 
+0018691847 00000 n 
+0018691895 00000 n 
+0018691943 00000 n 
+0018706184 00000 n 
+0018706547 00000 n 
+0018706595 00000 n 
+0018706643 00000 n 
+0018706691 00000 n 
+0018706739 00000 n 
+0018725733 00000 n 
+0018726096 00000 n 
+0018726144 00000 n 
+0018726192 00000 n 
+0018726240 00000 n 
+0018736353 00000 n 
+0018736716 00000 n 
+0018736764 00000 n 
+0018736812 00000 n 
+0018736860 00000 n 
+0018736908 00000 n 
+0018736956 00000 n 
+0018737004 00000 n 
+0018737052 00000 n 
+0018749306 00000 n 
+0018749669 00000 n 
+0018749717 00000 n 
+0018749765 00000 n 
+0018750238 00000 n 
+0018750286 00000 n 
+0018750334 00000 n 
+0018765333 00000 n 
+0018765696 00000 n 
+0018765744 00000 n 
+0018765792 00000 n 
+0018765840 00000 n 
+0018773289 00000 n 
+0018773637 00000 n 
+0018773756 00000 n 
+0018773878 00000 n 
+0018774007 00000 n 
+0018774137 00000 n 
+0018774262 00000 n 
+0018774389 00000 n 
+0018774512 00000 n 
+0018774637 00000 n 
+0018774765 00000 n 
+0018774892 00000 n 
+0018775026 00000 n 
+0018775159 00000 n 
+0018775291 00000 n 
+0018775424 00000 n 
+0018775552 00000 n 
+0018775681 00000 n 
+0018775803 00000 n 
+0018775924 00000 n 
+0018776051 00000 n 
+0018776177 00000 n 
+0018776306 00000 n 
+0018776434 00000 n 
+0018776573 00000 n 
+0018776711 00000 n 
+0018776836 00000 n 
+0018776960 00000 n 
+0018777084 00000 n 
+0018777207 00000 n 
+0018777337 00000 n 
+0018777467 00000 n 
+0018777588 00000 n 
+0018777711 00000 n 
+0018777839 00000 n 
+0018777967 00000 n 
+0018778085 00000 n 
+0018778205 00000 n 
+0018778329 00000 n 
+0018778453 00000 n 
+0018778609 00000 n 
+0018778765 00000 n 
+0018778904 00000 n 
+0018779045 00000 n 
+0018779204 00000 n 
+0018779364 00000 n 
+0018779508 00000 n 
+0018779654 00000 n 
+0018779818 00000 n 
+0018779982 00000 n 
+0018780108 00000 n 
+0018780235 00000 n 
+0018780357 00000 n 
+0018780481 00000 n 
+0018780609 00000 n 
+0018780739 00000 n 
+0018780867 00000 n 
+0018780995 00000 n 
+0018781117 00000 n 
+0018781241 00000 n 
+0018781361 00000 n 
+0018781481 00000 n 
+0018781594 00000 n 
+0018781712 00000 n 
+0018781839 00000 n 
+0018781966 00000 n 
+0018782084 00000 n 
+0018782204 00000 n 
+0018782340 00000 n 
+0018782476 00000 n 
+0018782599 00000 n 
+0018782722 00000 n 
+0018782843 00000 n 
+0018782965 00000 n 
+0018783094 00000 n 
+0018783225 00000 n 
+0018783342 00000 n 
+0018783460 00000 n 
+0018783579 00000 n 
+0018783698 00000 n 
+0018783818 00000 n 
+0018783939 00000 n 
+0018784067 00000 n 
+0018784197 00000 n 
+0018784339 00000 n 
+0018784481 00000 n 
+0018784628 00000 n 
+0018784777 00000 n 
+0018784904 00000 n 
+0018785032 00000 n 
+0018785160 00000 n 
+0018785288 00000 n 
+0018785418 00000 n 
+0018785548 00000 n 
+0018785681 00000 n 
+0018785815 00000 n 
+0018785941 00000 n 
+0018786068 00000 n 
+0018786186 00000 n 
+0018786304 00000 n 
+0018786434 00000 n 
+0018786564 00000 n 
+0018786694 00000 n 
+0018786826 00000 n 
+0018786952 00000 n 
+0018787078 00000 n 
+0018787210 00000 n 
+0018787343 00000 n 
+0018787468 00000 n 
+0018787593 00000 n 
+0018787719 00000 n 
+0018787847 00000 n 
+0018787970 00000 n 
+0018788094 00000 n 
+0018788234 00000 n 
+0018788374 00000 n 
+0018788509 00000 n 
+0018788646 00000 n 
+0018788788 00000 n 
+0018788931 00000 n 
+0018789095 00000 n 
+0018789260 00000 n 
+0018789416 00000 n 
+0018789573 00000 n 
+0018789705 00000 n 
+0018789838 00000 n 
+0018789961 00000 n 
+0018790084 00000 n 
+0018790214 00000 n 
+0018790346 00000 n 
+0018790484 00000 n 
+0018790622 00000 n 
+0018790752 00000 n 
+0018790883 00000 n 
+0018791005 00000 n 
+0018791129 00000 n 
+0018791251 00000 n 
+0018791374 00000 n 
+0018791504 00000 n 
+0018791634 00000 n 
+0018791775 00000 n 
+0018791916 00000 n 
+0018792063 00000 n 
+0018792210 00000 n 
+0018792380 00000 n 
+0018792550 00000 n 
+0018792702 00000 n 
+0018792854 00000 n 
+0018792996 00000 n 
+0018793139 00000 n 
+0018793277 00000 n 
+0018793415 00000 n 
+0018793540 00000 n 
+0018793667 00000 n 
+0018793792 00000 n 
+0018793919 00000 n 
+0018794044 00000 n 
+0018794169 00000 n 
+0018794300 00000 n 
+0018794432 00000 n 
+0018794559 00000 n 
+0018794687 00000 n 
+0018794820 00000 n 
+0018794954 00000 n 
+0018795084 00000 n 
+0018795216 00000 n 
+0018795342 00000 n 
+0018795469 00000 n 
+0018795596 00000 n 
+0018795725 00000 n 
+0018795847 00000 n 
+0018795971 00000 n 
+0018796115 00000 n 
+0018796259 00000 n 
+0018796381 00000 n 
+0018796505 00000 n 
+0018796634 00000 n 
+0018796765 00000 n 
+0018796897 00000 n 
+0018797031 00000 n 
+0018797156 00000 n 
+0018797283 00000 n 
+0018797404 00000 n 
+0018797527 00000 n 
+0018797658 00000 n 
+0018797791 00000 n 
+0018797933 00000 n 
+0018798077 00000 n 
+0018798219 00000 n 
+0018798363 00000 n 
+0018798512 00000 n 
+0018798663 00000 n 
+0018798807 00000 n 
+0018798952 00000 n 
+0018799078 00000 n 
+0018799206 00000 n 
+0018799330 00000 n 
+0018799456 00000 n 
+0018799585 00000 n 
+0018799714 00000 n 
+0018799839 00000 n 
+0018799965 00000 n 
+0018800096 00000 n 
+0018800227 00000 n 
+0018800367 00000 n 
+0018800509 00000 n 
+0018800641 00000 n 
+0018800773 00000 n 
+0018800911 00000 n 
+0018801049 00000 n 
+0018801181 00000 n 
+0018801313 00000 n 
+0018801448 00000 n 
+0018801584 00000 n 
+0018801714 00000 n 
+0018801845 00000 n 
+0018801980 00000 n 
+0018802115 00000 n 
+0018802258 00000 n 
+0018802401 00000 n 
+0018802542 00000 n 
+0018802684 00000 n 
+0018802812 00000 n 
+0018802941 00000 n 
+0018803071 00000 n 
+0018803201 00000 n 
+0018803328 00000 n 
+0018803455 00000 n 
+0018803574 00000 n 
+0018803695 00000 n 
+0018803835 00000 n 
+0018803975 00000 n 
+0018804099 00000 n 
+0018804224 00000 n 
+0018804345 00000 n 
+0018804468 00000 n 
+0018804593 00000 n 
+0018804720 00000 n 
+0018804837 00000 n 
+0018804954 00000 n 
+0018805072 00000 n 
+0018805191 00000 n 
+0018805306 00000 n 
+0018805422 00000 n 
+0018805539 00000 n 
+0018805657 00000 n 
+0018805776 00000 n 
+0018805896 00000 n 
+0018806015 00000 n 
+0018806136 00000 n 
+0018806255 00000 n 
+0018806376 00000 n 
+0018806511 00000 n 
+0018806648 00000 n 
+0018806766 00000 n 
+0018806886 00000 n 
+0018807011 00000 n 
+0018807137 00000 n 
+0018807266 00000 n 
+0018807396 00000 n 
+0018807519 00000 n 
+0018807643 00000 n 
+0018807776 00000 n 
+0018807909 00000 n 
+0018808025 00000 n 
+0018808142 00000 n 
+0018808275 00000 n 
+0018808410 00000 n 
+0018808544 00000 n 
+0018808680 00000 n 
+0018808804 00000 n 
+0018808929 00000 n 
+0018809052 00000 n 
+0018809177 00000 n 
+0018809330 00000 n 
+0018809483 00000 n 
+0018809626 00000 n 
+0018809770 00000 n 
+0018809895 00000 n 
+0018810021 00000 n 
+0018810143 00000 n 
+0018810265 00000 n 
+0018810391 00000 n 
+0018810518 00000 n 
+0018810635 00000 n 
+0018810753 00000 n 
+0018810887 00000 n 
+0018811021 00000 n 
+0018811150 00000 n 
+0018811279 00000 n 
+0018811403 00000 n 
+0018811529 00000 n 
+0018811656 00000 n 
+0018811783 00000 n 
+0018811908 00000 n 
+0018812035 00000 n 
+0018812161 00000 n 
+0018812288 00000 n 
+0018812415 00000 n 
+0018812543 00000 n 
+0018812666 00000 n 
+0018812790 00000 n 
+0018812911 00000 n 
+0018813034 00000 n 
+0018813169 00000 n 
+0018813305 00000 n 
+0018813433 00000 n 
+0018813562 00000 n 
+0018813682 00000 n 
+0018813805 00000 n 
+0018813932 00000 n 
+0018814059 00000 n 
+0018814187 00000 n 
+0018814317 00000 n 
+0018814435 00000 n 
+0018814555 00000 n 
+0018814670 00000 n 
+0018814787 00000 n 
+0018814904 00000 n 
+0018815023 00000 n 
+0018815141 00000 n 
+0018815261 00000 n 
+0018815389 00000 n 
+0018815517 00000 n 
+0018815642 00000 n 
+0018815768 00000 n 
+0018815899 00000 n 
+0018816031 00000 n 
+0018816159 00000 n 
+0018816287 00000 n 
+0018816413 00000 n 
+0018816542 00000 n 
+0018816672 00000 n 
+0018816804 00000 n 
+0018816933 00000 n 
+0018817064 00000 n 
+0018817193 00000 n 
+0018817323 00000 n 
+0018817447 00000 n 
+0018817572 00000 n 
+0018817699 00000 n 
+0018817828 00000 n 
+0018817960 00000 n 
+0018818092 00000 n 
+0018818216 00000 n 
+0018818342 00000 n 
+0018818472 00000 n 
+0018818603 00000 n 
+0018818730 00000 n 
+0018818859 00000 n 
+0018818987 00000 n 
+0018819115 00000 n 
+0018819246 00000 n 
+0018819378 00000 n 
+0018819507 00000 n 
+0018819636 00000 n 
+0018819783 00000 n 
+0018819930 00000 n 
+0018820054 00000 n 
+0018820179 00000 n 
+0018820304 00000 n 
+0018820430 00000 n 
+0018820564 00000 n 
+0018820699 00000 n 
+0018820830 00000 n 
+0018820963 00000 n 
+0018821097 00000 n 
+0018821233 00000 n 
+0018821355 00000 n 
+0018821477 00000 n 
+0018821597 00000 n 
+0018821717 00000 n 
+0018821844 00000 n 
+0018821972 00000 n 
+0018822100 00000 n 
+0018822230 00000 n 
+0018822357 00000 n 
+0018822485 00000 n 
+0018822612 00000 n 
+0018822741 00000 n 
+0018822873 00000 n 
+0018823007 00000 n 
+0018823168 00000 n 
+0018823329 00000 n 
+0018823452 00000 n 
+0018823577 00000 n 
+0018823703 00000 n 
+0018823831 00000 n 
+0018823961 00000 n 
+0018824091 00000 n 
+0018824219 00000 n 
+0018824347 00000 n 
+0018824473 00000 n 
+0018824600 00000 n 
+0018824727 00000 n 
+0018824854 00000 n 
+0018824974 00000 n 
+0018825096 00000 n 
+0018825220 00000 n 
+0018825345 00000 n 
+0018825478 00000 n 
+0018825611 00000 n 
+0018825732 00000 n 
+0018825854 00000 n 
+0018825981 00000 n 
+0018826110 00000 n 
+0018826229 00000 n 
+0018826349 00000 n 
+0018826466 00000 n 
+0018826585 00000 n 
+0018826704 00000 n 
+0018826824 00000 n 
+0018826946 00000 n 
+0018827070 00000 n 
+0018827200 00000 n 
+0018827330 00000 n 
+0018827469 00000 n 
+0018827610 00000 n 
+0018827738 00000 n 
+0018827866 00000 n 
+0018827989 00000 n 
+0018828159 00000 n 
+0018828284 00000 n 
+0018828408 00000 n 
+0018828534 00000 n 
+0018828660 00000 n 
+0018828784 00000 n 
+0018828909 00000 n 
+0018829034 00000 n 
+0018829159 00000 n 
+0018829277 00000 n 
+0018829397 00000 n 
+0018829517 00000 n 
+0018829639 00000 n 
+0018829760 00000 n 
+0018829881 00000 n 
+0018830042 00000 n 
+0018830203 00000 n 
+0018830324 00000 n 
+0018830447 00000 n 
+0018830571 00000 n 
+0018830696 00000 n 
+0018830814 00000 n 
+0018831012 00000 n 
+0018831134 00000 n 
+0018831252 00000 n 
+0018831376 00000 n 
+0018831501 00000 n 
+0018831627 00000 n 
+0018831755 00000 n 
+0018831884 00000 n 
+0018832016 00000 n 
+0018832136 00000 n 
+0018832257 00000 n 
+0018832391 00000 n 
+0018832526 00000 n 
+0018832646 00000 n 
+0018832768 00000 n 
+0018832896 00000 n 
+0018833026 00000 n 
+0018833150 00000 n 
+0018833275 00000 n 
+0018833393 00000 n 
+0018833512 00000 n 
+0018833639 00000 n 
+0018833766 00000 n 
+0018833891 00000 n 
+0018834016 00000 n 
+0018834147 00000 n 
+0018834279 00000 n 
+0018834396 00000 n 
+0018834515 00000 n 
+0018834635 00000 n 
+0018834757 00000 n 
+0018834891 00000 n 
+0018835026 00000 n 
+0018835150 00000 n 
+0018835276 00000 n 
+0018835398 00000 n 
+0018835520 00000 n 
+0018835644 00000 n 
+0018835698 00000 n 
+0018835822 00000 n 
+0018835970 00000 n 
+0018836118 00000 n 
+0018836245 00000 n 
+0018836372 00000 n 
+0018836513 00000 n 
+0018836654 00000 n 
+0018836774 00000 n 
+0018836896 00000 n 
+0018837016 00000 n 
+0018837138 00000 n 
+0018837267 00000 n 
+0018837397 00000 n 
+0018837534 00000 n 
+0018837672 00000 n 
+0018837790 00000 n 
+0018837910 00000 n 
+0018838034 00000 n 
+0018838159 00000 n 
+0018838279 00000 n 
+0018838401 00000 n 
+0018838523 00000 n 
+0018838646 00000 n 
+0018838767 00000 n 
+0018838889 00000 n 
+0018839013 00000 n 
+0018839138 00000 n 
+0018839258 00000 n 
+0018839380 00000 n 
+0018839512 00000 n 
+0018839644 00000 n 
+0018839768 00000 n 
+0018839893 00000 n 
+0018840033 00000 n 
+0018840173 00000 n 
+0018840293 00000 n 
+0018840415 00000 n 
+0018840551 00000 n 
+0018840687 00000 n 
+0018840807 00000 n 
+0018840929 00000 n 
+0018841053 00000 n 
+0018841178 00000 n 
+0018841299 00000 n 
+0018841422 00000 n 
+0018841573 00000 n 
+0018841726 00000 n 
+0018841844 00000 n 
+0018841962 00000 n 
+0018842096 00000 n 
+0018842230 00000 n 
+0018842354 00000 n 
+0018842406 00000 n 
+0018842758 00000 n 
+0018842884 00000 n 
+0018843001 00000 n 
+0018843119 00000 n 
+0018843238 00000 n 
+0018843357 00000 n 
+0018843485 00000 n 
+0018843614 00000 n 
+0018843737 00000 n 
+0018843862 00000 n 
+0018843988 00000 n 
+0018844116 00000 n 
+0018844234 00000 n 
+0018844352 00000 n 
+0018844469 00000 n 
+0018844588 00000 n 
+0018844710 00000 n 
+0018844834 00000 n 
+0018844993 00000 n 
+0018845152 00000 n 
+0018845296 00000 n 
+0018845441 00000 n 
+0018845523 00000 n 
+0018845751 00000 n 
+0018845911 00000 n 
+0018846067 00000 n 
+0018846286 00000 n 
+0018846491 00000 n 
+0018846768 00000 n 
+0018847032 00000 n 
+0018847266 00000 n 
+0018847515 00000 n 
+0018847860 00000 n 
+0018848193 00000 n 
+0018848450 00000 n 
+0018848711 00000 n 
+0018848996 00000 n 
+0018849242 00000 n 
+0018849438 00000 n 
+0018849752 00000 n 
+0018849961 00000 n 
+0018850175 00000 n 
+0018850423 00000 n 
+0018850661 00000 n 
+0018851002 00000 n 
+0018851279 00000 n 
+0018851636 00000 n 
+0018851937 00000 n 
+0018852310 00000 n 
+0018852520 00000 n 
+0018852721 00000 n 
+0018852943 00000 n 
+0018853172 00000 n 
+0018853385 00000 n 
+0018853582 00000 n 
+0018853771 00000 n 
+0018854000 00000 n 
+0018854197 00000 n 
+0018854458 00000 n 
+0018854668 00000 n 
+0018854886 00000 n 
+0018855124 00000 n 
+0018855322 00000 n 
+0018855501 00000 n 
+0018855754 00000 n 
+0018855977 00000 n 
+0018856248 00000 n 
+0018856546 00000 n 
+0018856837 00000 n 
+0018857067 00000 n 
+0018857317 00000 n 
+0018857571 00000 n 
+0018857769 00000 n 
+0018858019 00000 n 
+0018858281 00000 n 
+0018858631 00000 n 
+0018858853 00000 n 
+0018859135 00000 n 
+0018859509 00000 n 
+0018859724 00000 n 
+0018859962 00000 n 
+0018860265 00000 n 
+0018860531 00000 n 
+0018860821 00000 n 
+0018861199 00000 n 
+0018861545 00000 n 
+0018861795 00000 n 
+0018862045 00000 n 
+0018862319 00000 n 
+0018862685 00000 n 
+0018862947 00000 n 
+0018863146 00000 n 
+0018863391 00000 n 
+0018863614 00000 n 
+0018863936 00000 n 
+0018864250 00000 n 
+0018864656 00000 n 
+0018864982 00000 n 
+0018865272 00000 n 
+0018865555 00000 n 
+0018865765 00000 n 
+0018865960 00000 n 
+0018866194 00000 n 
+0018866396 00000 n 
+0018866662 00000 n 
+0018866864 00000 n 
+0018867090 00000 n 
+0018867296 00000 n 
+0018867522 00000 n 
+0018867716 00000 n 
+0018868054 00000 n 
+0018868368 00000 n 
+0018868603 00000 n 
+0018868844 00000 n 
+0018869039 00000 n 
+0018869234 00000 n 
+0018869539 00000 n 
+0018869734 00000 n 
+0018869980 00000 n 
+0018870318 00000 n 
+0018870553 00000 n 
+0018870787 00000 n 
+0018870982 00000 n 
+0018871204 00000 n 
+0018871414 00000 n 
+0018871712 00000 n 
+0018871998 00000 n 
+0018872300 00000 n 
+0018872550 00000 n 
+0018872784 00000 n 
+0018873186 00000 n 
+0018873456 00000 n 
+0018873838 00000 n 
+0018874140 00000 n 
+0018874386 00000 n 
+0018874729 00000 n 
+0018874982 00000 n 
+0018875185 00000 n 
+0018875387 00000 n 
+0018875654 00000 n 
+0018875883 00000 n 
+0018876067 00000 n 
+0018876332 00000 n 
+0018876515 00000 n 
+0018876721 00000 n 
+0018877003 00000 n 
+0018877345 00000 n 
+0018877547 00000 n 
+0018877738 00000 n 
+0018878019 00000 n 
+0018878231 00000 n 
+0018878452 00000 n 
+0018878663 00000 n 
+0018878905 00000 n 
+0018879123 00000 n 
+0018879366 00000 n 
+0018879627 00000 n 
+0018879874 00000 n 
+0018880140 00000 n 
+0018880402 00000 n 
+0018880616 00000 n 
+0018880950 00000 n 
+0018881233 00000 n 
+0018881519 00000 n 
+0018881750 00000 n 
+0018881960 00000 n 
+0018882158 00000 n 
+0018882420 00000 n 
+0018882638 00000 n 
+0018882872 00000 n 
+0018883142 00000 n 
+0018883388 00000 n 
+0018883642 00000 n 
+0018883900 00000 n 
+0018884098 00000 n 
+0018884320 00000 n 
+0018884626 00000 n 
+0018884841 00000 n 
+0018885066 00000 n 
+0018885273 00000 n 
+0018885507 00000 n 
+0018885709 00000 n 
+0018885899 00000 n 
+0018886086 00000 n 
+0018886416 00000 n 
+0018886655 00000 n 
+0018886853 00000 n 
+0018887071 00000 n 
+0018887273 00000 n 
+0018887479 00000 n 
+0018887697 00000 n 
+0018887911 00000 n 
+0018888121 00000 n 
+0018888351 00000 n 
+0018888557 00000 n 
+0018888775 00000 n 
+0018888997 00000 n 
+0018889303 00000 n 
+0018889541 00000 n 
+0018889855 00000 n 
+0018890085 00000 n 
+0018890355 00000 n 
+0018890665 00000 n 
+0018890872 00000 n 
+0018891133 00000 n 
+0018891332 00000 n 
+0018891566 00000 n 
+0018891841 00000 n 
+0018892143 00000 n 
+0018892410 00000 n 
+0018892660 00000 n 
+0018892902 00000 n 
+0018893136 00000 n 
+0018893382 00000 n 
+0018893640 00000 n 
+0018894006 00000 n 
+0018894236 00000 n 
+0018894478 00000 n 
+0018894856 00000 n 
+0018895238 00000 n 
+0018895560 00000 n 
+0018895790 00000 n 
+0018896056 00000 n 
+0018896306 00000 n 
+0018896545 00000 n 
+0018896851 00000 n 
+0018897082 00000 n 
+0018897364 00000 n 
+0018897562 00000 n 
+0018897828 00000 n 
+0018898098 00000 n 
+0018898392 00000 n 
+0018898650 00000 n 
+0018898976 00000 n 
+0018899258 00000 n 
+0018899460 00000 n 
+0018899707 00000 n 
+0018899992 00000 n 
+0018900179 00000 n 
+0018900389 00000 n 
+0018900595 00000 n 
+0018900946 00000 n 
+0018901175 00000 n 
+0018901359 00000 n 
+0018901672 00000 n 
+0018901879 00000 n 
+0018902113 00000 n 
+0018902363 00000 n 
+0018902569 00000 n 
+0018902843 00000 n 
+0018903053 00000 n 
+0018903295 00000 n 
+0018903502 00000 n 
+0018903763 00000 n 
+0018903970 00000 n 
+0018904192 00000 n 
+0018904442 00000 n 
+0018904632 00000 n 
+0018904842 00000 n 
+0018905104 00000 n 
+0018905330 00000 n 
+0018905517 00000 n 
+0018905714 00000 n 
+0018906013 00000 n 
+0018906331 00000 n 
+0018906606 00000 n 
+0018906803 00000 n 
+0018907006 00000 n 
+0018907248 00000 n 
+0018907499 00000 n 
+0018907680 00000 n 
+0018907879 00000 n 
+0018908081 00000 n 
+0018908272 00000 n 
+0018908461 00000 n 
+0018908660 00000 n 
+0018908847 00000 n 
+0018909084 00000 n 
+0018909283 00000 n 
+0018909565 00000 n 
+0018909752 00000 n 
+0018910009 00000 n 
+0018910196 00000 n 
+0018910395 00000 n 
+0018910574 00000 n 
+0018910853 00000 n 
+0018911043 00000 n 
+0018911305 00000 n 
+0018911659 00000 n 
+0018911893 00000 n 
+0018912087 00000 n 
+0018912313 00000 n 
+0018912607 00000 n 
+0018912837 00000 n 
+0018913175 00000 n 
+0018913421 00000 n 
+0018913687 00000 n 
+0018914041 00000 n 
+0018914328 00000 n 
+0018931312 00000 n 
+0018931358 00000 n 
+0018931633 00000 n 
+0018931908 00000 n 
+0018945082 00000 n 
+0018945298 00000 n 
+0018946654 00000 n 
+0018947572 00000 n 
+0018959299 00000 n 
+0018959520 00000 n 
+0018960876 00000 n 
+0018961793 00000 n 
+0018972691 00000 n 
+0018972917 00000 n 
+0018974273 00000 n 
+0018975191 00000 n 
+0018982077 00000 n 
+0018982292 00000 n 
+0018983648 00000 n 
+0018984565 00000 n 
+0018988851 00000 n 
+0018989067 00000 n 
+0018989410 00000 n 
+0018990329 00000 n 
+0018991608 00000 n 
+0018991832 00000 n 
+0018992152 00000 n 
+0018993291 00000 n 
+0019002810 00000 n 
+0019003040 00000 n 
+0019004396 00000 n 
+0019005313 00000 n 
+0019006588 00000 n 
+0019006814 00000 n 
+0019007130 00000 n 
+0019008269 00000 n 
+0019013131 00000 n 
+0019013343 00000 n 
+0019014699 00000 n 
+0019015615 00000 n 
+0019017700 00000 n 
+0019017915 00000 n 
+0019018241 00000 n 
+0019019159 00000 n 
+0019022643 00000 n 
+0019022857 00000 n 
+0019024213 00000 n 
+0019025129 00000 n 
+0019028827 00000 n 
+0019029048 00000 n 
+0019029364 00000 n 
+0019030281 00000 n 
+0019033836 00000 n 
+0019034062 00000 n 
+0019034366 00000 n 
 trailer
 << /Size 6067
 /Root 2 0 R
 /Info 1 0 R
 >>
 startxref
-19035342
+19035282
 %%EOF
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 7ac1386c676..8b2e7aa9597 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -41933,6 +41933,8 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>
 &nbsp;</dd>
+<dt>isPartialTimeRange() - Method in class org.apache.hadoop.hbase.rest.RowSpec</dt>
+<dd>&nbsp;</dd>
 <dt>isPBMagicPrefix(byte[]) - Static method in class org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil</dt>
 <dd>
 <div class="block">Returns True if passed <code>bytes</code> has <code>ProtobufMagic.PB_MAGIC</code> for a prefix.</div>
@@ -54175,6 +54177,8 @@ service.</div>
              VisibilityController still needs this, need to change the logic there first.</div>
 </div>
 </dd>
+<dt>preProcessError(Throwable) - Method in class org.apache.hadoop.hbase.client.AsyncAdminRequestRetryingCaller</dt>
+<dd>&nbsp;</dd>
 <dt>preProcessError(Throwable) - Method in class org.apache.hadoop.hbase.client.AsyncRegionReplicationRetryingCaller</dt>
 <dd>&nbsp;</dd>
 <dt>preProcessError(Throwable) - Method in class org.apache.hadoop.hbase.client.AsyncRpcRetryingCaller</dt>
diff --git a/apidocs/member-search-index.js b/apidocs/member-search-index.js
index 37a78c2da5f..2466138a1d7 100644
--- a/apidocs/member-search-index.js
+++ b/apidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
index bf8365da5d4..32789d66210 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
@@ -35,55 +35,71 @@
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
 <span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
 <span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.CompletableFuture;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.NotServingRegionException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.yetus.audience.InterfaceAudience;</span>
 <span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
 <span class="source-line-no">032</span><span id="line-32"></span>
-<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
-<span class="source-line-no">034</span><span id="line-34">public class AsyncAdminRequestRetryingCaller&lt;T&gt; extends AsyncRpcRetryingCaller&lt;T&gt; {</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36">  @FunctionalInterface</span>
-<span class="source-line-no">037</span><span id="line-37">  public interface Callable&lt;T&gt; {</span>
-<span class="source-line-no">038</span><span id="line-38">    CompletableFuture&lt;T&gt; call(HBaseRpcController controller, AdminService.Interface stub);</span>
-<span class="source-line-no">039</span><span id="line-39">  }</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41">  private final Callable&lt;T&gt; callable;</span>
-<span class="source-line-no">042</span><span id="line-42">  private ServerName serverName;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44">  public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
-<span class="source-line-no">045</span><span id="line-45">    long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
-<span class="source-line-no">046</span><span id="line-46">    long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable&lt;T&gt; callable) {</span>
-<span class="source-line-no">047</span><span id="line-47">    super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
-<span class="source-line-no">048</span><span id="line-48">      operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
-<span class="source-line-no">049</span><span id="line-49">    this.serverName = serverName;</span>
-<span class="source-line-no">050</span><span id="line-50">    this.callable = callable;</span>
-<span class="source-line-no">051</span><span id="line-51">  }</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53">  @Override</span>
-<span class="source-line-no">054</span><span id="line-54">  protected void doCall() {</span>
-<span class="source-line-no">055</span><span id="line-55">    AdminService.Interface adminStub;</span>
-<span class="source-line-no">056</span><span id="line-56">    try {</span>
-<span class="source-line-no">057</span><span id="line-57">      adminStub = this.conn.getAdminStub(serverName);</span>
-<span class="source-line-no">058</span><span id="line-58">    } catch (IOException e) {</span>
-<span class="source-line-no">059</span><span id="line-59">      onError(e, () -&gt; "Get async admin stub to " + serverName + " failed", err -&gt; {</span>
-<span class="source-line-no">060</span><span id="line-60">      });</span>
-<span class="source-line-no">061</span><span id="line-61">      return;</span>
-<span class="source-line-no">062</span><span id="line-62">    }</span>
-<span class="source-line-no">063</span><span id="line-63">    resetCallTimeout();</span>
-<span class="source-line-no">064</span><span id="line-64">    addListener(callable.call(controller, adminStub), (result, error) -&gt; {</span>
-<span class="source-line-no">065</span><span id="line-65">      if (error != null) {</span>
-<span class="source-line-no">066</span><span id="line-66">        onError(error, () -&gt; "Call to admin stub failed", err -&gt; {</span>
-<span class="source-line-no">067</span><span id="line-67">        });</span>
-<span class="source-line-no">068</span><span id="line-68">        return;</span>
-<span class="source-line-no">069</span><span id="line-69">      }</span>
-<span class="source-line-no">070</span><span id="line-70">      future.complete(result);</span>
-<span class="source-line-no">071</span><span id="line-71">    });</span>
-<span class="source-line-no">072</span><span id="line-72">  }</span>
-<span class="source-line-no">073</span><span id="line-73">}</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
+<span class="source-line-no">036</span><span id="line-36">public class AsyncAdminRequestRetryingCaller&lt;T&gt; extends AsyncRpcRetryingCaller&lt;T&gt; {</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38">  @FunctionalInterface</span>
+<span class="source-line-no">039</span><span id="line-39">  public interface Callable&lt;T&gt; {</span>
+<span class="source-line-no">040</span><span id="line-40">    CompletableFuture&lt;T&gt; call(HBaseRpcController controller, AdminService.Interface stub);</span>
+<span class="source-line-no">041</span><span id="line-41">  }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">  private final Callable&lt;T&gt; callable;</span>
+<span class="source-line-no">044</span><span id="line-44">  private ServerName serverName;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46">  public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
+<span class="source-line-no">047</span><span id="line-47">    long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
+<span class="source-line-no">048</span><span id="line-48">    long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable&lt;T&gt; callable) {</span>
+<span class="source-line-no">049</span><span id="line-49">    super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
+<span class="source-line-no">050</span><span id="line-50">      operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
+<span class="source-line-no">051</span><span id="line-51">    this.serverName = serverName;</span>
+<span class="source-line-no">052</span><span id="line-52">    this.callable = callable;</span>
+<span class="source-line-no">053</span><span id="line-53">  }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  @Override</span>
+<span class="source-line-no">056</span><span id="line-56">  protected Throwable preProcessError(Throwable error) {</span>
+<span class="source-line-no">057</span><span id="line-57">    // This retrying caller is mainly used for admin operations, thus we do not implement</span>
+<span class="source-line-no">058</span><span id="line-58">    // complicated relocating logic. If here we get a NotServingRegionException, there is no way to</span>
+<span class="source-line-no">059</span><span id="line-59">    // recover since we just pass in the server name, which means we can not send request to another</span>
+<span class="source-line-no">060</span><span id="line-60">    // region server. So here we just wrap it with a DoNotRetryIOException to fail the request</span>
+<span class="source-line-no">061</span><span id="line-61">    // immediately</span>
+<span class="source-line-no">062</span><span id="line-62">    if (error instanceof NotServingRegionException) {</span>
+<span class="source-line-no">063</span><span id="line-63">      return new DoNotRetryIOException("region is not on " + serverName + ", give up retrying",</span>
+<span class="source-line-no">064</span><span id="line-64">        error);</span>
+<span class="source-line-no">065</span><span id="line-65">    }</span>
+<span class="source-line-no">066</span><span id="line-66">    return error;</span>
+<span class="source-line-no">067</span><span id="line-67">  }</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69">  @Override</span>
+<span class="source-line-no">070</span><span id="line-70">  protected void doCall() {</span>
+<span class="source-line-no">071</span><span id="line-71">    AdminService.Interface adminStub;</span>
+<span class="source-line-no">072</span><span id="line-72">    try {</span>
+<span class="source-line-no">073</span><span id="line-73">      adminStub = this.conn.getAdminStub(serverName);</span>
+<span class="source-line-no">074</span><span id="line-74">    } catch (IOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75">      onError(e, () -&gt; "Get async admin stub to " + serverName + " failed", err -&gt; {</span>
+<span class="source-line-no">076</span><span id="line-76">      });</span>
+<span class="source-line-no">077</span><span id="line-77">      return;</span>
+<span class="source-line-no">078</span><span id="line-78">    }</span>
+<span class="source-line-no">079</span><span id="line-79">    resetCallTimeout();</span>
+<span class="source-line-no">080</span><span id="line-80">    addListener(callable.call(controller, adminStub), (result, error) -&gt; {</span>
+<span class="source-line-no">081</span><span id="line-81">      if (error != null) {</span>
+<span class="source-line-no">082</span><span id="line-82">        onError(error, () -&gt; "Call to admin stub failed", err -&gt; {</span>
+<span class="source-line-no">083</span><span id="line-83">        });</span>
+<span class="source-line-no">084</span><span id="line-84">        return;</span>
+<span class="source-line-no">085</span><span id="line-85">      }</span>
+<span class="source-line-no">086</span><span id="line-86">      future.complete(result);</span>
+<span class="source-line-no">087</span><span id="line-87">    });</span>
+<span class="source-line-no">088</span><span id="line-88">  }</span>
+<span class="source-line-no">089</span><span id="line-89">}</span>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
index 0dd75340481..51321263b96 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
@@ -35,55 +35,71 @@
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
 <span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
 <span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.CompletableFuture;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.NotServingRegionException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.yetus.audience.InterfaceAudience;</span>
 <span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
 <span class="source-line-no">032</span><span id="line-32"></span>
-<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
-<span class="source-line-no">034</span><span id="line-34">public class AsyncAdminRequestRetryingCaller&lt;T&gt; extends AsyncRpcRetryingCaller&lt;T&gt; {</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36">  @FunctionalInterface</span>
-<span class="source-line-no">037</span><span id="line-37">  public interface Callable&lt;T&gt; {</span>
-<span class="source-line-no">038</span><span id="line-38">    CompletableFuture&lt;T&gt; call(HBaseRpcController controller, AdminService.Interface stub);</span>
-<span class="source-line-no">039</span><span id="line-39">  }</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41">  private final Callable&lt;T&gt; callable;</span>
-<span class="source-line-no">042</span><span id="line-42">  private ServerName serverName;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44">  public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
-<span class="source-line-no">045</span><span id="line-45">    long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
-<span class="source-line-no">046</span><span id="line-46">    long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable&lt;T&gt; callable) {</span>
-<span class="source-line-no">047</span><span id="line-47">    super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
-<span class="source-line-no">048</span><span id="line-48">      operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
-<span class="source-line-no">049</span><span id="line-49">    this.serverName = serverName;</span>
-<span class="source-line-no">050</span><span id="line-50">    this.callable = callable;</span>
-<span class="source-line-no">051</span><span id="line-51">  }</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53">  @Override</span>
-<span class="source-line-no">054</span><span id="line-54">  protected void doCall() {</span>
-<span class="source-line-no">055</span><span id="line-55">    AdminService.Interface adminStub;</span>
-<span class="source-line-no">056</span><span id="line-56">    try {</span>
-<span class="source-line-no">057</span><span id="line-57">      adminStub = this.conn.getAdminStub(serverName);</span>
-<span class="source-line-no">058</span><span id="line-58">    } catch (IOException e) {</span>
-<span class="source-line-no">059</span><span id="line-59">      onError(e, () -&gt; "Get async admin stub to " + serverName + " failed", err -&gt; {</span>
-<span class="source-line-no">060</span><span id="line-60">      });</span>
-<span class="source-line-no">061</span><span id="line-61">      return;</span>
-<span class="source-line-no">062</span><span id="line-62">    }</span>
-<span class="source-line-no">063</span><span id="line-63">    resetCallTimeout();</span>
-<span class="source-line-no">064</span><span id="line-64">    addListener(callable.call(controller, adminStub), (result, error) -&gt; {</span>
-<span class="source-line-no">065</span><span id="line-65">      if (error != null) {</span>
-<span class="source-line-no">066</span><span id="line-66">        onError(error, () -&gt; "Call to admin stub failed", err -&gt; {</span>
-<span class="source-line-no">067</span><span id="line-67">        });</span>
-<span class="source-line-no">068</span><span id="line-68">        return;</span>
-<span class="source-line-no">069</span><span id="line-69">      }</span>
-<span class="source-line-no">070</span><span id="line-70">      future.complete(result);</span>
-<span class="source-line-no">071</span><span id="line-71">    });</span>
-<span class="source-line-no">072</span><span id="line-72">  }</span>
-<span class="source-line-no">073</span><span id="line-73">}</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
+<span class="source-line-no">036</span><span id="line-36">public class AsyncAdminRequestRetryingCaller&lt;T&gt; extends AsyncRpcRetryingCaller&lt;T&gt; {</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38">  @FunctionalInterface</span>
+<span class="source-line-no">039</span><span id="line-39">  public interface Callable&lt;T&gt; {</span>
+<span class="source-line-no">040</span><span id="line-40">    CompletableFuture&lt;T&gt; call(HBaseRpcController controller, AdminService.Interface stub);</span>
+<span class="source-line-no">041</span><span id="line-41">  }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">  private final Callable&lt;T&gt; callable;</span>
+<span class="source-line-no">044</span><span id="line-44">  private ServerName serverName;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46">  public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
+<span class="source-line-no">047</span><span id="line-47">    long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
+<span class="source-line-no">048</span><span id="line-48">    long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable&lt;T&gt; callable) {</span>
+<span class="source-line-no">049</span><span id="line-49">    super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
+<span class="source-line-no">050</span><span id="line-50">      operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
+<span class="source-line-no">051</span><span id="line-51">    this.serverName = serverName;</span>
+<span class="source-line-no">052</span><span id="line-52">    this.callable = callable;</span>
+<span class="source-line-no">053</span><span id="line-53">  }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  @Override</span>
+<span class="source-line-no">056</span><span id="line-56">  protected Throwable preProcessError(Throwable error) {</span>
+<span class="source-line-no">057</span><span id="line-57">    // This retrying caller is mainly used for admin operations, thus we do not implement</span>
+<span class="source-line-no">058</span><span id="line-58">    // complicated relocating logic. If here we get a NotServingRegionException, there is no way to</span>
+<span class="source-line-no">059</span><span id="line-59">    // recover since we just pass in the server name, which means we can not send request to another</span>
+<span class="source-line-no">060</span><span id="line-60">    // region server. So here we just wrap it with a DoNotRetryIOException to fail the request</span>
+<span class="source-line-no">061</span><span id="line-61">    // immediately</span>
+<span class="source-line-no">062</span><span id="line-62">    if (error instanceof NotServingRegionException) {</span>
+<span class="source-line-no">063</span><span id="line-63">      return new DoNotRetryIOException("region is not on " + serverName + ", give up retrying",</span>
+<span class="source-line-no">064</span><span id="line-64">        error);</span>
+<span class="source-line-no">065</span><span id="line-65">    }</span>
+<span class="source-line-no">066</span><span id="line-66">    return error;</span>
+<span class="source-line-no">067</span><span id="line-67">  }</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69">  @Override</span>
+<span class="source-line-no">070</span><span id="line-70">  protected void doCall() {</span>
+<span class="source-line-no">071</span><span id="line-71">    AdminService.Interface adminStub;</span>
+<span class="source-line-no">072</span><span id="line-72">    try {</span>
+<span class="source-line-no">073</span><span id="line-73">      adminStub = this.conn.getAdminStub(serverName);</span>
+<span class="source-line-no">074</span><span id="line-74">    } catch (IOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75">      onError(e, () -&gt; "Get async admin stub to " + serverName + " failed", err -&gt; {</span>
+<span class="source-line-no">076</span><span id="line-76">      });</span>
+<span class="source-line-no">077</span><span id="line-77">      return;</span>
+<span class="source-line-no">078</span><span id="line-78">    }</span>
+<span class="source-line-no">079</span><span id="line-79">    resetCallTimeout();</span>
+<span class="source-line-no">080</span><span id="line-80">    addListener(callable.call(controller, adminStub), (result, error) -&gt; {</span>
+<span class="source-line-no">081</span><span id="line-81">      if (error != null) {</span>
+<span class="source-line-no">082</span><span id="line-82">        onError(error, () -&gt; "Call to admin stub failed", err -&gt; {</span>
+<span class="source-line-no">083</span><span id="line-83">        });</span>
+<span class="source-line-no">084</span><span id="line-84">        return;</span>
+<span class="source-line-no">085</span><span id="line-85">      }</span>
+<span class="source-line-no">086</span><span id="line-86">      future.complete(result);</span>
+<span class="source-line-no">087</span><span id="line-87">    });</span>
+<span class="source-line-no">088</span><span id="line-88">  }</span>
+<span class="source-line-no">089</span><span id="line-89">}</span>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html b/apidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
index e50655d1a8f..55c4e4967ac 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
@@ -69,73 +69,78 @@
 <span class="source-line-no">056</span><span id="line-56">          }</span>
 <span class="source-line-no">057</span><span id="line-57">        }</span>
 <span class="source-line-no">058</span><span id="line-58">      }</span>
-<span class="source-line-no">059</span><span id="line-59">      get.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
-<span class="source-line-no">060</span><span id="line-60">      get.readVersions(rowspec.getMaxVersions());</span>
-<span class="source-line-no">061</span><span id="line-61">      if (filter != null) {</span>
-<span class="source-line-no">062</span><span id="line-62">        get.setFilter(filter);</span>
+<span class="source-line-no">059</span><span id="line-59">      if (rowspec.isPartialTimeRange()) {</span>
+<span class="source-line-no">060</span><span id="line-60">        get.setTimestamp(rowspec.getTimestamp());</span>
+<span class="source-line-no">061</span><span id="line-61">      } else {</span>
+<span class="source-line-no">062</span><span id="line-62">        get.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
 <span class="source-line-no">063</span><span id="line-63">      }</span>
-<span class="source-line-no">064</span><span id="line-64">      get.setCacheBlocks(cacheBlocks);</span>
-<span class="source-line-no">065</span><span id="line-65">      Result result = table.get(get);</span>
-<span class="source-line-no">066</span><span id="line-66">      if (result != null &amp;&amp; !result.isEmpty()) {</span>
-<span class="source-line-no">067</span><span id="line-67">        valuesI = result.listCells().iterator();</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65">      get.readVersions(rowspec.getMaxVersions());</span>
+<span class="source-line-no">066</span><span id="line-66">      if (filter != null) {</span>
+<span class="source-line-no">067</span><span id="line-67">        get.setFilter(filter);</span>
 <span class="source-line-no">068</span><span id="line-68">      }</span>
-<span class="source-line-no">069</span><span id="line-69">    } catch (DoNotRetryIOException e) {</span>
-<span class="source-line-no">070</span><span id="line-70">      // Warn here because Stargate will return 404 in the case if multiple</span>
-<span class="source-line-no">071</span><span id="line-71">      // column families were specified but one did not exist -- currently</span>
-<span class="source-line-no">072</span><span id="line-72">      // HBase will fail the whole Get.</span>
-<span class="source-line-no">073</span><span id="line-73">      // Specifying multiple columns in a URI should be uncommon usage but</span>
-<span class="source-line-no">074</span><span id="line-74">      // help to avoid confusion by leaving a record of what happened here in</span>
-<span class="source-line-no">075</span><span id="line-75">      // the log.</span>
-<span class="source-line-no">076</span><span id="line-76">      LOG.warn(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">077</span><span id="line-77">      // Lets get the exception rethrown to get a more meaningful error message than 404</span>
-<span class="source-line-no">078</span><span id="line-78">      if (e instanceof AccessDeniedException) {</span>
-<span class="source-line-no">079</span><span id="line-79">        throw e;</span>
-<span class="source-line-no">080</span><span id="line-80">      }</span>
-<span class="source-line-no">081</span><span id="line-81">    }</span>
-<span class="source-line-no">082</span><span id="line-82">  }</span>
-<span class="source-line-no">083</span><span id="line-83"></span>
-<span class="source-line-no">084</span><span id="line-84">  @Override</span>
-<span class="source-line-no">085</span><span id="line-85">  public void close() {</span>
-<span class="source-line-no">086</span><span id="line-86">  }</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88">  @Override</span>
-<span class="source-line-no">089</span><span id="line-89">  public boolean hasNext() {</span>
-<span class="source-line-no">090</span><span id="line-90">    if (cache != null) {</span>
-<span class="source-line-no">091</span><span id="line-91">      return true;</span>
-<span class="source-line-no">092</span><span id="line-92">    }</span>
-<span class="source-line-no">093</span><span id="line-93">    if (valuesI == null) {</span>
-<span class="source-line-no">094</span><span id="line-94">      return false;</span>
-<span class="source-line-no">095</span><span id="line-95">    }</span>
-<span class="source-line-no">096</span><span id="line-96">    return valuesI.hasNext();</span>
-<span class="source-line-no">097</span><span id="line-97">  }</span>
-<span class="source-line-no">098</span><span id="line-98"></span>
-<span class="source-line-no">099</span><span id="line-99">  @Override</span>
-<span class="source-line-no">100</span><span id="line-100">  public Cell next() {</span>
-<span class="source-line-no">101</span><span id="line-101">    if (cache != null) {</span>
-<span class="source-line-no">102</span><span id="line-102">      Cell kv = cache;</span>
-<span class="source-line-no">103</span><span id="line-103">      cache = null;</span>
-<span class="source-line-no">104</span><span id="line-104">      return kv;</span>
-<span class="source-line-no">105</span><span id="line-105">    }</span>
-<span class="source-line-no">106</span><span id="line-106">    if (valuesI == null) {</span>
-<span class="source-line-no">107</span><span id="line-107">      return null;</span>
-<span class="source-line-no">108</span><span id="line-108">    }</span>
-<span class="source-line-no">109</span><span id="line-109">    try {</span>
-<span class="source-line-no">110</span><span id="line-110">      return valuesI.next();</span>
-<span class="source-line-no">111</span><span id="line-111">    } catch (NoSuchElementException e) {</span>
+<span class="source-line-no">069</span><span id="line-69">      get.setCacheBlocks(cacheBlocks);</span>
+<span class="source-line-no">070</span><span id="line-70">      Result result = table.get(get);</span>
+<span class="source-line-no">071</span><span id="line-71">      if (result != null &amp;&amp; !result.isEmpty()) {</span>
+<span class="source-line-no">072</span><span id="line-72">        valuesI = result.listCells().iterator();</span>
+<span class="source-line-no">073</span><span id="line-73">      }</span>
+<span class="source-line-no">074</span><span id="line-74">    } catch (DoNotRetryIOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75">      // Warn here because Stargate will return 404 in the case if multiple</span>
+<span class="source-line-no">076</span><span id="line-76">      // column families were specified but one did not exist -- currently</span>
+<span class="source-line-no">077</span><span id="line-77">      // HBase will fail the whole Get.</span>
+<span class="source-line-no">078</span><span id="line-78">      // Specifying multiple columns in a URI should be uncommon usage but</span>
+<span class="source-line-no">079</span><span id="line-79">      // help to avoid confusion by leaving a record of what happened here in</span>
+<span class="source-line-no">080</span><span id="line-80">      // the log.</span>
+<span class="source-line-no">081</span><span id="line-81">      LOG.warn(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">082</span><span id="line-82">      // Lets get the exception rethrown to get a more meaningful error message than 404</span>
+<span class="source-line-no">083</span><span id="line-83">      if (e instanceof AccessDeniedException) {</span>
+<span class="source-line-no">084</span><span id="line-84">        throw e;</span>
+<span class="source-line-no">085</span><span id="line-85">      }</span>
+<span class="source-line-no">086</span><span id="line-86">    }</span>
+<span class="source-line-no">087</span><span id="line-87">  }</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89">  @Override</span>
+<span class="source-line-no">090</span><span id="line-90">  public void close() {</span>
+<span class="source-line-no">091</span><span id="line-91">  }</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93">  @Override</span>
+<span class="source-line-no">094</span><span id="line-94">  public boolean hasNext() {</span>
+<span class="source-line-no">095</span><span id="line-95">    if (cache != null) {</span>
+<span class="source-line-no">096</span><span id="line-96">      return true;</span>
+<span class="source-line-no">097</span><span id="line-97">    }</span>
+<span class="source-line-no">098</span><span id="line-98">    if (valuesI == null) {</span>
+<span class="source-line-no">099</span><span id="line-99">      return false;</span>
+<span class="source-line-no">100</span><span id="line-100">    }</span>
+<span class="source-line-no">101</span><span id="line-101">    return valuesI.hasNext();</span>
+<span class="source-line-no">102</span><span id="line-102">  }</span>
+<span class="source-line-no">103</span><span id="line-103"></span>
+<span class="source-line-no">104</span><span id="line-104">  @Override</span>
+<span class="source-line-no">105</span><span id="line-105">  public Cell next() {</span>
+<span class="source-line-no">106</span><span id="line-106">    if (cache != null) {</span>
+<span class="source-line-no">107</span><span id="line-107">      Cell kv = cache;</span>
+<span class="source-line-no">108</span><span id="line-108">      cache = null;</span>
+<span class="source-line-no">109</span><span id="line-109">      return kv;</span>
+<span class="source-line-no">110</span><span id="line-110">    }</span>
+<span class="source-line-no">111</span><span id="line-111">    if (valuesI == null) {</span>
 <span class="source-line-no">112</span><span id="line-112">      return null;</span>
 <span class="source-line-no">113</span><span id="line-113">    }</span>
-<span class="source-line-no">114</span><span id="line-114">  }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">  @Override</span>
-<span class="source-line-no">117</span><span id="line-117">  public void putBack(Cell kv) {</span>
-<span class="source-line-no">118</span><span id="line-118">    this.cache = kv;</span>
+<span class="source-line-no">114</span><span id="line-114">    try {</span>
+<span class="source-line-no">115</span><span id="line-115">      return valuesI.next();</span>
+<span class="source-line-no">116</span><span id="line-116">    } catch (NoSuchElementException e) {</span>
+<span class="source-line-no">117</span><span id="line-117">      return null;</span>
+<span class="source-line-no">118</span><span id="line-118">    }</span>
 <span class="source-line-no">119</span><span id="line-119">  }</span>
 <span class="source-line-no">120</span><span id="line-120"></span>
 <span class="source-line-no">121</span><span id="line-121">  @Override</span>
-<span class="source-line-no">122</span><span id="line-122">  public void remove() {</span>
-<span class="source-line-no">123</span><span id="line-123">    throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">122</span><span id="line-122">  public void putBack(Cell kv) {</span>
+<span class="source-line-no">123</span><span id="line-123">    this.cache = kv;</span>
 <span class="source-line-no">124</span><span id="line-124">  }</span>
-<span class="source-line-no">125</span><span id="line-125">}</span>
+<span class="source-line-no">125</span><span id="line-125"></span>
+<span class="source-line-no">126</span><span id="line-126">  @Override</span>
+<span class="source-line-no">127</span><span id="line-127">  public void remove() {</span>
+<span class="source-line-no">128</span><span id="line-128">    throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">129</span><span id="line-129">  }</span>
+<span class="source-line-no">130</span><span id="line-130">}</span>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html b/apidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
index dfc7f292a8a..76546670279 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
@@ -59,387 +59,394 @@
 <span class="source-line-no">046</span><span id="line-46">  private long endTime = DEFAULT_END_TIMESTAMP;</span>
 <span class="source-line-no">047</span><span id="line-47">  private int maxVersions = 1;</span>
 <span class="source-line-no">048</span><span id="line-48">  private int maxValues = Integer.MAX_VALUE;</span>
-<span class="source-line-no">049</span><span id="line-49"></span>
-<span class="source-line-no">050</span><span id="line-50">  public RowSpec(String path) throws IllegalArgumentException {</span>
-<span class="source-line-no">051</span><span id="line-51">    this(path, null);</span>
-<span class="source-line-no">052</span><span id="line-52">  }</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54">  public RowSpec(String path, String keyEncoding) throws IllegalArgumentException {</span>
-<span class="source-line-no">055</span><span id="line-55">    int i = 0;</span>
-<span class="source-line-no">056</span><span id="line-56">    while (path.charAt(i) == '/') {</span>
-<span class="source-line-no">057</span><span id="line-57">      i++;</span>
-<span class="source-line-no">058</span><span id="line-58">    }</span>
-<span class="source-line-no">059</span><span id="line-59">    i = parseRowKeys(path, i);</span>
-<span class="source-line-no">060</span><span id="line-60">    i = parseColumns(path, i);</span>
-<span class="source-line-no">061</span><span id="line-61">    i = parseTimestamp(path, i);</span>
-<span class="source-line-no">062</span><span id="line-62">    i = parseQueryParams(path, i);</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64">    if (keyEncoding != null) {</span>
-<span class="source-line-no">065</span><span id="line-65">      // See https://en.wikipedia.org/wiki/Base64#Variants_summary_table</span>
-<span class="source-line-no">066</span><span id="line-66">      Base64.Decoder decoder;</span>
-<span class="source-line-no">067</span><span id="line-67">      switch (keyEncoding) {</span>
-<span class="source-line-no">068</span><span id="line-68">        case "b64":</span>
-<span class="source-line-no">069</span><span id="line-69">        case "base64":</span>
-<span class="source-line-no">070</span><span id="line-70">        case "b64url":</span>
-<span class="source-line-no">071</span><span id="line-71">        case "base64url":</span>
-<span class="source-line-no">072</span><span id="line-72">          decoder = Base64.getUrlDecoder();</span>
-<span class="source-line-no">073</span><span id="line-73">          break;</span>
-<span class="source-line-no">074</span><span id="line-74">        case "b64basic":</span>
-<span class="source-line-no">075</span><span id="line-75">        case "base64basic":</span>
-<span class="source-line-no">076</span><span id="line-76">          decoder = Base64.getDecoder();</span>
-<span class="source-line-no">077</span><span id="line-77">          break;</span>
-<span class="source-line-no">078</span><span id="line-78">        default:</span>
-<span class="source-line-no">079</span><span id="line-79">          throw new IllegalArgumentException("unknown key encoding '" + keyEncoding + "'");</span>
-<span class="source-line-no">080</span><span id="line-80">      }</span>
-<span class="source-line-no">081</span><span id="line-81">      this.row = decoder.decode(this.row);</span>
-<span class="source-line-no">082</span><span id="line-82">      if (this.endRow != null) {</span>
-<span class="source-line-no">083</span><span id="line-83">        this.endRow = decoder.decode(this.endRow);</span>
-<span class="source-line-no">084</span><span id="line-84">      }</span>
-<span class="source-line-no">085</span><span id="line-85">      TreeSet&lt;byte[]&gt; decodedColumns = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);</span>
-<span class="source-line-no">086</span><span id="line-86">      for (byte[] encodedColumn : this.columns) {</span>
-<span class="source-line-no">087</span><span id="line-87">        decodedColumns.add(decoder.decode(encodedColumn));</span>
-<span class="source-line-no">088</span><span id="line-88">      }</span>
-<span class="source-line-no">089</span><span id="line-89">      this.columns = decodedColumns;</span>
-<span class="source-line-no">090</span><span id="line-90">    }</span>
-<span class="source-line-no">091</span><span id="line-91">  }</span>
-<span class="source-line-no">092</span><span id="line-92"></span>
-<span class="source-line-no">093</span><span id="line-93">  private int parseRowKeys(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">094</span><span id="line-94">    String startRow = null, endRow = null;</span>
-<span class="source-line-no">095</span><span id="line-95">    try {</span>
-<span class="source-line-no">096</span><span id="line-96">      StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">097</span><span id="line-97">      char c;</span>
-<span class="source-line-no">098</span><span id="line-98">      while (i &lt; path.length() &amp;&amp; (c = path.charAt(i)) != '/') {</span>
-<span class="source-line-no">099</span><span id="line-99">        sb.append(c);</span>
-<span class="source-line-no">100</span><span id="line-100">        i++;</span>
-<span class="source-line-no">101</span><span id="line-101">      }</span>
-<span class="source-line-no">102</span><span id="line-102">      i++;</span>
-<span class="source-line-no">103</span><span id="line-103">      String row = startRow = sb.toString();</span>
-<span class="source-line-no">104</span><span id="line-104">      int idx = startRow.indexOf(',');</span>
-<span class="source-line-no">105</span><span id="line-105">      if (idx != -1) {</span>
-<span class="source-line-no">106</span><span id="line-106">        startRow = URLDecoder.decode(row.substring(0, idx), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">107</span><span id="line-107">        endRow = URLDecoder.decode(row.substring(idx + 1), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">108</span><span id="line-108">      } else {</span>
-<span class="source-line-no">109</span><span id="line-109">        startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">110</span><span id="line-110">      }</span>
-<span class="source-line-no">111</span><span id="line-111">    } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">112</span><span id="line-112">      throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">113</span><span id="line-113">    } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">114</span><span id="line-114">      throw new RuntimeException(e);</span>
-<span class="source-line-no">115</span><span id="line-115">    }</span>
-<span class="source-line-no">116</span><span id="line-116">    // HBase does not support wildcards on row keys so we will emulate a</span>
-<span class="source-line-no">117</span><span id="line-117">    // suffix glob by synthesizing appropriate start and end row keys for</span>
-<span class="source-line-no">118</span><span id="line-118">    // table scanning</span>
-<span class="source-line-no">119</span><span id="line-119">    if (startRow.charAt(startRow.length() - 1) == '*') {</span>
-<span class="source-line-no">120</span><span id="line-120">      if (endRow != null)</span>
-<span class="source-line-no">121</span><span id="line-121">        throw new IllegalArgumentException("invalid path: start row " + "specified with wildcard");</span>
-<span class="source-line-no">122</span><span id="line-122">      this.row = Bytes.toBytes(startRow.substring(0, startRow.lastIndexOf("*")));</span>
-<span class="source-line-no">123</span><span id="line-123">      this.endRow = new byte[this.row.length + 1];</span>
-<span class="source-line-no">124</span><span id="line-124">      System.arraycopy(this.row, 0, this.endRow, 0, this.row.length);</span>
-<span class="source-line-no">125</span><span id="line-125">      this.endRow[this.row.length] = (byte) 255;</span>
-<span class="source-line-no">126</span><span id="line-126">    } else {</span>
-<span class="source-line-no">127</span><span id="line-127">      this.row = Bytes.toBytes(startRow.toString());</span>
-<span class="source-line-no">128</span><span id="line-128">      if (endRow != null) {</span>
-<span class="source-line-no">129</span><span id="line-129">        this.endRow = Bytes.toBytes(endRow.toString());</span>
-<span class="source-line-no">130</span><span id="line-130">      }</span>
-<span class="source-line-no">131</span><span id="line-131">    }</span>
-<span class="source-line-no">132</span><span id="line-132">    return i;</span>
-<span class="source-line-no">133</span><span id="line-133">  }</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135">  private int parseColumns(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">136</span><span id="line-136">    if (i &gt;= path.length()) {</span>
-<span class="source-line-no">137</span><span id="line-137">      return i;</span>
-<span class="source-line-no">138</span><span id="line-138">    }</span>
-<span class="source-line-no">139</span><span id="line-139">    try {</span>
-<span class="source-line-no">140</span><span id="line-140">      char c;</span>
-<span class="source-line-no">141</span><span id="line-141">      StringBuilder column = new StringBuilder();</span>
-<span class="source-line-no">142</span><span id="line-142">      while (i &lt; path.length() &amp;&amp; (c = path.charAt(i)) != '/') {</span>
-<span class="source-line-no">143</span><span id="line-143">        if (c == ',') {</span>
-<span class="source-line-no">144</span><span id="line-144">          if (column.length() &lt; 1) {</span>
-<span class="source-line-no">145</span><span id="line-145">            throw new IllegalArgumentException("invalid path");</span>
-<span class="source-line-no">146</span><span id="line-146">          }</span>
-<span class="source-line-no">147</span><span id="line-147">          String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">148</span><span id="line-148">          this.columns.add(Bytes.toBytes(s));</span>
-<span class="source-line-no">149</span><span id="line-149">          column.setLength(0);</span>
-<span class="source-line-no">150</span><span id="line-150">          i++;</span>
-<span class="source-line-no">151</span><span id="line-151">          continue;</span>
-<span class="source-line-no">152</span><span id="line-152">        }</span>
-<span class="source-line-no">153</span><span id="line-153">        column.append(c);</span>
-<span class="source-line-no">154</span><span id="line-154">        i++;</span>
-<span class="source-line-no">155</span><span id="line-155">      }</span>
-<span class="source-line-no">156</span><span id="line-156">      i++;</span>
-<span class="source-line-no">157</span><span id="line-157">      // trailing list entry</span>
-<span class="source-line-no">158</span><span id="line-158">      if (column.length() &gt; 0) {</span>
-<span class="source-line-no">159</span><span id="line-159">        String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">160</span><span id="line-160">        this.columns.add(Bytes.toBytes(s));</span>
-<span class="source-line-no">161</span><span id="line-161">      }</span>
-<span class="source-line-no">162</span><span id="line-162">    } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">163</span><span id="line-163">      throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">164</span><span id="line-164">    } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">165</span><span id="line-165">      // shouldn't happen</span>
-<span class="source-line-no">166</span><span id="line-166">      throw new RuntimeException(e);</span>
-<span class="source-line-no">167</span><span id="line-167">    }</span>
-<span class="source-line-no">168</span><span id="line-168">    return i;</span>
-<span class="source-line-no">169</span><span id="line-169">  }</span>
-<span class="source-line-no">170</span><span id="line-170"></span>
-<span class="source-line-no">171</span><span id="line-171">  private int parseTimestamp(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">172</span><span id="line-172">    if (i &gt;= path.length()) {</span>
-<span class="source-line-no">173</span><span id="line-173">      return i;</span>
-<span class="source-line-no">174</span><span id="line-174">    }</span>
-<span class="source-line-no">175</span><span id="line-175">    long time0 = 0, time1 = 0;</span>
-<span class="source-line-no">176</span><span id="line-176">    try {</span>
-<span class="source-line-no">177</span><span id="line-177">      char c = 0;</span>
-<span class="source-line-no">178</span><span id="line-178">      StringBuilder stamp = new StringBuilder();</span>
-<span class="source-line-no">179</span><span id="line-179">      while (i &lt; path.length()) {</span>
-<span class="source-line-no">180</span><span id="line-180">        c = path.charAt(i);</span>
-<span class="source-line-no">181</span><span id="line-181">        if (c == '/' || c == ',') {</span>
-<span class="source-line-no">182</span><span id="line-182">          break;</span>
-<span class="source-line-no">183</span><span id="line-183">        }</span>
-<span class="source-line-no">184</span><span id="line-184">        stamp.append(c);</span>
-<span class="source-line-no">185</span><span id="line-185">        i++;</span>
-<span class="source-line-no">186</span><span id="line-186">      }</span>
-<span class="source-line-no">187</span><span id="line-187">      try {</span>
-<span class="source-line-no">188</span><span id="line-188">        time0 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">189</span><span id="line-189">      } catch (NumberFormatException e) {</span>
-<span class="source-line-no">190</span><span id="line-190">        throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">191</span><span id="line-191">      }</span>
-<span class="source-line-no">192</span><span id="line-192">      if (c == ',') {</span>
-<span class="source-line-no">193</span><span id="line-193">        stamp = new StringBuilder();</span>
-<span class="source-line-no">194</span><span id="line-194">        i++;</span>
-<span class="source-line-no">195</span><span id="line-195">        while (i &lt; path.length() &amp;&amp; ((c = path.charAt(i)) != '/')) {</span>
-<span class="source-line-no">196</span><span id="line-196">          stamp.append(c);</span>
-<span class="source-line-no">197</span><span id="line-197">          i++;</span>
-<span class="source-line-no">198</span><span id="line-198">        }</span>
-<span class="source-line-no">199</span><span id="line-199">        try {</span>
-<span class="source-line-no">200</span><span id="line-200">          time1 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">201</span><span id="line-201">        } catch (NumberFormatException e) {</span>
-<span class="source-line-no">202</span><span id="line-202">          throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">203</span><span id="line-203">        }</span>
-<span class="source-line-no">204</span><span id="line-204">      }</span>
-<span class="source-line-no">205</span><span id="line-205">      if (c == '/') {</span>
-<span class="source-line-no">206</span><span id="line-206">        i++;</span>
-<span class="source-line-no">207</span><span id="line-207">      }</span>
-<span class="source-line-no">208</span><span id="line-208">    } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">209</span><span id="line-209">      throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">210</span><span id="line-210">    } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">211</span><span id="line-211">      // shouldn't happen</span>
-<span class="source-line-no">212</span><span id="line-212">      throw new RuntimeException(e);</span>
-<span class="source-line-no">213</span><span id="line-213">    }</span>
-<span class="source-line-no">214</span><span id="line-214">    if (time1 != 0) {</span>
-<span class="source-line-no">215</span><span id="line-215">      startTime = time0;</span>
-<span class="source-line-no">216</span><span id="line-216">      endTime = time1;</span>
-<span class="source-line-no">217</span><span id="line-217">    } else {</span>
-<span class="source-line-no">218</span><span id="line-218">      endTime = time0;</span>
-<span class="source-line-no">219</span><span id="line-219">    }</span>
-<span class="source-line-no">220</span><span id="line-220">    return i;</span>
-<span class="source-line-no">221</span><span id="line-221">  }</span>
-<span class="source-line-no">222</span><span id="line-222"></span>
-<span class="source-line-no">223</span><span id="line-223">  private int parseQueryParams(final String path, int i) {</span>
-<span class="source-line-no">224</span><span id="line-224">    if (i &gt;= path.length()) {</span>
-<span class="source-line-no">225</span><span id="line-225">      return i;</span>
-<span class="source-line-no">226</span><span id="line-226">    }</span>
-<span class="source-line-no">227</span><span id="line-227">    StringBuilder query = new StringBuilder();</span>
-<span class="source-line-no">228</span><span id="line-228">    try {</span>
-<span class="source-line-no">229</span><span id="line-229">      query.append(URLDecoder.decode(path.substring(i), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">230</span><span id="line-230">    } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">231</span><span id="line-231">      // should not happen</span>
-<span class="source-line-no">232</span><span id="line-232">      throw new RuntimeException(e);</span>
-<span class="source-line-no">233</span><span id="line-233">    }</span>
-<span class="source-line-no">234</span><span id="line-234">    i += query.length();</span>
-<span class="source-line-no">235</span><span id="line-235">    int j = 0;</span>
-<span class="source-line-no">236</span><span id="line-236">    while (j &lt; query.length()) {</span>
-<span class="source-line-no">237</span><span id="line-237">      char c = query.charAt(j);</span>
-<span class="source-line-no">238</span><span id="line-238">      if (c != '?' &amp;&amp; c != '&amp;') {</span>
-<span class="source-line-no">239</span><span id="line-239">        break;</span>
-<span class="source-line-no">240</span><span id="line-240">      }</span>
-<span class="source-line-no">241</span><span id="line-241">      if (++j &gt; query.length()) {</span>
-<span class="source-line-no">242</span><span id="line-242">        throw new IllegalArgumentException("malformed query parameter");</span>
-<span class="source-line-no">243</span><span id="line-243">      }</span>
-<span class="source-line-no">244</span><span id="line-244">      char what = query.charAt(j);</span>
-<span class="source-line-no">245</span><span id="line-245">      if (++j &gt; query.length()) {</span>
-<span class="source-line-no">246</span><span id="line-246">        break;</span>
-<span class="source-line-no">247</span><span id="line-247">      }</span>
-<span class="source-line-no">248</span><span id="line-248">      c = query.charAt(j);</span>
-<span class="source-line-no">249</span><span id="line-249">      if (c != '=') {</span>
-<span class="source-line-no">250</span><span id="line-250">        throw new IllegalArgumentException("malformed query parameter");</span>
-<span class="source-line-no">251</span><span id="line-251">      }</span>
-<span class="source-line-no">252</span><span id="line-252">      if (++j &gt; query.length()) {</span>
-<span class="source-line-no">253</span><span id="line-253">        break;</span>
-<span class="source-line-no">254</span><span id="line-254">      }</span>
-<span class="source-line-no">255</span><span id="line-255">      switch (what) {</span>
-<span class="source-line-no">256</span><span id="line-256">        case 'm': {</span>
-<span class="source-line-no">257</span><span id="line-257">          StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">258</span><span id="line-258">          while (j &lt;= query.length()) {</span>
-<span class="source-line-no">259</span><span id="line-259">            c = query.charAt(j);</span>
-<span class="source-line-no">260</span><span id="line-260">            if (c &lt; '0' || c &gt; '9') {</span>
-<span class="source-line-no">261</span><span id="line-261">              j--;</span>
-<span class="source-line-no">262</span><span id="line-262">              break;</span>
-<span class="source-line-no">263</span><span id="line-263">            }</span>
-<span class="source-line-no">264</span><span id="line-264">            sb.append(c);</span>
-<span class="source-line-no">265</span><span id="line-265">          }</span>
-<span class="source-line-no">266</span><span id="line-266">          maxVersions = Integer.parseInt(sb.toString());</span>
-<span class="source-line-no">267</span><span id="line-267">        }</span>
-<span class="source-line-no">268</span><span id="line-268">          break;</span>
-<span class="source-line-no">269</span><span id="line-269">        case 'n': {</span>
-<span class="source-line-no">270</span><span id="line-270">          StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">271</span><span id="line-271">          while (j &lt;= query.length()) {</span>
-<span class="source-line-no">272</span><span id="line-272">            c = query.charAt(j);</span>
-<span class="source-line-no">273</span><span id="line-273">            if (c &lt; '0' || c &gt; '9') {</span>
-<span class="source-line-no">274</span><span id="line-274">              j--;</span>
-<span class="source-line-no">275</span><span id="line-275">              break;</span>
-<span class="source-line-no">276</span><span id="line-276">            }</span>
-<span class="source-line-no">277</span><span id="line-277">            sb.append(c);</span>
-<span class="source-line-no">278</span><span id="line-278">          }</span>
-<span class="source-line-no">279</span><span id="line-279">          maxValues = Integer.parseInt(sb.toString());</span>
-<span class="source-line-no">280</span><span id="line-280">        }</span>
-<span class="source-line-no">281</span><span id="line-281">          break;</span>
-<span class="source-line-no">282</span><span id="line-282">        default:</span>
-<span class="source-line-no">283</span><span id="line-283">          throw new IllegalArgumentException("unknown parameter '" + c + "'");</span>
-<span class="source-line-no">284</span><span id="line-284">      }</span>
-<span class="source-line-no">285</span><span id="line-285">    }</span>
-<span class="source-line-no">286</span><span id="line-286">    return i;</span>
-<span class="source-line-no">287</span><span id="line-287">  }</span>
-<span class="source-line-no">288</span><span id="line-288"></span>
-<span class="source-line-no">289</span><span id="line-289">  public RowSpec(byte[] startRow, byte[] endRow, byte[][] columns, long startTime, long endTime,</span>
-<span class="source-line-no">290</span><span id="line-290">    int maxVersions) {</span>
-<span class="source-line-no">291</span><span id="line-291">    this.row = startRow;</span>
-<span class="source-line-no">292</span><span id="line-292">    this.endRow = endRow;</span>
-<span class="source-line-no">293</span><span id="line-293">    if (columns != null) {</span>
-<span class="source-line-no">294</span><span id="line-294">      Collections.addAll(this.columns, columns);</span>
-<span class="source-line-no">295</span><span id="line-295">    }</span>
-<span class="source-line-no">296</span><span id="line-296">    this.startTime = startTime;</span>
-<span class="source-line-no">297</span><span id="line-297">    this.endTime = endTime;</span>
-<span class="source-line-no">298</span><span id="line-298">    this.maxVersions = maxVersions;</span>
-<span class="source-line-no">299</span><span id="line-299">  }</span>
-<span class="source-line-no">300</span><span id="line-300"></span>
-<span class="source-line-no">301</span><span id="line-301">  public RowSpec(byte[] startRow, byte[] endRow, Collection&lt;byte[]&gt; columns, long startTime,</span>
-<span class="source-line-no">302</span><span id="line-302">    long endTime, int maxVersions, Collection&lt;String&gt; labels) {</span>
-<span class="source-line-no">303</span><span id="line-303">    this(startRow, endRow, columns, startTime, endTime, maxVersions);</span>
-<span class="source-line-no">304</span><span id="line-304">    if (labels != null) {</span>
-<span class="source-line-no">305</span><span id="line-305">      this.labels.addAll(labels);</span>
-<span class="source-line-no">306</span><span id="line-306">    }</span>
-<span class="source-line-no">307</span><span id="line-307">  }</span>
-<span class="source-line-no">308</span><span id="line-308"></span>
-<span class="source-line-no">309</span><span id="line-309">  public RowSpec(byte[] startRow, byte[] endRow, Collection&lt;byte[]&gt; columns, long startTime,</span>
-<span class="source-line-no">310</span><span id="line-310">    long endTime, int maxVersions) {</span>
-<span class="source-line-no">311</span><span id="line-311">    this.row = startRow;</span>
-<span class="source-line-no">312</span><span id="line-312">    this.endRow = endRow;</span>
-<span class="source-line-no">313</span><span id="line-313">    if (columns != null) {</span>
-<span class="source-line-no">314</span><span id="line-314">      this.columns.addAll(columns);</span>
-<span class="source-line-no">315</span><span id="line-315">    }</span>
-<span class="source-line-no">316</span><span id="line-316">    this.startTime = startTime;</span>
-<span class="source-line-no">317</span><span id="line-317">    this.endTime = endTime;</span>
-<span class="source-line-no">318</span><span id="line-318">    this.maxVersions = maxVersions;</span>
-<span class="source-line-no">319</span><span id="line-319">  }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321">  public boolean isSingleRow() {</span>
-<span class="source-line-no">322</span><span id="line-322">    return endRow == null;</span>
-<span class="source-line-no">323</span><span id="line-323">  }</span>
-<span class="source-line-no">324</span><span id="line-324"></span>
-<span class="source-line-no">325</span><span id="line-325">  public int getMaxVersions() {</span>
-<span class="source-line-no">326</span><span id="line-326">    return maxVersions;</span>
-<span class="source-line-no">327</span><span id="line-327">  }</span>
-<span class="source-line-no">328</span><span id="line-328"></span>
-<span class="source-line-no">329</span><span id="line-329">  public void setMaxVersions(final int maxVersions) {</span>
-<span class="source-line-no">330</span><span id="line-330">    this.maxVersions = maxVersions;</span>
-<span class="source-line-no">331</span><span id="line-331">  }</span>
-<span class="source-line-no">332</span><span id="line-332"></span>
-<span class="source-line-no">333</span><span id="line-333">  public int getMaxValues() {</span>
-<span class="source-line-no">334</span><span id="line-334">    return maxValues;</span>
-<span class="source-line-no">335</span><span id="line-335">  }</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337">  public void setMaxValues(final int maxValues) {</span>
-<span class="source-line-no">338</span><span id="line-338">    this.maxValues = maxValues;</span>
-<span class="source-line-no">339</span><span id="line-339">  }</span>
-<span class="source-line-no">340</span><span id="line-340"></span>
-<span class="source-line-no">341</span><span id="line-341">  public boolean hasColumns() {</span>
-<span class="source-line-no">342</span><span id="line-342">    return !columns.isEmpty();</span>
-<span class="source-line-no">343</span><span id="line-343">  }</span>
-<span class="source-line-no">344</span><span id="line-344"></span>
-<span class="source-line-no">345</span><span id="line-345">  public boolean hasLabels() {</span>
-<span class="source-line-no">346</span><span id="line-346">    return !labels.isEmpty();</span>
-<span class="source-line-no">347</span><span id="line-347">  }</span>
-<span class="source-line-no">348</span><span id="line-348"></span>
-<span class="source-line-no">349</span><span id="line-349">  public byte[] getRow() {</span>
-<span class="source-line-no">350</span><span id="line-350">    return row;</span>
-<span class="source-line-no">351</span><span id="line-351">  }</span>
-<span class="source-line-no">352</span><span id="line-352"></span>
-<span class="source-line-no">353</span><span id="line-353">  public byte[] getStartRow() {</span>
-<span class="source-line-no">354</span><span id="line-354">    return row;</span>
-<span class="source-line-no">355</span><span id="line-355">  }</span>
-<span class="source-line-no">356</span><span id="line-356"></span>
-<span class="source-line-no">357</span><span id="line-357">  public boolean hasEndRow() {</span>
-<span class="source-line-no">358</span><span id="line-358">    return endRow != null;</span>
-<span class="source-line-no">359</span><span id="line-359">  }</span>
-<span class="source-line-no">360</span><span id="line-360"></span>
-<span class="source-line-no">361</span><span id="line-361">  public byte[] getEndRow() {</span>
-<span class="source-line-no">362</span><span id="line-362">    return endRow;</span>
-<span class="source-line-no">363</span><span id="line-363">  }</span>
-<span class="source-line-no">364</span><span id="line-364"></span>
-<span class="source-line-no">365</span><span id="line-365">  public void addColumn(final byte[] column) {</span>
-<span class="source-line-no">366</span><span id="line-366">    columns.add(column);</span>
-<span class="source-line-no">367</span><span id="line-367">  }</span>
-<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369">  public byte[][] getColumns() {</span>
-<span class="source-line-no">370</span><span id="line-370">    return columns.toArray(new byte[columns.size()][]);</span>
-<span class="source-line-no">371</span><span id="line-371">  }</span>
-<span class="source-line-no">372</span><span id="line-372"></span>
-<span class="source-line-no">373</span><span id="line-373">  public List&lt;String&gt; getLabels() {</span>
-<span class="source-line-no">374</span><span id="line-374">    return labels;</span>
-<span class="source-line-no">375</span><span id="line-375">  }</span>
-<span class="source-line-no">376</span><span id="line-376"></span>
-<span class="source-line-no">377</span><span id="line-377">  public boolean hasTimestamp() {</span>
-<span class="source-line-no">378</span><span id="line-378">    return (startTime == 0) &amp;&amp; (endTime != Long.MAX_VALUE);</span>
-<span class="source-line-no">379</span><span id="line-379">  }</span>
-<span class="source-line-no">380</span><span id="line-380"></span>
-<span class="source-line-no">381</span><span id="line-381">  public long getTimestamp() {</span>
-<span class="source-line-no">382</span><span id="line-382">    return endTime;</span>
-<span class="source-line-no">383</span><span id="line-383">  }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">  public long getStartTime() {</span>
-<span class="source-line-no">386</span><span id="line-386">    return startTime;</span>
-<span class="source-line-no">387</span><span id="line-387">  }</span>
-<span class="source-line-no">388</span><span id="line-388"></span>
-<span class="source-line-no">389</span><span id="line-389">  public void setStartTime(final long startTime) {</span>
-<span class="source-line-no">390</span><span id="line-390">    this.startTime = startTime;</span>
-<span class="source-line-no">391</span><span id="line-391">  }</span>
-<span class="source-line-no">392</span><span id="line-392"></span>
-<span class="source-line-no">393</span><span id="line-393">  public long getEndTime() {</span>
-<span class="source-line-no">394</span><span id="line-394">    return endTime;</span>
-<span class="source-line-no">395</span><span id="line-395">  }</span>
-<span class="source-line-no">396</span><span id="line-396"></span>
-<span class="source-line-no">397</span><span id="line-397">  public void setEndTime(long endTime) {</span>
-<span class="source-line-no">398</span><span id="line-398">    this.endTime = endTime;</span>
-<span class="source-line-no">399</span><span id="line-399">  }</span>
-<span class="source-line-no">400</span><span id="line-400"></span>
-<span class="source-line-no">401</span><span id="line-401">  @Override</span>
-<span class="source-line-no">402</span><span id="line-402">  public String toString() {</span>
-<span class="source-line-no">403</span><span id="line-403">    StringBuilder result = new StringBuilder();</span>
-<span class="source-line-no">404</span><span id="line-404">    result.append("{startRow =&gt; '");</span>
-<span class="source-line-no">405</span><span id="line-405">    if (row != null) {</span>
-<span class="source-line-no">406</span><span id="line-406">      result.append(Bytes.toString(row));</span>
-<span class="source-line-no">407</span><span id="line-407">    }</span>
-<span class="source-line-no">408</span><span id="line-408">    result.append("', endRow =&gt; '");</span>
-<span class="source-line-no">409</span><span id="line-409">    if (endRow != null) {</span>
-<span class="source-line-no">410</span><span id="line-410">      result.append(Bytes.toString(endRow));</span>
-<span class="source-line-no">411</span><span id="line-411">    }</span>
-<span class="source-line-no">412</span><span id="line-412">    result.append("', columns =&gt; [");</span>
-<span class="source-line-no">413</span><span id="line-413">    for (byte[] col : columns) {</span>
-<span class="source-line-no">414</span><span id="line-414">      result.append(" '");</span>
-<span class="source-line-no">415</span><span id="line-415">      result.append(Bytes.toString(col));</span>
-<span class="source-line-no">416</span><span id="line-416">      result.append("'");</span>
-<span class="source-line-no">417</span><span id="line-417">    }</span>
-<span class="source-line-no">418</span><span id="line-418">    result.append(" ], startTime =&gt; ");</span>
-<span class="source-line-no">419</span><span id="line-419">    result.append(Long.toString(startTime));</span>
-<span class="source-line-no">420</span><span id="line-420">    result.append(", endTime =&gt; ");</span>
-<span class="source-line-no">421</span><span id="line-421">    result.append(Long.toString(endTime));</span>
-<span class="source-line-no">422</span><span id="line-422">    result.append(", maxVersions =&gt; ");</span>
-<span class="source-line-no">423</span><span id="line-423">    result.append(Integer.toString(maxVersions));</span>
-<span class="source-line-no">424</span><span id="line-424">    result.append(", maxValues =&gt; ");</span>
-<span class="source-line-no">425</span><span id="line-425">    result.append(Integer.toString(maxValues));</span>
-<span class="source-line-no">426</span><span id="line-426">    result.append("}");</span>
-<span class="source-line-no">427</span><span id="line-427">    return result.toString();</span>
-<span class="source-line-no">428</span><span id="line-428">  }</span>
-<span class="source-line-no">429</span><span id="line-429">}</span>
+<span class="source-line-no">049</span><span id="line-49">  private boolean partialTimeRange;</span>
+<span class="source-line-no">050</span><span id="line-50"></span>
+<span class="source-line-no">051</span><span id="line-51">  public RowSpec(String path) throws IllegalArgumentException {</span>
+<span class="source-line-no">052</span><span id="line-52">    this(path, null);</span>
+<span class="source-line-no">053</span><span id="line-53">  }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  public RowSpec(String path, String keyEncoding) throws IllegalArgumentException {</span>
+<span class="source-line-no">056</span><span id="line-56">    int i = 0;</span>
+<span class="source-line-no">057</span><span id="line-57">    while (path.charAt(i) == '/') {</span>
+<span class="source-line-no">058</span><span id="line-58">      i++;</span>
+<span class="source-line-no">059</span><span id="line-59">    }</span>
+<span class="source-line-no">060</span><span id="line-60">    i = parseRowKeys(path, i);</span>
+<span class="source-line-no">061</span><span id="line-61">    i = parseColumns(path, i);</span>
+<span class="source-line-no">062</span><span id="line-62">    i = parseTimestamp(path, i);</span>
+<span class="source-line-no">063</span><span id="line-63">    i = parseQueryParams(path, i);</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65">    if (keyEncoding != null) {</span>
+<span class="source-line-no">066</span><span id="line-66">      // See https://en.wikipedia.org/wiki/Base64#Variants_summary_table</span>
+<span class="source-line-no">067</span><span id="line-67">      Base64.Decoder decoder;</span>
+<span class="source-line-no">068</span><span id="line-68">      switch (keyEncoding) {</span>
+<span class="source-line-no">069</span><span id="line-69">        case "b64":</span>
+<span class="source-line-no">070</span><span id="line-70">        case "base64":</span>
+<span class="source-line-no">071</span><span id="line-71">        case "b64url":</span>
+<span class="source-line-no">072</span><span id="line-72">        case "base64url":</span>
+<span class="source-line-no">073</span><span id="line-73">          decoder = Base64.getUrlDecoder();</span>
+<span class="source-line-no">074</span><span id="line-74">          break;</span>
+<span class="source-line-no">075</span><span id="line-75">        case "b64basic":</span>
+<span class="source-line-no">076</span><span id="line-76">        case "base64basic":</span>
+<span class="source-line-no">077</span><span id="line-77">          decoder = Base64.getDecoder();</span>
+<span class="source-line-no">078</span><span id="line-78">          break;</span>
+<span class="source-line-no">079</span><span id="line-79">        default:</span>
+<span class="source-line-no">080</span><span id="line-80">          throw new IllegalArgumentException("unknown key encoding '" + keyEncoding + "'");</span>
+<span class="source-line-no">081</span><span id="line-81">      }</span>
+<span class="source-line-no">082</span><span id="line-82">      this.row = decoder.decode(this.row);</span>
+<span class="source-line-no">083</span><span id="line-83">      if (this.endRow != null) {</span>
+<span class="source-line-no">084</span><span id="line-84">        this.endRow = decoder.decode(this.endRow);</span>
+<span class="source-line-no">085</span><span id="line-85">      }</span>
+<span class="source-line-no">086</span><span id="line-86">      TreeSet&lt;byte[]&gt; decodedColumns = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);</span>
+<span class="source-line-no">087</span><span id="line-87">      for (byte[] encodedColumn : this.columns) {</span>
+<span class="source-line-no">088</span><span id="line-88">        decodedColumns.add(decoder.decode(encodedColumn));</span>
+<span class="source-line-no">089</span><span id="line-89">      }</span>
+<span class="source-line-no">090</span><span id="line-90">      this.columns = decodedColumns;</span>
+<span class="source-line-no">091</span><span id="line-91">    }</span>
+<span class="source-line-no">092</span><span id="line-92">  }</span>
+<span class="source-line-no">093</span><span id="line-93"></span>
+<span class="source-line-no">094</span><span id="line-94">  private int parseRowKeys(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">095</span><span id="line-95">    String startRow = null, endRow = null;</span>
+<span class="source-line-no">096</span><span id="line-96">    try {</span>
+<span class="source-line-no">097</span><span id="line-97">      StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">098</span><span id="line-98">      char c;</span>
+<span class="source-line-no">099</span><span id="line-99">      while (i &lt; path.length() &amp;&amp; (c = path.charAt(i)) != '/') {</span>
+<span class="source-line-no">100</span><span id="line-100">        sb.append(c);</span>
+<span class="source-line-no">101</span><span id="line-101">        i++;</span>
+<span class="source-line-no">102</span><span id="line-102">      }</span>
+<span class="source-line-no">103</span><span id="line-103">      i++;</span>
+<span class="source-line-no">104</span><span id="line-104">      String row = startRow = sb.toString();</span>
+<span class="source-line-no">105</span><span id="line-105">      int idx = startRow.indexOf(',');</span>
+<span class="source-line-no">106</span><span id="line-106">      if (idx != -1) {</span>
+<span class="source-line-no">107</span><span id="line-107">        startRow = URLDecoder.decode(row.substring(0, idx), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">108</span><span id="line-108">        endRow = URLDecoder.decode(row.substring(idx + 1), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">109</span><span id="line-109">      } else {</span>
+<span class="source-line-no">110</span><span id="line-110">        startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">111</span><span id="line-111">      }</span>
+<span class="source-line-no">112</span><span id="line-112">    } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">113</span><span id="line-113">      throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">114</span><span id="line-114">    } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">115</span><span id="line-115">      throw new RuntimeException(e);</span>
+<span class="source-line-no">116</span><span id="line-116">    }</span>
+<span class="source-line-no">117</span><span id="line-117">    // HBase does not support wildcards on row keys so we will emulate a</span>
+<span class="source-line-no">118</span><span id="line-118">    // suffix glob by synthesizing appropriate start and end row keys for</span>
+<span class="source-line-no">119</span><span id="line-119">    // table scanning</span>
+<span class="source-line-no">120</span><span id="line-120">    if (startRow.charAt(startRow.length() - 1) == '*') {</span>
+<span class="source-line-no">121</span><span id="line-121">      if (endRow != null)</span>
+<span class="source-line-no">122</span><span id="line-122">        throw new IllegalArgumentException("invalid path: start row " + "specified with wildcard");</span>
+<span class="source-line-no">123</span><span id="line-123">      this.row = Bytes.toBytes(startRow.substring(0, startRow.lastIndexOf("*")));</span>
+<span class="source-line-no">124</span><span id="line-124">      this.endRow = new byte[this.row.length + 1];</span>
+<span class="source-line-no">125</span><span id="line-125">      System.arraycopy(this.row, 0, this.endRow, 0, this.row.length);</span>
+<span class="source-line-no">126</span><span id="line-126">      this.endRow[this.row.length] = (byte) 255;</span>
+<span class="source-line-no">127</span><span id="line-127">    } else {</span>
+<span class="source-line-no">128</span><span id="line-128">      this.row = Bytes.toBytes(startRow.toString());</span>
+<span class="source-line-no">129</span><span id="line-129">      if (endRow != null) {</span>
+<span class="source-line-no">130</span><span id="line-130">        this.endRow = Bytes.toBytes(endRow.toString());</span>
+<span class="source-line-no">131</span><span id="line-131">      }</span>
+<span class="source-line-no">132</span><span id="line-132">    }</span>
+<span class="source-line-no">133</span><span id="line-133">    return i;</span>
+<span class="source-line-no">134</span><span id="line-134">  }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">  private int parseColumns(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">137</span><span id="line-137">    if (i &gt;= path.length()) {</span>
+<span class="source-line-no">138</span><span id="line-138">      return i;</span>
+<span class="source-line-no">139</span><span id="line-139">    }</span>
+<span class="source-line-no">140</span><span id="line-140">    try {</span>
+<span class="source-line-no">141</span><span id="line-141">      char c;</span>
+<span class="source-line-no">142</span><span id="line-142">      StringBuilder column = new StringBuilder();</span>
+<span class="source-line-no">143</span><span id="line-143">      while (i &lt; path.length() &amp;&amp; (c = path.charAt(i)) != '/') {</span>
+<span class="source-line-no">144</span><span id="line-144">        if (c == ',') {</span>
+<span class="source-line-no">145</span><span id="line-145">          if (column.length() &lt; 1) {</span>
+<span class="source-line-no">146</span><span id="line-146">            throw new IllegalArgumentException("invalid path");</span>
+<span class="source-line-no">147</span><span id="line-147">          }</span>
+<span class="source-line-no">148</span><span id="line-148">          String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">149</span><span id="line-149">          this.columns.add(Bytes.toBytes(s));</span>
+<span class="source-line-no">150</span><span id="line-150">          column.setLength(0);</span>
+<span class="source-line-no">151</span><span id="line-151">          i++;</span>
+<span class="source-line-no">152</span><span id="line-152">          continue;</span>
+<span class="source-line-no">153</span><span id="line-153">        }</span>
+<span class="source-line-no">154</span><span id="line-154">        column.append(c);</span>
+<span class="source-line-no">155</span><span id="line-155">        i++;</span>
+<span class="source-line-no">156</span><span id="line-156">      }</span>
+<span class="source-line-no">157</span><span id="line-157">      i++;</span>
+<span class="source-line-no">158</span><span id="line-158">      // trailing list entry</span>
+<span class="source-line-no">159</span><span id="line-159">      if (column.length() &gt; 0) {</span>
+<span class="source-line-no">160</span><span id="line-160">        String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">161</span><span id="line-161">        this.columns.add(Bytes.toBytes(s));</span>
+<span class="source-line-no">162</span><span id="line-162">      }</span>
+<span class="source-line-no">163</span><span id="line-163">    } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">164</span><span id="line-164">      throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">165</span><span id="line-165">    } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">166</span><span id="line-166">      // shouldn't happen</span>
+<span class="source-line-no">167</span><span id="line-167">      throw new RuntimeException(e);</span>
+<span class="source-line-no">168</span><span id="line-168">    }</span>
+<span class="source-line-no">169</span><span id="line-169">    return i;</span>
+<span class="source-line-no">170</span><span id="line-170">  }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172">  private int parseTimestamp(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">173</span><span id="line-173">    if (i &gt;= path.length()) {</span>
+<span class="source-line-no">174</span><span id="line-174">      return i;</span>
+<span class="source-line-no">175</span><span id="line-175">    }</span>
+<span class="source-line-no">176</span><span id="line-176">    long time0 = 0, time1 = 0;</span>
+<span class="source-line-no">177</span><span id="line-177">    try {</span>
+<span class="source-line-no">178</span><span id="line-178">      char c = 0;</span>
+<span class="source-line-no">179</span><span id="line-179">      StringBuilder stamp = new StringBuilder();</span>
+<span class="source-line-no">180</span><span id="line-180">      while (i &lt; path.length()) {</span>
+<span class="source-line-no">181</span><span id="line-181">        c = path.charAt(i);</span>
+<span class="source-line-no">182</span><span id="line-182">        if (c == '/' || c == ',') {</span>
+<span class="source-line-no">183</span><span id="line-183">          break;</span>
+<span class="source-line-no">184</span><span id="line-184">        }</span>
+<span class="source-line-no">185</span><span id="line-185">        stamp.append(c);</span>
+<span class="source-line-no">186</span><span id="line-186">        i++;</span>
+<span class="source-line-no">187</span><span id="line-187">      }</span>
+<span class="source-line-no">188</span><span id="line-188">      try {</span>
+<span class="source-line-no">189</span><span id="line-189">        time0 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">190</span><span id="line-190">      } catch (NumberFormatException e) {</span>
+<span class="source-line-no">191</span><span id="line-191">        throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">192</span><span id="line-192">      }</span>
+<span class="source-line-no">193</span><span id="line-193">      if (c == ',') {</span>
+<span class="source-line-no">194</span><span id="line-194">        stamp = new StringBuilder();</span>
+<span class="source-line-no">195</span><span id="line-195">        i++;</span>
+<span class="source-line-no">196</span><span id="line-196">        while (i &lt; path.length() &amp;&amp; ((c = path.charAt(i)) != '/')) {</span>
+<span class="source-line-no">197</span><span id="line-197">          stamp.append(c);</span>
+<span class="source-line-no">198</span><span id="line-198">          i++;</span>
+<span class="source-line-no">199</span><span id="line-199">        }</span>
+<span class="source-line-no">200</span><span id="line-200">        try {</span>
+<span class="source-line-no">201</span><span id="line-201">          time1 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">202</span><span id="line-202">        } catch (NumberFormatException e) {</span>
+<span class="source-line-no">203</span><span id="line-203">          throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">204</span><span id="line-204">        }</span>
+<span class="source-line-no">205</span><span id="line-205">      }</span>
+<span class="source-line-no">206</span><span id="line-206">      if (c == '/') {</span>
+<span class="source-line-no">207</span><span id="line-207">        i++;</span>
+<span class="source-line-no">208</span><span id="line-208">      }</span>
+<span class="source-line-no">209</span><span id="line-209">    } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">210</span><span id="line-210">      throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">211</span><span id="line-211">    } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">212</span><span id="line-212">      // shouldn't happen</span>
+<span class="source-line-no">213</span><span id="line-213">      throw new RuntimeException(e);</span>
+<span class="source-line-no">214</span><span id="line-214">    }</span>
+<span class="source-line-no">215</span><span id="line-215">    if (time1 != 0) {</span>
+<span class="source-line-no">216</span><span id="line-216">      startTime = time0;</span>
+<span class="source-line-no">217</span><span id="line-217">      endTime = time1;</span>
+<span class="source-line-no">218</span><span id="line-218">    } else {</span>
+<span class="source-line-no">219</span><span id="line-219">      endTime = time0;</span>
+<span class="source-line-no">220</span><span id="line-220">      partialTimeRange = true;</span>
+<span class="source-line-no">221</span><span id="line-221">    }</span>
+<span class="source-line-no">222</span><span id="line-222">    return i;</span>
+<span class="source-line-no">223</span><span id="line-223">  }</span>
+<span class="source-line-no">224</span><span id="line-224"></span>
+<span class="source-line-no">225</span><span id="line-225">  private int parseQueryParams(final String path, int i) {</span>
+<span class="source-line-no">226</span><span id="line-226">    if (i &gt;= path.length()) {</span>
+<span class="source-line-no">227</span><span id="line-227">      return i;</span>
+<span class="source-line-no">228</span><span id="line-228">    }</span>
+<span class="source-line-no">229</span><span id="line-229">    StringBuilder query = new StringBuilder();</span>
+<span class="source-line-no">230</span><span id="line-230">    try {</span>
+<span class="source-line-no">231</span><span id="line-231">      query.append(URLDecoder.decode(path.substring(i), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">232</span><span id="line-232">    } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">233</span><span id="line-233">      // should not happen</span>
+<span class="source-line-no">234</span><span id="line-234">      throw new RuntimeException(e);</span>
+<span class="source-line-no">235</span><span id="line-235">    }</span>
+<span class="source-line-no">236</span><span id="line-236">    i += query.length();</span>
+<span class="source-line-no">237</span><span id="line-237">    int j = 0;</span>
+<span class="source-line-no">238</span><span id="line-238">    while (j &lt; query.length()) {</span>
+<span class="source-line-no">239</span><span id="line-239">      char c = query.charAt(j);</span>
+<span class="source-line-no">240</span><span id="line-240">      if (c != '?' &amp;&amp; c != '&amp;') {</span>
+<span class="source-line-no">241</span><span id="line-241">        break;</span>
+<span class="source-line-no">242</span><span id="line-242">      }</span>
+<span class="source-line-no">243</span><span id="line-243">      if (++j &gt; query.length()) {</span>
+<span class="source-line-no">244</span><span id="line-244">        throw new IllegalArgumentException("malformed query parameter");</span>
+<span class="source-line-no">245</span><span id="line-245">      }</span>
+<span class="source-line-no">246</span><span id="line-246">      char what = query.charAt(j);</span>
+<span class="source-line-no">247</span><span id="line-247">      if (++j &gt; query.length()) {</span>
+<span class="source-line-no">248</span><span id="line-248">        break;</span>
+<span class="source-line-no">249</span><span id="line-249">      }</span>
+<span class="source-line-no">250</span><span id="line-250">      c = query.charAt(j);</span>
+<span class="source-line-no">251</span><span id="line-251">      if (c != '=') {</span>
+<span class="source-line-no">252</span><span id="line-252">        throw new IllegalArgumentException("malformed query parameter");</span>
+<span class="source-line-no">253</span><span id="line-253">      }</span>
+<span class="source-line-no">254</span><span id="line-254">      if (++j &gt; query.length()) {</span>
+<span class="source-line-no">255</span><span id="line-255">        break;</span>
+<span class="source-line-no">256</span><span id="line-256">      }</span>
+<span class="source-line-no">257</span><span id="line-257">      switch (what) {</span>
+<span class="source-line-no">258</span><span id="line-258">        case 'm': {</span>
+<span class="source-line-no">259</span><span id="line-259">          StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">260</span><span id="line-260">          while (j &lt;= query.length()) {</span>
+<span class="source-line-no">261</span><span id="line-261">            c = query.charAt(j);</span>
+<span class="source-line-no">262</span><span id="line-262">            if (c &lt; '0' || c &gt; '9') {</span>
+<span class="source-line-no">263</span><span id="line-263">              j--;</span>
+<span class="source-line-no">264</span><span id="line-264">              break;</span>
+<span class="source-line-no">265</span><span id="line-265">            }</span>
+<span class="source-line-no">266</span><span id="line-266">            sb.append(c);</span>
+<span class="source-line-no">267</span><span id="line-267">          }</span>
+<span class="source-line-no">268</span><span id="line-268">          maxVersions = Integer.parseInt(sb.toString());</span>
+<span class="source-line-no">269</span><span id="line-269">        }</span>
+<span class="source-line-no">270</span><span id="line-270">          break;</span>
+<span class="source-line-no">271</span><span id="line-271">        case 'n': {</span>
+<span class="source-line-no">272</span><span id="line-272">          StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">273</span><span id="line-273">          while (j &lt;= query.length()) {</span>
+<span class="source-line-no">274</span><span id="line-274">            c = query.charAt(j);</span>
+<span class="source-line-no">275</span><span id="line-275">            if (c &lt; '0' || c &gt; '9') {</span>
+<span class="source-line-no">276</span><span id="line-276">              j--;</span>
+<span class="source-line-no">277</span><span id="line-277">              break;</span>
+<span class="source-line-no">278</span><span id="line-278">            }</span>
+<span class="source-line-no">279</span><span id="line-279">            sb.append(c);</span>
+<span class="source-line-no">280</span><span id="line-280">          }</span>
+<span class="source-line-no">281</span><span id="line-281">          maxValues = Integer.parseInt(sb.toString());</span>
+<span class="source-line-no">282</span><span id="line-282">        }</span>
+<span class="source-line-no">283</span><span id="line-283">          break;</span>
+<span class="source-line-no">284</span><span id="line-284">        default:</span>
+<span class="source-line-no">285</span><span id="line-285">          throw new IllegalArgumentException("unknown parameter '" + c + "'");</span>
+<span class="source-line-no">286</span><span id="line-286">      }</span>
+<span class="source-line-no">287</span><span id="line-287">    }</span>
+<span class="source-line-no">288</span><span id="line-288">    return i;</span>
+<span class="source-line-no">289</span><span id="line-289">  }</span>
+<span class="source-line-no">290</span><span id="line-290"></span>
+<span class="source-line-no">291</span><span id="line-291">  public RowSpec(byte[] startRow, byte[] endRow, byte[][] columns, long startTime, long endTime,</span>
+<span class="source-line-no">292</span><span id="line-292">    int maxVersions) {</span>
+<span class="source-line-no">293</span><span id="line-293">    this.row = startRow;</span>
+<span class="source-line-no">294</span><span id="line-294">    this.endRow = endRow;</span>
+<span class="source-line-no">295</span><span id="line-295">    if (columns != null) {</span>
+<span class="source-line-no">296</span><span id="line-296">      Collections.addAll(this.columns, columns);</span>
+<span class="source-line-no">297</span><span id="line-297">    }</span>
+<span class="source-line-no">298</span><span id="line-298">    this.startTime = startTime;</span>
+<span class="source-line-no">299</span><span id="line-299">    this.endTime = endTime;</span>
+<span class="source-line-no">300</span><span id="line-300">    this.maxVersions = maxVersions;</span>
+<span class="source-line-no">301</span><span id="line-301">  }</span>
+<span class="source-line-no">302</span><span id="line-302"></span>
+<span class="source-line-no">303</span><span id="line-303">  public RowSpec(byte[] startRow, byte[] endRow, Collection&lt;byte[]&gt; columns, long startTime,</span>
+<span class="source-line-no">304</span><span id="line-304">    long endTime, int maxVersions, Collection&lt;String&gt; labels) {</span>
+<span class="source-line-no">305</span><span id="line-305">    this(startRow, endRow, columns, startTime, endTime, maxVersions);</span>
+<span class="source-line-no">306</span><span id="line-306">    if (labels != null) {</span>
+<span class="source-line-no">307</span><span id="line-307">      this.labels.addAll(labels);</span>
+<span class="source-line-no">308</span><span id="line-308">    }</span>
+<span class="source-line-no">309</span><span id="line-309">  }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311">  public RowSpec(byte[] startRow, byte[] endRow, Collection&lt;byte[]&gt; columns, long startTime,</span>
+<span class="source-line-no">312</span><span id="line-312">    long endTime, int maxVersions) {</span>
+<span class="source-line-no">313</span><span id="line-313">    this.row = startRow;</span>
+<span class="source-line-no">314</span><span id="line-314">    this.endRow = endRow;</span>
+<span class="source-line-no">315</span><span id="line-315">    if (columns != null) {</span>
+<span class="source-line-no">316</span><span id="line-316">      this.columns.addAll(columns);</span>
+<span class="source-line-no">317</span><span id="line-317">    }</span>
+<span class="source-line-no">318</span><span id="line-318">    this.startTime = startTime;</span>
+<span class="source-line-no">319</span><span id="line-319">    this.endTime = endTime;</span>
+<span class="source-line-no">320</span><span id="line-320">    this.maxVersions = maxVersions;</span>
+<span class="source-line-no">321</span><span id="line-321">  }</span>
+<span class="source-line-no">322</span><span id="line-322"></span>
+<span class="source-line-no">323</span><span id="line-323">  public boolean isSingleRow() {</span>
+<span class="source-line-no">324</span><span id="line-324">    return endRow == null;</span>
+<span class="source-line-no">325</span><span id="line-325">  }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327">  public int getMaxVersions() {</span>
+<span class="source-line-no">328</span><span id="line-328">    return maxVersions;</span>
+<span class="source-line-no">329</span><span id="line-329">  }</span>
+<span class="source-line-no">330</span><span id="line-330"></span>
+<span class="source-line-no">331</span><span id="line-331">  public void setMaxVersions(final int maxVersions) {</span>
+<span class="source-line-no">332</span><span id="line-332">    this.maxVersions = maxVersions;</span>
+<span class="source-line-no">333</span><span id="line-333">  }</span>
+<span class="source-line-no">334</span><span id="line-334"></span>
+<span class="source-line-no">335</span><span id="line-335">  public int getMaxValues() {</span>
+<span class="source-line-no">336</span><span id="line-336">    return maxValues;</span>
+<span class="source-line-no">337</span><span id="line-337">  }</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339">  public void setMaxValues(final int maxValues) {</span>
+<span class="source-line-no">340</span><span id="line-340">    this.maxValues = maxValues;</span>
+<span class="source-line-no">341</span><span id="line-341">  }</span>
+<span class="source-line-no">342</span><span id="line-342"></span>
+<span class="source-line-no">343</span><span id="line-343">  public boolean hasColumns() {</span>
+<span class="source-line-no">344</span><span id="line-344">    return !columns.isEmpty();</span>
+<span class="source-line-no">345</span><span id="line-345">  }</span>
+<span class="source-line-no">346</span><span id="line-346"></span>
+<span class="source-line-no">347</span><span id="line-347">  public boolean hasLabels() {</span>
+<span class="source-line-no">348</span><span id="line-348">    return !labels.isEmpty();</span>
+<span class="source-line-no">349</span><span id="line-349">  }</span>
+<span class="source-line-no">350</span><span id="line-350"></span>
+<span class="source-line-no">351</span><span id="line-351">  public byte[] getRow() {</span>
+<span class="source-line-no">352</span><span id="line-352">    return row;</span>
+<span class="source-line-no">353</span><span id="line-353">  }</span>
+<span class="source-line-no">354</span><span id="line-354"></span>
+<span class="source-line-no">355</span><span id="line-355">  public byte[] getStartRow() {</span>
+<span class="source-line-no">356</span><span id="line-356">    return row;</span>
+<span class="source-line-no">357</span><span id="line-357">  }</span>
+<span class="source-line-no">358</span><span id="line-358"></span>
+<span class="source-line-no">359</span><span id="line-359">  public boolean hasEndRow() {</span>
+<span class="source-line-no">360</span><span id="line-360">    return endRow != null;</span>
+<span class="source-line-no">361</span><span id="line-361">  }</span>
+<span class="source-line-no">362</span><span id="line-362"></span>
+<span class="source-line-no">363</span><span id="line-363">  public byte[] getEndRow() {</span>
+<span class="source-line-no">364</span><span id="line-364">    return endRow;</span>
+<span class="source-line-no">365</span><span id="line-365">  }</span>
+<span class="source-line-no">366</span><span id="line-366"></span>
+<span class="source-line-no">367</span><span id="line-367">  public void addColumn(final byte[] column) {</span>
+<span class="source-line-no">368</span><span id="line-368">    columns.add(column);</span>
+<span class="source-line-no">369</span><span id="line-369">  }</span>
+<span class="source-line-no">370</span><span id="line-370"></span>
+<span class="source-line-no">371</span><span id="line-371">  public byte[][] getColumns() {</span>
+<span class="source-line-no">372</span><span id="line-372">    return columns.toArray(new byte[columns.size()][]);</span>
+<span class="source-line-no">373</span><span id="line-373">  }</span>
+<span class="source-line-no">374</span><span id="line-374"></span>
+<span class="source-line-no">375</span><span id="line-375">  public List&lt;String&gt; getLabels() {</span>
+<span class="source-line-no">376</span><span id="line-376">    return labels;</span>
+<span class="source-line-no">377</span><span id="line-377">  }</span>
+<span class="source-line-no">378</span><span id="line-378"></span>
+<span class="source-line-no">379</span><span id="line-379">  public boolean hasTimestamp() {</span>
+<span class="source-line-no">380</span><span id="line-380">    return (startTime == 0) &amp;&amp; (endTime != Long.MAX_VALUE);</span>
+<span class="source-line-no">381</span><span id="line-381">  }</span>
+<span class="source-line-no">382</span><span id="line-382"></span>
+<span class="source-line-no">383</span><span id="line-383">  public long getTimestamp() {</span>
+<span class="source-line-no">384</span><span id="line-384">    return endTime;</span>
+<span class="source-line-no">385</span><span id="line-385">  }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387">  public long getStartTime() {</span>
+<span class="source-line-no">388</span><span id="line-388">    return startTime;</span>
+<span class="source-line-no">389</span><span id="line-389">  }</span>
+<span class="source-line-no">390</span><span id="line-390"></span>
+<span class="source-line-no">391</span><span id="line-391">  public void setStartTime(final long startTime) {</span>
+<span class="source-line-no">392</span><span id="line-392">    this.startTime = startTime;</span>
+<span class="source-line-no">393</span><span id="line-393">  }</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395">  public long getEndTime() {</span>
+<span class="source-line-no">396</span><span id="line-396">    return endTime;</span>
+<span class="source-line-no">397</span><span id="line-397">  }</span>
+<span class="source-line-no">398</span><span id="line-398"></span>
+<span class="source-line-no">399</span><span id="line-399">  public void setEndTime(long endTime) {</span>
+<span class="source-line-no">400</span><span id="line-400">    this.endTime = endTime;</span>
+<span class="source-line-no">401</span><span id="line-401">  }</span>
+<span class="source-line-no">402</span><span id="line-402"></span>
+<span class="source-line-no">403</span><span id="line-403">  @Override</span>
+<span class="source-line-no">404</span><span id="line-404">  public String toString() {</span>
+<span class="source-line-no">405</span><span id="line-405">    StringBuilder result = new StringBuilder();</span>
+<span class="source-line-no">406</span><span id="line-406">    result.append("{startRow =&gt; '");</span>
+<span class="source-line-no">407</span><span id="line-407">    if (row != null) {</span>
+<span class="source-line-no">408</span><span id="line-408">      result.append(Bytes.toString(row));</span>
+<span class="source-line-no">409</span><span id="line-409">    }</span>
+<span class="source-line-no">410</span><span id="line-410">    result.append("', endRow =&gt; '");</span>
+<span class="source-line-no">411</span><span id="line-411">    if (endRow != null) {</span>
+<span class="source-line-no">412</span><span id="line-412">      result.append(Bytes.toString(endRow));</span>
+<span class="source-line-no">413</span><span id="line-413">    }</span>
+<span class="source-line-no">414</span><span id="line-414">    result.append("', columns =&gt; [");</span>
+<span class="source-line-no">415</span><span id="line-415">    for (byte[] col : columns) {</span>
+<span class="source-line-no">416</span><span id="line-416">      result.append(" '");</span>
+<span class="source-line-no">417</span><span id="line-417">      result.append(Bytes.toString(col));</span>
+<span class="source-line-no">418</span><span id="line-418">      result.append("'");</span>
+<span class="source-line-no">419</span><span id="line-419">    }</span>
+<span class="source-line-no">420</span><span id="line-420">    result.append(" ], startTime =&gt; ");</span>
+<span class="source-line-no">421</span><span id="line-421">    result.append(Long.toString(startTime));</span>
+<span class="source-line-no">422</span><span id="line-422">    result.append(", endTime =&gt; ");</span>
+<span class="source-line-no">423</span><span id="line-423">    result.append(Long.toString(endTime));</span>
+<span class="source-line-no">424</span><span id="line-424">    result.append(", maxVersions =&gt; ");</span>
+<span class="source-line-no">425</span><span id="line-425">    result.append(Integer.toString(maxVersions));</span>
+<span class="source-line-no">426</span><span id="line-426">    result.append(", maxValues =&gt; ");</span>
+<span class="source-line-no">427</span><span id="line-427">    result.append(Integer.toString(maxValues));</span>
+<span class="source-line-no">428</span><span id="line-428">    result.append("}");</span>
+<span class="source-line-no">429</span><span id="line-429">    return result.toString();</span>
+<span class="source-line-no">430</span><span id="line-430">  }</span>
+<span class="source-line-no">431</span><span id="line-431"></span>
+<span class="source-line-no">432</span><span id="line-432">  public boolean isPartialTimeRange() {</span>
+<span class="source-line-no">433</span><span id="line-433">    return partialTimeRange;</span>
+<span class="source-line-no">434</span><span id="line-434">  }</span>
+<span class="source-line-no">435</span><span id="line-435"></span>
+<span class="source-line-no">436</span><span id="line-436">}</span>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html b/apidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
index 701990ee068..1ad47a841e8 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
@@ -104,119 +104,125 @@
 <span class="source-line-no">091</span><span id="line-91">          }</span>
 <span class="source-line-no">092</span><span id="line-92">        }</span>
 <span class="source-line-no">093</span><span id="line-93">      }</span>
-<span class="source-line-no">094</span><span id="line-94">      scan.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
-<span class="source-line-no">095</span><span id="line-95">      scan.readVersions(rowspec.getMaxVersions());</span>
-<span class="source-line-no">096</span><span id="line-96">      if (filter != null) {</span>
-<span class="source-line-no">097</span><span id="line-97">        scan.setFilter(filter);</span>
-<span class="source-line-no">098</span><span id="line-98">      }</span>
-<span class="source-line-no">099</span><span id="line-99">      if (caching &gt; 0) {</span>
-<span class="source-line-no">100</span><span id="line-100">        scan.setCaching(caching);</span>
-<span class="source-line-no">101</span><span id="line-101">      }</span>
-<span class="source-line-no">102</span><span id="line-102">      if (limit &gt; 0) {</span>
-<span class="source-line-no">103</span><span id="line-103">        scan.setLimit(limit);</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95">      if (rowspec.isPartialTimeRange()) {</span>
+<span class="source-line-no">096</span><span id="line-96">        scan.setTimestamp(rowspec.getTimestamp());</span>
+<span class="source-line-no">097</span><span id="line-97">      } else {</span>
+<span class="source-line-no">098</span><span id="line-98">        scan.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
+<span class="source-line-no">099</span><span id="line-99">      }</span>
+<span class="source-line-no">100</span><span id="line-100"></span>
+<span class="source-line-no">101</span><span id="line-101">      scan.readVersions(rowspec.getMaxVersions());</span>
+<span class="source-line-no">102</span><span id="line-102">      if (filter != null) {</span>
+<span class="source-line-no">103</span><span id="line-103">        scan.setFilter(filter);</span>
 <span class="source-line-no">104</span><span id="line-104">      }</span>
-<span class="source-line-no">105</span><span id="line-105">      scan.setCacheBlocks(cacheBlocks);</span>
-<span class="source-line-no">106</span><span id="line-106">      if (rowspec.hasLabels()) {</span>
-<span class="source-line-no">107</span><span id="line-107">        scan.setAuthorizations(new Authorizations(rowspec.getLabels()));</span>
-<span class="source-line-no">108</span><span id="line-108">      }</span>
-<span class="source-line-no">109</span><span id="line-109">      scanner = table.getScanner(scan);</span>
-<span class="source-line-no">110</span><span id="line-110">      cached = null;</span>
-<span class="source-line-no">111</span><span id="line-111">      id = Long.toString(EnvironmentEdgeManager.currentTime())</span>
-<span class="source-line-no">112</span><span id="line-112">        + Integer.toHexString(scanner.hashCode());</span>
-<span class="source-line-no">113</span><span id="line-113">    } finally {</span>
-<span class="source-line-no">114</span><span id="line-114">      table.close();</span>
-<span class="source-line-no">115</span><span id="line-115">    }</span>
-<span class="source-line-no">116</span><span id="line-116">  }</span>
-<span class="source-line-no">117</span><span id="line-117"></span>
-<span class="source-line-no">118</span><span id="line-118">  public String getID() {</span>
-<span class="source-line-no">119</span><span id="line-119">    return id;</span>
-<span class="source-line-no">120</span><span id="line-120">  }</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122">  @Override</span>
-<span class="source-line-no">123</span><span id="line-123">  public void close() {</span>
-<span class="source-line-no">124</span><span id="line-124">    if (scanner != null) {</span>
-<span class="source-line-no">125</span><span id="line-125">      scanner.close();</span>
-<span class="source-line-no">126</span><span id="line-126">      scanner = null;</span>
-<span class="source-line-no">127</span><span id="line-127">    }</span>
-<span class="source-line-no">128</span><span id="line-128">  }</span>
-<span class="source-line-no">129</span><span id="line-129"></span>
-<span class="source-line-no">130</span><span id="line-130">  @Override</span>
-<span class="source-line-no">131</span><span id="line-131">  public boolean hasNext() {</span>
-<span class="source-line-no">132</span><span id="line-132">    if (cache != null) {</span>
-<span class="source-line-no">133</span><span id="line-133">      return true;</span>
-<span class="source-line-no">134</span><span id="line-134">    }</span>
-<span class="source-line-no">135</span><span id="line-135">    if (rowI != null &amp;&amp; rowI.hasNext()) {</span>
-<span class="source-line-no">136</span><span id="line-136">      return true;</span>
-<span class="source-line-no">137</span><span id="line-137">    }</span>
-<span class="source-line-no">138</span><span id="line-138">    if (cached != null) {</span>
+<span class="source-line-no">105</span><span id="line-105">      if (caching &gt; 0) {</span>
+<span class="source-line-no">106</span><span id="line-106">        scan.setCaching(caching);</span>
+<span class="source-line-no">107</span><span id="line-107">      }</span>
+<span class="source-line-no">108</span><span id="line-108">      if (limit &gt; 0) {</span>
+<span class="source-line-no">109</span><span id="line-109">        scan.setLimit(limit);</span>
+<span class="source-line-no">110</span><span id="line-110">      }</span>
+<span class="source-line-no">111</span><span id="line-111">      scan.setCacheBlocks(cacheBlocks);</span>
+<span class="source-line-no">112</span><span id="line-112">      if (rowspec.hasLabels()) {</span>
+<span class="source-line-no">113</span><span id="line-113">        scan.setAuthorizations(new Authorizations(rowspec.getLabels()));</span>
+<span class="source-line-no">114</span><span id="line-114">      }</span>
+<span class="source-line-no">115</span><span id="line-115">      scanner = table.getScanner(scan);</span>
+<span class="source-line-no">116</span><span id="line-116">      cached = null;</span>
+<span class="source-line-no">117</span><span id="line-117">      id = Long.toString(EnvironmentEdgeManager.currentTime())</span>
+<span class="source-line-no">118</span><span id="line-118">        + Integer.toHexString(scanner.hashCode());</span>
+<span class="source-line-no">119</span><span id="line-119">    } finally {</span>
+<span class="source-line-no">120</span><span id="line-120">      table.close();</span>
+<span class="source-line-no">121</span><span id="line-121">    }</span>
+<span class="source-line-no">122</span><span id="line-122">  }</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124">  public String getID() {</span>
+<span class="source-line-no">125</span><span id="line-125">    return id;</span>
+<span class="source-line-no">126</span><span id="line-126">  }</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128">  @Override</span>
+<span class="source-line-no">129</span><span id="line-129">  public void close() {</span>
+<span class="source-line-no">130</span><span id="line-130">    if (scanner != null) {</span>
+<span class="source-line-no">131</span><span id="line-131">      scanner.close();</span>
+<span class="source-line-no">132</span><span id="line-132">      scanner = null;</span>
+<span class="source-line-no">133</span><span id="line-133">    }</span>
+<span class="source-line-no">134</span><span id="line-134">  }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">  @Override</span>
+<span class="source-line-no">137</span><span id="line-137">  public boolean hasNext() {</span>
+<span class="source-line-no">138</span><span id="line-138">    if (cache != null) {</span>
 <span class="source-line-no">139</span><span id="line-139">      return true;</span>
 <span class="source-line-no">140</span><span id="line-140">    }</span>
-<span class="source-line-no">141</span><span id="line-141">    try {</span>
-<span class="source-line-no">142</span><span id="line-142">      Result result = scanner.next();</span>
-<span class="source-line-no">143</span><span id="line-143">      if (result != null &amp;&amp; !result.isEmpty()) {</span>
-<span class="source-line-no">144</span><span id="line-144">        cached = result;</span>
-<span class="source-line-no">145</span><span id="line-145">      }</span>
-<span class="source-line-no">146</span><span id="line-146">    } catch (UnknownScannerException e) {</span>
-<span class="source-line-no">147</span><span id="line-147">      throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">148</span><span id="line-148">    } catch (IOException e) {</span>
-<span class="source-line-no">149</span><span id="line-149">      LOG.error(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">150</span><span id="line-150">    }</span>
-<span class="source-line-no">151</span><span id="line-151">    return cached != null;</span>
-<span class="source-line-no">152</span><span id="line-152">  }</span>
-<span class="source-line-no">153</span><span id="line-153"></span>
-<span class="source-line-no">154</span><span id="line-154">  @Override</span>
-<span class="source-line-no">155</span><span id="line-155">  public Cell next() {</span>
-<span class="source-line-no">156</span><span id="line-156">    if (cache != null) {</span>
-<span class="source-line-no">157</span><span id="line-157">      Cell kv = cache;</span>
-<span class="source-line-no">158</span><span id="line-158">      cache = null;</span>
-<span class="source-line-no">159</span><span id="line-159">      return kv;</span>
-<span class="source-line-no">160</span><span id="line-160">    }</span>
-<span class="source-line-no">161</span><span id="line-161">    boolean loop;</span>
-<span class="source-line-no">162</span><span id="line-162">    do {</span>
-<span class="source-line-no">163</span><span id="line-163">      loop = false;</span>
-<span class="source-line-no">164</span><span id="line-164">      if (rowI != null) {</span>
-<span class="source-line-no">165</span><span id="line-165">        if (rowI.hasNext()) {</span>
-<span class="source-line-no">166</span><span id="line-166">          return rowI.next();</span>
-<span class="source-line-no">167</span><span id="line-167">        } else {</span>
-<span class="source-line-no">168</span><span id="line-168">          rowI = null;</span>
-<span class="source-line-no">169</span><span id="line-169">        }</span>
-<span class="source-line-no">170</span><span id="line-170">      }</span>
-<span class="source-line-no">171</span><span id="line-171">      if (cached != null) {</span>
-<span class="source-line-no">172</span><span id="line-172">        rowI = cached.listCells().iterator();</span>
-<span class="source-line-no">173</span><span id="line-173">        loop = true;</span>
-<span class="source-line-no">174</span><span id="line-174">        cached = null;</span>
-<span class="source-line-no">175</span><span id="line-175">      } else {</span>
-<span class="source-line-no">176</span><span id="line-176">        Result result = null;</span>
-<span class="source-line-no">177</span><span id="line-177">        try {</span>
-<span class="source-line-no">178</span><span id="line-178">          result = scanner.next();</span>
-<span class="source-line-no">179</span><span id="line-179">        } catch (UnknownScannerException e) {</span>
-<span class="source-line-no">180</span><span id="line-180">          throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">181</span><span id="line-181">        } catch (TableNotEnabledException tnee) {</span>
-<span class="source-line-no">182</span><span id="line-182">          throw new IllegalStateException(tnee);</span>
-<span class="source-line-no">183</span><span id="line-183">        } catch (TableNotFoundException tnfe) {</span>
-<span class="source-line-no">184</span><span id="line-184">          throw new IllegalArgumentException(tnfe);</span>
-<span class="source-line-no">185</span><span id="line-185">        } catch (IOException e) {</span>
-<span class="source-line-no">186</span><span id="line-186">          LOG.error(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">187</span><span id="line-187">        }</span>
-<span class="source-line-no">188</span><span id="line-188">        if (result != null &amp;&amp; !result.isEmpty()) {</span>
-<span class="source-line-no">189</span><span id="line-189">          rowI = result.listCells().iterator();</span>
-<span class="source-line-no">190</span><span id="line-190">          loop = true;</span>
-<span class="source-line-no">191</span><span id="line-191">        }</span>
-<span class="source-line-no">192</span><span id="line-192">      }</span>
-<span class="source-line-no">193</span><span id="line-193">    } while (loop);</span>
-<span class="source-line-no">194</span><span id="line-194">    return null;</span>
-<span class="source-line-no">195</span><span id="line-195">  }</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197">  @Override</span>
-<span class="source-line-no">198</span><span id="line-198">  public void putBack(Cell kv) {</span>
-<span class="source-line-no">199</span><span id="line-199">    this.cache = kv;</span>
-<span class="source-line-no">200</span><span id="line-200">  }</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202">  @Override</span>
-<span class="source-line-no">203</span><span id="line-203">  public void remove() {</span>
-<span class="source-line-no">204</span><span id="line-204">    throw new UnsupportedOperationException("remove not supported");</span>
-<span class="source-line-no">205</span><span id="line-205">  }</span>
-<span class="source-line-no">206</span><span id="line-206">}</span>
+<span class="source-line-no">141</span><span id="line-141">    if (rowI != null &amp;&amp; rowI.hasNext()) {</span>
+<span class="source-line-no">142</span><span id="line-142">      return true;</span>
+<span class="source-line-no">143</span><span id="line-143">    }</span>
+<span class="source-line-no">144</span><span id="line-144">    if (cached != null) {</span>
+<span class="source-line-no">145</span><span id="line-145">      return true;</span>
+<span class="source-line-no">146</span><span id="line-146">    }</span>
+<span class="source-line-no">147</span><span id="line-147">    try {</span>
+<span class="source-line-no">148</span><span id="line-148">      Result result = scanner.next();</span>
+<span class="source-line-no">149</span><span id="line-149">      if (result != null &amp;&amp; !result.isEmpty()) {</span>
+<span class="source-line-no">150</span><span id="line-150">        cached = result;</span>
+<span class="source-line-no">151</span><span id="line-151">      }</span>
+<span class="source-line-no">152</span><span id="line-152">    } catch (UnknownScannerException e) {</span>
+<span class="source-line-no">153</span><span id="line-153">      throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">154</span><span id="line-154">    } catch (IOException e) {</span>
+<span class="source-line-no">155</span><span id="line-155">      LOG.error(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">156</span><span id="line-156">    }</span>
+<span class="source-line-no">157</span><span id="line-157">    return cached != null;</span>
+<span class="source-line-no">158</span><span id="line-158">  }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">  @Override</span>
+<span class="source-line-no">161</span><span id="line-161">  public Cell next() {</span>
+<span class="source-line-no">162</span><span id="line-162">    if (cache != null) {</span>
+<span class="source-line-no">163</span><span id="line-163">      Cell kv = cache;</span>
+<span class="source-line-no">164</span><span id="line-164">      cache = null;</span>
+<span class="source-line-no">165</span><span id="line-165">      return kv;</span>
+<span class="source-line-no">166</span><span id="line-166">    }</span>
+<span class="source-line-no">167</span><span id="line-167">    boolean loop;</span>
+<span class="source-line-no">168</span><span id="line-168">    do {</span>
+<span class="source-line-no">169</span><span id="line-169">      loop = false;</span>
+<span class="source-line-no">170</span><span id="line-170">      if (rowI != null) {</span>
+<span class="source-line-no">171</span><span id="line-171">        if (rowI.hasNext()) {</span>
+<span class="source-line-no">172</span><span id="line-172">          return rowI.next();</span>
+<span class="source-line-no">173</span><span id="line-173">        } else {</span>
+<span class="source-line-no">174</span><span id="line-174">          rowI = null;</span>
+<span class="source-line-no">175</span><span id="line-175">        }</span>
+<span class="source-line-no">176</span><span id="line-176">      }</span>
+<span class="source-line-no">177</span><span id="line-177">      if (cached != null) {</span>
+<span class="source-line-no">178</span><span id="line-178">        rowI = cached.listCells().iterator();</span>
+<span class="source-line-no">179</span><span id="line-179">        loop = true;</span>
+<span class="source-line-no">180</span><span id="line-180">        cached = null;</span>
+<span class="source-line-no">181</span><span id="line-181">      } else {</span>
+<span class="source-line-no">182</span><span id="line-182">        Result result = null;</span>
+<span class="source-line-no">183</span><span id="line-183">        try {</span>
+<span class="source-line-no">184</span><span id="line-184">          result = scanner.next();</span>
+<span class="source-line-no">185</span><span id="line-185">        } catch (UnknownScannerException e) {</span>
+<span class="source-line-no">186</span><span id="line-186">          throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">187</span><span id="line-187">        } catch (TableNotEnabledException tnee) {</span>
+<span class="source-line-no">188</span><span id="line-188">          throw new IllegalStateException(tnee);</span>
+<span class="source-line-no">189</span><span id="line-189">        } catch (TableNotFoundException tnfe) {</span>
+<span class="source-line-no">190</span><span id="line-190">          throw new IllegalArgumentException(tnfe);</span>
+<span class="source-line-no">191</span><span id="line-191">        } catch (IOException e) {</span>
+<span class="source-line-no">192</span><span id="line-192">          LOG.error(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">193</span><span id="line-193">        }</span>
+<span class="source-line-no">194</span><span id="line-194">        if (result != null &amp;&amp; !result.isEmpty()) {</span>
+<span class="source-line-no">195</span><span id="line-195">          rowI = result.listCells().iterator();</span>
+<span class="source-line-no">196</span><span id="line-196">          loop = true;</span>
+<span class="source-line-no">197</span><span id="line-197">        }</span>
+<span class="source-line-no">198</span><span id="line-198">      }</span>
+<span class="source-line-no">199</span><span id="line-199">    } while (loop);</span>
+<span class="source-line-no">200</span><span id="line-200">    return null;</span>
+<span class="source-line-no">201</span><span id="line-201">  }</span>
+<span class="source-line-no">202</span><span id="line-202"></span>
+<span class="source-line-no">203</span><span id="line-203">  @Override</span>
+<span class="source-line-no">204</span><span id="line-204">  public void putBack(Cell kv) {</span>
+<span class="source-line-no">205</span><span id="line-205">    this.cache = kv;</span>
+<span class="source-line-no">206</span><span id="line-206">  }</span>
+<span class="source-line-no">207</span><span id="line-207"></span>
+<span class="source-line-no">208</span><span id="line-208">  @Override</span>
+<span class="source-line-no">209</span><span id="line-209">  public void remove() {</span>
+<span class="source-line-no">210</span><span id="line-210">    throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">211</span><span id="line-211">  }</span>
+<span class="source-line-no">212</span><span id="line-212">}</span>
 
 
 
diff --git a/book.html b/book.html
index 57c70dd342a..cbbcead7c60 100644
--- a/book.html
+++ b/book.html
@@ -41641,7 +41641,7 @@ Starting the mini-cluster takes about 20-30 seconds, but that should be appropri
 it persists metadata&#8201;&#8212;&#8201;in the tail of hfiles or Cells written by
 HBase into the system hbase:meta table or when HBase writes znodes
 to zookeeper, etc.&#8201;&#8212;&#8201;and when it passes objects over the wire making
-<a href="hbase.rpc">RPCs</a>. HBase uses protobufs to describe the RPC
+<a href="#hbase.rpc">RPCs</a>. HBase uses protobufs to describe the RPC
 Interfaces (Services) we expose to clients, for example the <code>Admin</code> and <code>Client</code>
 Interfaces that the RegionServer fields,
 or specifying the arbitrary extensions added by developers via our
@@ -41686,7 +41686,7 @@ use these core protos when they want to serialize a Cell or a Put or
 refer to a particular node via ServerName, etc., as part of providing the
 CPEP Service. Going forward, after the release of hbase-2.0.0, this
 practice needs to whither. We&#8217;ll explain why in the later
-<a href="shaded.protobuf">hbase-2.0.0</a> section.</p>
+<a href="#shaded.protobuf">hbase-2.0.0</a> section.</p>
 </div>
 <div class="sect2">
 <h3 id="shaded.protobuf"><a class="anchor" href="#shaded.protobuf"></a>191.1. hbase-2.0.0 and the shading of protobufs (HBASE-15638)</h3>
@@ -49812,7 +49812,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 4.0.0-alpha-1-SNAPSHOT<br>
-Last updated 2025-04-10 14:30:01 UTC
+Last updated 2025-04-11 14:30:01 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index 139aa12adf9..d1f9c624c2e 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -185,7 +185,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index d73945f57da..397967af8cf 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -14665,13 +14665,13 @@
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>103</td></tr>
+<td>104</td></tr>
 <tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>120</td></tr></table></section><section>
+<td>121</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.rest.client.Client.java">org/apache/hadoop/hbase/rest/client/Client.java</h3>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -18528,7 +18528,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/coc.html b/coc.html
index 11dab6218c1..7d7d2acdc63 100644
--- a/coc.html
+++ b/coc.html
@@ -253,7 +253,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index 4e1db0d394f..5246670e96d 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -318,7 +318,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 5bb6a95e359..5772f6b0206 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -1111,7 +1111,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index bd96f2e14a7..9a87b9faf8e 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -200,7 +200,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index 9527740c5ce..fdb5e6ffa07 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -926,11 +926,11 @@
 <td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
 <tr class="a">
 <td align="left">org.apache.commons</td>
-<td><a class="externalLink" href="http://commons.apache.org/proper/commons-lang/">commons-lang3</a></td>
-<td>3.9</td>
+<td><a class="externalLink" href="https://commons.apache.org/proper/commons-lang/">commons-lang3</a></td>
+<td>3.17.0</td>
 <td>-</td>
 <td>jar</td>
-<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
+<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache-2.0</a></td></tr>
 <tr class="b">
 <td align="left">org.apache.commons</td>
 <td><a class="externalLink" href="http://commons.apache.org/proper/commons-math/">commons-math3</a></td>
@@ -1748,7 +1748,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index ca48b5088da..c70b3dd2284 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -80720,6 +80720,8 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>
 &nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/rest/RowSpec.html#isPartialTimeRange()" class="member-name-link">isPartialTimeRange()</a> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RowSpec.html" title="class in org.apache.hadoop.hbase.rest">RowSpec</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#isPeerEnabled()" class="member-name-link">isPeerEnabled()</a> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#isPeerEnabled()" class="member-name-link">isPeerEnabled()</a> - Method in interface org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></dt>
@@ -103091,6 +103093,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/CompleteScanResultCache.html#partialResults" class="member-name-link">partialResults</a> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/CompleteScanResultCache.html" title="class in org.apache.hadoop.hbase.client">CompleteScanResultCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/rest/RowSpec.html#partialTimeRange" class="member-name-link">partialTimeRange</a> - Variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RowSpec.html" title="class in org.apache.hadoop.hbase.rest">RowSpec</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#partitionOps(java.util.List,int)" class="member-name-link">partitionOps(List&lt;ZKUtil.ZKUtilOp&gt;, int)</a> - Static method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil</a></dt>
 <dd>
 <div class="block">Partition the list of <code>ops</code> by size (using <a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#estimateSize(org.apache.hadoop.hbase.zookeeper.ZKUtil.ZKUtilOp)"><code>ZKUtil.estimateSize(ZKUtilOp)</code></a>).</div>
@@ -107310,6 +107314,8 @@ service.</div>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/security/visibility/VisibilityController.html#prePrepareTimeStampForDeleteVersion(org.apache.hadoop.hbase.coprocessor.ObserverContext,org.apache.hadoop.hbase.client.Mutation,org.apache.hadoop.hbase.Cell,byte%5B%5D,org.apache.hadoop.hbase.client.Get)" class="member-name-link">prePrepareTimeStampForDeleteVersion(ObserverContext&lt;? extends RegionCoprocessorEnvironment&gt;, Mutation, Cell, byte[], Get)</a> - Method in class org.apache.hadoop.hbase.secur [...]
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#preProcessError(java.lang.Throwable)" class="member-name-link">preProcessError(Throwable)</a> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncAdminRequestRetryingCaller</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/AsyncRegionReplicationRetryingCaller.html#preProcessError(java.lang.Throwable)" class="member-name-link">preProcessError(Throwable)</a> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncRegionReplicationRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionReplicationRetryingCaller</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/AsyncRpcRetryingCaller.html#preProcessError(java.lang.Throwable)" class="member-name-link">preProcessError(Throwable)</a> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a></dt>
diff --git a/devapidocs/member-search-index.js b/devapidocs/member-search-index.js
index e1878a989bf..9c548b6ed0f 100644
--- a/devapidocs/member-search-index.js
+++ b/devapidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlockcache()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlocksize()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBloomfilter()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getCompression()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getInMemory()"},{"p":"org.apache. [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlockcache()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlocksize()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBloomfilter()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getCompression()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getInMemory()"},{"p":"org.apache. [...]
\ No newline at end of file
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
index 0e5b8972596..f5dd3cee843 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
@@ -83,7 +83,7 @@ loadScripts(document, 'script');</script>
 </dl>
 <hr>
 <div class="type-signature"><span class="annotations"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/FunctionalInterface.html" title="class or interface in java.lang" class="external-link">@FunctionalInterface</a>
-</span><span class="modifiers">public static interface </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-36">AsyncAdminRequestRetryingCaller.Callable</a>&lt;T&gt;</span></div>
+</span><span class="modifiers">public static interface </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-38">AsyncAdminRequestRetryingCaller.Callable</a>&lt;T&gt;</span></div>
 </section>
 <section class="summary">
 <ul class="summary-list">
@@ -119,7 +119,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="call(org.apache.hadoop.hbase.ipc.HBaseRpcController,org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.Interface)">
 <h3>call</h3>
-<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/CompletableFuture.html" title="class or interface in java.util.concurrent" class="external-link">CompletableFuture</a>&lt;<a href="AsyncAdminRequestRetryingCaller.Callable.html" title="type parameter in AsyncAdminRequestRetryingCaller.Callable">T</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/ [...]
+<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/CompletableFuture.html" title="class or interface in java.util.concurrent" class="external-link">CompletableFuture</a>&lt;<a href="AsyncAdminRequestRetryingCaller.Callable.html" title="type parameter in AsyncAdminRequestRetryingCaller.Callable">T</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/ [...]
  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.Interface&nbsp;stub)</span></div>
 </section>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
index 5c48fbb9863..b6068f4913b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
@@ -80,7 +80,7 @@ loadScripts(document, 'script');</script>
 <section class="class-description" id="class-description">
 <hr>
 <div class="type-signature"><span class="annotations">@Private
-</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-33">AsyncAdminRequestRetryingCaller</a>&lt;T&gt;</span>
+</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-35">AsyncAdminRequestRetryingCaller</a>&lt;T&gt;</span>
 <span class="extends-implements">extends <a href="AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a>&lt;T&gt;</span></div>
 </section>
 <section class="summary">
@@ -158,12 +158,15 @@ loadScripts(document, 'script');</script>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected void</code></div>
 <div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#doCall()" class="member-name-link">doCall</a>()</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#preProcessError(java.lang.Throwable)" class="member-name-link">preProcessError</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a>&nbsp;error)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 </div>
 </div>
 </div>
 <div class="inherited-list">
 <h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.client.AsyncRpcRetryingCaller">Methods inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a></h3>
-<code><a href="AsyncRpcRetryingCaller.html#call()">call</a>, <a href="AsyncRpcRetryingCaller.html#completeExceptionally()">completeExceptionally</a>, <a href="AsyncRpcRetryingCaller.html#getTableName()">getTableName</a>, <a href="AsyncRpcRetryingCaller.html#onError(java.lang.Throwable,java.util.function.Supplier,java.util.function.Consumer)">onError</a>, <a href="AsyncRpcRetryingCaller.html#preProcessError(java.lang.Throwable)">preProcessError</a>, <a href="AsyncRpcRetryingCaller.html#re [...]
+<code><a href="AsyncRpcRetryingCaller.html#call()">call</a>, <a href="AsyncRpcRetryingCaller.html#completeExceptionally()">completeExceptionally</a>, <a href="AsyncRpcRetryingCaller.html#getTableName()">getTableName</a>, <a href="AsyncRpcRetryingCaller.html#onError(java.lang.Throwable,java.util.function.Supplier,java.util.function.Consumer)">onError</a>, <a href="AsyncRpcRetryingCaller.html#remainingTimeNs()">remainingTimeNs</a>, <a href="AsyncRpcRetryingCaller.html#resetCallTimeout()">r [...]
 <div class="inherited-list">
 <h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
 <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or  [...]
@@ -181,13 +184,13 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="callable">
 <h3>callable</h3>
-<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="AsyncAdminRequestRetryingCaller.Callable.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdminRequestRetryingCaller.Callable</a>&lt;<a href="AsyncAdminRequestRetryingCaller.html" title="type parameter in AsyncAdminRequestRetryingCaller">T</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRe [...]
+<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="AsyncAdminRequestRetryingCaller.Callable.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdminRequestRetryingCaller.Callable</a>&lt;<a href="AsyncAdminRequestRetryingCaller.html" title="type parameter in AsyncAdminRequestRetryingCaller">T</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRe [...]
 </section>
 </li>
 <li>
 <section class="detail" id="serverName">
 <h3>serverName</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="../ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-42">serverName</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="../ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-44">serverName</a></span></div>
 </section>
 </li>
 </ul>
@@ -201,7 +204,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;(org.apache.hbase.thirdparty.io.netty.util.Timer,org.apache.hadoop.hbase.client.AsyncConnectionImpl,int,long,long,int,long,long,int,org.apache.hadoop.hbase.ServerName,org.apache.hadoop.hbase.client.AsyncAdminRequestRetryingCaller.Callable)">
 <h3>AsyncAdminRequestRetryingCaller</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-44">AsyncAdminRequestRetryingCaller</a></span><wbr><span class="parameters">(org.apache.hbase.thirdparty.io.netty.util.Timer&nbsp;retryTimer,
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-46">AsyncAdminRequestRetryingCaller</a></span><wbr><span class="parameters">(org.apache.hbase.thirdparty.io.netty.util.Timer&nbsp;retryTimer,
  <a href="AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a>&nbsp;conn,
  int&nbsp;priority,
  long&nbsp;pauseNs,
@@ -223,9 +226,19 @@ loadScripts(document, 'script');</script>
 <h2>Method Details</h2>
 <ul class="member-list">
 <li>
+<section class="detail" id="preProcessError(java.lang.Throwable)">
+<h3>preProcessError</h3>
+<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-55">preProcessError</a></span><wbr><span class="parameters">(<a href="htt [...]
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="AsyncRpcRetryingCaller.html#preProcessError(java.lang.Throwable)">preProcessError</a></code>&nbsp;in class&nbsp;<code><a href="AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a>&lt;<a href="AsyncAdminRequestRetryingCaller.html" title="type parameter in AsyncAdminRequestRetryingCaller">T</a>&gt;</code></dd>
+</dl>
+</section>
+</li>
+<li>
 <section class="detail" id="doCall()">
 <h3>doCall</h3>
-<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-53">doCall</a></span>()</div>
+<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-69">doCall</a></span>()</div>
 <dl class="notes">
 <dt>Specified by:</dt>
 <dd><code><a href="AsyncRpcRetryingCaller.html#doCall()">doCall</a></code>&nbsp;in class&nbsp;<code><a href="AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a>&lt;<a href="AsyncAdminRequestRetryingCaller.html" title="type parameter in AsyncAdminRequestRetryingCaller">T</a>&gt;</code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/RowResultGenerator.html b/devapidocs/org/apache/hadoop/hbase/rest/RowResultGenerator.html
index ec3f2ecd85a..c9d65a0c544 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/RowResultGenerator.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/RowResultGenerator.html
@@ -228,7 +228,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="close()">
 <h3>close</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-84">close</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-89">close</a></span>()</div>
 <dl class="notes">
 <dt>Specified by:</dt>
 <dd><code><a href="ResultGenerator.html#close()">close</a></code>&nbsp;in class&nbsp;<code><a href="ResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ResultGenerator</a></code></dd>
@@ -238,19 +238,19 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="hasNext()">
 <h3>hasNext</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-88">hasNext</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-93">hasNext</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="next()">
 <h3>next</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-99">next</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-104">next</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="putBack(org.apache.hadoop.hbase.Cell)">
 <h3>putBack</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-116">putBack</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-121">putBack</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)</span></div>
 <dl class="notes">
 <dt>Specified by:</dt>
 <dd><code><a href="ResultGenerator.html#putBack(org.apache.hadoop.hbase.Cell)">putBack</a></code>&nbsp;in class&nbsp;<code><a href="ResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ResultGenerator</a></code></dd>
@@ -260,7 +260,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="remove()">
 <h3>remove</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-121">remove</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-126">remove</a></span>()</div>
 </section>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/RowSpec.html b/devapidocs/org/apache/hadoop/hbase/rest/RowSpec.html
index 8abca30a8c7..688ed62bf53 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/RowSpec.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/RowSpec.html
@@ -118,12 +118,15 @@ loadScripts(document, 'script');</script>
 <div class="col-first odd-row-color"><code>private int</code></div>
 <div class="col-second odd-row-color"><code><a href="#maxVersions" class="member-name-link">maxVersions</a></code></div>
 <div class="col-last odd-row-color">&nbsp;</div>
-<div class="col-first even-row-color"><code>private byte[]</code></div>
-<div class="col-second even-row-color"><code><a href="#row" class="member-name-link">row</a></code></div>
+<div class="col-first even-row-color"><code>private boolean</code></div>
+<div class="col-second even-row-color"><code><a href="#partialTimeRange" class="member-name-link">partialTimeRange</a></code></div>
 <div class="col-last even-row-color">&nbsp;</div>
-<div class="col-first odd-row-color"><code>private long</code></div>
-<div class="col-second odd-row-color"><code><a href="#startTime" class="member-name-link">startTime</a></code></div>
+<div class="col-first odd-row-color"><code>private byte[]</code></div>
+<div class="col-second odd-row-color"><code><a href="#row" class="member-name-link">row</a></code></div>
 <div class="col-last odd-row-color">&nbsp;</div>
+<div class="col-first even-row-color"><code>private long</code></div>
+<div class="col-second even-row-color"><code><a href="#startTime" class="member-name-link">startTime</a></code></div>
+<div class="col-last even-row-color">&nbsp;</div>
 </div>
 </section>
 </li>
@@ -222,39 +225,42 @@ loadScripts(document, 'script');</script>
 <div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hasTimestamp()" class="member-name-link">hasTimestamp</a>()</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 <div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isSingleRow()" class="member-name-link">isSingleRow</a>()</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isPartialTimeRange()" class="member-name-link">isPartialTimeRange</a>()</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseColumns(java.lang.String,int)" class="member-name-link">parseColumns</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
- int&nbsp;i)</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isSingleRow()" class="member-name-link">isSingleRow</a>()</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 <div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseQueryParams(java.lang.String,int)" class="member-name-link">parseQueryParams</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseColumns(java.lang.String,int)" class="member-name-link">parseColumns</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
  int&nbsp;i)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseRowKeys(java.lang.String,int)" class="member-name-link">parseRowKeys</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseQueryParams(java.lang.String,int)" class="member-name-link">parseQueryParams</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
  int&nbsp;i)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 <div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseTimestamp(java.lang.String,int)" class="member-name-link">parseTimestamp</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseRowKeys(java.lang.String,int)" class="member-name-link">parseRowKeys</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
  int&nbsp;i)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setEndTime(long)" class="member-name-link">setEndTime</a><wbr>(long&nbsp;endTime)</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseTimestamp(java.lang.String,int)" class="member-name-link">parseTimestamp</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ int&nbsp;i)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 <div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxValues(int)" class="member-name-link">setMaxValues</a><wbr>(int&nbsp;maxValues)</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setEndTime(long)" class="member-name-link">setEndTime</a><wbr>(long&nbsp;endTime)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxVersions(int)" class="member-name-link">setMaxVersions</a><wbr>(int&nbsp;maxVersions)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxValues(int)" class="member-name-link">setMaxValues</a><wbr>(int&nbsp;maxValues)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 <div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setStartTime(long)" class="member-name-link">setStartTime</a><wbr>(long&nbsp;startTime)</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxVersions(int)" class="member-name-link">setMaxVersions</a><wbr>(int&nbsp;maxVersions)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setStartTime(long)" class="member-name-link">setStartTime</a><wbr>(long&nbsp;startTime)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 </div>
 </div>
 </div>
@@ -348,6 +354,12 @@ loadScripts(document, 'script');</script>
 <div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-48">maxValues</a></span></div>
 </section>
 </li>
+<li>
+<section class="detail" id="partialTimeRange">
+<h3>partialTimeRange</h3>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-49">partialTimeRange</a></span></div>
+</section>
+</li>
 </ul>
 </section>
 </li>
@@ -359,7 +371,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;(java.lang.String)">
 <h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-50">RowSpec</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</span>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-51">RowSpec</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</span>
         throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -370,7 +382,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;(java.lang.String,java.lang.String)">
 <h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-54">RowSpec</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-55">RowSpec</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
  <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;keyEncoding)</span>
         throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
 <dl class="notes">
@@ -382,7 +394,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;(byte[],byte[],byte[][],long,long,int)">
 <h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-289">RowSpec</a></span><wbr><span class="parameters">(byte[]&nbsp;startRow,
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-291">RowSpec</a></span><wbr><span class="parameters">(byte[]&nbsp;startRow,
  byte[]&nbsp;endRow,
  byte[][]&nbsp;columns,
  long&nbsp;startTime,
@@ -393,7 +405,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;(byte[],byte[],java.util.Collection,long,long,int,java.util.Collection)">
 <h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-301">RowSpec</a></span><wbr><span class="parameters">(byte[]&nbsp;startRow,
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-303">RowSpec</a></span><wbr><span class="parameters">(byte[]&nbsp;startRow,
  byte[]&nbsp;endRow,
  <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collection.html" title="class or interface in java.util" class="external-link">Collection</a>&lt;byte[]&gt;&nbsp;columns,
  long&nbsp;startTime,
@@ -405,7 +417,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;(byte[],byte[],java.util.Collection,long,long,int)">
 <h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-309">RowSpec</a></span><wbr><span class="parameters">(byte[]&nbsp;startRow,
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-311">RowSpec</a></span><wbr><span class="parameters">(byte[]&nbsp;startRow,
  byte[]&nbsp;endRow,
  <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collection.html" title="class or interface in java.util" class="external-link">Collection</a>&lt;byte[]&gt;&nbsp;columns,
  long&nbsp;startTime,
@@ -424,7 +436,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="parseRowKeys(java.lang.String,int)">
 <h3>parseRowKeys</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-93">parseRowKeys</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-94">parseRowKeys</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
  int&nbsp;i)</span>
                   throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
 <dl class="notes">
@@ -436,7 +448,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="parseColumns(java.lang.String,int)">
 <h3>parseColumns</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-135">parseColumns</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-136">parseColumns</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
  int&nbsp;i)</span>
                   throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
 <dl class="notes">
@@ -448,7 +460,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="parseTimestamp(java.lang.String,int)">
 <h3>parseTimestamp</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-171">parseTimestamp</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-172">parseTimestamp</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
  int&nbsp;i)</span>
                     throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
 <dl class="notes">
@@ -460,140 +472,146 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="parseQueryParams(java.lang.String,int)">
 <h3>parseQueryParams</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-223">parseQueryParams</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-225">parseQueryParams</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
  int&nbsp;i)</span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="isSingleRow()">
 <h3>isSingleRow</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-321">isSingleRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-323">isSingleRow</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getMaxVersions()">
 <h3>getMaxVersions</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-325">getMaxVersions</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-327">getMaxVersions</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="setMaxVersions(int)">
 <h3>setMaxVersions</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-329">setMaxVersions</a></span><wbr><span class="parameters">(int&nbsp;maxVersions)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-331">setMaxVersions</a></span><wbr><span class="parameters">(int&nbsp;maxVersions)</span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="getMaxValues()">
 <h3>getMaxValues</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-333">getMaxValues</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-335">getMaxValues</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="setMaxValues(int)">
 <h3>setMaxValues</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-337">setMaxValues</a></span><wbr><span class="parameters">(int&nbsp;maxValues)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-339">setMaxValues</a></span><wbr><span class="parameters">(int&nbsp;maxValues)</span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="hasColumns()">
 <h3>hasColumns</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-341">hasColumns</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-343">hasColumns</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="hasLabels()">
 <h3>hasLabels</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-345">hasLabels</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-347">hasLabels</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getRow()">
 <h3>getRow</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">byte[]</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-349">getRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">byte[]</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-351">getRow</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getStartRow()">
 <h3>getStartRow</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">byte[]</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-353">getStartRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">byte[]</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-355">getStartRow</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="hasEndRow()">
 <h3>hasEndRow</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-357">hasEndRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-359">hasEndRow</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getEndRow()">
 <h3>getEndRow</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">byte[]</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-361">getEndRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">byte[]</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-363">getEndRow</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="addColumn(byte[])">
 <h3>addColumn</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-365">addColumn</a></span><wbr><span class="parameters">(byte[]&nbsp;column)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-367">addColumn</a></span><wbr><span class="parameters">(byte[]&nbsp;column)</span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="getColumns()">
 <h3>getColumns</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">byte[][]</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-369">getColumns</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">byte[][]</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-371">getColumns</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getLabels()">
 <h3>getLabels</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../. [...]
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../. [...]
 </section>
 </li>
 <li>
 <section class="detail" id="hasTimestamp()">
 <h3>hasTimestamp</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-377">hasTimestamp</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-379">hasTimestamp</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getTimestamp()">
 <h3>getTimestamp</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-381">getTimestamp</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-383">getTimestamp</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getStartTime()">
 <h3>getStartTime</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-385">getStartTime</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-387">getStartTime</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="setStartTime(long)">
 <h3>setStartTime</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-389">setStartTime</a></span><wbr><span class="parameters">(long&nbsp;startTime)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-391">setStartTime</a></span><wbr><span class="parameters">(long&nbsp;startTime)</span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="getEndTime()">
 <h3>getEndTime</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-393">getEndTime</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-395">getEndTime</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="setEndTime(long)">
 <h3>setEndTime</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-397">setEndTime</a></span><wbr><span class="parameters">(long&nbsp;endTime)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-399">setEndTime</a></span><wbr><span class="parameters">(long&nbsp;endTime)</span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="toString()">
 <h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-401">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-403">toString</a></span>()</div>
 <dl class="notes">
 <dt>Overrides:</dt>
 <dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
 </dl>
 </section>
 </li>
+<li>
+<section class="detail" id="isPartialTimeRange()">
+<h3>isPartialTimeRange</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-432">isPartialTimeRange</a></span>()</div>
+</section>
+</li>
 </ul>
 </section>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html b/devapidocs/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
index 20beb2851fe..9f4da5eff14 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
@@ -322,13 +322,13 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="getID()">
 <h3>getID</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-118">getID</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-124">getID</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="close()">
 <h3>close</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-122">close</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-128">close</a></span>()</div>
 <dl class="notes">
 <dt>Specified by:</dt>
 <dd><code><a href="ResultGenerator.html#close()">close</a></code>&nbsp;in class&nbsp;<code><a href="ResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ResultGenerator</a></code></dd>
@@ -338,19 +338,19 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="hasNext()">
 <h3>hasNext</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-130">hasNext</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-136">hasNext</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="next()">
 <h3>next</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-154">next</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-160">next</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="putBack(org.apache.hadoop.hbase.Cell)">
 <h3>putBack</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-197">putBack</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-203">putBack</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)</span></div>
 <dl class="notes">
 <dt>Specified by:</dt>
 <dd><code><a href="ResultGenerator.html#putBack(org.apache.hadoop.hbase.Cell)">putBack</a></code>&nbsp;in class&nbsp;<code><a href="ResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ResultGenerator</a></code></dd>
@@ -360,7 +360,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="remove()">
 <h3>remove</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-202">remove</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-208">remove</a></span>()</div>
 </section>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
index bf8365da5d4..32789d66210 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
@@ -35,55 +35,71 @@
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
 <span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
 <span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.CompletableFuture;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.NotServingRegionException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.yetus.audience.InterfaceAudience;</span>
 <span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
 <span class="source-line-no">032</span><span id="line-32"></span>
-<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
-<span class="source-line-no">034</span><span id="line-34">public class AsyncAdminRequestRetryingCaller&lt;T&gt; extends AsyncRpcRetryingCaller&lt;T&gt; {</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36">  @FunctionalInterface</span>
-<span class="source-line-no">037</span><span id="line-37">  public interface Callable&lt;T&gt; {</span>
-<span class="source-line-no">038</span><span id="line-38">    CompletableFuture&lt;T&gt; call(HBaseRpcController controller, AdminService.Interface stub);</span>
-<span class="source-line-no">039</span><span id="line-39">  }</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41">  private final Callable&lt;T&gt; callable;</span>
-<span class="source-line-no">042</span><span id="line-42">  private ServerName serverName;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44">  public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
-<span class="source-line-no">045</span><span id="line-45">    long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
-<span class="source-line-no">046</span><span id="line-46">    long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable&lt;T&gt; callable) {</span>
-<span class="source-line-no">047</span><span id="line-47">    super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
-<span class="source-line-no">048</span><span id="line-48">      operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
-<span class="source-line-no">049</span><span id="line-49">    this.serverName = serverName;</span>
-<span class="source-line-no">050</span><span id="line-50">    this.callable = callable;</span>
-<span class="source-line-no">051</span><span id="line-51">  }</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53">  @Override</span>
-<span class="source-line-no">054</span><span id="line-54">  protected void doCall() {</span>
-<span class="source-line-no">055</span><span id="line-55">    AdminService.Interface adminStub;</span>
-<span class="source-line-no">056</span><span id="line-56">    try {</span>
-<span class="source-line-no">057</span><span id="line-57">      adminStub = this.conn.getAdminStub(serverName);</span>
-<span class="source-line-no">058</span><span id="line-58">    } catch (IOException e) {</span>
-<span class="source-line-no">059</span><span id="line-59">      onError(e, () -&gt; "Get async admin stub to " + serverName + " failed", err -&gt; {</span>
-<span class="source-line-no">060</span><span id="line-60">      });</span>
-<span class="source-line-no">061</span><span id="line-61">      return;</span>
-<span class="source-line-no">062</span><span id="line-62">    }</span>
-<span class="source-line-no">063</span><span id="line-63">    resetCallTimeout();</span>
-<span class="source-line-no">064</span><span id="line-64">    addListener(callable.call(controller, adminStub), (result, error) -&gt; {</span>
-<span class="source-line-no">065</span><span id="line-65">      if (error != null) {</span>
-<span class="source-line-no">066</span><span id="line-66">        onError(error, () -&gt; "Call to admin stub failed", err -&gt; {</span>
-<span class="source-line-no">067</span><span id="line-67">        });</span>
-<span class="source-line-no">068</span><span id="line-68">        return;</span>
-<span class="source-line-no">069</span><span id="line-69">      }</span>
-<span class="source-line-no">070</span><span id="line-70">      future.complete(result);</span>
-<span class="source-line-no">071</span><span id="line-71">    });</span>
-<span class="source-line-no">072</span><span id="line-72">  }</span>
-<span class="source-line-no">073</span><span id="line-73">}</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
+<span class="source-line-no">036</span><span id="line-36">public class AsyncAdminRequestRetryingCaller&lt;T&gt; extends AsyncRpcRetryingCaller&lt;T&gt; {</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38">  @FunctionalInterface</span>
+<span class="source-line-no">039</span><span id="line-39">  public interface Callable&lt;T&gt; {</span>
+<span class="source-line-no">040</span><span id="line-40">    CompletableFuture&lt;T&gt; call(HBaseRpcController controller, AdminService.Interface stub);</span>
+<span class="source-line-no">041</span><span id="line-41">  }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">  private final Callable&lt;T&gt; callable;</span>
+<span class="source-line-no">044</span><span id="line-44">  private ServerName serverName;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46">  public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
+<span class="source-line-no">047</span><span id="line-47">    long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
+<span class="source-line-no">048</span><span id="line-48">    long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable&lt;T&gt; callable) {</span>
+<span class="source-line-no">049</span><span id="line-49">    super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
+<span class="source-line-no">050</span><span id="line-50">      operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
+<span class="source-line-no">051</span><span id="line-51">    this.serverName = serverName;</span>
+<span class="source-line-no">052</span><span id="line-52">    this.callable = callable;</span>
+<span class="source-line-no">053</span><span id="line-53">  }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  @Override</span>
+<span class="source-line-no">056</span><span id="line-56">  protected Throwable preProcessError(Throwable error) {</span>
+<span class="source-line-no">057</span><span id="line-57">    // This retrying caller is mainly used for admin operations, thus we do not implement</span>
+<span class="source-line-no">058</span><span id="line-58">    // complicated relocating logic. If here we get a NotServingRegionException, there is no way to</span>
+<span class="source-line-no">059</span><span id="line-59">    // recover since we just pass in the server name, which means we can not send request to another</span>
+<span class="source-line-no">060</span><span id="line-60">    // region server. So here we just wrap it with a DoNotRetryIOException to fail the request</span>
+<span class="source-line-no">061</span><span id="line-61">    // immediately</span>
+<span class="source-line-no">062</span><span id="line-62">    if (error instanceof NotServingRegionException) {</span>
+<span class="source-line-no">063</span><span id="line-63">      return new DoNotRetryIOException("region is not on " + serverName + ", give up retrying",</span>
+<span class="source-line-no">064</span><span id="line-64">        error);</span>
+<span class="source-line-no">065</span><span id="line-65">    }</span>
+<span class="source-line-no">066</span><span id="line-66">    return error;</span>
+<span class="source-line-no">067</span><span id="line-67">  }</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69">  @Override</span>
+<span class="source-line-no">070</span><span id="line-70">  protected void doCall() {</span>
+<span class="source-line-no">071</span><span id="line-71">    AdminService.Interface adminStub;</span>
+<span class="source-line-no">072</span><span id="line-72">    try {</span>
+<span class="source-line-no">073</span><span id="line-73">      adminStub = this.conn.getAdminStub(serverName);</span>
+<span class="source-line-no">074</span><span id="line-74">    } catch (IOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75">      onError(e, () -&gt; "Get async admin stub to " + serverName + " failed", err -&gt; {</span>
+<span class="source-line-no">076</span><span id="line-76">      });</span>
+<span class="source-line-no">077</span><span id="line-77">      return;</span>
+<span class="source-line-no">078</span><span id="line-78">    }</span>
+<span class="source-line-no">079</span><span id="line-79">    resetCallTimeout();</span>
+<span class="source-line-no">080</span><span id="line-80">    addListener(callable.call(controller, adminStub), (result, error) -&gt; {</span>
+<span class="source-line-no">081</span><span id="line-81">      if (error != null) {</span>
+<span class="source-line-no">082</span><span id="line-82">        onError(error, () -&gt; "Call to admin stub failed", err -&gt; {</span>
+<span class="source-line-no">083</span><span id="line-83">        });</span>
+<span class="source-line-no">084</span><span id="line-84">        return;</span>
+<span class="source-line-no">085</span><span id="line-85">      }</span>
+<span class="source-line-no">086</span><span id="line-86">      future.complete(result);</span>
+<span class="source-line-no">087</span><span id="line-87">    });</span>
+<span class="source-line-no">088</span><span id="line-88">  }</span>
+<span class="source-line-no">089</span><span id="line-89">}</span>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
index 0dd75340481..51321263b96 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
@@ -35,55 +35,71 @@
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
 <span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
 <span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.CompletableFuture;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.NotServingRegionException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.yetus.audience.InterfaceAudience;</span>
 <span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
 <span class="source-line-no">032</span><span id="line-32"></span>
-<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
-<span class="source-line-no">034</span><span id="line-34">public class AsyncAdminRequestRetryingCaller&lt;T&gt; extends AsyncRpcRetryingCaller&lt;T&gt; {</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36">  @FunctionalInterface</span>
-<span class="source-line-no">037</span><span id="line-37">  public interface Callable&lt;T&gt; {</span>
-<span class="source-line-no">038</span><span id="line-38">    CompletableFuture&lt;T&gt; call(HBaseRpcController controller, AdminService.Interface stub);</span>
-<span class="source-line-no">039</span><span id="line-39">  }</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41">  private final Callable&lt;T&gt; callable;</span>
-<span class="source-line-no">042</span><span id="line-42">  private ServerName serverName;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44">  public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
-<span class="source-line-no">045</span><span id="line-45">    long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
-<span class="source-line-no">046</span><span id="line-46">    long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable&lt;T&gt; callable) {</span>
-<span class="source-line-no">047</span><span id="line-47">    super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
-<span class="source-line-no">048</span><span id="line-48">      operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
-<span class="source-line-no">049</span><span id="line-49">    this.serverName = serverName;</span>
-<span class="source-line-no">050</span><span id="line-50">    this.callable = callable;</span>
-<span class="source-line-no">051</span><span id="line-51">  }</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53">  @Override</span>
-<span class="source-line-no">054</span><span id="line-54">  protected void doCall() {</span>
-<span class="source-line-no">055</span><span id="line-55">    AdminService.Interface adminStub;</span>
-<span class="source-line-no">056</span><span id="line-56">    try {</span>
-<span class="source-line-no">057</span><span id="line-57">      adminStub = this.conn.getAdminStub(serverName);</span>
-<span class="source-line-no">058</span><span id="line-58">    } catch (IOException e) {</span>
-<span class="source-line-no">059</span><span id="line-59">      onError(e, () -&gt; "Get async admin stub to " + serverName + " failed", err -&gt; {</span>
-<span class="source-line-no">060</span><span id="line-60">      });</span>
-<span class="source-line-no">061</span><span id="line-61">      return;</span>
-<span class="source-line-no">062</span><span id="line-62">    }</span>
-<span class="source-line-no">063</span><span id="line-63">    resetCallTimeout();</span>
-<span class="source-line-no">064</span><span id="line-64">    addListener(callable.call(controller, adminStub), (result, error) -&gt; {</span>
-<span class="source-line-no">065</span><span id="line-65">      if (error != null) {</span>
-<span class="source-line-no">066</span><span id="line-66">        onError(error, () -&gt; "Call to admin stub failed", err -&gt; {</span>
-<span class="source-line-no">067</span><span id="line-67">        });</span>
-<span class="source-line-no">068</span><span id="line-68">        return;</span>
-<span class="source-line-no">069</span><span id="line-69">      }</span>
-<span class="source-line-no">070</span><span id="line-70">      future.complete(result);</span>
-<span class="source-line-no">071</span><span id="line-71">    });</span>
-<span class="source-line-no">072</span><span id="line-72">  }</span>
-<span class="source-line-no">073</span><span id="line-73">}</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
+<span class="source-line-no">036</span><span id="line-36">public class AsyncAdminRequestRetryingCaller&lt;T&gt; extends AsyncRpcRetryingCaller&lt;T&gt; {</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38">  @FunctionalInterface</span>
+<span class="source-line-no">039</span><span id="line-39">  public interface Callable&lt;T&gt; {</span>
+<span class="source-line-no">040</span><span id="line-40">    CompletableFuture&lt;T&gt; call(HBaseRpcController controller, AdminService.Interface stub);</span>
+<span class="source-line-no">041</span><span id="line-41">  }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">  private final Callable&lt;T&gt; callable;</span>
+<span class="source-line-no">044</span><span id="line-44">  private ServerName serverName;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46">  public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
+<span class="source-line-no">047</span><span id="line-47">    long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
+<span class="source-line-no">048</span><span id="line-48">    long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable&lt;T&gt; callable) {</span>
+<span class="source-line-no">049</span><span id="line-49">    super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
+<span class="source-line-no">050</span><span id="line-50">      operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
+<span class="source-line-no">051</span><span id="line-51">    this.serverName = serverName;</span>
+<span class="source-line-no">052</span><span id="line-52">    this.callable = callable;</span>
+<span class="source-line-no">053</span><span id="line-53">  }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  @Override</span>
+<span class="source-line-no">056</span><span id="line-56">  protected Throwable preProcessError(Throwable error) {</span>
+<span class="source-line-no">057</span><span id="line-57">    // This retrying caller is mainly used for admin operations, thus we do not implement</span>
+<span class="source-line-no">058</span><span id="line-58">    // complicated relocating logic. If here we get a NotServingRegionException, there is no way to</span>
+<span class="source-line-no">059</span><span id="line-59">    // recover since we just pass in the server name, which means we can not send request to another</span>
+<span class="source-line-no">060</span><span id="line-60">    // region server. So here we just wrap it with a DoNotRetryIOException to fail the request</span>
+<span class="source-line-no">061</span><span id="line-61">    // immediately</span>
+<span class="source-line-no">062</span><span id="line-62">    if (error instanceof NotServingRegionException) {</span>
+<span class="source-line-no">063</span><span id="line-63">      return new DoNotRetryIOException("region is not on " + serverName + ", give up retrying",</span>
+<span class="source-line-no">064</span><span id="line-64">        error);</span>
+<span class="source-line-no">065</span><span id="line-65">    }</span>
+<span class="source-line-no">066</span><span id="line-66">    return error;</span>
+<span class="source-line-no">067</span><span id="line-67">  }</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69">  @Override</span>
+<span class="source-line-no">070</span><span id="line-70">  protected void doCall() {</span>
+<span class="source-line-no">071</span><span id="line-71">    AdminService.Interface adminStub;</span>
+<span class="source-line-no">072</span><span id="line-72">    try {</span>
+<span class="source-line-no">073</span><span id="line-73">      adminStub = this.conn.getAdminStub(serverName);</span>
+<span class="source-line-no">074</span><span id="line-74">    } catch (IOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75">      onError(e, () -&gt; "Get async admin stub to " + serverName + " failed", err -&gt; {</span>
+<span class="source-line-no">076</span><span id="line-76">      });</span>
+<span class="source-line-no">077</span><span id="line-77">      return;</span>
+<span class="source-line-no">078</span><span id="line-78">    }</span>
+<span class="source-line-no">079</span><span id="line-79">    resetCallTimeout();</span>
+<span class="source-line-no">080</span><span id="line-80">    addListener(callable.call(controller, adminStub), (result, error) -&gt; {</span>
+<span class="source-line-no">081</span><span id="line-81">      if (error != null) {</span>
+<span class="source-line-no">082</span><span id="line-82">        onError(error, () -&gt; "Call to admin stub failed", err -&gt; {</span>
+<span class="source-line-no">083</span><span id="line-83">        });</span>
+<span class="source-line-no">084</span><span id="line-84">        return;</span>
+<span class="source-line-no">085</span><span id="line-85">      }</span>
+<span class="source-line-no">086</span><span id="line-86">      future.complete(result);</span>
+<span class="source-line-no">087</span><span id="line-87">    });</span>
+<span class="source-line-no">088</span><span id="line-88">  }</span>
+<span class="source-line-no">089</span><span id="line-89">}</span>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
index 786a03e4649..41a46d23fef 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
@@ -247,7 +247,7 @@
 <span class="source-line-no">234</span><span id="line-234">            int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
 <span class="source-line-no">235</span><span id="line-235">            try {</span>
 <span class="source-line-no">236</span><span id="line-236">              RegionLocations metaLocations = conn.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">237</span><span id="line-237">                .get(conn.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">237</span><span id="line-237">                .get(conn.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
 <span class="source-line-no">238</span><span id="line-238">              numOfReplicas = metaLocations.size();</span>
 <span class="source-line-no">239</span><span id="line-239">            } catch (Exception e) {</span>
 <span class="source-line-no">240</span><span id="line-240">              LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.RegionLocationsFutureResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.RegionLocationsFutureResult.html
index a709f2785c1..39c5cbbc594 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.RegionLocationsFutureResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.RegionLocationsFutureResult.html
@@ -247,7 +247,7 @@
 <span class="source-line-no">234</span><span id="line-234">            int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
 <span class="source-line-no">235</span><span id="line-235">            try {</span>
 <span class="source-line-no">236</span><span id="line-236">              RegionLocations metaLocations = conn.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">237</span><span id="line-237">                .get(conn.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">237</span><span id="line-237">                .get(conn.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
 <span class="source-line-no">238</span><span id="line-238">              numOfReplicas = metaLocations.size();</span>
 <span class="source-line-no">239</span><span id="line-239">            } catch (Exception e) {</span>
 <span class="source-line-no">240</span><span id="line-240">              LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
index e3ac855467d..0df2eef31ee 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
@@ -247,7 +247,7 @@
 <span class="source-line-no">234</span><span id="line-234">            int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
 <span class="source-line-no">235</span><span id="line-235">            try {</span>
 <span class="source-line-no">236</span><span id="line-236">              RegionLocations metaLocations = conn.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">237</span><span id="line-237">                .get(conn.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">237</span><span id="line-237">                .get(conn.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
 <span class="source-line-no">238</span><span id="line-238">              numOfReplicas = metaLocations.size();</span>
 <span class="source-line-no">239</span><span id="line-239">            } catch (Exception e) {</span>
 <span class="source-line-no">240</span><span id="line-240">              LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
index 317dba6318e..9643b3cbd7a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
@@ -247,7 +247,7 @@
 <span class="source-line-no">234</span><span id="line-234">            int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
 <span class="source-line-no">235</span><span id="line-235">            try {</span>
 <span class="source-line-no">236</span><span id="line-236">              RegionLocations metaLocations = conn.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">237</span><span id="line-237">                .get(conn.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">237</span><span id="line-237">                .get(conn.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
 <span class="source-line-no">238</span><span id="line-238">              numOfReplicas = metaLocations.size();</span>
 <span class="source-line-no">239</span><span id="line-239">            } catch (Exception e) {</span>
 <span class="source-line-no">240</span><span id="line-240">              LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
index e50655d1a8f..55c4e4967ac 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
@@ -69,73 +69,78 @@
 <span class="source-line-no">056</span><span id="line-56">          }</span>
 <span class="source-line-no">057</span><span id="line-57">        }</span>
 <span class="source-line-no">058</span><span id="line-58">      }</span>
-<span class="source-line-no">059</span><span id="line-59">      get.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
-<span class="source-line-no">060</span><span id="line-60">      get.readVersions(rowspec.getMaxVersions());</span>
-<span class="source-line-no">061</span><span id="line-61">      if (filter != null) {</span>
-<span class="source-line-no">062</span><span id="line-62">        get.setFilter(filter);</span>
+<span class="source-line-no">059</span><span id="line-59">      if (rowspec.isPartialTimeRange()) {</span>
+<span class="source-line-no">060</span><span id="line-60">        get.setTimestamp(rowspec.getTimestamp());</span>
+<span class="source-line-no">061</span><span id="line-61">      } else {</span>
+<span class="source-line-no">062</span><span id="line-62">        get.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
 <span class="source-line-no">063</span><span id="line-63">      }</span>
-<span class="source-line-no">064</span><span id="line-64">      get.setCacheBlocks(cacheBlocks);</span>
-<span class="source-line-no">065</span><span id="line-65">      Result result = table.get(get);</span>
-<span class="source-line-no">066</span><span id="line-66">      if (result != null &amp;&amp; !result.isEmpty()) {</span>
-<span class="source-line-no">067</span><span id="line-67">        valuesI = result.listCells().iterator();</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65">      get.readVersions(rowspec.getMaxVersions());</span>
+<span class="source-line-no">066</span><span id="line-66">      if (filter != null) {</span>
+<span class="source-line-no">067</span><span id="line-67">        get.setFilter(filter);</span>
 <span class="source-line-no">068</span><span id="line-68">      }</span>
-<span class="source-line-no">069</span><span id="line-69">    } catch (DoNotRetryIOException e) {</span>
-<span class="source-line-no">070</span><span id="line-70">      // Warn here because Stargate will return 404 in the case if multiple</span>
-<span class="source-line-no">071</span><span id="line-71">      // column families were specified but one did not exist -- currently</span>
-<span class="source-line-no">072</span><span id="line-72">      // HBase will fail the whole Get.</span>
-<span class="source-line-no">073</span><span id="line-73">      // Specifying multiple columns in a URI should be uncommon usage but</span>
-<span class="source-line-no">074</span><span id="line-74">      // help to avoid confusion by leaving a record of what happened here in</span>
-<span class="source-line-no">075</span><span id="line-75">      // the log.</span>
-<span class="source-line-no">076</span><span id="line-76">      LOG.warn(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">077</span><span id="line-77">      // Lets get the exception rethrown to get a more meaningful error message than 404</span>
-<span class="source-line-no">078</span><span id="line-78">      if (e instanceof AccessDeniedException) {</span>
-<span class="source-line-no">079</span><span id="line-79">        throw e;</span>
-<span class="source-line-no">080</span><span id="line-80">      }</span>
-<span class="source-line-no">081</span><span id="line-81">    }</span>
-<span class="source-line-no">082</span><span id="line-82">  }</span>
-<span class="source-line-no">083</span><span id="line-83"></span>
-<span class="source-line-no">084</span><span id="line-84">  @Override</span>
-<span class="source-line-no">085</span><span id="line-85">  public void close() {</span>
-<span class="source-line-no">086</span><span id="line-86">  }</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88">  @Override</span>
-<span class="source-line-no">089</span><span id="line-89">  public boolean hasNext() {</span>
-<span class="source-line-no">090</span><span id="line-90">    if (cache != null) {</span>
-<span class="source-line-no">091</span><span id="line-91">      return true;</span>
-<span class="source-line-no">092</span><span id="line-92">    }</span>
-<span class="source-line-no">093</span><span id="line-93">    if (valuesI == null) {</span>
-<span class="source-line-no">094</span><span id="line-94">      return false;</span>
-<span class="source-line-no">095</span><span id="line-95">    }</span>
-<span class="source-line-no">096</span><span id="line-96">    return valuesI.hasNext();</span>
-<span class="source-line-no">097</span><span id="line-97">  }</span>
-<span class="source-line-no">098</span><span id="line-98"></span>
-<span class="source-line-no">099</span><span id="line-99">  @Override</span>
-<span class="source-line-no">100</span><span id="line-100">  public Cell next() {</span>
-<span class="source-line-no">101</span><span id="line-101">    if (cache != null) {</span>
-<span class="source-line-no">102</span><span id="line-102">      Cell kv = cache;</span>
-<span class="source-line-no">103</span><span id="line-103">      cache = null;</span>
-<span class="source-line-no">104</span><span id="line-104">      return kv;</span>
-<span class="source-line-no">105</span><span id="line-105">    }</span>
-<span class="source-line-no">106</span><span id="line-106">    if (valuesI == null) {</span>
-<span class="source-line-no">107</span><span id="line-107">      return null;</span>
-<span class="source-line-no">108</span><span id="line-108">    }</span>
-<span class="source-line-no">109</span><span id="line-109">    try {</span>
-<span class="source-line-no">110</span><span id="line-110">      return valuesI.next();</span>
-<span class="source-line-no">111</span><span id="line-111">    } catch (NoSuchElementException e) {</span>
+<span class="source-line-no">069</span><span id="line-69">      get.setCacheBlocks(cacheBlocks);</span>
+<span class="source-line-no">070</span><span id="line-70">      Result result = table.get(get);</span>
+<span class="source-line-no">071</span><span id="line-71">      if (result != null &amp;&amp; !result.isEmpty()) {</span>
+<span class="source-line-no">072</span><span id="line-72">        valuesI = result.listCells().iterator();</span>
+<span class="source-line-no">073</span><span id="line-73">      }</span>
+<span class="source-line-no">074</span><span id="line-74">    } catch (DoNotRetryIOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75">      // Warn here because Stargate will return 404 in the case if multiple</span>
+<span class="source-line-no">076</span><span id="line-76">      // column families were specified but one did not exist -- currently</span>
+<span class="source-line-no">077</span><span id="line-77">      // HBase will fail the whole Get.</span>
+<span class="source-line-no">078</span><span id="line-78">      // Specifying multiple columns in a URI should be uncommon usage but</span>
+<span class="source-line-no">079</span><span id="line-79">      // help to avoid confusion by leaving a record of what happened here in</span>
+<span class="source-line-no">080</span><span id="line-80">      // the log.</span>
+<span class="source-line-no">081</span><span id="line-81">      LOG.warn(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">082</span><span id="line-82">      // Lets get the exception rethrown to get a more meaningful error message than 404</span>
+<span class="source-line-no">083</span><span id="line-83">      if (e instanceof AccessDeniedException) {</span>
+<span class="source-line-no">084</span><span id="line-84">        throw e;</span>
+<span class="source-line-no">085</span><span id="line-85">      }</span>
+<span class="source-line-no">086</span><span id="line-86">    }</span>
+<span class="source-line-no">087</span><span id="line-87">  }</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89">  @Override</span>
+<span class="source-line-no">090</span><span id="line-90">  public void close() {</span>
+<span class="source-line-no">091</span><span id="line-91">  }</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93">  @Override</span>
+<span class="source-line-no">094</span><span id="line-94">  public boolean hasNext() {</span>
+<span class="source-line-no">095</span><span id="line-95">    if (cache != null) {</span>
+<span class="source-line-no">096</span><span id="line-96">      return true;</span>
+<span class="source-line-no">097</span><span id="line-97">    }</span>
+<span class="source-line-no">098</span><span id="line-98">    if (valuesI == null) {</span>
+<span class="source-line-no">099</span><span id="line-99">      return false;</span>
+<span class="source-line-no">100</span><span id="line-100">    }</span>
+<span class="source-line-no">101</span><span id="line-101">    return valuesI.hasNext();</span>
+<span class="source-line-no">102</span><span id="line-102">  }</span>
+<span class="source-line-no">103</span><span id="line-103"></span>
+<span class="source-line-no">104</span><span id="line-104">  @Override</span>
+<span class="source-line-no">105</span><span id="line-105">  public Cell next() {</span>
+<span class="source-line-no">106</span><span id="line-106">    if (cache != null) {</span>
+<span class="source-line-no">107</span><span id="line-107">      Cell kv = cache;</span>
+<span class="source-line-no">108</span><span id="line-108">      cache = null;</span>
+<span class="source-line-no">109</span><span id="line-109">      return kv;</span>
+<span class="source-line-no">110</span><span id="line-110">    }</span>
+<span class="source-line-no">111</span><span id="line-111">    if (valuesI == null) {</span>
 <span class="source-line-no">112</span><span id="line-112">      return null;</span>
 <span class="source-line-no">113</span><span id="line-113">    }</span>
-<span class="source-line-no">114</span><span id="line-114">  }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">  @Override</span>
-<span class="source-line-no">117</span><span id="line-117">  public void putBack(Cell kv) {</span>
-<span class="source-line-no">118</span><span id="line-118">    this.cache = kv;</span>
+<span class="source-line-no">114</span><span id="line-114">    try {</span>
+<span class="source-line-no">115</span><span id="line-115">      return valuesI.next();</span>
+<span class="source-line-no">116</span><span id="line-116">    } catch (NoSuchElementException e) {</span>
+<span class="source-line-no">117</span><span id="line-117">      return null;</span>
+<span class="source-line-no">118</span><span id="line-118">    }</span>
 <span class="source-line-no">119</span><span id="line-119">  }</span>
 <span class="source-line-no">120</span><span id="line-120"></span>
 <span class="source-line-no">121</span><span id="line-121">  @Override</span>
-<span class="source-line-no">122</span><span id="line-122">  public void remove() {</span>
-<span class="source-line-no">123</span><span id="line-123">    throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">122</span><span id="line-122">  public void putBack(Cell kv) {</span>
+<span class="source-line-no">123</span><span id="line-123">    this.cache = kv;</span>
 <span class="source-line-no">124</span><span id="line-124">  }</span>
-<span class="source-line-no">125</span><span id="line-125">}</span>
+<span class="source-line-no">125</span><span id="line-125"></span>
+<span class="source-line-no">126</span><span id="line-126">  @Override</span>
+<span class="source-line-no">127</span><span id="line-127">  public void remove() {</span>
+<span class="source-line-no">128</span><span id="line-128">    throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">129</span><span id="line-129">  }</span>
+<span class="source-line-no">130</span><span id="line-130">}</span>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
index dfc7f292a8a..76546670279 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
@@ -59,387 +59,394 @@
 <span class="source-line-no">046</span><span id="line-46">  private long endTime = DEFAULT_END_TIMESTAMP;</span>
 <span class="source-line-no">047</span><span id="line-47">  private int maxVersions = 1;</span>
 <span class="source-line-no">048</span><span id="line-48">  private int maxValues = Integer.MAX_VALUE;</span>
-<span class="source-line-no">049</span><span id="line-49"></span>
-<span class="source-line-no">050</span><span id="line-50">  public RowSpec(String path) throws IllegalArgumentException {</span>
-<span class="source-line-no">051</span><span id="line-51">    this(path, null);</span>
-<span class="source-line-no">052</span><span id="line-52">  }</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54">  public RowSpec(String path, String keyEncoding) throws IllegalArgumentException {</span>
-<span class="source-line-no">055</span><span id="line-55">    int i = 0;</span>
-<span class="source-line-no">056</span><span id="line-56">    while (path.charAt(i) == '/') {</span>
-<span class="source-line-no">057</span><span id="line-57">      i++;</span>
-<span class="source-line-no">058</span><span id="line-58">    }</span>
-<span class="source-line-no">059</span><span id="line-59">    i = parseRowKeys(path, i);</span>
-<span class="source-line-no">060</span><span id="line-60">    i = parseColumns(path, i);</span>
-<span class="source-line-no">061</span><span id="line-61">    i = parseTimestamp(path, i);</span>
-<span class="source-line-no">062</span><span id="line-62">    i = parseQueryParams(path, i);</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64">    if (keyEncoding != null) {</span>
-<span class="source-line-no">065</span><span id="line-65">      // See https://en.wikipedia.org/wiki/Base64#Variants_summary_table</span>
-<span class="source-line-no">066</span><span id="line-66">      Base64.Decoder decoder;</span>
-<span class="source-line-no">067</span><span id="line-67">      switch (keyEncoding) {</span>
-<span class="source-line-no">068</span><span id="line-68">        case "b64":</span>
-<span class="source-line-no">069</span><span id="line-69">        case "base64":</span>
-<span class="source-line-no">070</span><span id="line-70">        case "b64url":</span>
-<span class="source-line-no">071</span><span id="line-71">        case "base64url":</span>
-<span class="source-line-no">072</span><span id="line-72">          decoder = Base64.getUrlDecoder();</span>
-<span class="source-line-no">073</span><span id="line-73">          break;</span>
-<span class="source-line-no">074</span><span id="line-74">        case "b64basic":</span>
-<span class="source-line-no">075</span><span id="line-75">        case "base64basic":</span>
-<span class="source-line-no">076</span><span id="line-76">          decoder = Base64.getDecoder();</span>
-<span class="source-line-no">077</span><span id="line-77">          break;</span>
-<span class="source-line-no">078</span><span id="line-78">        default:</span>
-<span class="source-line-no">079</span><span id="line-79">          throw new IllegalArgumentException("unknown key encoding '" + keyEncoding + "'");</span>
-<span class="source-line-no">080</span><span id="line-80">      }</span>
-<span class="source-line-no">081</span><span id="line-81">      this.row = decoder.decode(this.row);</span>
-<span class="source-line-no">082</span><span id="line-82">      if (this.endRow != null) {</span>
-<span class="source-line-no">083</span><span id="line-83">        this.endRow = decoder.decode(this.endRow);</span>
-<span class="source-line-no">084</span><span id="line-84">      }</span>
-<span class="source-line-no">085</span><span id="line-85">      TreeSet&lt;byte[]&gt; decodedColumns = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);</span>
-<span class="source-line-no">086</span><span id="line-86">      for (byte[] encodedColumn : this.columns) {</span>
-<span class="source-line-no">087</span><span id="line-87">        decodedColumns.add(decoder.decode(encodedColumn));</span>
-<span class="source-line-no">088</span><span id="line-88">      }</span>
-<span class="source-line-no">089</span><span id="line-89">      this.columns = decodedColumns;</span>
-<span class="source-line-no">090</span><span id="line-90">    }</span>
-<span class="source-line-no">091</span><span id="line-91">  }</span>
-<span class="source-line-no">092</span><span id="line-92"></span>
-<span class="source-line-no">093</span><span id="line-93">  private int parseRowKeys(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">094</span><span id="line-94">    String startRow = null, endRow = null;</span>
-<span class="source-line-no">095</span><span id="line-95">    try {</span>
-<span class="source-line-no">096</span><span id="line-96">      StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">097</span><span id="line-97">      char c;</span>
-<span class="source-line-no">098</span><span id="line-98">      while (i &lt; path.length() &amp;&amp; (c = path.charAt(i)) != '/') {</span>
-<span class="source-line-no">099</span><span id="line-99">        sb.append(c);</span>
-<span class="source-line-no">100</span><span id="line-100">        i++;</span>
-<span class="source-line-no">101</span><span id="line-101">      }</span>
-<span class="source-line-no">102</span><span id="line-102">      i++;</span>
-<span class="source-line-no">103</span><span id="line-103">      String row = startRow = sb.toString();</span>
-<span class="source-line-no">104</span><span id="line-104">      int idx = startRow.indexOf(',');</span>
-<span class="source-line-no">105</span><span id="line-105">      if (idx != -1) {</span>
-<span class="source-line-no">106</span><span id="line-106">        startRow = URLDecoder.decode(row.substring(0, idx), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">107</span><span id="line-107">        endRow = URLDecoder.decode(row.substring(idx + 1), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">108</span><span id="line-108">      } else {</span>
-<span class="source-line-no">109</span><span id="line-109">        startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">110</span><span id="line-110">      }</span>
-<span class="source-line-no">111</span><span id="line-111">    } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">112</span><span id="line-112">      throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">113</span><span id="line-113">    } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">114</span><span id="line-114">      throw new RuntimeException(e);</span>
-<span class="source-line-no">115</span><span id="line-115">    }</span>
-<span class="source-line-no">116</span><span id="line-116">    // HBase does not support wildcards on row keys so we will emulate a</span>
-<span class="source-line-no">117</span><span id="line-117">    // suffix glob by synthesizing appropriate start and end row keys for</span>
-<span class="source-line-no">118</span><span id="line-118">    // table scanning</span>
-<span class="source-line-no">119</span><span id="line-119">    if (startRow.charAt(startRow.length() - 1) == '*') {</span>
-<span class="source-line-no">120</span><span id="line-120">      if (endRow != null)</span>
-<span class="source-line-no">121</span><span id="line-121">        throw new IllegalArgumentException("invalid path: start row " + "specified with wildcard");</span>
-<span class="source-line-no">122</span><span id="line-122">      this.row = Bytes.toBytes(startRow.substring(0, startRow.lastIndexOf("*")));</span>
-<span class="source-line-no">123</span><span id="line-123">      this.endRow = new byte[this.row.length + 1];</span>
-<span class="source-line-no">124</span><span id="line-124">      System.arraycopy(this.row, 0, this.endRow, 0, this.row.length);</span>
-<span class="source-line-no">125</span><span id="line-125">      this.endRow[this.row.length] = (byte) 255;</span>
-<span class="source-line-no">126</span><span id="line-126">    } else {</span>
-<span class="source-line-no">127</span><span id="line-127">      this.row = Bytes.toBytes(startRow.toString());</span>
-<span class="source-line-no">128</span><span id="line-128">      if (endRow != null) {</span>
-<span class="source-line-no">129</span><span id="line-129">        this.endRow = Bytes.toBytes(endRow.toString());</span>
-<span class="source-line-no">130</span><span id="line-130">      }</span>
-<span class="source-line-no">131</span><span id="line-131">    }</span>
-<span class="source-line-no">132</span><span id="line-132">    return i;</span>
-<span class="source-line-no">133</span><span id="line-133">  }</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135">  private int parseColumns(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">136</span><span id="line-136">    if (i &gt;= path.length()) {</span>
-<span class="source-line-no">137</span><span id="line-137">      return i;</span>
-<span class="source-line-no">138</span><span id="line-138">    }</span>
-<span class="source-line-no">139</span><span id="line-139">    try {</span>
-<span class="source-line-no">140</span><span id="line-140">      char c;</span>
-<span class="source-line-no">141</span><span id="line-141">      StringBuilder column = new StringBuilder();</span>
-<span class="source-line-no">142</span><span id="line-142">      while (i &lt; path.length() &amp;&amp; (c = path.charAt(i)) != '/') {</span>
-<span class="source-line-no">143</span><span id="line-143">        if (c == ',') {</span>
-<span class="source-line-no">144</span><span id="line-144">          if (column.length() &lt; 1) {</span>
-<span class="source-line-no">145</span><span id="line-145">            throw new IllegalArgumentException("invalid path");</span>
-<span class="source-line-no">146</span><span id="line-146">          }</span>
-<span class="source-line-no">147</span><span id="line-147">          String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">148</span><span id="line-148">          this.columns.add(Bytes.toBytes(s));</span>
-<span class="source-line-no">149</span><span id="line-149">          column.setLength(0);</span>
-<span class="source-line-no">150</span><span id="line-150">          i++;</span>
-<span class="source-line-no">151</span><span id="line-151">          continue;</span>
-<span class="source-line-no">152</span><span id="line-152">        }</span>
-<span class="source-line-no">153</span><span id="line-153">        column.append(c);</span>
-<span class="source-line-no">154</span><span id="line-154">        i++;</span>
-<span class="source-line-no">155</span><span id="line-155">      }</span>
-<span class="source-line-no">156</span><span id="line-156">      i++;</span>
-<span class="source-line-no">157</span><span id="line-157">      // trailing list entry</span>
-<span class="source-line-no">158</span><span id="line-158">      if (column.length() &gt; 0) {</span>
-<span class="source-line-no">159</span><span id="line-159">        String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">160</span><span id="line-160">        this.columns.add(Bytes.toBytes(s));</span>
-<span class="source-line-no">161</span><span id="line-161">      }</span>
-<span class="source-line-no">162</span><span id="line-162">    } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">163</span><span id="line-163">      throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">164</span><span id="line-164">    } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">165</span><span id="line-165">      // shouldn't happen</span>
-<span class="source-line-no">166</span><span id="line-166">      throw new RuntimeException(e);</span>
-<span class="source-line-no">167</span><span id="line-167">    }</span>
-<span class="source-line-no">168</span><span id="line-168">    return i;</span>
-<span class="source-line-no">169</span><span id="line-169">  }</span>
-<span class="source-line-no">170</span><span id="line-170"></span>
-<span class="source-line-no">171</span><span id="line-171">  private int parseTimestamp(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">172</span><span id="line-172">    if (i &gt;= path.length()) {</span>
-<span class="source-line-no">173</span><span id="line-173">      return i;</span>
-<span class="source-line-no">174</span><span id="line-174">    }</span>
-<span class="source-line-no">175</span><span id="line-175">    long time0 = 0, time1 = 0;</span>
-<span class="source-line-no">176</span><span id="line-176">    try {</span>
-<span class="source-line-no">177</span><span id="line-177">      char c = 0;</span>
-<span class="source-line-no">178</span><span id="line-178">      StringBuilder stamp = new StringBuilder();</span>
-<span class="source-line-no">179</span><span id="line-179">      while (i &lt; path.length()) {</span>
-<span class="source-line-no">180</span><span id="line-180">        c = path.charAt(i);</span>
-<span class="source-line-no">181</span><span id="line-181">        if (c == '/' || c == ',') {</span>
-<span class="source-line-no">182</span><span id="line-182">          break;</span>
-<span class="source-line-no">183</span><span id="line-183">        }</span>
-<span class="source-line-no">184</span><span id="line-184">        stamp.append(c);</span>
-<span class="source-line-no">185</span><span id="line-185">        i++;</span>
-<span class="source-line-no">186</span><span id="line-186">      }</span>
-<span class="source-line-no">187</span><span id="line-187">      try {</span>
-<span class="source-line-no">188</span><span id="line-188">        time0 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">189</span><span id="line-189">      } catch (NumberFormatException e) {</span>
-<span class="source-line-no">190</span><span id="line-190">        throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">191</span><span id="line-191">      }</span>
-<span class="source-line-no">192</span><span id="line-192">      if (c == ',') {</span>
-<span class="source-line-no">193</span><span id="line-193">        stamp = new StringBuilder();</span>
-<span class="source-line-no">194</span><span id="line-194">        i++;</span>
-<span class="source-line-no">195</span><span id="line-195">        while (i &lt; path.length() &amp;&amp; ((c = path.charAt(i)) != '/')) {</span>
-<span class="source-line-no">196</span><span id="line-196">          stamp.append(c);</span>
-<span class="source-line-no">197</span><span id="line-197">          i++;</span>
-<span class="source-line-no">198</span><span id="line-198">        }</span>
-<span class="source-line-no">199</span><span id="line-199">        try {</span>
-<span class="source-line-no">200</span><span id="line-200">          time1 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">201</span><span id="line-201">        } catch (NumberFormatException e) {</span>
-<span class="source-line-no">202</span><span id="line-202">          throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">203</span><span id="line-203">        }</span>
-<span class="source-line-no">204</span><span id="line-204">      }</span>
-<span class="source-line-no">205</span><span id="line-205">      if (c == '/') {</span>
-<span class="source-line-no">206</span><span id="line-206">        i++;</span>
-<span class="source-line-no">207</span><span id="line-207">      }</span>
-<span class="source-line-no">208</span><span id="line-208">    } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">209</span><span id="line-209">      throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">210</span><span id="line-210">    } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">211</span><span id="line-211">      // shouldn't happen</span>
-<span class="source-line-no">212</span><span id="line-212">      throw new RuntimeException(e);</span>
-<span class="source-line-no">213</span><span id="line-213">    }</span>
-<span class="source-line-no">214</span><span id="line-214">    if (time1 != 0) {</span>
-<span class="source-line-no">215</span><span id="line-215">      startTime = time0;</span>
-<span class="source-line-no">216</span><span id="line-216">      endTime = time1;</span>
-<span class="source-line-no">217</span><span id="line-217">    } else {</span>
-<span class="source-line-no">218</span><span id="line-218">      endTime = time0;</span>
-<span class="source-line-no">219</span><span id="line-219">    }</span>
-<span class="source-line-no">220</span><span id="line-220">    return i;</span>
-<span class="source-line-no">221</span><span id="line-221">  }</span>
-<span class="source-line-no">222</span><span id="line-222"></span>
-<span class="source-line-no">223</span><span id="line-223">  private int parseQueryParams(final String path, int i) {</span>
-<span class="source-line-no">224</span><span id="line-224">    if (i &gt;= path.length()) {</span>
-<span class="source-line-no">225</span><span id="line-225">      return i;</span>
-<span class="source-line-no">226</span><span id="line-226">    }</span>
-<span class="source-line-no">227</span><span id="line-227">    StringBuilder query = new StringBuilder();</span>
-<span class="source-line-no">228</span><span id="line-228">    try {</span>
-<span class="source-line-no">229</span><span id="line-229">      query.append(URLDecoder.decode(path.substring(i), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">230</span><span id="line-230">    } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">231</span><span id="line-231">      // should not happen</span>
-<span class="source-line-no">232</span><span id="line-232">      throw new RuntimeException(e);</span>
-<span class="source-line-no">233</span><span id="line-233">    }</span>
-<span class="source-line-no">234</span><span id="line-234">    i += query.length();</span>
-<span class="source-line-no">235</span><span id="line-235">    int j = 0;</span>
-<span class="source-line-no">236</span><span id="line-236">    while (j &lt; query.length()) {</span>
-<span class="source-line-no">237</span><span id="line-237">      char c = query.charAt(j);</span>
-<span class="source-line-no">238</span><span id="line-238">      if (c != '?' &amp;&amp; c != '&amp;') {</span>
-<span class="source-line-no">239</span><span id="line-239">        break;</span>
-<span class="source-line-no">240</span><span id="line-240">      }</span>
-<span class="source-line-no">241</span><span id="line-241">      if (++j &gt; query.length()) {</span>
-<span class="source-line-no">242</span><span id="line-242">        throw new IllegalArgumentException("malformed query parameter");</span>
-<span class="source-line-no">243</span><span id="line-243">      }</span>
-<span class="source-line-no">244</span><span id="line-244">      char what = query.charAt(j);</span>
-<span class="source-line-no">245</span><span id="line-245">      if (++j &gt; query.length()) {</span>
-<span class="source-line-no">246</span><span id="line-246">        break;</span>
-<span class="source-line-no">247</span><span id="line-247">      }</span>
-<span class="source-line-no">248</span><span id="line-248">      c = query.charAt(j);</span>
-<span class="source-line-no">249</span><span id="line-249">      if (c != '=') {</span>
-<span class="source-line-no">250</span><span id="line-250">        throw new IllegalArgumentException("malformed query parameter");</span>
-<span class="source-line-no">251</span><span id="line-251">      }</span>
-<span class="source-line-no">252</span><span id="line-252">      if (++j &gt; query.length()) {</span>
-<span class="source-line-no">253</span><span id="line-253">        break;</span>
-<span class="source-line-no">254</span><span id="line-254">      }</span>
-<span class="source-line-no">255</span><span id="line-255">      switch (what) {</span>
-<span class="source-line-no">256</span><span id="line-256">        case 'm': {</span>
-<span class="source-line-no">257</span><span id="line-257">          StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">258</span><span id="line-258">          while (j &lt;= query.length()) {</span>
-<span class="source-line-no">259</span><span id="line-259">            c = query.charAt(j);</span>
-<span class="source-line-no">260</span><span id="line-260">            if (c &lt; '0' || c &gt; '9') {</span>
-<span class="source-line-no">261</span><span id="line-261">              j--;</span>
-<span class="source-line-no">262</span><span id="line-262">              break;</span>
-<span class="source-line-no">263</span><span id="line-263">            }</span>
-<span class="source-line-no">264</span><span id="line-264">            sb.append(c);</span>
-<span class="source-line-no">265</span><span id="line-265">          }</span>
-<span class="source-line-no">266</span><span id="line-266">          maxVersions = Integer.parseInt(sb.toString());</span>
-<span class="source-line-no">267</span><span id="line-267">        }</span>
-<span class="source-line-no">268</span><span id="line-268">          break;</span>
-<span class="source-line-no">269</span><span id="line-269">        case 'n': {</span>
-<span class="source-line-no">270</span><span id="line-270">          StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">271</span><span id="line-271">          while (j &lt;= query.length()) {</span>
-<span class="source-line-no">272</span><span id="line-272">            c = query.charAt(j);</span>
-<span class="source-line-no">273</span><span id="line-273">            if (c &lt; '0' || c &gt; '9') {</span>
-<span class="source-line-no">274</span><span id="line-274">              j--;</span>
-<span class="source-line-no">275</span><span id="line-275">              break;</span>
-<span class="source-line-no">276</span><span id="line-276">            }</span>
-<span class="source-line-no">277</span><span id="line-277">            sb.append(c);</span>
-<span class="source-line-no">278</span><span id="line-278">          }</span>
-<span class="source-line-no">279</span><span id="line-279">          maxValues = Integer.parseInt(sb.toString());</span>
-<span class="source-line-no">280</span><span id="line-280">        }</span>
-<span class="source-line-no">281</span><span id="line-281">          break;</span>
-<span class="source-line-no">282</span><span id="line-282">        default:</span>
-<span class="source-line-no">283</span><span id="line-283">          throw new IllegalArgumentException("unknown parameter '" + c + "'");</span>
-<span class="source-line-no">284</span><span id="line-284">      }</span>
-<span class="source-line-no">285</span><span id="line-285">    }</span>
-<span class="source-line-no">286</span><span id="line-286">    return i;</span>
-<span class="source-line-no">287</span><span id="line-287">  }</span>
-<span class="source-line-no">288</span><span id="line-288"></span>
-<span class="source-line-no">289</span><span id="line-289">  public RowSpec(byte[] startRow, byte[] endRow, byte[][] columns, long startTime, long endTime,</span>
-<span class="source-line-no">290</span><span id="line-290">    int maxVersions) {</span>
-<span class="source-line-no">291</span><span id="line-291">    this.row = startRow;</span>
-<span class="source-line-no">292</span><span id="line-292">    this.endRow = endRow;</span>
-<span class="source-line-no">293</span><span id="line-293">    if (columns != null) {</span>
-<span class="source-line-no">294</span><span id="line-294">      Collections.addAll(this.columns, columns);</span>
-<span class="source-line-no">295</span><span id="line-295">    }</span>
-<span class="source-line-no">296</span><span id="line-296">    this.startTime = startTime;</span>
-<span class="source-line-no">297</span><span id="line-297">    this.endTime = endTime;</span>
-<span class="source-line-no">298</span><span id="line-298">    this.maxVersions = maxVersions;</span>
-<span class="source-line-no">299</span><span id="line-299">  }</span>
-<span class="source-line-no">300</span><span id="line-300"></span>
-<span class="source-line-no">301</span><span id="line-301">  public RowSpec(byte[] startRow, byte[] endRow, Collection&lt;byte[]&gt; columns, long startTime,</span>
-<span class="source-line-no">302</span><span id="line-302">    long endTime, int maxVersions, Collection&lt;String&gt; labels) {</span>
-<span class="source-line-no">303</span><span id="line-303">    this(startRow, endRow, columns, startTime, endTime, maxVersions);</span>
-<span class="source-line-no">304</span><span id="line-304">    if (labels != null) {</span>
-<span class="source-line-no">305</span><span id="line-305">      this.labels.addAll(labels);</span>
-<span class="source-line-no">306</span><span id="line-306">    }</span>
-<span class="source-line-no">307</span><span id="line-307">  }</span>
-<span class="source-line-no">308</span><span id="line-308"></span>
-<span class="source-line-no">309</span><span id="line-309">  public RowSpec(byte[] startRow, byte[] endRow, Collection&lt;byte[]&gt; columns, long startTime,</span>
-<span class="source-line-no">310</span><span id="line-310">    long endTime, int maxVersions) {</span>
-<span class="source-line-no">311</span><span id="line-311">    this.row = startRow;</span>
-<span class="source-line-no">312</span><span id="line-312">    this.endRow = endRow;</span>
-<span class="source-line-no">313</span><span id="line-313">    if (columns != null) {</span>
-<span class="source-line-no">314</span><span id="line-314">      this.columns.addAll(columns);</span>
-<span class="source-line-no">315</span><span id="line-315">    }</span>
-<span class="source-line-no">316</span><span id="line-316">    this.startTime = startTime;</span>
-<span class="source-line-no">317</span><span id="line-317">    this.endTime = endTime;</span>
-<span class="source-line-no">318</span><span id="line-318">    this.maxVersions = maxVersions;</span>
-<span class="source-line-no">319</span><span id="line-319">  }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321">  public boolean isSingleRow() {</span>
-<span class="source-line-no">322</span><span id="line-322">    return endRow == null;</span>
-<span class="source-line-no">323</span><span id="line-323">  }</span>
-<span class="source-line-no">324</span><span id="line-324"></span>
-<span class="source-line-no">325</span><span id="line-325">  public int getMaxVersions() {</span>
-<span class="source-line-no">326</span><span id="line-326">    return maxVersions;</span>
-<span class="source-line-no">327</span><span id="line-327">  }</span>
-<span class="source-line-no">328</span><span id="line-328"></span>
-<span class="source-line-no">329</span><span id="line-329">  public void setMaxVersions(final int maxVersions) {</span>
-<span class="source-line-no">330</span><span id="line-330">    this.maxVersions = maxVersions;</span>
-<span class="source-line-no">331</span><span id="line-331">  }</span>
-<span class="source-line-no">332</span><span id="line-332"></span>
-<span class="source-line-no">333</span><span id="line-333">  public int getMaxValues() {</span>
-<span class="source-line-no">334</span><span id="line-334">    return maxValues;</span>
-<span class="source-line-no">335</span><span id="line-335">  }</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337">  public void setMaxValues(final int maxValues) {</span>
-<span class="source-line-no">338</span><span id="line-338">    this.maxValues = maxValues;</span>
-<span class="source-line-no">339</span><span id="line-339">  }</span>
-<span class="source-line-no">340</span><span id="line-340"></span>
-<span class="source-line-no">341</span><span id="line-341">  public boolean hasColumns() {</span>
-<span class="source-line-no">342</span><span id="line-342">    return !columns.isEmpty();</span>
-<span class="source-line-no">343</span><span id="line-343">  }</span>
-<span class="source-line-no">344</span><span id="line-344"></span>
-<span class="source-line-no">345</span><span id="line-345">  public boolean hasLabels() {</span>
-<span class="source-line-no">346</span><span id="line-346">    return !labels.isEmpty();</span>
-<span class="source-line-no">347</span><span id="line-347">  }</span>
-<span class="source-line-no">348</span><span id="line-348"></span>
-<span class="source-line-no">349</span><span id="line-349">  public byte[] getRow() {</span>
-<span class="source-line-no">350</span><span id="line-350">    return row;</span>
-<span class="source-line-no">351</span><span id="line-351">  }</span>
-<span class="source-line-no">352</span><span id="line-352"></span>
-<span class="source-line-no">353</span><span id="line-353">  public byte[] getStartRow() {</span>
-<span class="source-line-no">354</span><span id="line-354">    return row;</span>
-<span class="source-line-no">355</span><span id="line-355">  }</span>
-<span class="source-line-no">356</span><span id="line-356"></span>
-<span class="source-line-no">357</span><span id="line-357">  public boolean hasEndRow() {</span>
-<span class="source-line-no">358</span><span id="line-358">    return endRow != null;</span>
-<span class="source-line-no">359</span><span id="line-359">  }</span>
-<span class="source-line-no">360</span><span id="line-360"></span>
-<span class="source-line-no">361</span><span id="line-361">  public byte[] getEndRow() {</span>
-<span class="source-line-no">362</span><span id="line-362">    return endRow;</span>
-<span class="source-line-no">363</span><span id="line-363">  }</span>
-<span class="source-line-no">364</span><span id="line-364"></span>
-<span class="source-line-no">365</span><span id="line-365">  public void addColumn(final byte[] column) {</span>
-<span class="source-line-no">366</span><span id="line-366">    columns.add(column);</span>
-<span class="source-line-no">367</span><span id="line-367">  }</span>
-<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369">  public byte[][] getColumns() {</span>
-<span class="source-line-no">370</span><span id="line-370">    return columns.toArray(new byte[columns.size()][]);</span>
-<span class="source-line-no">371</span><span id="line-371">  }</span>
-<span class="source-line-no">372</span><span id="line-372"></span>
-<span class="source-line-no">373</span><span id="line-373">  public List&lt;String&gt; getLabels() {</span>
-<span class="source-line-no">374</span><span id="line-374">    return labels;</span>
-<span class="source-line-no">375</span><span id="line-375">  }</span>
-<span class="source-line-no">376</span><span id="line-376"></span>
-<span class="source-line-no">377</span><span id="line-377">  public boolean hasTimestamp() {</span>
-<span class="source-line-no">378</span><span id="line-378">    return (startTime == 0) &amp;&amp; (endTime != Long.MAX_VALUE);</span>
-<span class="source-line-no">379</span><span id="line-379">  }</span>
-<span class="source-line-no">380</span><span id="line-380"></span>
-<span class="source-line-no">381</span><span id="line-381">  public long getTimestamp() {</span>
-<span class="source-line-no">382</span><span id="line-382">    return endTime;</span>
-<span class="source-line-no">383</span><span id="line-383">  }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">  public long getStartTime() {</span>
-<span class="source-line-no">386</span><span id="line-386">    return startTime;</span>
-<span class="source-line-no">387</span><span id="line-387">  }</span>
-<span class="source-line-no">388</span><span id="line-388"></span>
-<span class="source-line-no">389</span><span id="line-389">  public void setStartTime(final long startTime) {</span>
-<span class="source-line-no">390</span><span id="line-390">    this.startTime = startTime;</span>
-<span class="source-line-no">391</span><span id="line-391">  }</span>
-<span class="source-line-no">392</span><span id="line-392"></span>
-<span class="source-line-no">393</span><span id="line-393">  public long getEndTime() {</span>
-<span class="source-line-no">394</span><span id="line-394">    return endTime;</span>
-<span class="source-line-no">395</span><span id="line-395">  }</span>
-<span class="source-line-no">396</span><span id="line-396"></span>
-<span class="source-line-no">397</span><span id="line-397">  public void setEndTime(long endTime) {</span>
-<span class="source-line-no">398</span><span id="line-398">    this.endTime = endTime;</span>
-<span class="source-line-no">399</span><span id="line-399">  }</span>
-<span class="source-line-no">400</span><span id="line-400"></span>
-<span class="source-line-no">401</span><span id="line-401">  @Override</span>
-<span class="source-line-no">402</span><span id="line-402">  public String toString() {</span>
-<span class="source-line-no">403</span><span id="line-403">    StringBuilder result = new StringBuilder();</span>
-<span class="source-line-no">404</span><span id="line-404">    result.append("{startRow =&gt; '");</span>
-<span class="source-line-no">405</span><span id="line-405">    if (row != null) {</span>
-<span class="source-line-no">406</span><span id="line-406">      result.append(Bytes.toString(row));</span>
-<span class="source-line-no">407</span><span id="line-407">    }</span>
-<span class="source-line-no">408</span><span id="line-408">    result.append("', endRow =&gt; '");</span>
-<span class="source-line-no">409</span><span id="line-409">    if (endRow != null) {</span>
-<span class="source-line-no">410</span><span id="line-410">      result.append(Bytes.toString(endRow));</span>
-<span class="source-line-no">411</span><span id="line-411">    }</span>
-<span class="source-line-no">412</span><span id="line-412">    result.append("', columns =&gt; [");</span>
-<span class="source-line-no">413</span><span id="line-413">    for (byte[] col : columns) {</span>
-<span class="source-line-no">414</span><span id="line-414">      result.append(" '");</span>
-<span class="source-line-no">415</span><span id="line-415">      result.append(Bytes.toString(col));</span>
-<span class="source-line-no">416</span><span id="line-416">      result.append("'");</span>
-<span class="source-line-no">417</span><span id="line-417">    }</span>
-<span class="source-line-no">418</span><span id="line-418">    result.append(" ], startTime =&gt; ");</span>
-<span class="source-line-no">419</span><span id="line-419">    result.append(Long.toString(startTime));</span>
-<span class="source-line-no">420</span><span id="line-420">    result.append(", endTime =&gt; ");</span>
-<span class="source-line-no">421</span><span id="line-421">    result.append(Long.toString(endTime));</span>
-<span class="source-line-no">422</span><span id="line-422">    result.append(", maxVersions =&gt; ");</span>
-<span class="source-line-no">423</span><span id="line-423">    result.append(Integer.toString(maxVersions));</span>
-<span class="source-line-no">424</span><span id="line-424">    result.append(", maxValues =&gt; ");</span>
-<span class="source-line-no">425</span><span id="line-425">    result.append(Integer.toString(maxValues));</span>
-<span class="source-line-no">426</span><span id="line-426">    result.append("}");</span>
-<span class="source-line-no">427</span><span id="line-427">    return result.toString();</span>
-<span class="source-line-no">428</span><span id="line-428">  }</span>
-<span class="source-line-no">429</span><span id="line-429">}</span>
+<span class="source-line-no">049</span><span id="line-49">  private boolean partialTimeRange;</span>
+<span class="source-line-no">050</span><span id="line-50"></span>
+<span class="source-line-no">051</span><span id="line-51">  public RowSpec(String path) throws IllegalArgumentException {</span>
+<span class="source-line-no">052</span><span id="line-52">    this(path, null);</span>
+<span class="source-line-no">053</span><span id="line-53">  }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  public RowSpec(String path, String keyEncoding) throws IllegalArgumentException {</span>
+<span class="source-line-no">056</span><span id="line-56">    int i = 0;</span>
+<span class="source-line-no">057</span><span id="line-57">    while (path.charAt(i) == '/') {</span>
+<span class="source-line-no">058</span><span id="line-58">      i++;</span>
+<span class="source-line-no">059</span><span id="line-59">    }</span>
+<span class="source-line-no">060</span><span id="line-60">    i = parseRowKeys(path, i);</span>
+<span class="source-line-no">061</span><span id="line-61">    i = parseColumns(path, i);</span>
+<span class="source-line-no">062</span><span id="line-62">    i = parseTimestamp(path, i);</span>
+<span class="source-line-no">063</span><span id="line-63">    i = parseQueryParams(path, i);</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65">    if (keyEncoding != null) {</span>
+<span class="source-line-no">066</span><span id="line-66">      // See https://en.wikipedia.org/wiki/Base64#Variants_summary_table</span>
+<span class="source-line-no">067</span><span id="line-67">      Base64.Decoder decoder;</span>
+<span class="source-line-no">068</span><span id="line-68">      switch (keyEncoding) {</span>
+<span class="source-line-no">069</span><span id="line-69">        case "b64":</span>
+<span class="source-line-no">070</span><span id="line-70">        case "base64":</span>
+<span class="source-line-no">071</span><span id="line-71">        case "b64url":</span>
+<span class="source-line-no">072</span><span id="line-72">        case "base64url":</span>
+<span class="source-line-no">073</span><span id="line-73">          decoder = Base64.getUrlDecoder();</span>
+<span class="source-line-no">074</span><span id="line-74">          break;</span>
+<span class="source-line-no">075</span><span id="line-75">        case "b64basic":</span>
+<span class="source-line-no">076</span><span id="line-76">        case "base64basic":</span>
+<span class="source-line-no">077</span><span id="line-77">          decoder = Base64.getDecoder();</span>
+<span class="source-line-no">078</span><span id="line-78">          break;</span>
+<span class="source-line-no">079</span><span id="line-79">        default:</span>
+<span class="source-line-no">080</span><span id="line-80">          throw new IllegalArgumentException("unknown key encoding '" + keyEncoding + "'");</span>
+<span class="source-line-no">081</span><span id="line-81">      }</span>
+<span class="source-line-no">082</span><span id="line-82">      this.row = decoder.decode(this.row);</span>
+<span class="source-line-no">083</span><span id="line-83">      if (this.endRow != null) {</span>
+<span class="source-line-no">084</span><span id="line-84">        this.endRow = decoder.decode(this.endRow);</span>
+<span class="source-line-no">085</span><span id="line-85">      }</span>
+<span class="source-line-no">086</span><span id="line-86">      TreeSet&lt;byte[]&gt; decodedColumns = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);</span>
+<span class="source-line-no">087</span><span id="line-87">      for (byte[] encodedColumn : this.columns) {</span>
+<span class="source-line-no">088</span><span id="line-88">        decodedColumns.add(decoder.decode(encodedColumn));</span>
+<span class="source-line-no">089</span><span id="line-89">      }</span>
+<span class="source-line-no">090</span><span id="line-90">      this.columns = decodedColumns;</span>
+<span class="source-line-no">091</span><span id="line-91">    }</span>
+<span class="source-line-no">092</span><span id="line-92">  }</span>
+<span class="source-line-no">093</span><span id="line-93"></span>
+<span class="source-line-no">094</span><span id="line-94">  private int parseRowKeys(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">095</span><span id="line-95">    String startRow = null, endRow = null;</span>
+<span class="source-line-no">096</span><span id="line-96">    try {</span>
+<span class="source-line-no">097</span><span id="line-97">      StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">098</span><span id="line-98">      char c;</span>
+<span class="source-line-no">099</span><span id="line-99">      while (i &lt; path.length() &amp;&amp; (c = path.charAt(i)) != '/') {</span>
+<span class="source-line-no">100</span><span id="line-100">        sb.append(c);</span>
+<span class="source-line-no">101</span><span id="line-101">        i++;</span>
+<span class="source-line-no">102</span><span id="line-102">      }</span>
+<span class="source-line-no">103</span><span id="line-103">      i++;</span>
+<span class="source-line-no">104</span><span id="line-104">      String row = startRow = sb.toString();</span>
+<span class="source-line-no">105</span><span id="line-105">      int idx = startRow.indexOf(',');</span>
+<span class="source-line-no">106</span><span id="line-106">      if (idx != -1) {</span>
+<span class="source-line-no">107</span><span id="line-107">        startRow = URLDecoder.decode(row.substring(0, idx), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">108</span><span id="line-108">        endRow = URLDecoder.decode(row.substring(idx + 1), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">109</span><span id="line-109">      } else {</span>
+<span class="source-line-no">110</span><span id="line-110">        startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">111</span><span id="line-111">      }</span>
+<span class="source-line-no">112</span><span id="line-112">    } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">113</span><span id="line-113">      throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">114</span><span id="line-114">    } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">115</span><span id="line-115">      throw new RuntimeException(e);</span>
+<span class="source-line-no">116</span><span id="line-116">    }</span>
+<span class="source-line-no">117</span><span id="line-117">    // HBase does not support wildcards on row keys so we will emulate a</span>
+<span class="source-line-no">118</span><span id="line-118">    // suffix glob by synthesizing appropriate start and end row keys for</span>
+<span class="source-line-no">119</span><span id="line-119">    // table scanning</span>
+<span class="source-line-no">120</span><span id="line-120">    if (startRow.charAt(startRow.length() - 1) == '*') {</span>
+<span class="source-line-no">121</span><span id="line-121">      if (endRow != null)</span>
+<span class="source-line-no">122</span><span id="line-122">        throw new IllegalArgumentException("invalid path: start row " + "specified with wildcard");</span>
+<span class="source-line-no">123</span><span id="line-123">      this.row = Bytes.toBytes(startRow.substring(0, startRow.lastIndexOf("*")));</span>
+<span class="source-line-no">124</span><span id="line-124">      this.endRow = new byte[this.row.length + 1];</span>
+<span class="source-line-no">125</span><span id="line-125">      System.arraycopy(this.row, 0, this.endRow, 0, this.row.length);</span>
+<span class="source-line-no">126</span><span id="line-126">      this.endRow[this.row.length] = (byte) 255;</span>
+<span class="source-line-no">127</span><span id="line-127">    } else {</span>
+<span class="source-line-no">128</span><span id="line-128">      this.row = Bytes.toBytes(startRow.toString());</span>
+<span class="source-line-no">129</span><span id="line-129">      if (endRow != null) {</span>
+<span class="source-line-no">130</span><span id="line-130">        this.endRow = Bytes.toBytes(endRow.toString());</span>
+<span class="source-line-no">131</span><span id="line-131">      }</span>
+<span class="source-line-no">132</span><span id="line-132">    }</span>
+<span class="source-line-no">133</span><span id="line-133">    return i;</span>
+<span class="source-line-no">134</span><span id="line-134">  }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">  private int parseColumns(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">137</span><span id="line-137">    if (i &gt;= path.length()) {</span>
+<span class="source-line-no">138</span><span id="line-138">      return i;</span>
+<span class="source-line-no">139</span><span id="line-139">    }</span>
+<span class="source-line-no">140</span><span id="line-140">    try {</span>
+<span class="source-line-no">141</span><span id="line-141">      char c;</span>
+<span class="source-line-no">142</span><span id="line-142">      StringBuilder column = new StringBuilder();</span>
+<span class="source-line-no">143</span><span id="line-143">      while (i &lt; path.length() &amp;&amp; (c = path.charAt(i)) != '/') {</span>
+<span class="source-line-no">144</span><span id="line-144">        if (c == ',') {</span>
+<span class="source-line-no">145</span><span id="line-145">          if (column.length() &lt; 1) {</span>
+<span class="source-line-no">146</span><span id="line-146">            throw new IllegalArgumentException("invalid path");</span>
+<span class="source-line-no">147</span><span id="line-147">          }</span>
+<span class="source-line-no">148</span><span id="line-148">          String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">149</span><span id="line-149">          this.columns.add(Bytes.toBytes(s));</span>
+<span class="source-line-no">150</span><span id="line-150">          column.setLength(0);</span>
+<span class="source-line-no">151</span><span id="line-151">          i++;</span>
+<span class="source-line-no">152</span><span id="line-152">          continue;</span>
+<span class="source-line-no">153</span><span id="line-153">        }</span>
+<span class="source-line-no">154</span><span id="line-154">        column.append(c);</span>
+<span class="source-line-no">155</span><span id="line-155">        i++;</span>
+<span class="source-line-no">156</span><span id="line-156">      }</span>
+<span class="source-line-no">157</span><span id="line-157">      i++;</span>
+<span class="source-line-no">158</span><span id="line-158">      // trailing list entry</span>
+<span class="source-line-no">159</span><span id="line-159">      if (column.length() &gt; 0) {</span>
+<span class="source-line-no">160</span><span id="line-160">        String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">161</span><span id="line-161">        this.columns.add(Bytes.toBytes(s));</span>
+<span class="source-line-no">162</span><span id="line-162">      }</span>
+<span class="source-line-no">163</span><span id="line-163">    } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">164</span><span id="line-164">      throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">165</span><span id="line-165">    } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">166</span><span id="line-166">      // shouldn't happen</span>
+<span class="source-line-no">167</span><span id="line-167">      throw new RuntimeException(e);</span>
+<span class="source-line-no">168</span><span id="line-168">    }</span>
+<span class="source-line-no">169</span><span id="line-169">    return i;</span>
+<span class="source-line-no">170</span><span id="line-170">  }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172">  private int parseTimestamp(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">173</span><span id="line-173">    if (i &gt;= path.length()) {</span>
+<span class="source-line-no">174</span><span id="line-174">      return i;</span>
+<span class="source-line-no">175</span><span id="line-175">    }</span>
+<span class="source-line-no">176</span><span id="line-176">    long time0 = 0, time1 = 0;</span>
+<span class="source-line-no">177</span><span id="line-177">    try {</span>
+<span class="source-line-no">178</span><span id="line-178">      char c = 0;</span>
+<span class="source-line-no">179</span><span id="line-179">      StringBuilder stamp = new StringBuilder();</span>
+<span class="source-line-no">180</span><span id="line-180">      while (i &lt; path.length()) {</span>
+<span class="source-line-no">181</span><span id="line-181">        c = path.charAt(i);</span>
+<span class="source-line-no">182</span><span id="line-182">        if (c == '/' || c == ',') {</span>
+<span class="source-line-no">183</span><span id="line-183">          break;</span>
+<span class="source-line-no">184</span><span id="line-184">        }</span>
+<span class="source-line-no">185</span><span id="line-185">        stamp.append(c);</span>
+<span class="source-line-no">186</span><span id="line-186">        i++;</span>
+<span class="source-line-no">187</span><span id="line-187">      }</span>
+<span class="source-line-no">188</span><span id="line-188">      try {</span>
+<span class="source-line-no">189</span><span id="line-189">        time0 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">190</span><span id="line-190">      } catch (NumberFormatException e) {</span>
+<span class="source-line-no">191</span><span id="line-191">        throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">192</span><span id="line-192">      }</span>
+<span class="source-line-no">193</span><span id="line-193">      if (c == ',') {</span>
+<span class="source-line-no">194</span><span id="line-194">        stamp = new StringBuilder();</span>
+<span class="source-line-no">195</span><span id="line-195">        i++;</span>
+<span class="source-line-no">196</span><span id="line-196">        while (i &lt; path.length() &amp;&amp; ((c = path.charAt(i)) != '/')) {</span>
+<span class="source-line-no">197</span><span id="line-197">          stamp.append(c);</span>
+<span class="source-line-no">198</span><span id="line-198">          i++;</span>
+<span class="source-line-no">199</span><span id="line-199">        }</span>
+<span class="source-line-no">200</span><span id="line-200">        try {</span>
+<span class="source-line-no">201</span><span id="line-201">          time1 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">202</span><span id="line-202">        } catch (NumberFormatException e) {</span>
+<span class="source-line-no">203</span><span id="line-203">          throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">204</span><span id="line-204">        }</span>
+<span class="source-line-no">205</span><span id="line-205">      }</span>
+<span class="source-line-no">206</span><span id="line-206">      if (c == '/') {</span>
+<span class="source-line-no">207</span><span id="line-207">        i++;</span>
+<span class="source-line-no">208</span><span id="line-208">      }</span>
+<span class="source-line-no">209</span><span id="line-209">    } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">210</span><span id="line-210">      throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">211</span><span id="line-211">    } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">212</span><span id="line-212">      // shouldn't happen</span>
+<span class="source-line-no">213</span><span id="line-213">      throw new RuntimeException(e);</span>
+<span class="source-line-no">214</span><span id="line-214">    }</span>
+<span class="source-line-no">215</span><span id="line-215">    if (time1 != 0) {</span>
+<span class="source-line-no">216</span><span id="line-216">      startTime = time0;</span>
+<span class="source-line-no">217</span><span id="line-217">      endTime = time1;</span>
+<span class="source-line-no">218</span><span id="line-218">    } else {</span>
+<span class="source-line-no">219</span><span id="line-219">      endTime = time0;</span>
+<span class="source-line-no">220</span><span id="line-220">      partialTimeRange = true;</span>
+<span class="source-line-no">221</span><span id="line-221">    }</span>
+<span class="source-line-no">222</span><span id="line-222">    return i;</span>
+<span class="source-line-no">223</span><span id="line-223">  }</span>
+<span class="source-line-no">224</span><span id="line-224"></span>
+<span class="source-line-no">225</span><span id="line-225">  private int parseQueryParams(final String path, int i) {</span>
+<span class="source-line-no">226</span><span id="line-226">    if (i &gt;= path.length()) {</span>
+<span class="source-line-no">227</span><span id="line-227">      return i;</span>
+<span class="source-line-no">228</span><span id="line-228">    }</span>
+<span class="source-line-no">229</span><span id="line-229">    StringBuilder query = new StringBuilder();</span>
+<span class="source-line-no">230</span><span id="line-230">    try {</span>
+<span class="source-line-no">231</span><span id="line-231">      query.append(URLDecoder.decode(path.substring(i), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">232</span><span id="line-232">    } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">233</span><span id="line-233">      // should not happen</span>
+<span class="source-line-no">234</span><span id="line-234">      throw new RuntimeException(e);</span>
+<span class="source-line-no">235</span><span id="line-235">    }</span>
+<span class="source-line-no">236</span><span id="line-236">    i += query.length();</span>
+<span class="source-line-no">237</span><span id="line-237">    int j = 0;</span>
+<span class="source-line-no">238</span><span id="line-238">    while (j &lt; query.length()) {</span>
+<span class="source-line-no">239</span><span id="line-239">      char c = query.charAt(j);</span>
+<span class="source-line-no">240</span><span id="line-240">      if (c != '?' &amp;&amp; c != '&amp;') {</span>
+<span class="source-line-no">241</span><span id="line-241">        break;</span>
+<span class="source-line-no">242</span><span id="line-242">      }</span>
+<span class="source-line-no">243</span><span id="line-243">      if (++j &gt; query.length()) {</span>
+<span class="source-line-no">244</span><span id="line-244">        throw new IllegalArgumentException("malformed query parameter");</span>
+<span class="source-line-no">245</span><span id="line-245">      }</span>
+<span class="source-line-no">246</span><span id="line-246">      char what = query.charAt(j);</span>
+<span class="source-line-no">247</span><span id="line-247">      if (++j &gt; query.length()) {</span>
+<span class="source-line-no">248</span><span id="line-248">        break;</span>
+<span class="source-line-no">249</span><span id="line-249">      }</span>
+<span class="source-line-no">250</span><span id="line-250">      c = query.charAt(j);</span>
+<span class="source-line-no">251</span><span id="line-251">      if (c != '=') {</span>
+<span class="source-line-no">252</span><span id="line-252">        throw new IllegalArgumentException("malformed query parameter");</span>
+<span class="source-line-no">253</span><span id="line-253">      }</span>
+<span class="source-line-no">254</span><span id="line-254">      if (++j &gt; query.length()) {</span>
+<span class="source-line-no">255</span><span id="line-255">        break;</span>
+<span class="source-line-no">256</span><span id="line-256">      }</span>
+<span class="source-line-no">257</span><span id="line-257">      switch (what) {</span>
+<span class="source-line-no">258</span><span id="line-258">        case 'm': {</span>
+<span class="source-line-no">259</span><span id="line-259">          StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">260</span><span id="line-260">          while (j &lt;= query.length()) {</span>
+<span class="source-line-no">261</span><span id="line-261">            c = query.charAt(j);</span>
+<span class="source-line-no">262</span><span id="line-262">            if (c &lt; '0' || c &gt; '9') {</span>
+<span class="source-line-no">263</span><span id="line-263">              j--;</span>
+<span class="source-line-no">264</span><span id="line-264">              break;</span>
+<span class="source-line-no">265</span><span id="line-265">            }</span>
+<span class="source-line-no">266</span><span id="line-266">            sb.append(c);</span>
+<span class="source-line-no">267</span><span id="line-267">          }</span>
+<span class="source-line-no">268</span><span id="line-268">          maxVersions = Integer.parseInt(sb.toString());</span>
+<span class="source-line-no">269</span><span id="line-269">        }</span>
+<span class="source-line-no">270</span><span id="line-270">          break;</span>
+<span class="source-line-no">271</span><span id="line-271">        case 'n': {</span>
+<span class="source-line-no">272</span><span id="line-272">          StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">273</span><span id="line-273">          while (j &lt;= query.length()) {</span>
+<span class="source-line-no">274</span><span id="line-274">            c = query.charAt(j);</span>
+<span class="source-line-no">275</span><span id="line-275">            if (c &lt; '0' || c &gt; '9') {</span>
+<span class="source-line-no">276</span><span id="line-276">              j--;</span>
+<span class="source-line-no">277</span><span id="line-277">              break;</span>
+<span class="source-line-no">278</span><span id="line-278">            }</span>
+<span class="source-line-no">279</span><span id="line-279">            sb.append(c);</span>
+<span class="source-line-no">280</span><span id="line-280">          }</span>
+<span class="source-line-no">281</span><span id="line-281">          maxValues = Integer.parseInt(sb.toString());</span>
+<span class="source-line-no">282</span><span id="line-282">        }</span>
+<span class="source-line-no">283</span><span id="line-283">          break;</span>
+<span class="source-line-no">284</span><span id="line-284">        default:</span>
+<span class="source-line-no">285</span><span id="line-285">          throw new IllegalArgumentException("unknown parameter '" + c + "'");</span>
+<span class="source-line-no">286</span><span id="line-286">      }</span>
+<span class="source-line-no">287</span><span id="line-287">    }</span>
+<span class="source-line-no">288</span><span id="line-288">    return i;</span>
+<span class="source-line-no">289</span><span id="line-289">  }</span>
+<span class="source-line-no">290</span><span id="line-290"></span>
+<span class="source-line-no">291</span><span id="line-291">  public RowSpec(byte[] startRow, byte[] endRow, byte[][] columns, long startTime, long endTime,</span>
+<span class="source-line-no">292</span><span id="line-292">    int maxVersions) {</span>
+<span class="source-line-no">293</span><span id="line-293">    this.row = startRow;</span>
+<span class="source-line-no">294</span><span id="line-294">    this.endRow = endRow;</span>
+<span class="source-line-no">295</span><span id="line-295">    if (columns != null) {</span>
+<span class="source-line-no">296</span><span id="line-296">      Collections.addAll(this.columns, columns);</span>
+<span class="source-line-no">297</span><span id="line-297">    }</span>
+<span class="source-line-no">298</span><span id="line-298">    this.startTime = startTime;</span>
+<span class="source-line-no">299</span><span id="line-299">    this.endTime = endTime;</span>
+<span class="source-line-no">300</span><span id="line-300">    this.maxVersions = maxVersions;</span>
+<span class="source-line-no">301</span><span id="line-301">  }</span>
+<span class="source-line-no">302</span><span id="line-302"></span>
+<span class="source-line-no">303</span><span id="line-303">  public RowSpec(byte[] startRow, byte[] endRow, Collection&lt;byte[]&gt; columns, long startTime,</span>
+<span class="source-line-no">304</span><span id="line-304">    long endTime, int maxVersions, Collection&lt;String&gt; labels) {</span>
+<span class="source-line-no">305</span><span id="line-305">    this(startRow, endRow, columns, startTime, endTime, maxVersions);</span>
+<span class="source-line-no">306</span><span id="line-306">    if (labels != null) {</span>
+<span class="source-line-no">307</span><span id="line-307">      this.labels.addAll(labels);</span>
+<span class="source-line-no">308</span><span id="line-308">    }</span>
+<span class="source-line-no">309</span><span id="line-309">  }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311">  public RowSpec(byte[] startRow, byte[] endRow, Collection&lt;byte[]&gt; columns, long startTime,</span>
+<span class="source-line-no">312</span><span id="line-312">    long endTime, int maxVersions) {</span>
+<span class="source-line-no">313</span><span id="line-313">    this.row = startRow;</span>
+<span class="source-line-no">314</span><span id="line-314">    this.endRow = endRow;</span>
+<span class="source-line-no">315</span><span id="line-315">    if (columns != null) {</span>
+<span class="source-line-no">316</span><span id="line-316">      this.columns.addAll(columns);</span>
+<span class="source-line-no">317</span><span id="line-317">    }</span>
+<span class="source-line-no">318</span><span id="line-318">    this.startTime = startTime;</span>
+<span class="source-line-no">319</span><span id="line-319">    this.endTime = endTime;</span>
+<span class="source-line-no">320</span><span id="line-320">    this.maxVersions = maxVersions;</span>
+<span class="source-line-no">321</span><span id="line-321">  }</span>
+<span class="source-line-no">322</span><span id="line-322"></span>
+<span class="source-line-no">323</span><span id="line-323">  public boolean isSingleRow() {</span>
+<span class="source-line-no">324</span><span id="line-324">    return endRow == null;</span>
+<span class="source-line-no">325</span><span id="line-325">  }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327">  public int getMaxVersions() {</span>
+<span class="source-line-no">328</span><span id="line-328">    return maxVersions;</span>
+<span class="source-line-no">329</span><span id="line-329">  }</span>
+<span class="source-line-no">330</span><span id="line-330"></span>
+<span class="source-line-no">331</span><span id="line-331">  public void setMaxVersions(final int maxVersions) {</span>
+<span class="source-line-no">332</span><span id="line-332">    this.maxVersions = maxVersions;</span>
+<span class="source-line-no">333</span><span id="line-333">  }</span>
+<span class="source-line-no">334</span><span id="line-334"></span>
+<span class="source-line-no">335</span><span id="line-335">  public int getMaxValues() {</span>
+<span class="source-line-no">336</span><span id="line-336">    return maxValues;</span>
+<span class="source-line-no">337</span><span id="line-337">  }</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339">  public void setMaxValues(final int maxValues) {</span>
+<span class="source-line-no">340</span><span id="line-340">    this.maxValues = maxValues;</span>
+<span class="source-line-no">341</span><span id="line-341">  }</span>
+<span class="source-line-no">342</span><span id="line-342"></span>
+<span class="source-line-no">343</span><span id="line-343">  public boolean hasColumns() {</span>
+<span class="source-line-no">344</span><span id="line-344">    return !columns.isEmpty();</span>
+<span class="source-line-no">345</span><span id="line-345">  }</span>
+<span class="source-line-no">346</span><span id="line-346"></span>
+<span class="source-line-no">347</span><span id="line-347">  public boolean hasLabels() {</span>
+<span class="source-line-no">348</span><span id="line-348">    return !labels.isEmpty();</span>
+<span class="source-line-no">349</span><span id="line-349">  }</span>
+<span class="source-line-no">350</span><span id="line-350"></span>
+<span class="source-line-no">351</span><span id="line-351">  public byte[] getRow() {</span>
+<span class="source-line-no">352</span><span id="line-352">    return row;</span>
+<span class="source-line-no">353</span><span id="line-353">  }</span>
+<span class="source-line-no">354</span><span id="line-354"></span>
+<span class="source-line-no">355</span><span id="line-355">  public byte[] getStartRow() {</span>
+<span class="source-line-no">356</span><span id="line-356">    return row;</span>
+<span class="source-line-no">357</span><span id="line-357">  }</span>
+<span class="source-line-no">358</span><span id="line-358"></span>
+<span class="source-line-no">359</span><span id="line-359">  public boolean hasEndRow() {</span>
+<span class="source-line-no">360</span><span id="line-360">    return endRow != null;</span>
+<span class="source-line-no">361</span><span id="line-361">  }</span>
+<span class="source-line-no">362</span><span id="line-362"></span>
+<span class="source-line-no">363</span><span id="line-363">  public byte[] getEndRow() {</span>
+<span class="source-line-no">364</span><span id="line-364">    return endRow;</span>
+<span class="source-line-no">365</span><span id="line-365">  }</span>
+<span class="source-line-no">366</span><span id="line-366"></span>
+<span class="source-line-no">367</span><span id="line-367">  public void addColumn(final byte[] column) {</span>
+<span class="source-line-no">368</span><span id="line-368">    columns.add(column);</span>
+<span class="source-line-no">369</span><span id="line-369">  }</span>
+<span class="source-line-no">370</span><span id="line-370"></span>
+<span class="source-line-no">371</span><span id="line-371">  public byte[][] getColumns() {</span>
+<span class="source-line-no">372</span><span id="line-372">    return columns.toArray(new byte[columns.size()][]);</span>
+<span class="source-line-no">373</span><span id="line-373">  }</span>
+<span class="source-line-no">374</span><span id="line-374"></span>
+<span class="source-line-no">375</span><span id="line-375">  public List&lt;String&gt; getLabels() {</span>
+<span class="source-line-no">376</span><span id="line-376">    return labels;</span>
+<span class="source-line-no">377</span><span id="line-377">  }</span>
+<span class="source-line-no">378</span><span id="line-378"></span>
+<span class="source-line-no">379</span><span id="line-379">  public boolean hasTimestamp() {</span>
+<span class="source-line-no">380</span><span id="line-380">    return (startTime == 0) &amp;&amp; (endTime != Long.MAX_VALUE);</span>
+<span class="source-line-no">381</span><span id="line-381">  }</span>
+<span class="source-line-no">382</span><span id="line-382"></span>
+<span class="source-line-no">383</span><span id="line-383">  public long getTimestamp() {</span>
+<span class="source-line-no">384</span><span id="line-384">    return endTime;</span>
+<span class="source-line-no">385</span><span id="line-385">  }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387">  public long getStartTime() {</span>
+<span class="source-line-no">388</span><span id="line-388">    return startTime;</span>
+<span class="source-line-no">389</span><span id="line-389">  }</span>
+<span class="source-line-no">390</span><span id="line-390"></span>
+<span class="source-line-no">391</span><span id="line-391">  public void setStartTime(final long startTime) {</span>
+<span class="source-line-no">392</span><span id="line-392">    this.startTime = startTime;</span>
+<span class="source-line-no">393</span><span id="line-393">  }</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395">  public long getEndTime() {</span>
+<span class="source-line-no">396</span><span id="line-396">    return endTime;</span>
+<span class="source-line-no">397</span><span id="line-397">  }</span>
+<span class="source-line-no">398</span><span id="line-398"></span>
+<span class="source-line-no">399</span><span id="line-399">  public void setEndTime(long endTime) {</span>
+<span class="source-line-no">400</span><span id="line-400">    this.endTime = endTime;</span>
+<span class="source-line-no">401</span><span id="line-401">  }</span>
+<span class="source-line-no">402</span><span id="line-402"></span>
+<span class="source-line-no">403</span><span id="line-403">  @Override</span>
+<span class="source-line-no">404</span><span id="line-404">  public String toString() {</span>
+<span class="source-line-no">405</span><span id="line-405">    StringBuilder result = new StringBuilder();</span>
+<span class="source-line-no">406</span><span id="line-406">    result.append("{startRow =&gt; '");</span>
+<span class="source-line-no">407</span><span id="line-407">    if (row != null) {</span>
+<span class="source-line-no">408</span><span id="line-408">      result.append(Bytes.toString(row));</span>
+<span class="source-line-no">409</span><span id="line-409">    }</span>
+<span class="source-line-no">410</span><span id="line-410">    result.append("', endRow =&gt; '");</span>
+<span class="source-line-no">411</span><span id="line-411">    if (endRow != null) {</span>
+<span class="source-line-no">412</span><span id="line-412">      result.append(Bytes.toString(endRow));</span>
+<span class="source-line-no">413</span><span id="line-413">    }</span>
+<span class="source-line-no">414</span><span id="line-414">    result.append("', columns =&gt; [");</span>
+<span class="source-line-no">415</span><span id="line-415">    for (byte[] col : columns) {</span>
+<span class="source-line-no">416</span><span id="line-416">      result.append(" '");</span>
+<span class="source-line-no">417</span><span id="line-417">      result.append(Bytes.toString(col));</span>
+<span class="source-line-no">418</span><span id="line-418">      result.append("'");</span>
+<span class="source-line-no">419</span><span id="line-419">    }</span>
+<span class="source-line-no">420</span><span id="line-420">    result.append(" ], startTime =&gt; ");</span>
+<span class="source-line-no">421</span><span id="line-421">    result.append(Long.toString(startTime));</span>
+<span class="source-line-no">422</span><span id="line-422">    result.append(", endTime =&gt; ");</span>
+<span class="source-line-no">423</span><span id="line-423">    result.append(Long.toString(endTime));</span>
+<span class="source-line-no">424</span><span id="line-424">    result.append(", maxVersions =&gt; ");</span>
+<span class="source-line-no">425</span><span id="line-425">    result.append(Integer.toString(maxVersions));</span>
+<span class="source-line-no">426</span><span id="line-426">    result.append(", maxValues =&gt; ");</span>
+<span class="source-line-no">427</span><span id="line-427">    result.append(Integer.toString(maxValues));</span>
+<span class="source-line-no">428</span><span id="line-428">    result.append("}");</span>
+<span class="source-line-no">429</span><span id="line-429">    return result.toString();</span>
+<span class="source-line-no">430</span><span id="line-430">  }</span>
+<span class="source-line-no">431</span><span id="line-431"></span>
+<span class="source-line-no">432</span><span id="line-432">  public boolean isPartialTimeRange() {</span>
+<span class="source-line-no">433</span><span id="line-433">    return partialTimeRange;</span>
+<span class="source-line-no">434</span><span id="line-434">  }</span>
+<span class="source-line-no">435</span><span id="line-435"></span>
+<span class="source-line-no">436</span><span id="line-436">}</span>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html b/devapidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
index 701990ee068..1ad47a841e8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
@@ -104,119 +104,125 @@
 <span class="source-line-no">091</span><span id="line-91">          }</span>
 <span class="source-line-no">092</span><span id="line-92">        }</span>
 <span class="source-line-no">093</span><span id="line-93">      }</span>
-<span class="source-line-no">094</span><span id="line-94">      scan.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
-<span class="source-line-no">095</span><span id="line-95">      scan.readVersions(rowspec.getMaxVersions());</span>
-<span class="source-line-no">096</span><span id="line-96">      if (filter != null) {</span>
-<span class="source-line-no">097</span><span id="line-97">        scan.setFilter(filter);</span>
-<span class="source-line-no">098</span><span id="line-98">      }</span>
-<span class="source-line-no">099</span><span id="line-99">      if (caching &gt; 0) {</span>
-<span class="source-line-no">100</span><span id="line-100">        scan.setCaching(caching);</span>
-<span class="source-line-no">101</span><span id="line-101">      }</span>
-<span class="source-line-no">102</span><span id="line-102">      if (limit &gt; 0) {</span>
-<span class="source-line-no">103</span><span id="line-103">        scan.setLimit(limit);</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95">      if (rowspec.isPartialTimeRange()) {</span>
+<span class="source-line-no">096</span><span id="line-96">        scan.setTimestamp(rowspec.getTimestamp());</span>
+<span class="source-line-no">097</span><span id="line-97">      } else {</span>
+<span class="source-line-no">098</span><span id="line-98">        scan.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
+<span class="source-line-no">099</span><span id="line-99">      }</span>
+<span class="source-line-no">100</span><span id="line-100"></span>
+<span class="source-line-no">101</span><span id="line-101">      scan.readVersions(rowspec.getMaxVersions());</span>
+<span class="source-line-no">102</span><span id="line-102">      if (filter != null) {</span>
+<span class="source-line-no">103</span><span id="line-103">        scan.setFilter(filter);</span>
 <span class="source-line-no">104</span><span id="line-104">      }</span>
-<span class="source-line-no">105</span><span id="line-105">      scan.setCacheBlocks(cacheBlocks);</span>
-<span class="source-line-no">106</span><span id="line-106">      if (rowspec.hasLabels()) {</span>
-<span class="source-line-no">107</span><span id="line-107">        scan.setAuthorizations(new Authorizations(rowspec.getLabels()));</span>
-<span class="source-line-no">108</span><span id="line-108">      }</span>
-<span class="source-line-no">109</span><span id="line-109">      scanner = table.getScanner(scan);</span>
-<span class="source-line-no">110</span><span id="line-110">      cached = null;</span>
-<span class="source-line-no">111</span><span id="line-111">      id = Long.toString(EnvironmentEdgeManager.currentTime())</span>
-<span class="source-line-no">112</span><span id="line-112">        + Integer.toHexString(scanner.hashCode());</span>
-<span class="source-line-no">113</span><span id="line-113">    } finally {</span>
-<span class="source-line-no">114</span><span id="line-114">      table.close();</span>
-<span class="source-line-no">115</span><span id="line-115">    }</span>
-<span class="source-line-no">116</span><span id="line-116">  }</span>
-<span class="source-line-no">117</span><span id="line-117"></span>
-<span class="source-line-no">118</span><span id="line-118">  public String getID() {</span>
-<span class="source-line-no">119</span><span id="line-119">    return id;</span>
-<span class="source-line-no">120</span><span id="line-120">  }</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122">  @Override</span>
-<span class="source-line-no">123</span><span id="line-123">  public void close() {</span>
-<span class="source-line-no">124</span><span id="line-124">    if (scanner != null) {</span>
-<span class="source-line-no">125</span><span id="line-125">      scanner.close();</span>
-<span class="source-line-no">126</span><span id="line-126">      scanner = null;</span>
-<span class="source-line-no">127</span><span id="line-127">    }</span>
-<span class="source-line-no">128</span><span id="line-128">  }</span>
-<span class="source-line-no">129</span><span id="line-129"></span>
-<span class="source-line-no">130</span><span id="line-130">  @Override</span>
-<span class="source-line-no">131</span><span id="line-131">  public boolean hasNext() {</span>
-<span class="source-line-no">132</span><span id="line-132">    if (cache != null) {</span>
-<span class="source-line-no">133</span><span id="line-133">      return true;</span>
-<span class="source-line-no">134</span><span id="line-134">    }</span>
-<span class="source-line-no">135</span><span id="line-135">    if (rowI != null &amp;&amp; rowI.hasNext()) {</span>
-<span class="source-line-no">136</span><span id="line-136">      return true;</span>
-<span class="source-line-no">137</span><span id="line-137">    }</span>
-<span class="source-line-no">138</span><span id="line-138">    if (cached != null) {</span>
+<span class="source-line-no">105</span><span id="line-105">      if (caching &gt; 0) {</span>
+<span class="source-line-no">106</span><span id="line-106">        scan.setCaching(caching);</span>
+<span class="source-line-no">107</span><span id="line-107">      }</span>
+<span class="source-line-no">108</span><span id="line-108">      if (limit &gt; 0) {</span>
+<span class="source-line-no">109</span><span id="line-109">        scan.setLimit(limit);</span>
+<span class="source-line-no">110</span><span id="line-110">      }</span>
+<span class="source-line-no">111</span><span id="line-111">      scan.setCacheBlocks(cacheBlocks);</span>
+<span class="source-line-no">112</span><span id="line-112">      if (rowspec.hasLabels()) {</span>
+<span class="source-line-no">113</span><span id="line-113">        scan.setAuthorizations(new Authorizations(rowspec.getLabels()));</span>
+<span class="source-line-no">114</span><span id="line-114">      }</span>
+<span class="source-line-no">115</span><span id="line-115">      scanner = table.getScanner(scan);</span>
+<span class="source-line-no">116</span><span id="line-116">      cached = null;</span>
+<span class="source-line-no">117</span><span id="line-117">      id = Long.toString(EnvironmentEdgeManager.currentTime())</span>
+<span class="source-line-no">118</span><span id="line-118">        + Integer.toHexString(scanner.hashCode());</span>
+<span class="source-line-no">119</span><span id="line-119">    } finally {</span>
+<span class="source-line-no">120</span><span id="line-120">      table.close();</span>
+<span class="source-line-no">121</span><span id="line-121">    }</span>
+<span class="source-line-no">122</span><span id="line-122">  }</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124">  public String getID() {</span>
+<span class="source-line-no">125</span><span id="line-125">    return id;</span>
+<span class="source-line-no">126</span><span id="line-126">  }</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128">  @Override</span>
+<span class="source-line-no">129</span><span id="line-129">  public void close() {</span>
+<span class="source-line-no">130</span><span id="line-130">    if (scanner != null) {</span>
+<span class="source-line-no">131</span><span id="line-131">      scanner.close();</span>
+<span class="source-line-no">132</span><span id="line-132">      scanner = null;</span>
+<span class="source-line-no">133</span><span id="line-133">    }</span>
+<span class="source-line-no">134</span><span id="line-134">  }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">  @Override</span>
+<span class="source-line-no">137</span><span id="line-137">  public boolean hasNext() {</span>
+<span class="source-line-no">138</span><span id="line-138">    if (cache != null) {</span>
 <span class="source-line-no">139</span><span id="line-139">      return true;</span>
 <span class="source-line-no">140</span><span id="line-140">    }</span>
-<span class="source-line-no">141</span><span id="line-141">    try {</span>
-<span class="source-line-no">142</span><span id="line-142">      Result result = scanner.next();</span>
-<span class="source-line-no">143</span><span id="line-143">      if (result != null &amp;&amp; !result.isEmpty()) {</span>
-<span class="source-line-no">144</span><span id="line-144">        cached = result;</span>
-<span class="source-line-no">145</span><span id="line-145">      }</span>
-<span class="source-line-no">146</span><span id="line-146">    } catch (UnknownScannerException e) {</span>
-<span class="source-line-no">147</span><span id="line-147">      throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">148</span><span id="line-148">    } catch (IOException e) {</span>
-<span class="source-line-no">149</span><span id="line-149">      LOG.error(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">150</span><span id="line-150">    }</span>
-<span class="source-line-no">151</span><span id="line-151">    return cached != null;</span>
-<span class="source-line-no">152</span><span id="line-152">  }</span>
-<span class="source-line-no">153</span><span id="line-153"></span>
-<span class="source-line-no">154</span><span id="line-154">  @Override</span>
-<span class="source-line-no">155</span><span id="line-155">  public Cell next() {</span>
-<span class="source-line-no">156</span><span id="line-156">    if (cache != null) {</span>
-<span class="source-line-no">157</span><span id="line-157">      Cell kv = cache;</span>
-<span class="source-line-no">158</span><span id="line-158">      cache = null;</span>
-<span class="source-line-no">159</span><span id="line-159">      return kv;</span>
-<span class="source-line-no">160</span><span id="line-160">    }</span>
-<span class="source-line-no">161</span><span id="line-161">    boolean loop;</span>
-<span class="source-line-no">162</span><span id="line-162">    do {</span>
-<span class="source-line-no">163</span><span id="line-163">      loop = false;</span>
-<span class="source-line-no">164</span><span id="line-164">      if (rowI != null) {</span>
-<span class="source-line-no">165</span><span id="line-165">        if (rowI.hasNext()) {</span>
-<span class="source-line-no">166</span><span id="line-166">          return rowI.next();</span>
-<span class="source-line-no">167</span><span id="line-167">        } else {</span>
-<span class="source-line-no">168</span><span id="line-168">          rowI = null;</span>
-<span class="source-line-no">169</span><span id="line-169">        }</span>
-<span class="source-line-no">170</span><span id="line-170">      }</span>
-<span class="source-line-no">171</span><span id="line-171">      if (cached != null) {</span>
-<span class="source-line-no">172</span><span id="line-172">        rowI = cached.listCells().iterator();</span>
-<span class="source-line-no">173</span><span id="line-173">        loop = true;</span>
-<span class="source-line-no">174</span><span id="line-174">        cached = null;</span>
-<span class="source-line-no">175</span><span id="line-175">      } else {</span>
-<span class="source-line-no">176</span><span id="line-176">        Result result = null;</span>
-<span class="source-line-no">177</span><span id="line-177">        try {</span>
-<span class="source-line-no">178</span><span id="line-178">          result = scanner.next();</span>
-<span class="source-line-no">179</span><span id="line-179">        } catch (UnknownScannerException e) {</span>
-<span class="source-line-no">180</span><span id="line-180">          throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">181</span><span id="line-181">        } catch (TableNotEnabledException tnee) {</span>
-<span class="source-line-no">182</span><span id="line-182">          throw new IllegalStateException(tnee);</span>
-<span class="source-line-no">183</span><span id="line-183">        } catch (TableNotFoundException tnfe) {</span>
-<span class="source-line-no">184</span><span id="line-184">          throw new IllegalArgumentException(tnfe);</span>
-<span class="source-line-no">185</span><span id="line-185">        } catch (IOException e) {</span>
-<span class="source-line-no">186</span><span id="line-186">          LOG.error(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">187</span><span id="line-187">        }</span>
-<span class="source-line-no">188</span><span id="line-188">        if (result != null &amp;&amp; !result.isEmpty()) {</span>
-<span class="source-line-no">189</span><span id="line-189">          rowI = result.listCells().iterator();</span>
-<span class="source-line-no">190</span><span id="line-190">          loop = true;</span>
-<span class="source-line-no">191</span><span id="line-191">        }</span>
-<span class="source-line-no">192</span><span id="line-192">      }</span>
-<span class="source-line-no">193</span><span id="line-193">    } while (loop);</span>
-<span class="source-line-no">194</span><span id="line-194">    return null;</span>
-<span class="source-line-no">195</span><span id="line-195">  }</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197">  @Override</span>
-<span class="source-line-no">198</span><span id="line-198">  public void putBack(Cell kv) {</span>
-<span class="source-line-no">199</span><span id="line-199">    this.cache = kv;</span>
-<span class="source-line-no">200</span><span id="line-200">  }</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202">  @Override</span>
-<span class="source-line-no">203</span><span id="line-203">  public void remove() {</span>
-<span class="source-line-no">204</span><span id="line-204">    throw new UnsupportedOperationException("remove not supported");</span>
-<span class="source-line-no">205</span><span id="line-205">  }</span>
-<span class="source-line-no">206</span><span id="line-206">}</span>
+<span class="source-line-no">141</span><span id="line-141">    if (rowI != null &amp;&amp; rowI.hasNext()) {</span>
+<span class="source-line-no">142</span><span id="line-142">      return true;</span>
+<span class="source-line-no">143</span><span id="line-143">    }</span>
+<span class="source-line-no">144</span><span id="line-144">    if (cached != null) {</span>
+<span class="source-line-no">145</span><span id="line-145">      return true;</span>
+<span class="source-line-no">146</span><span id="line-146">    }</span>
+<span class="source-line-no">147</span><span id="line-147">    try {</span>
+<span class="source-line-no">148</span><span id="line-148">      Result result = scanner.next();</span>
+<span class="source-line-no">149</span><span id="line-149">      if (result != null &amp;&amp; !result.isEmpty()) {</span>
+<span class="source-line-no">150</span><span id="line-150">        cached = result;</span>
+<span class="source-line-no">151</span><span id="line-151">      }</span>
+<span class="source-line-no">152</span><span id="line-152">    } catch (UnknownScannerException e) {</span>
+<span class="source-line-no">153</span><span id="line-153">      throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">154</span><span id="line-154">    } catch (IOException e) {</span>
+<span class="source-line-no">155</span><span id="line-155">      LOG.error(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">156</span><span id="line-156">    }</span>
+<span class="source-line-no">157</span><span id="line-157">    return cached != null;</span>
+<span class="source-line-no">158</span><span id="line-158">  }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">  @Override</span>
+<span class="source-line-no">161</span><span id="line-161">  public Cell next() {</span>
+<span class="source-line-no">162</span><span id="line-162">    if (cache != null) {</span>
+<span class="source-line-no">163</span><span id="line-163">      Cell kv = cache;</span>
+<span class="source-line-no">164</span><span id="line-164">      cache = null;</span>
+<span class="source-line-no">165</span><span id="line-165">      return kv;</span>
+<span class="source-line-no">166</span><span id="line-166">    }</span>
+<span class="source-line-no">167</span><span id="line-167">    boolean loop;</span>
+<span class="source-line-no">168</span><span id="line-168">    do {</span>
+<span class="source-line-no">169</span><span id="line-169">      loop = false;</span>
+<span class="source-line-no">170</span><span id="line-170">      if (rowI != null) {</span>
+<span class="source-line-no">171</span><span id="line-171">        if (rowI.hasNext()) {</span>
+<span class="source-line-no">172</span><span id="line-172">          return rowI.next();</span>
+<span class="source-line-no">173</span><span id="line-173">        } else {</span>
+<span class="source-line-no">174</span><span id="line-174">          rowI = null;</span>
+<span class="source-line-no">175</span><span id="line-175">        }</span>
+<span class="source-line-no">176</span><span id="line-176">      }</span>
+<span class="source-line-no">177</span><span id="line-177">      if (cached != null) {</span>
+<span class="source-line-no">178</span><span id="line-178">        rowI = cached.listCells().iterator();</span>
+<span class="source-line-no">179</span><span id="line-179">        loop = true;</span>
+<span class="source-line-no">180</span><span id="line-180">        cached = null;</span>
+<span class="source-line-no">181</span><span id="line-181">      } else {</span>
+<span class="source-line-no">182</span><span id="line-182">        Result result = null;</span>
+<span class="source-line-no">183</span><span id="line-183">        try {</span>
+<span class="source-line-no">184</span><span id="line-184">          result = scanner.next();</span>
+<span class="source-line-no">185</span><span id="line-185">        } catch (UnknownScannerException e) {</span>
+<span class="source-line-no">186</span><span id="line-186">          throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">187</span><span id="line-187">        } catch (TableNotEnabledException tnee) {</span>
+<span class="source-line-no">188</span><span id="line-188">          throw new IllegalStateException(tnee);</span>
+<span class="source-line-no">189</span><span id="line-189">        } catch (TableNotFoundException tnfe) {</span>
+<span class="source-line-no">190</span><span id="line-190">          throw new IllegalArgumentException(tnfe);</span>
+<span class="source-line-no">191</span><span id="line-191">        } catch (IOException e) {</span>
+<span class="source-line-no">192</span><span id="line-192">          LOG.error(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">193</span><span id="line-193">        }</span>
+<span class="source-line-no">194</span><span id="line-194">        if (result != null &amp;&amp; !result.isEmpty()) {</span>
+<span class="source-line-no">195</span><span id="line-195">          rowI = result.listCells().iterator();</span>
+<span class="source-line-no">196</span><span id="line-196">          loop = true;</span>
+<span class="source-line-no">197</span><span id="line-197">        }</span>
+<span class="source-line-no">198</span><span id="line-198">      }</span>
+<span class="source-line-no">199</span><span id="line-199">    } while (loop);</span>
+<span class="source-line-no">200</span><span id="line-200">    return null;</span>
+<span class="source-line-no">201</span><span id="line-201">  }</span>
+<span class="source-line-no">202</span><span id="line-202"></span>
+<span class="source-line-no">203</span><span id="line-203">  @Override</span>
+<span class="source-line-no">204</span><span id="line-204">  public void putBack(Cell kv) {</span>
+<span class="source-line-no">205</span><span id="line-205">    this.cache = kv;</span>
+<span class="source-line-no">206</span><span id="line-206">  }</span>
+<span class="source-line-no">207</span><span id="line-207"></span>
+<span class="source-line-no">208</span><span id="line-208">  @Override</span>
+<span class="source-line-no">209</span><span id="line-209">  public void remove() {</span>
+<span class="source-line-no">210</span><span id="line-210">    throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">211</span><span id="line-211">  }</span>
+<span class="source-line-no">212</span><span id="line-212">}</span>
 
 
 
diff --git a/downloads.html b/downloads.html
index 28f0566a755..7c6b0cd8e7d 100644
--- a/downloads.html
+++ b/downloads.html
@@ -422,7 +422,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/export_control.html b/export_control.html
index c4a006c8148..e2fe5c952ef 100644
--- a/export_control.html
+++ b/export_control.html
@@ -210,7 +210,7 @@ for more details.</p>
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/index.html b/index.html
index 733eaea70b6..f6744f36a28 100644
--- a/index.html
+++ b/index.html
@@ -283,7 +283,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/issue-management.html b/issue-management.html
index f5677caef7a..2bc64070575 100644
--- a/issue-management.html
+++ b/issue-management.html
@@ -181,7 +181,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/licenses.html b/licenses.html
index aba2cce971c..30c1d4e21b8 100644
--- a/licenses.html
+++ b/licenses.html
@@ -383,7 +383,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/mailing-lists.html b/mailing-lists.html
index bd9fc2f166c..a829c453ab7 100644
--- a/mailing-lists.html
+++ b/mailing-lists.html
@@ -228,7 +228,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/metrics.html b/metrics.html
index b42f84c75b6..e40d81492b4 100644
--- a/metrics.html
+++ b/metrics.html
@@ -332,7 +332,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/old_news.html b/old_news.html
index 9b72d53d92d..f3238ee1a01 100644
--- a/old_news.html
+++ b/old_news.html
@@ -329,7 +329,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugin-management.html b/plugin-management.html
index d07fb72766c..e3a19429252 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -338,7 +338,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugins.html b/plugins.html
index 09b9df7efcd..195bc88b78f 100644
--- a/plugins.html
+++ b/plugins.html
@@ -276,7 +276,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 276e71b7935..14b682de501 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -671,7 +671,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-info.html b/project-info.html
index a75978a2984..62ed25d6a4e 100644
--- a/project-info.html
+++ b/project-info.html
@@ -225,7 +225,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-reports.html b/project-reports.html
index c0b6feed8d1..c3e513f55b4 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -198,7 +198,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 736614abe33..dbfc0f84b5b 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -187,7 +187,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/replication.html b/replication.html
index 734360ecc7c..10d6cb840b9 100644
--- a/replication.html
+++ b/replication.html
@@ -182,7 +182,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/resources.html b/resources.html
index 614fd37a6f8..a8983d51305 100644
--- a/resources.html
+++ b/resources.html
@@ -205,7 +205,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/scm.html b/scm.html
index bd95e13a193..01193d3a372 100644
--- a/scm.html
+++ b/scm.html
@@ -189,7 +189,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/sponsors.html b/sponsors.html
index 0fcf0338173..b888e17badd 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -211,7 +211,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/summary.html b/summary.html
index 1359beb6b09..0ee69d9576e 100644
--- a/summary.html
+++ b/summary.html
@@ -222,7 +222,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/supportingprojects.html b/supportingprojects.html
index 97be27afcd9..e3049413dd1 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -401,7 +401,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/team.html b/team.html
index 8c9de2f2e65..6390a1c741b 100644
--- a/team.html
+++ b/team.html
@@ -826,7 +826,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-04-10
+        Last Published: 2025-04-11
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html b/testapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
index eacb2039c60..a15292eedb1 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
@@ -112,7 +112,7 @@
 <span class="source-line-no">099</span><span id="line-99">        int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
 <span class="source-line-no">100</span><span id="line-100">        try {</span>
 <span class="source-line-no">101</span><span id="line-101">          RegionLocations metaLocations = CONN.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">102</span><span id="line-102">            .get(CONN.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">102</span><span id="line-102">            .get(CONN.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
 <span class="source-line-no">103</span><span id="line-103">          numOfReplicas = metaLocations.size();</span>
 <span class="source-line-no">104</span><span id="line-104">        } catch (Exception e) {</span>
 <span class="source-line-no">105</span><span id="line-105">          LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
@@ -139,7 +139,7 @@
 <span class="source-line-no">126</span><span id="line-126">          int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
 <span class="source-line-no">127</span><span id="line-127">          try {</span>
 <span class="source-line-no">128</span><span id="line-128">            RegionLocations metaLocations = CONN.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">129</span><span id="line-129">              .get(CONN.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">129</span><span id="line-129">              .get(CONN.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
 <span class="source-line-no">130</span><span id="line-130">            numOfReplicas = metaLocations.size();</span>
 <span class="source-line-no">131</span><span id="line-131">          } catch (Exception e) {</span>
 <span class="source-line-no">132</span><span id="line-132">            LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
index eacb2039c60..a15292eedb1 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
@@ -112,7 +112,7 @@
 <span class="source-line-no">099</span><span id="line-99">        int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
 <span class="source-line-no">100</span><span id="line-100">        try {</span>
 <span class="source-line-no">101</span><span id="line-101">          RegionLocations metaLocations = CONN.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">102</span><span id="line-102">            .get(CONN.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">102</span><span id="line-102">            .get(CONN.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
 <span class="source-line-no">103</span><span id="line-103">          numOfReplicas = metaLocations.size();</span>
 <span class="source-line-no">104</span><span id="line-104">        } catch (Exception e) {</span>
 <span class="source-line-no">105</span><span id="line-105">          LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
@@ -139,7 +139,7 @@
 <span class="source-line-no">126</span><span id="line-126">          int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
 <span class="source-line-no">127</span><span id="line-127">          try {</span>
 <span class="source-line-no">128</span><span id="line-128">            RegionLocations metaLocations = CONN.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">129</span><span id="line-129">              .get(CONN.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">129</span><span id="line-129">              .get(CONN.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
 <span class="source-line-no">130</span><span id="line-130">            numOfReplicas = metaLocations.size();</span>
 <span class="source-line-no">131</span><span id="line-131">          } catch (Exception e) {</span>
 <span class="source-line-no">132</span><span id="line-132">            LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>