From 10e48f3d39978611b6af5b5b62c91ea05b61827c Mon Sep 17 00:00:00 2001 From: Tony Xu Date: Sun, 8 Aug 2021 21:44:02 -0700 Subject: [PATCH] Re-export Workflow under Alfred 4 --- lib/awscli/examples/logs/create-log-group.rst | 3 - .../examples/logs/create-log-stream.rst | 3 - lib/awscli/examples/logs/delete-log-group.rst | 3 - .../examples/logs/delete-log-stream.rst | 3 - .../examples/logs/delete-retention-policy.rst | 3 - .../examples/logs/describe-log-groups.rst | 18 - .../examples/logs/describe-log-streams.rst | 22 - lib/awscli/examples/logs/get-log-events.rst | 27 - lib/awscli/examples/logs/put-log-events.rst | 36 - .../examples/logs/put-retention-policy.rst | 3 - lib/boto3/__init__.pyc | Bin 3887 -> 3279 bytes lib/boto3/docs/__init__.pyc | Bin 1338 -> 1186 bytes lib/boto3/docs/action.pyc | Bin 4980 -> 4590 bytes lib/boto3/docs/attr.pyc | Bin 2044 -> 1664 bytes lib/boto3/docs/base.pyc | Bin 1438 -> 1134 bytes lib/boto3/docs/client.pyc | Bin 1055 -> 827 bytes lib/boto3/docs/collection.pyc | Bin 7171 -> 6639 bytes lib/boto3/docs/docstring.pyc | Bin 5681 -> 4085 bytes lib/boto3/docs/method.pyc | Bin 1969 -> 1741 bytes lib/boto3/docs/resource.pyc | Bin 10984 -> 9270 bytes lib/boto3/docs/service.pyc | Bin 5247 -> 4563 bytes lib/boto3/docs/subresource.pyc | Bin 4027 -> 3647 bytes lib/boto3/docs/utils.pyc | Bin 5716 -> 4804 bytes lib/boto3/docs/waiter.pyc | Bin 3470 -> 3090 bytes lib/boto3/exceptions.pyc | Bin 5404 -> 4112 bytes lib/boto3/resources/__init__.pyc | Bin 196 -> 120 bytes lib/boto3/resources/action.pyc | Bin 9151 -> 8239 bytes lib/boto3/resources/base.pyc | Bin 4304 -> 3468 bytes lib/boto3/resources/collection.pyc | Bin 18577 -> 16297 bytes lib/boto3/resources/factory.pyc | Bin 17523 -> 15167 bytes lib/boto3/resources/model.pyc | Bin 21032 -> 18296 bytes lib/boto3/resources/params.pyc | Bin 4600 -> 4276 bytes lib/boto3/resources/response.pyc | Bin 9322 -> 8486 bytes lib/boto3/s3/__init__.pyc | Bin 189 -> 113 bytes lib/boto3/s3/inject.pyc | Bin 26396 -> 24724 bytes lib/boto3/s3/transfer.pyc | Bin 12944 -> 11804 bytes lib/boto3/session.pyc | Bin 17783 -> 16491 bytes lib/boto3/utils.pyc | Bin 4029 -> 3345 bytes lib/botocore/__init__.pyc | Bin 3499 -> 2906 bytes lib/botocore/args.pyc | Bin 5619 -> 4987 bytes lib/botocore/auth.pyc | Bin 32264 -> 26734 bytes lib/botocore/awsrequest.pyc | Bin 15936 -> 13566 bytes lib/botocore/client.pyc | Bin 30326 -> 25665 bytes lib/botocore/compat.pyc | Bin 12428 -> 10611 bytes lib/botocore/config.pyc | Bin 7883 -> 7300 bytes lib/botocore/configloader.pyc | Bin 8828 -> 8196 bytes lib/botocore/credentials.pyc | Bin 63066 -> 52630 bytes .../data/logs/2014-03-28/examples-1.json | 5 - .../data/logs/2014-03-28/paginators-1.json | 43 - .../data/logs/2014-03-28/service-2.json | 2003 ----------------- lib/botocore/docs/__init__.pyc | Bin 1314 -> 1156 bytes lib/botocore/docs/bcdoc/__init__.pyc | Bin 236 -> 157 bytes lib/botocore/docs/bcdoc/docstringparser.pyc | Bin 11700 -> 8856 bytes lib/botocore/docs/bcdoc/restdoc.pyc | Bin 11129 -> 8838 bytes lib/botocore/docs/bcdoc/style.pyc | Bin 23112 -> 16871 bytes lib/botocore/docs/client.pyc | Bin 5311 -> 4284 bytes lib/botocore/docs/docstring.pyc | Bin 5386 -> 4201 bytes lib/botocore/docs/example.pyc | Bin 8663 -> 7320 bytes lib/botocore/docs/method.pyc | Bin 8877 -> 8403 bytes lib/botocore/docs/paginator.pyc | Bin 5334 -> 4860 bytes lib/botocore/docs/params.pyc | Bin 9702 -> 8043 bytes lib/botocore/docs/service.pyc | Bin 4428 -> 3638 bytes lib/botocore/docs/shape.pyc | Bin 4314 -> 3761 bytes lib/botocore/docs/sharedexample.pyc | Bin 9331 -> 8067 bytes lib/botocore/docs/utils.pyc | Bin 8404 -> 7061 bytes lib/botocore/docs/waiter.pyc | Bin 4438 -> 3964 bytes lib/botocore/endpoint.pyc | Bin 11979 -> 10241 bytes lib/botocore/errorfactory.pyc | Bin 4490 -> 3779 bytes lib/botocore/eventstream.pyc | Bin 26286 -> 21546 bytes lib/botocore/exceptions.pyc | Bin 24234 -> 19652 bytes lib/botocore/handlers.pyc | Bin 36841 -> 32091 bytes lib/botocore/history.pyc | Bin 2780 -> 1990 bytes lib/botocore/hooks.pyc | Bin 18446 -> 15839 bytes lib/botocore/loaders.pyc | Bin 17394 -> 15735 bytes lib/botocore/model.pyc | Bin 32827 -> 26139 bytes lib/botocore/paginate.pyc | Bin 24388 -> 20280 bytes lib/botocore/parsers.pyc | Bin 35830 -> 29342 bytes lib/botocore/regions.pyc | Bin 8248 -> 7063 bytes lib/botocore/response.pyc | Bin 5430 -> 4561 bytes lib/botocore/retryhandler.pyc | Bin 14902 -> 12216 bytes lib/botocore/serialize.pyc | Bin 24710 -> 20359 bytes lib/botocore/session.pyc | Bin 38332 -> 33867 bytes lib/botocore/signers.pyc | Bin 24637 -> 22504 bytes lib/botocore/translate.pyc | Bin 2010 -> 1694 bytes lib/botocore/utils.pyc | Bin 39841 -> 34853 bytes lib/botocore/validate.pyc | Bin 14056 -> 11449 bytes lib/botocore/vendored/__init__.pyc | Bin 201 -> 122 bytes lib/botocore/vendored/requests/__init__.pyc | Bin 2725 -> 2488 bytes lib/botocore/vendored/requests/adapters.pyc | Bin 17141 -> 15561 bytes lib/botocore/vendored/requests/api.pyc | Bin 6797 -> 6086 bytes lib/botocore/vendored/requests/auth.pyc | Bin 8815 -> 7393 bytes lib/botocore/vendored/requests/certs.pyc | Bin 1011 -> 853 bytes lib/botocore/vendored/requests/compat.pyc | Bin 1755 -> 1676 bytes lib/botocore/vendored/requests/cookies.pyc | Bin 24280 -> 20172 bytes lib/botocore/vendored/requests/exceptions.pyc | Bin 6614 -> 5113 bytes lib/botocore/vendored/requests/hooks.pyc | Bin 1265 -> 1028 bytes lib/botocore/vendored/requests/models.pyc | Bin 28853 -> 24975 bytes .../vendored/requests/packages/__init__.pyc | Bin 335 -> 256 bytes .../requests/packages/chardet/__init__.pyc | Bin 973 -> 815 bytes .../requests/packages/urllib3/__init__.pyc | Bin 3124 -> 2729 bytes .../packages/urllib3/_collections.pyc | Bin 15583 -> 12818 bytes .../requests/packages/urllib3/connection.pyc | Bin 9316 -> 8131 bytes .../packages/urllib3/connectionpool.pyc | Bin 26674 -> 24541 bytes .../packages/urllib3/contrib/__init__.pyc | Bin 235 -> 156 bytes .../packages/urllib3/contrib/pyopenssl.pyc | Bin 11903 -> 10402 bytes .../requests/packages/urllib3/exceptions.pyc | Bin 11495 -> 8967 bytes .../requests/packages/urllib3/fields.pyc | Bin 7523 -> 6654 bytes .../requests/packages/urllib3/filepost.pyc | Bin 3795 -> 3242 bytes .../packages/urllib3/packages/__init__.pyc | Bin 363 -> 284 bytes .../urllib3/packages/ordered_dict.pyc | Bin 12325 -> 10192 bytes .../packages/urllib3/packages/six.pyc | Bin 16819 -> 13896 bytes .../packages/ssl_match_hostname/__init__.pyc | Bin 598 -> 489 bytes .../requests/packages/urllib3/poolmanager.pyc | Bin 11380 -> 9983 bytes .../requests/packages/urllib3/request.pyc | Bin 6527 -> 5974 bytes .../requests/packages/urllib3/response.pyc | Bin 18056 -> 15449 bytes .../packages/urllib3/util/__init__.pyc | Bin 875 -> 796 bytes .../packages/urllib3/util/connection.pyc | Bin 3293 -> 2977 bytes .../packages/urllib3/util/request.pyc | Bin 2316 -> 2158 bytes .../packages/urllib3/util/response.pyc | Bin 808 -> 650 bytes .../requests/packages/urllib3/util/retry.pyc | Bin 10883 -> 9856 bytes .../requests/packages/urllib3/util/ssl_.pyc | Bin 9629 -> 8681 bytes .../packages/urllib3/util/timeout.pyc | Bin 10601 -> 9653 bytes .../requests/packages/urllib3/util/url.pyc | Bin 6850 -> 5981 bytes lib/botocore/vendored/requests/sessions.pyc | Bin 21884 -> 19514 bytes .../vendored/requests/status_codes.pyc | Bin 6042 -> 4443 bytes lib/botocore/vendored/requests/structures.pyc | Bin 6468 -> 4967 bytes lib/botocore/vendored/requests/utils.pyc | Bin 22885 -> 20182 bytes lib/botocore/vendored/six.pyc | Bin 35628 -> 29387 bytes lib/botocore/waiter.pyc | Bin 12236 -> 9945 bytes lib/concurrent/__init__.pyc | Bin 295 -> 217 bytes lib/concurrent/futures/__init__.pyc | Bin 853 -> 775 bytes lib/concurrent/futures/_base.pyc | Bin 28769 -> 24089 bytes lib/concurrent/futures/process.pyc | Bin 13682 -> 12122 bytes lib/concurrent/futures/thread.pyc | Bin 6002 -> 4988 bytes lib/dateutil/__init__.pyc | Bin 458 -> 372 bytes lib/dateutil/_common.pyc | Bin 2318 -> 1630 bytes lib/dateutil/_version.pyc | Bin 227 -> 141 bytes lib/dateutil/parser/__init__.pyc | Bin 2766 -> 2250 bytes lib/dateutil/parser/_parser.pyc | Bin 51644 -> 45452 bytes lib/dateutil/parser/isoparser.pyc | Bin 13714 -> 12252 bytes lib/dateutil/relativedelta.pyc | Bin 19492 -> 17342 bytes lib/dateutil/tz/__init__.pyc | Bin 940 -> 768 bytes lib/dateutil/tz/_common.pyc | Bin 15941 -> 13488 bytes lib/dateutil/tz/_factories.pyc | Bin 3561 -> 2529 bytes lib/dateutil/tz/tz.pyc | Bin 57483 -> 49036 bytes lib/dateutil/tz/win.pyc | Bin 12940 -> 10790 bytes lib/jmespath/__init__.pyc | Bin 892 -> 655 bytes lib/jmespath/ast.pyc | Bin 5639 -> 3822 bytes lib/jmespath/compat.pyc | Bin 3561 -> 2613 bytes lib/jmespath/exceptions.pyc | Bin 6957 -> 5140 bytes lib/jmespath/functions.pyc | Bin 14932 -> 11553 bytes lib/jmespath/lexer.pyc | Bin 6972 -> 6103 bytes lib/jmespath/parser.pyc | Bin 22759 -> 18120 bytes lib/jmespath/visitor.pyc | Bin 14846 -> 11212 bytes lib/s3transfer/__init__.pyc | Bin 31667 -> 26383 bytes lib/s3transfer/bandwidth.pyc | Bin 18701 -> 15299 bytes lib/s3transfer/compat.pyc | Bin 2552 -> 2066 bytes lib/s3transfer/copies.pyc | Bin 9606 -> 8553 bytes lib/s3transfer/delete.pyc | Bin 2823 -> 2418 bytes lib/s3transfer/download.pyc | Bin 29658 -> 24555 bytes lib/s3transfer/exceptions.pyc | Bin 1968 -> 1401 bytes lib/s3transfer/futures.pyc | Bin 27360 -> 21992 bytes lib/s3transfer/manager.pyc | Bin 23662 -> 21556 bytes lib/s3transfer/subscribers.pyc | Bin 4177 -> 3610 bytes lib/s3transfer/tasks.pyc | Bin 12598 -> 10816 bytes lib/s3transfer/upload.pyc | Bin 29318 -> 24134 bytes lib/s3transfer/utils.pyc | Bin 32236 -> 26223 bytes lib/six.pyc | Bin 34530 -> 28610 bytes workflow/__init__.py | 2 +- workflow/__init__.pyc | Bin 2187 -> 2236 bytes workflow/background.py | 4 +- workflow/background.pyc | Bin 9155 -> 9415 bytes workflow/notify.py | 9 +- workflow/notify.pyc | Bin 10572 -> 0 bytes workflow/update.py | 433 ++-- workflow/update.pyc | Bin 14035 -> 21110 bytes workflow/util.py | 142 +- workflow/util.pyc | Bin 16893 -> 19275 bytes workflow/version | 2 +- workflow/web.py | 35 +- workflow/web.pyc | Bin 22676 -> 24787 bytes workflow/workflow.py | 119 +- workflow/workflow.pyc | Bin 92096 -> 97763 bytes workflow/workflow3.py | 19 +- workflow/workflow3.pyc | Bin 25705 -> 27650 bytes 185 files changed, 467 insertions(+), 2470 deletions(-) delete mode 100644 lib/awscli/examples/logs/create-log-group.rst delete mode 100644 lib/awscli/examples/logs/create-log-stream.rst delete mode 100644 lib/awscli/examples/logs/delete-log-group.rst delete mode 100644 lib/awscli/examples/logs/delete-log-stream.rst delete mode 100644 lib/awscli/examples/logs/delete-retention-policy.rst delete mode 100644 lib/awscli/examples/logs/describe-log-groups.rst delete mode 100644 lib/awscli/examples/logs/describe-log-streams.rst delete mode 100644 lib/awscli/examples/logs/get-log-events.rst delete mode 100644 lib/awscli/examples/logs/put-log-events.rst delete mode 100644 lib/awscli/examples/logs/put-retention-policy.rst delete mode 100644 lib/botocore/data/logs/2014-03-28/examples-1.json delete mode 100644 lib/botocore/data/logs/2014-03-28/paginators-1.json delete mode 100644 lib/botocore/data/logs/2014-03-28/service-2.json delete mode 100644 workflow/notify.pyc diff --git a/lib/awscli/examples/logs/create-log-group.rst b/lib/awscli/examples/logs/create-log-group.rst deleted file mode 100644 index f81bcdc..0000000 --- a/lib/awscli/examples/logs/create-log-group.rst +++ /dev/null @@ -1,3 +0,0 @@ -The following command creates a log group named ``my-logs``:: - - aws logs create-log-group --log-group-name my-logs diff --git a/lib/awscli/examples/logs/create-log-stream.rst b/lib/awscli/examples/logs/create-log-stream.rst deleted file mode 100644 index f079c20..0000000 --- a/lib/awscli/examples/logs/create-log-stream.rst +++ /dev/null @@ -1,3 +0,0 @@ -The following command creates a log stream named ``20150601`` in the log group ``my-logs``:: - - aws logs create-log-stream --log-group-name my-logs --log-stream-name 20150601 diff --git a/lib/awscli/examples/logs/delete-log-group.rst b/lib/awscli/examples/logs/delete-log-group.rst deleted file mode 100644 index 27105d0..0000000 --- a/lib/awscli/examples/logs/delete-log-group.rst +++ /dev/null @@ -1,3 +0,0 @@ -The following command deletes a log group named ``my-logs``:: - - aws logs delete-log-group --log-group-name my-logs diff --git a/lib/awscli/examples/logs/delete-log-stream.rst b/lib/awscli/examples/logs/delete-log-stream.rst deleted file mode 100644 index 94697f4..0000000 --- a/lib/awscli/examples/logs/delete-log-stream.rst +++ /dev/null @@ -1,3 +0,0 @@ -The following command deletes a log stream named ``20150531`` from a log group named ``my-logs``:: - - aws logs delete-log-stream --log-group-name my-logs --log-stream-name 20150531 diff --git a/lib/awscli/examples/logs/delete-retention-policy.rst b/lib/awscli/examples/logs/delete-retention-policy.rst deleted file mode 100644 index 19f98f3..0000000 --- a/lib/awscli/examples/logs/delete-retention-policy.rst +++ /dev/null @@ -1,3 +0,0 @@ -The following command removes the retention policy that has previously been applied to a log group named ``my-logs``:: - - aws logs delete-retention-policy --log-group-name my-logs diff --git a/lib/awscli/examples/logs/describe-log-groups.rst b/lib/awscli/examples/logs/describe-log-groups.rst deleted file mode 100644 index 9f20b52..0000000 --- a/lib/awscli/examples/logs/describe-log-groups.rst +++ /dev/null @@ -1,18 +0,0 @@ -The following command describes a log group named ``my-logs``:: - - aws logs describe-log-groups --log-group-name-prefix my-logs - -Output:: - - { - "logGroups": [ - { - "storedBytes": 0, - "metricFilterCount": 0, - "creationTime": 1433189500783, - "logGroupName": "my-logs", - "retentionInDays": 5, - "arn": "arn:aws:logs:us-west-2:0123456789012:log-group:my-logs:*" - } - ] - } diff --git a/lib/awscli/examples/logs/describe-log-streams.rst b/lib/awscli/examples/logs/describe-log-streams.rst deleted file mode 100644 index c56df2e..0000000 --- a/lib/awscli/examples/logs/describe-log-streams.rst +++ /dev/null @@ -1,22 +0,0 @@ -The following command shows all log streams starting with the prefix ``2015`` in the log group ``my-logs``:: - - aws logs describe-log-streams --log-group-name my-logs --log-stream-name-prefix 2015 - -Output:: - - { - "logStreams": [ - { - "creationTime": 1433189871774, - "arn": "arn:aws:logs:us-west-2:0123456789012:log-group:my-logs:log-stream:20150531", - "logStreamName": "20150531", - "storedBytes": 0 - }, - { - "creationTime": 1433189873898, - "arn": "arn:aws:logs:us-west-2:0123456789012:log-group:my-logs:log-stream:20150601", - "logStreamName": "20150601", - "storedBytes": 0 - } - ] - } diff --git a/lib/awscli/examples/logs/get-log-events.rst b/lib/awscli/examples/logs/get-log-events.rst deleted file mode 100644 index dd009a9..0000000 --- a/lib/awscli/examples/logs/get-log-events.rst +++ /dev/null @@ -1,27 +0,0 @@ -The following command retrieves log events from a log stream named ``20150601`` in the log group ``my-logs``:: - - aws logs get-log-events --log-group-name my-logs --log-stream-name 20150601 - -Output:: - - { - "nextForwardToken": "f/31961209122447488583055879464742346735121166569214640130", - "events": [ - { - "ingestionTime": 1433190494190, - "timestamp": 1433190184356, - "message": "Example Event 1" - }, - { - "ingestionTime": 1433190516679, - "timestamp": 1433190184356, - "message": "Example Event 1" - }, - { - "ingestionTime": 1433190494190, - "timestamp": 1433190184358, - "message": "Example Event 2" - } - ], - "nextBackwardToken": "b/31961209122358285602261756944988674324553373268216709120" - } diff --git a/lib/awscli/examples/logs/put-log-events.rst b/lib/awscli/examples/logs/put-log-events.rst deleted file mode 100644 index 457c3db..0000000 --- a/lib/awscli/examples/logs/put-log-events.rst +++ /dev/null @@ -1,36 +0,0 @@ -The following command puts log events to a log stream named ``20150601`` in the log group ``my-logs``:: - - aws logs put-log-events --log-group-name my-logs --log-stream-name 20150601 --log-events file://events - -Output:: - - { - "nextSequenceToken": "49542672486831074009579604567656788214806863282469607346" - } - -The above example reads a JSON array of events from a file named ``events`` in the current directory:: - - [ - { - "timestamp": 1433190184356, - "message": "Example Event 1" - }, - { - "timestamp": 1433190184358, - "message": "Example Event 2" - }, - { - "timestamp": 1433190184360, - "message": "Example Event 3" - } - ] - -Each subsequent call requires the next sequence token provided by the previous call to be specified with the sequence token option:: - - aws logs put-log-events --log-group-name my-logs --log-stream-name 20150601 --log-events file://events2 --sequence-token "49542672486831074009579604567656788214806863282469607346" - -Output:: - - { - "nextSequenceToken": "49542672486831074009579604567900991230369019956308219826" - } diff --git a/lib/awscli/examples/logs/put-retention-policy.rst b/lib/awscli/examples/logs/put-retention-policy.rst deleted file mode 100644 index 6bb9904..0000000 --- a/lib/awscli/examples/logs/put-retention-policy.rst +++ /dev/null @@ -1,3 +0,0 @@ -The following command adds a 5 day retention policy to a log group named ``my-logs``:: - - aws logs put-retention-policy --log-group-name my-logs --retention-in-days 5 diff --git a/lib/boto3/__init__.pyc b/lib/boto3/__init__.pyc index 9d129f33f40e5d8abd2d6075872c8cc327900697..8beca4bb8c33f754e0305663958e9618aa9133da 100644 GIT binary patch delta 145 zcmZ24cV3c%`7!x$@8#(NlIK>$l81(dWGLt47@(OQW$8?_sP3SAT6eF5YIVUfY d(B_+5>`2_nraa40)W;z49`Wu%;(g?^0|12UBo_bx delta 757 zcmX>vxn7Qg`7W_{ki+G%|kkN=|kf89jL?*K*p0$>bVtPa2tij(Zo4 JOrFSN2LN?K2$KK+ diff --git a/lib/boto3/docs/__init__.pyc b/lib/boto3/docs/__init__.pyc index 9bec6c29cdaa51f04c3f6bb7bd76a45a71ce5dc9..a28b6eab1df9fd246cdc3447991d5b2f6796d437 100644 GIT binary patch delta 45 scmdnRwTP30`7W~`7eWRaN6$dXPo(+vTRLPf{` diff --git a/lib/boto3/docs/action.pyc b/lib/boto3/docs/action.pyc index db120f79b51d65bdaf348a7667f1e37007cd07cc..614cc13d9ab8c671b37557fbe9553cde6f43a85e 100644 GIT binary patch delta 118 zcmeyO_D-3D`7>GFBjQC!bB`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE n`No@b87pXI^gAX+S{W_DQb{ADCj(tQc{gh(ZGwBUFPkv{9ipX{ diff --git a/lib/boto3/docs/base.pyc b/lib/boto3/docs/base.pyc index ca8a7dc4a8179e62611e2523395f160e02c541db..b42959ad1ef05a8dcd2da936bdecd14c196d7538 100644 GIT binary patch delta 73 zcmbQo{f>i!`7;U>2EtiK&%lrsvYg$ B5Cs4L delta 291 zcmdnZHlKro`7C2hoXk;=Uvn~LsFk}J% diff --git a/lib/boto3/docs/collection.pyc b/lib/boto3/docs/collection.pyc index 6f61f03f77a5a8c80d4dce0d71e83bba198f5dcc..e9fc49100864d56ddb045f633e54fc39063a18c2 100644 GIT binary patch delta 140 zcmZp+cyG+X{F#@lZPU5#`0fi^E*`8C5 c2~Fq>H#aMqkegr*2bz$glounC&;e;@0PcSx6951J delta 676 zcmaEF+-$+Y{F#?)+XbiSjT{jyp;-(J4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`NoqSIV3kXvB)yh%y_BEhuF(#WBO)C4htsQ7!3>;sm*h^xLIjv{3-q%4jLLCDdELP MGvg&EAC=Ss00CF&g#Z8m diff --git a/lib/boto3/docs/docstring.pyc b/lib/boto3/docs/docstring.pyc index b1ec920e4b8ee49b12c3813849524b802f54ee29..caf8aaad4384b8ae6da737b3303aa6f0b27dabf4 100644 GIT binary patch delta 391 zcmdm}^HrXM`7FzD&$WF}4iC@3*mktGa8L~`;|mX#&t+SMA|g9^Cp)^DFpd>yY6>{f)$nqmSv6UM8(qy&Zgg|*^PsD#;YBxRIv=_k w6aMvR?gg(?#SNQ4~o`{w!(-06-0Gw*UYD literal 5681 zcmd5=TW=FP5S~riv`w2fy=!i?{!$AU$}3!0u&bPK$erkjdh1aDE(^AImV(gv@M^a2P6dJgawd;<6g@XA{T zzG%2h1$PB_+i;f)?keyV!(A=7YrxkGcfH`Q1K%**&4RlDe9LgR3+^WH9m73WaJPV; zH{1&acN_Rc!~LV+?f}08hn>raO!O~)I*1O)Rji%`?@ynl0T=ur4Re`AgTC%u!cLxs zqeKj(AA~YW2fE{2xg*A*ekRmkS!lg1l#jY7lc%FB6#5w}>1`jFkX#3G@hDXkHE2p_)4+8S)`2e`8Uy65xXaA8PO! z)S}h0FVqM|BRV85r$}DJJ=F-Zel8oxd3!?54z@s5d4w%@m__423U?f2ZZD0w$Z}Uo z_w-$VaCbZ&?45M)-r~tPk^T33Z~C`)cXv;Rx7;Il7!7YkgIor2eB&tF-5j3EHqPdsWM~|};GaicUc(9;t@$ho`GX)4zAu}KNK!tEkz{1iGwpxF zE3kRgfEK+{x#4KH!FA8nvabqfvX`&7ZJ z!bbje%_un8C!ZGQcU8De+lbq)F^i43(S64?3QpXOnX6S*u+de;I(NHctYRZ<8>rlE zqu|8do)ovh{iOStG3L6yIh@uy;0}ykYy?iZnNbjdBR4dmz)KapSLJjR;97^>Q)3z%v7@Zb zUq-=(^P)rHxI&PU4`G^#n;er4s#2K;hW#KZ4prF+-K+CcDq+GXnwE5emijSGWzsoJ zB~&Q&Q0k{V6{E0#(H)b~jYZPksU&iibz*cdGTL7m`Rb3l=yVaIrJ(W)jA9%{fe)h{ yh0${v>BrPMrCo>73T9-Avyfl4D$eN8JN>ECGY=>Wp>j*@THE>QTi=-e@%tY_fgFqg diff --git a/lib/boto3/docs/method.pyc b/lib/boto3/docs/method.pyc index 842550c9ed4e8c9b348611ca894e97e7b5dbe224..11c8293e4c93804cf9737623f5a5ae1bb831b0f0 100644 GIT binary patch delta 68 zcmdnUf0mbn`71&nu$9xu diff --git a/lib/boto3/docs/resource.pyc b/lib/boto3/docs/resource.pyc index bf85b1c1ac966b240bc4187d2751072b1feceb15..b317c4a322ae1ca7ca328979ea505c6882bed579 100644 GIT binary patch delta 428 zcmaD6y3K=w`7C;t`ImqGbXA*Y{(6 delta 2164 zcmdny@gkIi`7ntMU*P1WUD!x${>QbCmd4-Z z(WRyF+I%65cE#MlgqfL=npcvUmI+Lc#auvsVo6C+W>RTMDui2bBx z=j5a&mt^MW6;GbbpFx|b11D`6fnpk^46yMVgu0n&==vBjGg`WSvxFEeQ^zYwSsEF? zSwNbmxzbK1kVY;CrJBhbWM|Vb(d5Xn($evhLWV|7#_~d?$nY1x|vmxh7T7?V9;lFqu(#GN7Q2)(4 ekCvgnlYbSB91jed&CLRwv~s*6i}d6Tg318XV=6cR diff --git a/lib/boto3/docs/subresource.pyc b/lib/boto3/docs/subresource.pyc index 2480617266ca3f59a5e1e6b6a1f7c66f90248b29..e8bbede9792e151f38728ad62464d5dcd0f2cc2b 100644 GIT binary patch delta 200 zcmdljzh8!f`7Ou`o3+`VeIE;>%;bOE&WzHNop`#rg@7u9gh7PJ4=tU{X delta 568 zcmdllvs<2n`7&PH#_lkqYIhy?LZY0*&HD-lNrT4k;zdaRcIo% NqAe&QqLa17Gy(7+J|+MF delta 1138 zcmX@2dPRqW`7ZGHEj-xRX8EW+Ql;E!p!}khp)i MSr`%A$)UWK03j9@0{{R3 delta 485 zcmbOv(I?Hp{F#?)+XbiSjT|{lp=k^Z4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE r`NoqsvWjk=#3aT{GvjB|%w*BcS!|Ikv@?G4L$3EUGhJ-*dv0X_V=AhJ diff --git a/lib/boto3/exceptions.pyc b/lib/boto3/exceptions.pyc index e12bca4939de963f556190af6bc3e9063b9c059e..55997de47d3b59595e15b9348da11a9e50184f61 100644 GIT binary patch delta 319 zcmbQEH9>)c`7nIRBuDJmNA%6KUi|aScx$s{Ce6-goFOY2>#-Q=~31 d16`4(5SpUN=Y`5pwM||xdbdJp^fRAKQfikELhkiCwHKNjtZ1e#-fdmZ|+Kw*?Iy@69uVmX2rTqoLy` XNAs1@E@&pd=etBR(?urV<2M2To`O4a diff --git a/lib/boto3/resources/__init__.pyc b/lib/boto3/resources/__init__.pyc index 0fb0f108f62a27c33819d8f76535ce25789a18f7..afb0e5db7e505328bf469edeee7ef53f078cafb0 100644 GIT binary patch delta 34 ocmX@YSi!;knU||&)4BMG9HyL#3=9l<`Z<|N6DR4imH;^n0Jjtg3jhEB delta 110 zcmb<8!pOn=nU`zZ1*hnV9HybU3=9nV1x1-~S3kpwi@;=_1NFs0eDv@{~TQ2h#A&I= GKoS7Q<2g$J delta 1049 zcmeB?zM#m#{F#?)+XbiSjT~G|p_vQ}4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`NoqSc;qKrF)gQ|>72|PX=b|QK`NTaYXfvO`wY`i)oh+_ zw3!`6NPhD^s{^R6lH2^zW-FS|WJ&uaDEj0k8#rX4iSRn2i@b6~)3uq=c_pgR@{{FU XkDwV8>K210qT+rIMMQpbnuj(3klK?y delta 2856 zcmZ2kKXD=>2lHoMu5A~bqBnBJv`anmn~P;;)6RJ1$yRc?G>qBva&8>7Gk&tI`Yqa-zS&+QoOU5EH+ipS zJnbAm*+nachNhp;N}-|YA=VidmR94lJ$N7 diff --git a/lib/boto3/resources/factory.pyc b/lib/boto3/resources/factory.pyc index 7372d48aa974c30582b31fcc2d78cd9196e74117..b63ab3bfd448fd6e4b308e8d1727fa889c5b440e 100644 GIT binary patch delta 598 zcmey|!MMMSgZVQrSIeez@f$g|vT!OeFfi!p=VT^L{=hH2S(o)SJDN}juP_rrX!8et zXCy9Alg#ENLQ_$Nq$e*h<=ebnRD%(r5v(#mTnSaB%;v|E^O@09eU`n7s!@8fg+dXU zB5B1{sETAZn<-nN3Q13XpmG^apNd)#sv?=m&(%+&DN@ulMRlk2)|GN6-{H8EisV_&|koa<0)TG=&|;E6^1#FujDLNP6-kv!f^?GMgnVo}#-p s*ZLkp(dGp0EuR-K>z>% delta 2950 zcmdmA_PK+RgZVQr*R~5z(Hl9ovV`U^FfiyB6lInrmZa*JB^K$Y<>#cN78UE4l;~F$ zrstWLmE{?iCz%_i4)eSWESXV<`tJD=H%$QWaJj4hv+Be zm*g8yE|ito{D|chI}MHh$Ror=BjYEk$ZXc&SEr@%C4y6FWqhHm^k!WVGe#N)PKT%x zty~WZ`}5-SnQ7?y$j5hiH2e0p%g?b z#{x-+)%8gA(QsgQv92RZJ##X%sXd$FrDzq+Q&C lauxezMROW@V6w8sKH3G(WH!r#v@?D48%t(d2EK^3HUP)k4n+U} diff --git a/lib/boto3/resources/model.pyc b/lib/boto3/resources/model.pyc index 1dc5272f5985b227b0a8597d5637b65f63af916f..b87a62135e9400b0095928e49100737fd4844f6f 100644 GIT binary patch delta 680 zcmZ3ngz-loBM0+mUapo+=i)bVaIkR7F)%Rb>E~o7O@0_CH@TT55lJMFTWWJK>mDW) zA-Ty-9BwEgQk%^=k1`^JHV1MCAaN%HjhQUK8-P#%64`v7*N_=SNN#emAiBXCLLtZ| zT@(&M(IT~ZipV}>1%cdhlaGoyqbVvEXGZhG=C_g}sQRQP7fAm?()Tb>YVu7PKO_;5 zqo>JUK{W}eNWm6OQLEw_G@or=qPmv@NfprW%@_3ikwYJ3dY>^1vPO_9MspE#p%$wp zm`-QeJljSKO?b13T@bp^SNkG#p=*v@=nnCByNB#eP*}|I{EFlOplc_2A4d`Zxz)@k e6Wwe+zfd%x$(Q`6A?X7eH2HeKRwR*!f$jhjy{?-8 delta 3428 zcmey-$GBn%BM0+mUaoByoT4{!aIl1CF)%Rb7ZhcdC6=V>mn9bIr{(9Qq!tzHmz3yN z7N+N!mzCuimnWGUrR0|7mZVo1XQi7M7#LI*80m-T7i1RbX66-_Br?gFJzILyg{C2@;r7o+S#y~o#QAY?TiO`VDo2A zBU)PF!5u&w4{Tn@?afRZqv4S&%umb6t>F)$Wyph4=XU`!+6B?(0Kt8<_JFCdGi^Mu zxlve_#%06iqoN|T3LimJxk=*RXcIKRLRo6Eq=X-hOb3>no4X{g&@%8FrEO{G_=nPK zXjt%U-XMRFgGR0gM(pM(8veAZ%t0~BrprRBzyY~l*Fc1p#-|uBp;3%+5Cgx2p=e$oFXKaq= ZvSp=>(Lf(cP2SJHj%KDyPo5~C3;^hel*a%7 diff --git a/lib/boto3/resources/response.pyc b/lib/boto3/resources/response.pyc index 4bd5213254520c334f160d466264fd10301efcde..0d090f9ad7f92383c2d2369d78c345fcb793fdf0 100644 GIT binary patch delta 226 zcmaFmvCN5s`7e~ONJ5(*$T}l&fzFbhJXI+QRnO!^QoE01g{)J^%m! diff --git a/lib/boto3/s3/__init__.pyc b/lib/boto3/s3/__init__.pyc index deccf9907cc9067ec7a8f36118dff33a74459480..e196c08154a4863c13b78b3060cc97a35b3c4ec7 100644 GIT binary patch delta 34 ocmdnXSjfTrnU|}1)4BMG9HyL73=9l<`Z<|N6DO&$mH;^n0JMDw?f?J) delta 110 zcmXTi%gDj}nU`zZ1*hnV9HyaZ3=9nV1x1-c^|v{W=^&QRH6L{ z1)DE%=rSR3L%0_ssom_uYs`uydqwC!3ldjDq8FLVB|8V1`&-cinL9%*6q)O!ZN!0O z)JbC>b|h|=H5)SbsFN}qlB}(#0AKyO35wDElIC3&Pq2iFfgbrFwzgvFUTy=&CDwi&*nnb1ln4$hISs&wiDt%&Y<|PpPrI-Y**t?= zo|T5KzasFOg@(r85v`=9@kLS{v@~8^-h`IMXDB<;()eTQavU^_T1Ep4b{ZNVX8wtd zHpXubv{R;$(ZKRpWb;H99$MzuU7qJ?lxj9l^wXndz}yKjpk=^lMm?udz<{E4vTpoa O+N4KNB|h0KAr1hMW8YZ- diff --git a/lib/boto3/s3/transfer.pyc b/lib/boto3/s3/transfer.pyc index cfafae046c08ca97622fffa52c1acb2be748b910..cb54d452634b3d7eb381e16bb64290944a649af0 100644 GIT binary patch delta 289 zcmbP`IwyvM`7y@wo^Ngs!D8fh30$|MWT}%wfs;-#3oy5*P@7sPFB?ELKWF8 is$0c~Dm3}09;!C6$q)7YQPpgoWe|a?O>A;P!ZewTj&fYjf}q_^NwaFi%q^On?)PbHwVaVV4{uDlP}0fZB|w^VWy4on-f%? z(#qw)v@$tGeLig*4h$Eu$x0f&G%_9J_CAeT8kr7qyOw4r?M&Z%NwboXX2wfR&eN`- fk?9F4QjA>x9!PXh5mvrLHjm6j}Av diff --git a/lib/boto3/session.pyc b/lib/boto3/session.pyc index 409c07c94405ee004dbcb60a641a65856ec597ea..8674823ff148c5c387b398e629cad8a16a9cdadb 100644 GIT binary patch delta 281 zcmey~#rV2`k%Rd&FIVfPbMYHFoH;qg7#JAz^m8(kHZR~5Wkhf%FW{7zti-(xNko=s z6%tQ|cQrDP?-YW!*_uBY$*9er1-y{ClZ0}RxxpgZ$lS}Kr1v(ilr3=Ap@jPyhF3o;9IGxLf|5_58NT{3bD(nIu< z@=NlKC;zt)o1De@pN6J)aIK(`>6YB9Xk_vm?$tChc>&KU+L*k#m^Yb`Mn>P~^P-i} zMglpsGJ3h7Hm!`lEp(chMq#~PYz3`cogg8|M;lj9Uce)^d4gJ+5N(X#{NLgw3yqBa VXv%+5Cgv4$0@)>*xv9X!ky}vA3go5bAx=cJBPk6$=0;aR-tB diff --git a/lib/botocore/args.pyc b/lib/botocore/args.pyc index 5212fc27fa067a1967b612f4cf14acfa3046c7fd..700d69b4c03010a86f70c5f65e5aa8092a22567f 100644 GIT binary patch delta 133 zcmeyY{acNL`7Q`73W<8Xz2FuJPVj;=k^8s5sWl5eKMoqVcHpfR=i)bVoMGh@V_;y=)6dCFnyjBIHra_S9!caU+g}84vmeK4 zW+ZMQk2e#73)Zd0kF5J4|8|7@<_`kv(3SIuL?9{HBl3q4!JRB1{tv<1oF;J*Npf?) zR2~v{a$>UlC6y5t8I) zbCX77u7Ft@vcm#!5E$;mt2A`!gJS?=n{N`aRU>N@x z$+FEkiF1*-z_hmyp>}e4%6|lJ^SRW|NJ=+LW*8!IC;v4R-@G$Z6G>>ZRW^#*`nk;r z(e>X4-P80T)&EN!}C>3mVVh}GKpFyVMw|x8d64#r;{-`lNEJcoETG7pJAvi<58bCmNHVh za<1i!(&~1*Cp51Z619ZpN~l>~N+w<1qbW@ZiP5y49!Y0p^2h=eEyK71;mvvAxU)9_PXLG~WkJDeZt(#$VTHEm#250lmcQ|!k z7E~Oa7Ean}to9Nt99paW27~jDU7fgWxV>%`NMETR1b(mOzQ*iVVbRlreGaN~T)-8$ z?RXD^bFMJ}48O4Z7f$`{o{zYxEVcDDPCf5z0IJ_>`i)bc+rNTSXKKy^=?$(paM(+K zO?*e}1Nv8Zt^?^ey?1eR3bcN}4P{eX5U75>eHEs@vFS|t-oOfQ^xz9%He$zFm^$U1 z0=?`w0xQ7VJDs>}*ng;b6VBb}I)-znrNc8Yb<+K#FgSnlKL_SA-z~$`$==fogY$UL z5N;Ybj7 z50L)2uM0@G3?L__{CN0mFa>KY`NB_O@af1TjLlP#Wn5P&J9G`FzHJ!zOfVf0NS7p> b{U<4iyE{r(pNdnTlMet_R>>;Rcje-L`+-5V diff --git a/lib/botocore/awsrequest.pyc b/lib/botocore/awsrequest.pyc index cb6c65be2f0806fd29bd988f921cc08899c8aeb5..f2338b9f262718fddf5d169d5fd35f029d588ba9 100644 GIT binary patch delta 562 zcmX?5^DmQw`7tSLY?GK# zg(k1yT7)XHc^7vJnxf6?`12UiRP_kjA_;9)6rRO|q(V_xVzRc_E>w}tq2j7&CQp7P zH3dl#$RF>ducL{W%3eVcnT*1dn4BVChbpo;NPz`8cz~|id`u+^&4HU2sFxyn0ThUv zTQwJ;3r*F&hb#m#>#?p7vJlACsrn%ZH*6L(5JmIo=4r+P=z7FV+Yoxd*7KOPp()zT ZWN`;gXtJMG3YtD8>sU0;O@4112mr8IjEw*Q delta 2936 zcmeyDd7y@a`7Ht7kCC>1NanYtsSVeqW+NRQ8V6FmZX0a_iA}GKwqDr0 eR{sudZJ4~uFom{(q;C{U!;}QfZj;xT1OWh1^AQ&S diff --git a/lib/botocore/client.pyc b/lib/botocore/client.pyc index 47d1367d36f937d578c6c0dfc5d0be56513d841e..2cba06a3ab571025a2c42a41ba5361100f455f6f 100644 GIT binary patch delta 1106 zcmZ9}TPVYE6bJClZGX3@-%lo*$#uCc%94yI;bm=J<}x%4F_iM;1rI1C9Z7_E@-k~X zky47H)rv%UA)6%0o8rms(K(O*&;NYS@0{Q7<4t`MP%Dw|iE(!SMVC(rYGSo2m8zt4 zc+d&kdVyx8Ad(VX#qUwU*MzW|kOWiG0~MT3UW;HfCqgWTHz^iQi>X>pB5j_NlD@yT@+Zkm($Y0BX=TNz{o$5nTV|)zSSz*Ad|D`J!Wiwr`n>YlexYAE;o=KrtHtwuahi5x9n1nH0LMOkRjA ejr6hq&QYGo9AoF;^H>AjQ{w7)Iwb+R3HvX$lrF{q delta 5771 zcmX?jg7MoMMh@oByj};mRORiUzS*;pO&AKl3G-(Us9r9 zS(u(@URIW8T%KfZl#*MPTasR7oRw~3U|>*LV5A?SUyxa#o0(T!l9-dD>ynXMkRGC+ zlwXpcoL`hWnNdY#^9OcyW}4bC*@Sy7O)c2`kNW{5?QAgg5t;m(_dZQ6*!-Pu787l4 zSSLv1K-#=o*q^r1uvuJGg2p!Zh;`D~hEL)>G_-+HMR@Wo$*r_aN;y)RG)}CWWcJh8 zhCX>#8b$-C%-EptkEYQu`LyB+np&`Vf>H+U!e}$2iZks@pA3qDMAgl-4Io3c9W<;v zfnM0mrX@qeKmykPlkK(F&^C}bbSBa`FK^S!rC}g}qQSvHg~m2C8lI-D4U;pC@6a@& zCnuR4rL6@nrt4{Ifq)r}n|VCu#WarPITo{N8b+H#EDzB*I~&_fqhTO{%DiW`G)}1} z>|$vf3r_YYSZHg5x=RoZV*ymCPIJ9ZV;j2M=g}^dHXHg>(9r#$zWFiVtu$_5%m@^r zu^&zbJ*Q!L0m{v1L;uh;D@=YCHifnpOb>6Stp(;0lWA(f=I0T*v`wj#4P&Bd>V?TG zVuJb8g=3aX;X1!BKZM1&__6F-3_!YMfiRb;b()Fjk^64}fr qE5MARN@R1F!U|MX!jtDJqqB`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`N{c3sgn))MK-Tv^=G1;4T*9RljS&iXla4S+e*#MZ+in1<(eK!vOuQ86f}w diff --git a/lib/botocore/config.pyc b/lib/botocore/config.pyc index 5a2086bfe1e26d3f17819ad55a88a4fbce7d7706..fe5d07f253056a2334386f35ffa640bdc2d768fc 100644 GIT binary patch delta 182 zcmX?Y+hWPV{F#?4eABu3jU1bVI3*Yu81(dWGLtq731>1PxRWo7{$>r*1t9WKNzZQ;9Hga=z?&B;GVR FQvlGDC653A delta 769 zcmZp%JZ;Ot{F#?)+XbiSjU1bVBGMTc81xH@GRqQ6QuWIci}cg-b5c@^iuFrM^eYR~ z^UTZ2@{G%q%#BiV%W_N7tBkYKO$-bSDhrJCL-Y$W3v@H{ic1o6a&%oXatqQ!^po;S z@{{w6QYZV%NNm0>6v#w78%#xia~87z-CvMck}=s-%$jCaZLSn^V5FVthr~D1Fqmqj zJiLp!fWcH+oLUs0n4X$f;-|p`$PB`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`N{c3sgw80OKqOY#m7iX8zeU$<=#eP8|LzgveVQLldp*UrL6^@MZeS3g3UbQXK5Tp LzvXt)(hKeYebOD( diff --git a/lib/botocore/credentials.pyc b/lib/botocore/credentials.pyc index f61099acdf3c0e6f952d8ce18c7d24d5b96bd38c..1477881f1eaf092130db58f3ad072842ad4aca6e 100644 GIT binary patch delta 9967 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 bWQq6$RE7i4Ae4N-ga9+~muy%6bHo1uU!$S< delta 20592 zcmc&+3v?7!n$8W-CTRjeh$bNq0)%t~k`TZI5g|fCc(qzYCW6{_x+|T=PIu@oLLf?s z4_0wd$A16?L=Y6j(NSvAQODQr>avQv>||t}Gn_fI>bN^+MxF8O{r*b2n()+g zwTDw5w;t*H-~V<0|G&3t>yAMm{C-fzp#ROzdj8mzE1t_(lGzeUOG~Tjj0U^Bnp)N6 zjaIcqLVh(GtJ1WpwW|W*+ODqf)HSWOHU5sS4lS^5>dL^h>gwvXoi$a>Rh_}k$-!_; z^M*o`=e2iq2AZo{BU;24iKu z&18jrs`00+uyB;gE6N1AdFVDVi3Vj)w~wCs>?5L)vWATdG{`<(@-QK0E2D25w%*Pm z<K~bU@Vd%RvNo=t`S0^FGe)lIMfRp zbttTI1K>sp=IGLK8oyzi%D_meAv@PNdSQtOSl!Fs(`@UM9YWzKpYFpThf2@}OK6U+ zRu!*oxCE~I(UOOKMl-~6Pw$SJ?NHHcfJV$4X`i^Ij}kXgQ|^qwO?@NdG1|&&<52El zA<8KH$~b!W$>Fs9;){fzp1Zi%-f^n*#l;(CM{DyY+Sd{0mbdcW5>eWm-{OSMC|!Ux z^m+a$Te~$T6kI3jqv&j%1Z{`}|LTs;n4;h`Q$q9FPPHK#jYO4O<(U!#Xt;@IgE4B~D~03od=3`QT9M+~&3i9+GZmj5g5fS?5J0tp_EKjQOv5;&bDud3ah z-mrglOpPk{<4K5SZvEV*2G6_&io#~!EiWk>0QUi+wtIo14%yF(@`w$S;BYw7%hQJr z${d`TnK?{ZYK$nJnl37-VazybKvTwy3~Z54C6U)>W3^D}nK1_gu%%S>xRo}Q`cu{; zd`8LG>XNwbC_j>8RVo3j4O`LLZo3YMrN+Loe;FjU(4GmUPIT(ZK+i03(L%>3TqN)P zc|wVOehl-GN|%*)>)X)tLx6_?j{tT_NYP~M=*<;C&{j%!ZFIJP0;s+61d*#weiLQD%(lBa|Rn(6)vG8Okp0Sh&?8E;uO)rx*UpLGDnA)TpTO% z)Q2cJm7D<`#ut}l^)e)d`f@skTs~=z&Ln)#4Egz_K88FBd88-BrTXWR=V}wa_q_;0HPgBNzFh>4QXCmHMP&7NM~=1tLhr$WO~@gx6;0vu?0_q zw3&d*0c{d`iKPFmDYDPy^6WFUMgOVn5P?gtf;<~uU@lDf6_c5#4SuG=CbgKK6i zH0{gMUk)GQj*k;+zt=_^%StHlL29oUpUwEi5OZRL1inAFC$`g&Ii)k&A$Ay;8QrmZ z|1C}z0pf9<=9H(tkT(|VP__1mUwMi=b0%KK-hsUZ8^?3_8=mwJ%a(?kg{*aIL0|75 z9l-rp04WF?cNkyIA>o99m_h3!L|2yU94j&F2jdPqeJg0%FR!J<;X)Zy8a_9uvmr7M z;Xl~#$5waBEbIvAV}}=4SOxAdx%B0pz8Wp*n~A=2WZzsLP7}k$V0pM*NFl9^($pJE zTTE@RKPxz5%%3+*$n0-fL$iaWSVqq_xa{>TDt+B>YsxY(=*Uqz*m!$F%>h-0nA({T zC}hYhZNZQl_I9YrRgJi23_WF`V#EBPeoS`!{rE2{)hKHUrA!UQ zKBA%X^6Yi9ZyOujc^63EzWv&nqLqGm?R3#bLzj&$_$Lr>8~{Rl>p(aiPfg33LS<Ms_~D@d_sIe6I-T~{1(0c4zNxFPvkK6m~scMwNX#YSSPsJTPdak zEfw~%@hJUY%ZvJTR+k_PYH+j63<5D;IJ2Eo>2hfsta{J*^19)|WYP&qgX#GG2Q9c1 z*ATS)RKCJ(FH^pvhgN*){BQKO9q=34d3|0c0toFw3AAeVNIG_Xmc2xLO@F<9{P=eC z&#`wu+heo)3U|M@Kae_3JvSUi{rpCoSM*dPaO3moI-=a~Gi>;2om2GCb>8QMPR`bR zIr6gB+4hMWg^Z1@v-N($9x9by8zxyXx88k~d%@iL#U6M4k_I#5>VfD-$R{l8X$9M1o@Bgo0wUM}cnSb8DK@MhQj6Pm9U57tX>Ofug zN!n+dkmHLfW>${rRW;nvJi%*|rnoC#^0^L zDLQb;BPpJ;;4B+PSvL)}>lIO#iQcmS*2tI+CYt%qV}Smc^}BkemzH;z>DGgBwPB9% zAnaEgtd5Eg==JV7Iy0ZS%am}WX!>|bH|L=yV|i336PpY=&r)TWOP;kwx$PjMpAVQx zf4F_5>B-m~%m8D1@Zen8GU=6PNzsNgDuZ;g(1t4dY;CEiGe)c%FPx@N03mfWr>8fT ztD}yde0wKL)p)WeSI9lRuia9^)poa8X;=Wp#6XV*co47<*Jd){^h&fY2XGaIH37ru zO%CzM0|2;xv*HGIw|IPt5;P@kceXhZ+;MC9%+n}=mMzJct2E5>G%i@&;AwC#GY7>( zVL7B|rVw>Bdi`iI9Ww(hUVo2cFqk=nK9m<7^r!WkO|3xiq->-6_1WgyA2=v?d%v&S z9p)SPx0MMWVgYks8d87dDgcL`%qk|XpH3hbV#VMb-4jqXPfU%)k>Q!^GJrEh;z~ZoyZ@|?`MF1)o9!p7NUX< z|IOsxZ7r1?4k8{ckBHW_!2n;4XFcLmB+>< zC9{IwxBW!&mNmPvzh?KVQU3_cvEpy`66|CLuHIJ+@bw+2M=ia3Pl=ep-Zy>IV}0KD z;HIz{An@$Raf_+kP?&1~JU7A_CO8v*ZYi$GK@T*1IG^NEYWIeFmx}bIY4rLnh4kVN za~zkADT^svC}VT6e3_+ubLmue*sSAc^3VxN%?rhT>e*bV{}O^*hM{tdJQAnpn7jLV zp6_J2Fx>e1Ob>m$dHU3LbR7g(dgK9NHvue-O4+n6))&$G`wB!2tIad_{Y-pr1n$ot zGOmo71gd_67Ca;G^zn4c)x%Cr=EAwO_s6xScN~L9#sm1zCdihSAtC;3xjadRCY_S< z59{|H8~aJB*|MdeLQ-tb$6UAJGR_H*IFgQUS!fm)D`?7Ao9oU!6xe#BS@*ceE++Kj z!SRLy<1bs6V`bOUGm91RIG$lO zXvJ^w(;whk2yg_z>byv{TyWrKR?2FC=pY&isUCCARJeQYIf&m{31AA5!?K1&)wZY_ zYp0bDXWJV@1&r+ve<1RqC|nGWMOH_BDij<$8kEmz^NxZXrj4m&dW-3W9ZMXUpgN1P zcGeVFdc~~b(PuD6XxYw2(>%Zk1>Go60i_cymcS~s`t=Z&*Ie?kfjV6_m2+kAp$8v% zRTR@}j~sURKuaa9+f~9uGe=~AqlUFOM?h}UNIPRXX=amA`efIgdK-GQlJFE+P`s!_ z3$t^K{f~|l4whaq9ov1V3F7136kWlX+%DnoV^7SiZCDDyy3h@_`T-m#ufc$ZKnwiz z_MT}W{$2cHs`whC>5r{(3;{ud>Cj^^z#ax5U|n(Q(nlPl3HQ?~z(VhxY2Z zY*)-xPRLGx-<8z3ufl0cLQpE<78RknN>X=9(2&}_UXCM zhJ;lIrh5&oe|$=A0Cxtn-T+LGV*l)Q8-4ZoE}fGluI;hjaOu(keq{o(KpOLz^I#?# z3pz>$022eh6dco{3GpR6!t-3#nKR(G+YuFPpt1Ycn4Y_s9^HSn&JK^KBlg_GB((_~ zW-VYgBW85TBPkBqQiYsT-oXczIxRSGO1YouYH&?Q(y;?}pwT`Rxkw*@e+8Y+FVN=%arL66Ec?|*gK9CfKi`N6$H zzY~K6<1EeNy~MpUJu*yX!b!aN7Hl{-7f#-}2sUWOn4fGGC0K?~W&!2{P_VTqRPLgq zPupB3{mjUCra0YkH~4c8O?tN3Oc9wRBuT+%)^ScuXG2F^l{& zf0_b(+h~09Y*~Ull^;TCmOs1?17UBp$v$y*IupN`0kZC;8xCzXwG4hPL53VmgP`QG z=u8~yEx&K3D~!B^Wnxu|M$y0*_Hi50x)-qdB&xox@tPojGuhFWy?Z=pc4Djh!DEz1s-&sV2xi!b`^p$DG- zFDGjcuN6K)x4tmGi28WL?{u$@hRmAHkL6`qAbItLiMcz#Lg=94hDr8DnBTlm6aw3l zv}ApLE7n^{`Pls}?o5xg4Az;+^t&F8+B}Ywc!T zeITY&e!d^R0n;C*r7wOXc9QZ^b-_zuBzux#jG!5(Trj$pcD|ISn|oZqVy;86V4%KH zRf`7IF4fa3p`e0QnSSrCDTpylDcvrA+)Qki;~Gao93$^QuV4n}(EY8`ZNq1O7QH;n z41uk#9|Lugu3nF3-SEq61F^g_7+yjpR=yeZ-pg0&tlH3_?`N|fmWB0gvitEeu#F)B zO_M7fEWUQx?q9+)4G}`y1*pU$?0+${D_e2xVZe3(e%4a${t~tXJTEC9c7lFa(}|yt z6SH_1PU$PZa88m`^=)5DK`2)H>c6GW#=Pt{(*$&H<^^z5!LVQLHb1_B$b+{C%g;fn zQ7vKNbrUtcQK%zSKd|}eV-hZ#`o71h%NM|DdKo_$Q&dS^64Tij}vM6W18W$TN z$rb1SoiXoyMMn2q^Lj}>08Uxu9Xn&UgwTzXZuvna5=ZXQxlf)h<7%mZiIzqtOj0ak zurX=kJy(J5fbr>(qF!#zl%g|Vgl18*Z-J{xAdn|6Y*0uVft;|OWpB!STKRTyMLS62 zbq#iV`@z5`0hi&%Ptby_mHD=BSCek;w{MS`_y3q=9}yo=0BV4vdFV}Nyl zF;w%;ZDJc4?>uNm&&+1*#y9cwrFw0)9VUzfXcklXt?)M$e diff --git a/lib/botocore/data/logs/2014-03-28/examples-1.json b/lib/botocore/data/logs/2014-03-28/examples-1.json deleted file mode 100644 index 0ea7e3b..0000000 --- a/lib/botocore/data/logs/2014-03-28/examples-1.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0", - "examples": { - } -} diff --git a/lib/botocore/data/logs/2014-03-28/paginators-1.json b/lib/botocore/data/logs/2014-03-28/paginators-1.json deleted file mode 100644 index 57449c5..0000000 --- a/lib/botocore/data/logs/2014-03-28/paginators-1.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "pagination": { - "DescribeDestinations": { - "input_token": "nextToken", - "output_token": "nextToken", - "limit_key": "limit", - "result_key": "destinations" - }, - "DescribeLogGroups": { - "input_token": "nextToken", - "output_token": "nextToken", - "limit_key": "limit", - "result_key": "logGroups" - }, - "DescribeLogStreams": { - "input_token": "nextToken", - "output_token": "nextToken", - "limit_key": "limit", - "result_key": "logStreams" - }, - "DescribeMetricFilters": { - "input_token": "nextToken", - "output_token": "nextToken", - "limit_key": "limit", - "result_key": "metricFilters" - }, - "DescribeSubscriptionFilters": { - "input_token": "nextToken", - "output_token": "nextToken", - "limit_key": "limit", - "result_key": "subscriptionFilters" - }, - "FilterLogEvents": { - "input_token": "nextToken", - "output_token": "nextToken", - "limit_key": "limit", - "result_key": [ - "events", - "searchedLogStreams" - ] - } - } -} diff --git a/lib/botocore/data/logs/2014-03-28/service-2.json b/lib/botocore/data/logs/2014-03-28/service-2.json deleted file mode 100644 index 1a47835..0000000 --- a/lib/botocore/data/logs/2014-03-28/service-2.json +++ /dev/null @@ -1,2003 +0,0 @@ -{ - "version":"2.0", - "metadata":{ - "apiVersion":"2014-03-28", - "endpointPrefix":"logs", - "jsonVersion":"1.1", - "protocol":"json", - "serviceFullName":"Amazon CloudWatch Logs", - "serviceId":"CloudWatch Logs", - "signatureVersion":"v4", - "targetPrefix":"Logs_20140328", - "uid":"logs-2014-03-28" - }, - "operations":{ - "AssociateKmsKey":{ - "name":"AssociateKmsKey", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"AssociateKmsKeyRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Associates the specified AWS Key Management Service (AWS KMS) customer master key (CMK) with the specified log group.

Associating an AWS KMS CMK with a log group overrides any existing associations between the log group and a CMK. After a CMK is associated with a log group, all newly ingested data for the log group is encrypted using the CMK. This association is stored as long as the data encrypted with the CMK is still within Amazon CloudWatch Logs. This enables Amazon CloudWatch Logs to decrypt this data whenever it is requested.

Note that it can take up to 5 minutes for this operation to take effect.

If you attempt to associate a CMK with a log group but the CMK does not exist or the CMK is disabled, you will receive an InvalidParameterException error.

" - }, - "CancelExportTask":{ - "name":"CancelExportTask", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"CancelExportTaskRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"InvalidOperationException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Cancels the specified export task.

The task must be in the PENDING or RUNNING state.

" - }, - "CreateExportTask":{ - "name":"CreateExportTask", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"CreateExportTaskRequest"}, - "output":{"shape":"CreateExportTaskResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"LimitExceededException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ResourceAlreadyExistsException"} - ], - "documentation":"

Creates an export task, which allows you to efficiently export data from a log group to an Amazon S3 bucket.

This is an asynchronous call. If all the required information is provided, this operation initiates an export task and responds with the ID of the task. After the task has started, you can use DescribeExportTasks to get the status of the export task. Each account can only have one active (RUNNING or PENDING) export task at a time. To cancel an export task, use CancelExportTask.

You can export logs from multiple log groups or multiple time ranges to the same S3 bucket. To separate out log data for each export task, you can specify a prefix to be used as the Amazon S3 key prefix for all exported objects.

" - }, - "CreateLogGroup":{ - "name":"CreateLogGroup", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"CreateLogGroupRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceAlreadyExistsException"}, - {"shape":"LimitExceededException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Creates a log group with the specified name.

You can create up to 5000 log groups per account.

You must use the following guidelines when naming a log group:

  • Log group names must be unique within a region for an AWS account.

  • Log group names can be between 1 and 512 characters long.

  • Log group names consist of the following characters: a-z, A-Z, 0-9, '_' (underscore), '-' (hyphen), '/' (forward slash), and '.' (period).

If you associate a AWS Key Management Service (AWS KMS) customer master key (CMK) with the log group, ingested data is encrypted using the CMK. This association is stored as long as the data encrypted with the CMK is still within Amazon CloudWatch Logs. This enables Amazon CloudWatch Logs to decrypt this data whenever it is requested.

If you attempt to associate a CMK with the log group but the CMK does not exist or the CMK is disabled, you will receive an InvalidParameterException error.

" - }, - "CreateLogStream":{ - "name":"CreateLogStream", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"CreateLogStreamRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceAlreadyExistsException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Creates a log stream for the specified log group.

There is no limit on the number of log streams that you can create for a log group.

You must use the following guidelines when naming a log stream:

  • Log stream names must be unique within the log group.

  • Log stream names can be between 1 and 512 characters long.

  • The ':' (colon) and '*' (asterisk) characters are not allowed.

" - }, - "DeleteDestination":{ - "name":"DeleteDestination", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DeleteDestinationRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Deletes the specified destination, and eventually disables all the subscription filters that publish to it. This operation does not delete the physical resource encapsulated by the destination.

" - }, - "DeleteLogGroup":{ - "name":"DeleteLogGroup", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DeleteLogGroupRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Deletes the specified log group and permanently deletes all the archived log events associated with the log group.

" - }, - "DeleteLogStream":{ - "name":"DeleteLogStream", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DeleteLogStreamRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Deletes the specified log stream and permanently deletes all the archived log events associated with the log stream.

" - }, - "DeleteMetricFilter":{ - "name":"DeleteMetricFilter", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DeleteMetricFilterRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Deletes the specified metric filter.

" - }, - "DeleteResourcePolicy":{ - "name":"DeleteResourcePolicy", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DeleteResourcePolicyRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Deletes a resource policy from this account. This revokes the access of the identities in that policy to put log events to this account.

" - }, - "DeleteRetentionPolicy":{ - "name":"DeleteRetentionPolicy", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DeleteRetentionPolicyRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Deletes the specified retention policy.

Log events do not expire if they belong to log groups without a retention policy.

" - }, - "DeleteSubscriptionFilter":{ - "name":"DeleteSubscriptionFilter", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DeleteSubscriptionFilterRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Deletes the specified subscription filter.

" - }, - "DescribeDestinations":{ - "name":"DescribeDestinations", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DescribeDestinationsRequest"}, - "output":{"shape":"DescribeDestinationsResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists all your destinations. The results are ASCII-sorted by destination name.

" - }, - "DescribeExportTasks":{ - "name":"DescribeExportTasks", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DescribeExportTasksRequest"}, - "output":{"shape":"DescribeExportTasksResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists the specified export tasks. You can list all your export tasks or filter the results based on task ID or task status.

" - }, - "DescribeLogGroups":{ - "name":"DescribeLogGroups", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DescribeLogGroupsRequest"}, - "output":{"shape":"DescribeLogGroupsResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists the specified log groups. You can list all your log groups or filter the results by prefix. The results are ASCII-sorted by log group name.

" - }, - "DescribeLogStreams":{ - "name":"DescribeLogStreams", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DescribeLogStreamsRequest"}, - "output":{"shape":"DescribeLogStreamsResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists the log streams for the specified log group. You can list all the log streams or filter the results by prefix. You can also control how the results are ordered.

This operation has a limit of five transactions per second, after which transactions are throttled.

" - }, - "DescribeMetricFilters":{ - "name":"DescribeMetricFilters", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DescribeMetricFiltersRequest"}, - "output":{"shape":"DescribeMetricFiltersResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists the specified metric filters. You can list all the metric filters or filter the results by log name, prefix, metric name, or metric namespace. The results are ASCII-sorted by filter name.

" - }, - "DescribeResourcePolicies":{ - "name":"DescribeResourcePolicies", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DescribeResourcePoliciesRequest"}, - "output":{"shape":"DescribeResourcePoliciesResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists the resource policies in this account.

" - }, - "DescribeSubscriptionFilters":{ - "name":"DescribeSubscriptionFilters", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DescribeSubscriptionFiltersRequest"}, - "output":{"shape":"DescribeSubscriptionFiltersResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists the subscription filters for the specified log group. You can list all the subscription filters or filter the results by prefix. The results are ASCII-sorted by filter name.

" - }, - "DisassociateKmsKey":{ - "name":"DisassociateKmsKey", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"DisassociateKmsKeyRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Disassociates the associated AWS Key Management Service (AWS KMS) customer master key (CMK) from the specified log group.

After the AWS KMS CMK is disassociated from the log group, AWS CloudWatch Logs stops encrypting newly ingested data for the log group. All previously ingested data remains encrypted, and AWS CloudWatch Logs requires permissions for the CMK whenever the encrypted data is requested.

Note that it can take up to 5 minutes for this operation to take effect.

" - }, - "FilterLogEvents":{ - "name":"FilterLogEvents", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"FilterLogEventsRequest"}, - "output":{"shape":"FilterLogEventsResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists log events from the specified log group. You can list all the log events or filter the results using a filter pattern, a time range, and the name of the log stream.

By default, this operation returns as many log events as can fit in 1 MB (up to 10,000 log events), or all the events found within the time range that you specify. If the results include a token, then there are more log events available, and you can get additional results by specifying the token in a subsequent call.

" - }, - "GetLogEvents":{ - "name":"GetLogEvents", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"GetLogEventsRequest"}, - "output":{"shape":"GetLogEventsResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists log events from the specified log stream. You can list all the log events or filter using a time range.

By default, this operation returns as many log events as can fit in a response size of 1MB (up to 10,000 log events). You can get additional log events by specifying one of the tokens in a subsequent call.

" - }, - "ListTagsLogGroup":{ - "name":"ListTagsLogGroup", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"ListTagsLogGroupRequest"}, - "output":{"shape":"ListTagsLogGroupResponse"}, - "errors":[ - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Lists the tags for the specified log group.

" - }, - "PutDestination":{ - "name":"PutDestination", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"PutDestinationRequest"}, - "output":{"shape":"PutDestinationResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Creates or updates a destination. A destination encapsulates a physical resource (such as an Amazon Kinesis stream) and enables you to subscribe to a real-time stream of log events for a different account, ingested using PutLogEvents. Currently, the only supported physical resource is a Kinesis stream belonging to the same account as the destination.

Through an access policy, a destination controls what is written to its Kinesis stream. By default, PutDestination does not set any access policy with the destination, which means a cross-account user cannot call PutSubscriptionFilter against this destination. To enable this, the destination owner must call PutDestinationPolicy after PutDestination.

" - }, - "PutDestinationPolicy":{ - "name":"PutDestinationPolicy", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"PutDestinationPolicyRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Creates or updates an access policy associated with an existing destination. An access policy is an IAM policy document that is used to authorize claims to register a subscription filter against a given destination.

" - }, - "PutLogEvents":{ - "name":"PutLogEvents", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"PutLogEventsRequest"}, - "output":{"shape":"PutLogEventsResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"InvalidSequenceTokenException"}, - {"shape":"DataAlreadyAcceptedException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Uploads a batch of log events to the specified log stream.

You must include the sequence token obtained from the response of the previous call. An upload in a newly created log stream does not require a sequence token. You can also get the sequence token using DescribeLogStreams. If you call PutLogEvents twice within a narrow time period using the same value for sequenceToken, both calls may be successful, or one may be rejected.

The batch of events must satisfy the following constraints:

  • The maximum batch size is 1,048,576 bytes, and this size is calculated as the sum of all event messages in UTF-8, plus 26 bytes for each log event.

  • None of the log events in the batch can be more than 2 hours in the future.

  • None of the log events in the batch can be older than 14 days or the retention period of the log group.

  • The log events in the batch must be in chronological ordered by their time stamp (the time the event occurred, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC).

  • The maximum number of log events in a batch is 10,000.

  • A batch of log events in a single request cannot span more than 24 hours. Otherwise, the operation fails.

" - }, - "PutMetricFilter":{ - "name":"PutMetricFilter", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"PutMetricFilterRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"LimitExceededException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Creates or updates a metric filter and associates it with the specified log group. Metric filters allow you to configure rules to extract metric data from log events ingested through PutLogEvents.

The maximum number of metric filters that can be associated with a log group is 100.

" - }, - "PutResourcePolicy":{ - "name":"PutResourcePolicy", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"PutResourcePolicyRequest"}, - "output":{"shape":"PutResourcePolicyResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"LimitExceededException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Creates or updates a resource policy allowing other AWS services to put log events to this account, such as Amazon Route 53. An account can have up to 50 resource policies per region.

" - }, - "PutRetentionPolicy":{ - "name":"PutRetentionPolicy", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"PutRetentionPolicyRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Sets the retention of the specified log group. A retention policy allows you to configure the number of days for which to retain log events in the specified log group.

" - }, - "PutSubscriptionFilter":{ - "name":"PutSubscriptionFilter", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"PutSubscriptionFilterRequest"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ResourceNotFoundException"}, - {"shape":"OperationAbortedException"}, - {"shape":"LimitExceededException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Creates or updates a subscription filter and associates it with the specified log group. Subscription filters allow you to subscribe to a real-time stream of log events ingested through PutLogEvents and have them delivered to a specific destination. Currently, the supported destinations are:

  • An Amazon Kinesis stream belonging to the same account as the subscription filter, for same-account delivery.

  • A logical destination that belongs to a different account, for cross-account delivery.

  • An Amazon Kinesis Firehose delivery stream that belongs to the same account as the subscription filter, for same-account delivery.

  • An AWS Lambda function that belongs to the same account as the subscription filter, for same-account delivery.

There can only be one subscription filter associated with a log group. If you are updating an existing filter, you must specify the correct name in filterName. Otherwise, the call fails because you cannot associate a second filter with a log group.

" - }, - "TagLogGroup":{ - "name":"TagLogGroup", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"TagLogGroupRequest"}, - "errors":[ - {"shape":"ResourceNotFoundException"}, - {"shape":"InvalidParameterException"} - ], - "documentation":"

Adds or updates the specified tags for the specified log group.

To list the tags for a log group, use ListTagsLogGroup. To remove tags, use UntagLogGroup.

For more information about tags, see Tag Log Groups in Amazon CloudWatch Logs in the Amazon CloudWatch Logs User Guide.

" - }, - "TestMetricFilter":{ - "name":"TestMetricFilter", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"TestMetricFilterRequest"}, - "output":{"shape":"TestMetricFilterResponse"}, - "errors":[ - {"shape":"InvalidParameterException"}, - {"shape":"ServiceUnavailableException"} - ], - "documentation":"

Tests the filter pattern of a metric filter against a sample of log event messages. You can use this operation to validate the correctness of a metric filter pattern.

" - }, - "UntagLogGroup":{ - "name":"UntagLogGroup", - "http":{ - "method":"POST", - "requestUri":"/" - }, - "input":{"shape":"UntagLogGroupRequest"}, - "errors":[ - {"shape":"ResourceNotFoundException"} - ], - "documentation":"

Removes the specified tags from the specified log group.

To list the tags for a log group, use ListTagsLogGroup. To add tags, use UntagLogGroup.

" - } - }, - "shapes":{ - "AccessPolicy":{ - "type":"string", - "min":1 - }, - "Arn":{"type":"string"}, - "AssociateKmsKeyRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "kmsKeyId" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "kmsKeyId":{ - "shape":"KmsKeyId", - "documentation":"

The Amazon Resource Name (ARN) of the CMK to use when encrypting log data. For more information, see Amazon Resource Names - AWS Key Management Service (AWS KMS).

" - } - } - }, - "CancelExportTaskRequest":{ - "type":"structure", - "required":["taskId"], - "members":{ - "taskId":{ - "shape":"ExportTaskId", - "documentation":"

The ID of the export task.

" - } - } - }, - "CreateExportTaskRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "from", - "to", - "destination" - ], - "members":{ - "taskName":{ - "shape":"ExportTaskName", - "documentation":"

The name of the export task.

" - }, - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "logStreamNamePrefix":{ - "shape":"LogStreamName", - "documentation":"

Export only log streams that match the provided prefix. If you don't specify a value, no prefix filter is applied.

" - }, - "from":{ - "shape":"Timestamp", - "documentation":"

The start time of the range for the request, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp earlier than this time are not exported.

" - }, - "to":{ - "shape":"Timestamp", - "documentation":"

The end time of the range for the request, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not exported.

" - }, - "destination":{ - "shape":"ExportDestinationBucket", - "documentation":"

The name of S3 bucket for the exported log data. The bucket must be in the same AWS region.

" - }, - "destinationPrefix":{ - "shape":"ExportDestinationPrefix", - "documentation":"

The prefix used as the start of the key for every object exported. If you don't specify a value, the default is exportedlogs.

" - } - } - }, - "CreateExportTaskResponse":{ - "type":"structure", - "members":{ - "taskId":{ - "shape":"ExportTaskId", - "documentation":"

The ID of the export task.

" - } - } - }, - "CreateLogGroupRequest":{ - "type":"structure", - "required":["logGroupName"], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "kmsKeyId":{ - "shape":"KmsKeyId", - "documentation":"

The Amazon Resource Name (ARN) of the CMK to use when encrypting log data. For more information, see Amazon Resource Names - AWS Key Management Service (AWS KMS).

" - }, - "tags":{ - "shape":"Tags", - "documentation":"

The key-value pairs to use for the tags.

" - } - } - }, - "CreateLogStreamRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "logStreamName" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "logStreamName":{ - "shape":"LogStreamName", - "documentation":"

The name of the log stream.

" - } - } - }, - "DataAlreadyAcceptedException":{ - "type":"structure", - "members":{ - "expectedSequenceToken":{"shape":"SequenceToken"} - }, - "documentation":"

The event was already logged.

", - "exception":true - }, - "Days":{ - "type":"integer", - "documentation":"

The number of days to retain the log events in the specified log group. Possible values are: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, and 3653.

" - }, - "DefaultValue":{"type":"double"}, - "DeleteDestinationRequest":{ - "type":"structure", - "required":["destinationName"], - "members":{ - "destinationName":{ - "shape":"DestinationName", - "documentation":"

The name of the destination.

" - } - } - }, - "DeleteLogGroupRequest":{ - "type":"structure", - "required":["logGroupName"], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - } - } - }, - "DeleteLogStreamRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "logStreamName" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "logStreamName":{ - "shape":"LogStreamName", - "documentation":"

The name of the log stream.

" - } - } - }, - "DeleteMetricFilterRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "filterName" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "filterName":{ - "shape":"FilterName", - "documentation":"

The name of the metric filter.

" - } - } - }, - "DeleteResourcePolicyRequest":{ - "type":"structure", - "members":{ - "policyName":{ - "shape":"PolicyName", - "documentation":"

The name of the policy to be revoked. This parameter is required.

" - } - } - }, - "DeleteRetentionPolicyRequest":{ - "type":"structure", - "required":["logGroupName"], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - } - } - }, - "DeleteSubscriptionFilterRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "filterName" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "filterName":{ - "shape":"FilterName", - "documentation":"

The name of the subscription filter.

" - } - } - }, - "Descending":{"type":"boolean"}, - "DescribeDestinationsRequest":{ - "type":"structure", - "members":{ - "DestinationNamePrefix":{ - "shape":"DestinationName", - "documentation":"

The prefix to match. If you don't specify a value, no prefix filter is applied.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items to return. (You received this token from a previous call.)

" - }, - "limit":{ - "shape":"DescribeLimit", - "documentation":"

The maximum number of items returned. If you don't specify a value, the default is up to 50 items.

" - } - } - }, - "DescribeDestinationsResponse":{ - "type":"structure", - "members":{ - "destinations":{ - "shape":"Destinations", - "documentation":"

The destinations.

" - }, - "nextToken":{"shape":"NextToken"} - } - }, - "DescribeExportTasksRequest":{ - "type":"structure", - "members":{ - "taskId":{ - "shape":"ExportTaskId", - "documentation":"

The ID of the export task. Specifying a task ID filters the results to zero or one export tasks.

" - }, - "statusCode":{ - "shape":"ExportTaskStatusCode", - "documentation":"

The status code of the export task. Specifying a status code filters the results to zero or more export tasks.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items to return. (You received this token from a previous call.)

" - }, - "limit":{ - "shape":"DescribeLimit", - "documentation":"

The maximum number of items returned. If you don't specify a value, the default is up to 50 items.

" - } - } - }, - "DescribeExportTasksResponse":{ - "type":"structure", - "members":{ - "exportTasks":{ - "shape":"ExportTasks", - "documentation":"

The export tasks.

" - }, - "nextToken":{"shape":"NextToken"} - } - }, - "DescribeLimit":{ - "type":"integer", - "max":50, - "min":1 - }, - "DescribeLogGroupsRequest":{ - "type":"structure", - "members":{ - "logGroupNamePrefix":{ - "shape":"LogGroupName", - "documentation":"

The prefix to match.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items to return. (You received this token from a previous call.)

" - }, - "limit":{ - "shape":"DescribeLimit", - "documentation":"

The maximum number of items returned. If you don't specify a value, the default is up to 50 items.

" - } - } - }, - "DescribeLogGroupsResponse":{ - "type":"structure", - "members":{ - "logGroups":{ - "shape":"LogGroups", - "documentation":"

The log groups.

" - }, - "nextToken":{"shape":"NextToken"} - } - }, - "DescribeLogStreamsRequest":{ - "type":"structure", - "required":["logGroupName"], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "logStreamNamePrefix":{ - "shape":"LogStreamName", - "documentation":"

The prefix to match.

iIf orderBy is LastEventTime,you cannot specify this parameter.

" - }, - "orderBy":{ - "shape":"OrderBy", - "documentation":"

If the value is LogStreamName, the results are ordered by log stream name. If the value is LastEventTime, the results are ordered by the event time. The default value is LogStreamName.

If you order the results by event time, you cannot specify the logStreamNamePrefix parameter.

lastEventTimestamp represents the time of the most recent log event in the log stream in CloudWatch Logs. This number is expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. lastEventTimeStamp updates on an eventual consistency basis. It typically updates in less than an hour from ingestion, but may take longer in some rare situations.

" - }, - "descending":{ - "shape":"Descending", - "documentation":"

If the value is true, results are returned in descending order. If the value is to false, results are returned in ascending order. The default value is false.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items to return. (You received this token from a previous call.)

" - }, - "limit":{ - "shape":"DescribeLimit", - "documentation":"

The maximum number of items returned. If you don't specify a value, the default is up to 50 items.

" - } - } - }, - "DescribeLogStreamsResponse":{ - "type":"structure", - "members":{ - "logStreams":{ - "shape":"LogStreams", - "documentation":"

The log streams.

" - }, - "nextToken":{"shape":"NextToken"} - } - }, - "DescribeMetricFiltersRequest":{ - "type":"structure", - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "filterNamePrefix":{ - "shape":"FilterName", - "documentation":"

The prefix to match.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items to return. (You received this token from a previous call.)

" - }, - "limit":{ - "shape":"DescribeLimit", - "documentation":"

The maximum number of items returned. If you don't specify a value, the default is up to 50 items.

" - }, - "metricName":{"shape":"MetricName"}, - "metricNamespace":{ - "shape":"MetricNamespace", - "documentation":"

The namespace of the CloudWatch metric.

" - } - } - }, - "DescribeMetricFiltersResponse":{ - "type":"structure", - "members":{ - "metricFilters":{ - "shape":"MetricFilters", - "documentation":"

The metric filters.

" - }, - "nextToken":{"shape":"NextToken"} - } - }, - "DescribeResourcePoliciesRequest":{ - "type":"structure", - "members":{ - "nextToken":{"shape":"NextToken"}, - "limit":{ - "shape":"DescribeLimit", - "documentation":"

The maximum number of resource policies to be displayed with one call of this API.

" - } - } - }, - "DescribeResourcePoliciesResponse":{ - "type":"structure", - "members":{ - "resourcePolicies":{ - "shape":"ResourcePolicies", - "documentation":"

The resource policies that exist in this account.

" - }, - "nextToken":{"shape":"NextToken"} - } - }, - "DescribeSubscriptionFiltersRequest":{ - "type":"structure", - "required":["logGroupName"], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "filterNamePrefix":{ - "shape":"FilterName", - "documentation":"

The prefix to match. If you don't specify a value, no prefix filter is applied.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items to return. (You received this token from a previous call.)

" - }, - "limit":{ - "shape":"DescribeLimit", - "documentation":"

The maximum number of items returned. If you don't specify a value, the default is up to 50 items.

" - } - } - }, - "DescribeSubscriptionFiltersResponse":{ - "type":"structure", - "members":{ - "subscriptionFilters":{ - "shape":"SubscriptionFilters", - "documentation":"

The subscription filters.

" - }, - "nextToken":{"shape":"NextToken"} - } - }, - "Destination":{ - "type":"structure", - "members":{ - "destinationName":{ - "shape":"DestinationName", - "documentation":"

The name of the destination.

" - }, - "targetArn":{ - "shape":"TargetArn", - "documentation":"

The Amazon Resource Name (ARN) of the physical target to where the log events are delivered (for example, a Kinesis stream).

" - }, - "roleArn":{ - "shape":"RoleArn", - "documentation":"

A role for impersonation, used when delivering log events to the target.

" - }, - "accessPolicy":{ - "shape":"AccessPolicy", - "documentation":"

An IAM policy document that governs which AWS accounts can create subscription filters against this destination.

" - }, - "arn":{ - "shape":"Arn", - "documentation":"

The ARN of this destination.

" - }, - "creationTime":{ - "shape":"Timestamp", - "documentation":"

The creation time of the destination, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - } - }, - "documentation":"

Represents a cross-account destination that receives subscription log events.

" - }, - "DestinationArn":{ - "type":"string", - "min":1 - }, - "DestinationName":{ - "type":"string", - "max":512, - "min":1, - "pattern":"[^:*]*" - }, - "Destinations":{ - "type":"list", - "member":{"shape":"Destination"} - }, - "DisassociateKmsKeyRequest":{ - "type":"structure", - "required":["logGroupName"], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - } - } - }, - "Distribution":{ - "type":"string", - "documentation":"

The method used to distribute log data to the destination, which can be either random or grouped by log stream.

", - "enum":[ - "Random", - "ByLogStream" - ] - }, - "EventId":{"type":"string"}, - "EventMessage":{ - "type":"string", - "min":1 - }, - "EventNumber":{"type":"long"}, - "EventsLimit":{ - "type":"integer", - "max":10000, - "min":1 - }, - "ExportDestinationBucket":{ - "type":"string", - "max":512, - "min":1 - }, - "ExportDestinationPrefix":{"type":"string"}, - "ExportTask":{ - "type":"structure", - "members":{ - "taskId":{ - "shape":"ExportTaskId", - "documentation":"

The ID of the export task.

" - }, - "taskName":{ - "shape":"ExportTaskName", - "documentation":"

The name of the export task.

" - }, - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group from which logs data was exported.

" - }, - "from":{ - "shape":"Timestamp", - "documentation":"

The start time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp before this time are not exported.

" - }, - "to":{ - "shape":"Timestamp", - "documentation":"

The end time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not exported.

" - }, - "destination":{ - "shape":"ExportDestinationBucket", - "documentation":"

The name of Amazon S3 bucket to which the log data was exported.

" - }, - "destinationPrefix":{ - "shape":"ExportDestinationPrefix", - "documentation":"

The prefix that was used as the start of Amazon S3 key for every object exported.

" - }, - "status":{ - "shape":"ExportTaskStatus", - "documentation":"

The status of the export task.

" - }, - "executionInfo":{ - "shape":"ExportTaskExecutionInfo", - "documentation":"

Execution info about the export task.

" - } - }, - "documentation":"

Represents an export task.

" - }, - "ExportTaskExecutionInfo":{ - "type":"structure", - "members":{ - "creationTime":{ - "shape":"Timestamp", - "documentation":"

The creation time of the export task, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "completionTime":{ - "shape":"Timestamp", - "documentation":"

The completion time of the export task, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - } - }, - "documentation":"

Represents the status of an export task.

" - }, - "ExportTaskId":{ - "type":"string", - "max":512, - "min":1 - }, - "ExportTaskName":{ - "type":"string", - "max":512, - "min":1 - }, - "ExportTaskStatus":{ - "type":"structure", - "members":{ - "code":{ - "shape":"ExportTaskStatusCode", - "documentation":"

The status code of the export task.

" - }, - "message":{ - "shape":"ExportTaskStatusMessage", - "documentation":"

The status message related to the status code.

" - } - }, - "documentation":"

Represents the status of an export task.

" - }, - "ExportTaskStatusCode":{ - "type":"string", - "enum":[ - "CANCELLED", - "COMPLETED", - "FAILED", - "PENDING", - "PENDING_CANCEL", - "RUNNING" - ] - }, - "ExportTaskStatusMessage":{"type":"string"}, - "ExportTasks":{ - "type":"list", - "member":{"shape":"ExportTask"} - }, - "ExtractedValues":{ - "type":"map", - "key":{"shape":"Token"}, - "value":{"shape":"Value"} - }, - "FilterCount":{"type":"integer"}, - "FilterLogEventsRequest":{ - "type":"structure", - "required":["logGroupName"], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "logStreamNames":{ - "shape":"InputLogStreamNames", - "documentation":"

Optional list of log stream names.

" - }, - "startTime":{ - "shape":"Timestamp", - "documentation":"

The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp before this time are not returned.

" - }, - "endTime":{ - "shape":"Timestamp", - "documentation":"

The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not returned.

" - }, - "filterPattern":{ - "shape":"FilterPattern", - "documentation":"

The filter pattern to use. If not provided, all the events are matched.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of events to return. (You received this token from a previous call.)

" - }, - "limit":{ - "shape":"EventsLimit", - "documentation":"

The maximum number of events to return. The default is 10,000 events.

" - }, - "interleaved":{ - "shape":"Interleaved", - "documentation":"

If the value is true, the operation makes a best effort to provide responses that contain events from multiple log streams within the log group, interleaved in a single response. If the value is false, all the matched log events in the first log stream are searched first, then those in the next log stream, and so on. The default is false.

" - } - } - }, - "FilterLogEventsResponse":{ - "type":"structure", - "members":{ - "events":{ - "shape":"FilteredLogEvents", - "documentation":"

The matched events.

" - }, - "searchedLogStreams":{ - "shape":"SearchedLogStreams", - "documentation":"

Indicates which log streams have been searched and whether each has been searched completely.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token to use when requesting the next set of items. The token expires after 24 hours.

" - } - } - }, - "FilterName":{ - "type":"string", - "max":512, - "min":1, - "pattern":"[^:*]*" - }, - "FilterPattern":{ - "type":"string", - "documentation":"

A symbolic description of how CloudWatch Logs should interpret the data in each log event. For example, a log event may contain time stamps, IP addresses, strings, and so on. You use the filter pattern to specify what to look for in the log event message.

", - "max":1024, - "min":0 - }, - "FilteredLogEvent":{ - "type":"structure", - "members":{ - "logStreamName":{ - "shape":"LogStreamName", - "documentation":"

The name of the log stream this event belongs to.

" - }, - "timestamp":{ - "shape":"Timestamp", - "documentation":"

The time the event occurred, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "message":{ - "shape":"EventMessage", - "documentation":"

The data contained in the log event.

" - }, - "ingestionTime":{ - "shape":"Timestamp", - "documentation":"

The time the event was ingested, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "eventId":{ - "shape":"EventId", - "documentation":"

The ID of the event.

" - } - }, - "documentation":"

Represents a matched event.

" - }, - "FilteredLogEvents":{ - "type":"list", - "member":{"shape":"FilteredLogEvent"} - }, - "GetLogEventsRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "logStreamName" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "logStreamName":{ - "shape":"LogStreamName", - "documentation":"

The name of the log stream.

" - }, - "startTime":{ - "shape":"Timestamp", - "documentation":"

The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp earlier than this time are not included.

" - }, - "endTime":{ - "shape":"Timestamp", - "documentation":"

The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a time stamp later than this time are not included.

" - }, - "nextToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items to return. (You received this token from a previous call.)

" - }, - "limit":{ - "shape":"EventsLimit", - "documentation":"

The maximum number of log events returned. If you don't specify a value, the maximum is as many log events as can fit in a response size of 1 MB, up to 10,000 log events.

" - }, - "startFromHead":{ - "shape":"StartFromHead", - "documentation":"

If the value is true, the earliest log events are returned first. If the value is false, the latest log events are returned first. The default value is false.

" - } - } - }, - "GetLogEventsResponse":{ - "type":"structure", - "members":{ - "events":{ - "shape":"OutputLogEvents", - "documentation":"

The events.

" - }, - "nextForwardToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items in the forward direction. The token expires after 24 hours.

" - }, - "nextBackwardToken":{ - "shape":"NextToken", - "documentation":"

The token for the next set of items in the backward direction. The token expires after 24 hours.

" - } - } - }, - "InputLogEvent":{ - "type":"structure", - "required":[ - "timestamp", - "message" - ], - "members":{ - "timestamp":{ - "shape":"Timestamp", - "documentation":"

The time the event occurred, expressed as the number of milliseconds fter Jan 1, 1970 00:00:00 UTC.

" - }, - "message":{ - "shape":"EventMessage", - "documentation":"

The raw event message.

" - } - }, - "documentation":"

Represents a log event, which is a record of activity that was recorded by the application or resource being monitored.

" - }, - "InputLogEvents":{ - "type":"list", - "member":{"shape":"InputLogEvent"}, - "max":10000, - "min":1 - }, - "InputLogStreamNames":{ - "type":"list", - "member":{"shape":"LogStreamName"}, - "max":100, - "min":1 - }, - "Interleaved":{"type":"boolean"}, - "InvalidOperationException":{ - "type":"structure", - "members":{ - }, - "documentation":"

The operation is not valid on the specified resource.

", - "exception":true - }, - "InvalidParameterException":{ - "type":"structure", - "members":{ - }, - "documentation":"

A parameter is specified incorrectly.

", - "exception":true - }, - "InvalidSequenceTokenException":{ - "type":"structure", - "members":{ - "expectedSequenceToken":{"shape":"SequenceToken"} - }, - "documentation":"

The sequence token is not valid.

", - "exception":true - }, - "KmsKeyId":{ - "type":"string", - "max":256 - }, - "LimitExceededException":{ - "type":"structure", - "members":{ - }, - "documentation":"

You have reached the maximum number of resources that can be created.

", - "exception":true - }, - "ListTagsLogGroupRequest":{ - "type":"structure", - "required":["logGroupName"], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - } - } - }, - "ListTagsLogGroupResponse":{ - "type":"structure", - "members":{ - "tags":{ - "shape":"Tags", - "documentation":"

The tags for the log group.

" - } - } - }, - "LogEventIndex":{"type":"integer"}, - "LogGroup":{ - "type":"structure", - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "creationTime":{ - "shape":"Timestamp", - "documentation":"

The creation time of the log group, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "retentionInDays":{"shape":"Days"}, - "metricFilterCount":{ - "shape":"FilterCount", - "documentation":"

The number of metric filters.

" - }, - "arn":{ - "shape":"Arn", - "documentation":"

The Amazon Resource Name (ARN) of the log group.

" - }, - "storedBytes":{ - "shape":"StoredBytes", - "documentation":"

The number of bytes stored.

" - }, - "kmsKeyId":{ - "shape":"KmsKeyId", - "documentation":"

The Amazon Resource Name (ARN) of the CMK to use when encrypting log data.

" - } - }, - "documentation":"

Represents a log group.

" - }, - "LogGroupName":{ - "type":"string", - "max":512, - "min":1, - "pattern":"[\\.\\-_/#A-Za-z0-9]+" - }, - "LogGroups":{ - "type":"list", - "member":{"shape":"LogGroup"} - }, - "LogStream":{ - "type":"structure", - "members":{ - "logStreamName":{ - "shape":"LogStreamName", - "documentation":"

The name of the log stream.

" - }, - "creationTime":{ - "shape":"Timestamp", - "documentation":"

The creation time of the stream, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "firstEventTimestamp":{ - "shape":"Timestamp", - "documentation":"

The time of the first event, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "lastEventTimestamp":{ - "shape":"Timestamp", - "documentation":"

the time of the most recent log event in the log stream in CloudWatch Logs. This number is expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. lastEventTime updates on an eventual consistency basis. It typically updates in less than an hour from ingestion, but may take longer in some rare situations.

" - }, - "lastIngestionTime":{ - "shape":"Timestamp", - "documentation":"

The ingestion time, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "uploadSequenceToken":{ - "shape":"SequenceToken", - "documentation":"

The sequence token.

" - }, - "arn":{ - "shape":"Arn", - "documentation":"

The Amazon Resource Name (ARN) of the log stream.

" - }, - "storedBytes":{ - "shape":"StoredBytes", - "documentation":"

The number of bytes stored.

" - } - }, - "documentation":"

Represents a log stream, which is a sequence of log events from a single emitter of logs.

" - }, - "LogStreamName":{ - "type":"string", - "max":512, - "min":1, - "pattern":"[^:*]*" - }, - "LogStreamSearchedCompletely":{"type":"boolean"}, - "LogStreams":{ - "type":"list", - "member":{"shape":"LogStream"} - }, - "MetricFilter":{ - "type":"structure", - "members":{ - "filterName":{ - "shape":"FilterName", - "documentation":"

The name of the metric filter.

" - }, - "filterPattern":{"shape":"FilterPattern"}, - "metricTransformations":{ - "shape":"MetricTransformations", - "documentation":"

The metric transformations.

" - }, - "creationTime":{ - "shape":"Timestamp", - "documentation":"

The creation time of the metric filter, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - } - }, - "documentation":"

Metric filters express how CloudWatch Logs would extract metric observations from ingested log events and transform them into metric data in a CloudWatch metric.

" - }, - "MetricFilterMatchRecord":{ - "type":"structure", - "members":{ - "eventNumber":{ - "shape":"EventNumber", - "documentation":"

The event number.

" - }, - "eventMessage":{ - "shape":"EventMessage", - "documentation":"

The raw event data.

" - }, - "extractedValues":{ - "shape":"ExtractedValues", - "documentation":"

The values extracted from the event data by the filter.

" - } - }, - "documentation":"

Represents a matched event.

" - }, - "MetricFilterMatches":{ - "type":"list", - "member":{"shape":"MetricFilterMatchRecord"} - }, - "MetricFilters":{ - "type":"list", - "member":{"shape":"MetricFilter"} - }, - "MetricName":{ - "type":"string", - "documentation":"

The name of the CloudWatch metric to which the monitored log information should be published. For example, you may publish to a metric called ErrorCount.

", - "max":255, - "pattern":"[^:*$]*" - }, - "MetricNamespace":{ - "type":"string", - "max":255, - "pattern":"[^:*$]*" - }, - "MetricTransformation":{ - "type":"structure", - "required":[ - "metricName", - "metricNamespace", - "metricValue" - ], - "members":{ - "metricName":{ - "shape":"MetricName", - "documentation":"

The name of the CloudWatch metric.

" - }, - "metricNamespace":{ - "shape":"MetricNamespace", - "documentation":"

The namespace of the CloudWatch metric.

" - }, - "metricValue":{ - "shape":"MetricValue", - "documentation":"

The value to publish to the CloudWatch metric when a filter pattern matches a log event.

" - }, - "defaultValue":{ - "shape":"DefaultValue", - "documentation":"

(Optional) The value to emit when a filter pattern does not match a log event. This value can be null.

" - } - }, - "documentation":"

Indicates how to transform ingested log events in to metric data in a CloudWatch metric.

" - }, - "MetricTransformations":{ - "type":"list", - "member":{"shape":"MetricTransformation"}, - "max":1, - "min":1 - }, - "MetricValue":{ - "type":"string", - "documentation":"

The value to publish to the CloudWatch metric. For example, if you're counting the occurrences of a term like \"Error\", the value is \"1\" for each occurrence. If you're counting the bytes transferred, the value is the value in the log event.

", - "max":100 - }, - "NextToken":{ - "type":"string", - "documentation":"

The token for the next set of items to return. The token expires after 24 hours.

", - "min":1 - }, - "OperationAbortedException":{ - "type":"structure", - "members":{ - }, - "documentation":"

Multiple requests to update the same resource were in conflict.

", - "exception":true - }, - "OrderBy":{ - "type":"string", - "enum":[ - "LogStreamName", - "LastEventTime" - ] - }, - "OutputLogEvent":{ - "type":"structure", - "members":{ - "timestamp":{ - "shape":"Timestamp", - "documentation":"

The time the event occurred, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - }, - "message":{ - "shape":"EventMessage", - "documentation":"

The data contained in the log event.

" - }, - "ingestionTime":{ - "shape":"Timestamp", - "documentation":"

The time the event was ingested, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - } - }, - "documentation":"

Represents a log event.

" - }, - "OutputLogEvents":{ - "type":"list", - "member":{"shape":"OutputLogEvent"} - }, - "PolicyDocument":{ - "type":"string", - "max":5120, - "min":1 - }, - "PolicyName":{"type":"string"}, - "PutDestinationPolicyRequest":{ - "type":"structure", - "required":[ - "destinationName", - "accessPolicy" - ], - "members":{ - "destinationName":{ - "shape":"DestinationName", - "documentation":"

A name for an existing destination.

" - }, - "accessPolicy":{ - "shape":"AccessPolicy", - "documentation":"

An IAM policy document that authorizes cross-account users to deliver their log events to the associated destination.

" - } - } - }, - "PutDestinationRequest":{ - "type":"structure", - "required":[ - "destinationName", - "targetArn", - "roleArn" - ], - "members":{ - "destinationName":{ - "shape":"DestinationName", - "documentation":"

A name for the destination.

" - }, - "targetArn":{ - "shape":"TargetArn", - "documentation":"

The ARN of an Amazon Kinesis stream to which to deliver matching log events.

" - }, - "roleArn":{ - "shape":"RoleArn", - "documentation":"

The ARN of an IAM role that grants CloudWatch Logs permissions to call the Amazon Kinesis PutRecord operation on the destination stream.

" - } - } - }, - "PutDestinationResponse":{ - "type":"structure", - "members":{ - "destination":{ - "shape":"Destination", - "documentation":"

The destination.

" - } - } - }, - "PutLogEventsRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "logStreamName", - "logEvents" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "logStreamName":{ - "shape":"LogStreamName", - "documentation":"

The name of the log stream.

" - }, - "logEvents":{ - "shape":"InputLogEvents", - "documentation":"

The log events.

" - }, - "sequenceToken":{ - "shape":"SequenceToken", - "documentation":"

The sequence token obtained from the response of the previous PutLogEvents call. An upload in a newly created log stream does not require a sequence token. You can also get the sequence token using DescribeLogStreams. If you call PutLogEvents twice within a narrow time period using the same value for sequenceToken, both calls may be successful, or one may be rejected.

" - } - } - }, - "PutLogEventsResponse":{ - "type":"structure", - "members":{ - "nextSequenceToken":{ - "shape":"SequenceToken", - "documentation":"

The next sequence token.

" - }, - "rejectedLogEventsInfo":{ - "shape":"RejectedLogEventsInfo", - "documentation":"

The rejected events.

" - } - } - }, - "PutMetricFilterRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "filterName", - "filterPattern", - "metricTransformations" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "filterName":{ - "shape":"FilterName", - "documentation":"

A name for the metric filter.

" - }, - "filterPattern":{ - "shape":"FilterPattern", - "documentation":"

A filter pattern for extracting metric data out of ingested log events.

" - }, - "metricTransformations":{ - "shape":"MetricTransformations", - "documentation":"

A collection of information that defines how metric data gets emitted.

" - } - } - }, - "PutResourcePolicyRequest":{ - "type":"structure", - "members":{ - "policyName":{ - "shape":"PolicyName", - "documentation":"

Name of the new policy. This parameter is required.

" - }, - "policyDocument":{ - "shape":"PolicyDocument", - "documentation":"

Details of the new policy, including the identity of the principal that is enabled to put logs to this account. This is formatted as a JSON string.

The following example creates a resource policy enabling the Route 53 service to put DNS query logs in to the specified log group. Replace \"logArn\" with the ARN of your CloudWatch Logs resource, such as a log group or log stream.

{ \"Version\": \"2012-10-17\" \"Statement\": [ { \"Sid\": \"Route53LogsToCloudWatchLogs\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": [ \"route53.amazonaws.com\" ] }, \"Action\":\"logs:PutLogEvents\", \"Resource\": logArn } ] }

" - } - } - }, - "PutResourcePolicyResponse":{ - "type":"structure", - "members":{ - "resourcePolicy":{ - "shape":"ResourcePolicy", - "documentation":"

The new policy.

" - } - } - }, - "PutRetentionPolicyRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "retentionInDays" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "retentionInDays":{"shape":"Days"} - } - }, - "PutSubscriptionFilterRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "filterName", - "filterPattern", - "destinationArn" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "filterName":{ - "shape":"FilterName", - "documentation":"

A name for the subscription filter. If you are updating an existing filter, you must specify the correct name in filterName. Otherwise, the call fails because you cannot associate a second filter with a log group. To find the name of the filter currently associated with a log group, use DescribeSubscriptionFilters.

" - }, - "filterPattern":{ - "shape":"FilterPattern", - "documentation":"

A filter pattern for subscribing to a filtered stream of log events.

" - }, - "destinationArn":{ - "shape":"DestinationArn", - "documentation":"

The ARN of the destination to deliver matching log events to. Currently, the supported destinations are:

  • An Amazon Kinesis stream belonging to the same account as the subscription filter, for same-account delivery.

  • A logical destination (specified using an ARN) belonging to a different account, for cross-account delivery.

  • An Amazon Kinesis Firehose delivery stream belonging to the same account as the subscription filter, for same-account delivery.

  • An AWS Lambda function belonging to the same account as the subscription filter, for same-account delivery.

" - }, - "roleArn":{ - "shape":"RoleArn", - "documentation":"

The ARN of an IAM role that grants CloudWatch Logs permissions to deliver ingested log events to the destination stream. You don't need to provide the ARN when you are working with a logical destination for cross-account delivery.

" - }, - "distribution":{ - "shape":"Distribution", - "documentation":"

The method used to distribute log data to the destination. By default log data is grouped by log stream, but the grouping can be set to random for a more even distribution. This property is only applicable when the destination is an Amazon Kinesis stream.

" - } - } - }, - "RejectedLogEventsInfo":{ - "type":"structure", - "members":{ - "tooNewLogEventStartIndex":{ - "shape":"LogEventIndex", - "documentation":"

The log events that are too new.

" - }, - "tooOldLogEventEndIndex":{ - "shape":"LogEventIndex", - "documentation":"

The log events that are too old.

" - }, - "expiredLogEventEndIndex":{ - "shape":"LogEventIndex", - "documentation":"

The expired log events.

" - } - }, - "documentation":"

Represents the rejected events.

" - }, - "ResourceAlreadyExistsException":{ - "type":"structure", - "members":{ - }, - "documentation":"

The specified resource already exists.

", - "exception":true - }, - "ResourceNotFoundException":{ - "type":"structure", - "members":{ - }, - "documentation":"

The specified resource does not exist.

", - "exception":true - }, - "ResourcePolicies":{ - "type":"list", - "member":{"shape":"ResourcePolicy"} - }, - "ResourcePolicy":{ - "type":"structure", - "members":{ - "policyName":{ - "shape":"PolicyName", - "documentation":"

The name of the resource policy.

" - }, - "policyDocument":{ - "shape":"PolicyDocument", - "documentation":"

The details of the policy.

" - }, - "lastUpdatedTime":{ - "shape":"Timestamp", - "documentation":"

Time stamp showing when this policy was last updated, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - } - }, - "documentation":"

A policy enabling one or more entities to put logs to a log group in this account.

" - }, - "RoleArn":{ - "type":"string", - "min":1 - }, - "SearchedLogStream":{ - "type":"structure", - "members":{ - "logStreamName":{ - "shape":"LogStreamName", - "documentation":"

The name of the log stream.

" - }, - "searchedCompletely":{ - "shape":"LogStreamSearchedCompletely", - "documentation":"

Indicates whether all the events in this log stream were searched.

" - } - }, - "documentation":"

Represents the search status of a log stream.

" - }, - "SearchedLogStreams":{ - "type":"list", - "member":{"shape":"SearchedLogStream"} - }, - "SequenceToken":{ - "type":"string", - "min":1 - }, - "ServiceUnavailableException":{ - "type":"structure", - "members":{ - }, - "documentation":"

The service cannot complete the request.

", - "exception":true, - "fault":true - }, - "StartFromHead":{"type":"boolean"}, - "StoredBytes":{ - "type":"long", - "min":0 - }, - "SubscriptionFilter":{ - "type":"structure", - "members":{ - "filterName":{ - "shape":"FilterName", - "documentation":"

The name of the subscription filter.

" - }, - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "filterPattern":{"shape":"FilterPattern"}, - "destinationArn":{ - "shape":"DestinationArn", - "documentation":"

The Amazon Resource Name (ARN) of the destination.

" - }, - "roleArn":{ - "shape":"RoleArn", - "documentation":"

" - }, - "distribution":{"shape":"Distribution"}, - "creationTime":{ - "shape":"Timestamp", - "documentation":"

The creation time of the subscription filter, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC.

" - } - }, - "documentation":"

Represents a subscription filter.

" - }, - "SubscriptionFilters":{ - "type":"list", - "member":{"shape":"SubscriptionFilter"} - }, - "TagKey":{ - "type":"string", - "max":128, - "min":1, - "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]+)$" - }, - "TagList":{ - "type":"list", - "member":{"shape":"TagKey"}, - "min":1 - }, - "TagLogGroupRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "tags" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "tags":{ - "shape":"Tags", - "documentation":"

The key-value pairs to use for the tags.

" - } - } - }, - "TagValue":{ - "type":"string", - "max":256, - "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" - }, - "Tags":{ - "type":"map", - "key":{"shape":"TagKey"}, - "value":{"shape":"TagValue"}, - "max":50, - "min":1 - }, - "TargetArn":{ - "type":"string", - "min":1 - }, - "TestEventMessages":{ - "type":"list", - "member":{"shape":"EventMessage"}, - "max":50, - "min":1 - }, - "TestMetricFilterRequest":{ - "type":"structure", - "required":[ - "filterPattern", - "logEventMessages" - ], - "members":{ - "filterPattern":{"shape":"FilterPattern"}, - "logEventMessages":{ - "shape":"TestEventMessages", - "documentation":"

The log event messages to test.

" - } - } - }, - "TestMetricFilterResponse":{ - "type":"structure", - "members":{ - "matches":{ - "shape":"MetricFilterMatches", - "documentation":"

The matched events.

" - } - } - }, - "Timestamp":{ - "type":"long", - "min":0 - }, - "Token":{"type":"string"}, - "UntagLogGroupRequest":{ - "type":"structure", - "required":[ - "logGroupName", - "tags" - ], - "members":{ - "logGroupName":{ - "shape":"LogGroupName", - "documentation":"

The name of the log group.

" - }, - "tags":{ - "shape":"TagList", - "documentation":"

The tag keys. The corresponding tags are removed from the log group.

" - } - } - }, - "Value":{"type":"string"} - }, - "documentation":"

You can use Amazon CloudWatch Logs to monitor, store, and access your log files from Amazon EC2 instances, AWS CloudTrail, or other sources. You can then retrieve the associated log data from CloudWatch Logs using the CloudWatch console, CloudWatch Logs commands in the AWS CLI, CloudWatch Logs API, or CloudWatch Logs SDK.

You can use CloudWatch Logs to:

  • Monitor logs from EC2 instances in real-time: You can use CloudWatch Logs to monitor applications and systems using log data. For example, CloudWatch Logs can track the number of errors that occur in your application logs and send you a notification whenever the rate of errors exceeds a threshold that you specify. CloudWatch Logs uses your log data for monitoring; so, no code changes are required. For example, you can monitor application logs for specific literal terms (such as \"NullReferenceException\") or count the number of occurrences of a literal term at a particular position in log data (such as \"404\" status codes in an Apache access log). When the term you are searching for is found, CloudWatch Logs reports the data to a CloudWatch metric that you specify.

  • Monitor AWS CloudTrail logged events: You can create alarms in CloudWatch and receive notifications of particular API activity as captured by CloudTrail and use the notification to perform troubleshooting.

  • Archive log data: You can use CloudWatch Logs to store your log data in highly durable storage. You can change the log retention setting so that any log events older than this setting are automatically deleted. The CloudWatch Logs agent makes it easy to quickly send both rotated and non-rotated log data off of a host and into the log service. You can then access the raw log data when you need it.

" -} diff --git a/lib/botocore/docs/__init__.pyc b/lib/botocore/docs/__init__.pyc index b3381dfbedcd50e2f9cb0b0328d07b288c8be77d..9c5deef9f8947062090d7b3ed44b098027b3cebb 100644 GIT binary patch delta 49 ucmZ3))xyca{F#?4V$-?!jT{@9IprA`81(dWGLt3?vb3V`q$hK-N&)~-4-6Fm delta 207 zcmZqST*Sq}{F#?)+XbiSjT{@9Bk~v+81xH@GRqQ6QuWIci}cg-b5c@^iuFrM^eYR~ z^UTZ2@{G%q%#BiV%W_N7tBkYKO$-bSDhrJCL-Y$W3v@H{ic1o6a&%oXatqQ!^po;S V@{{w6QYQznNKd}YoJC6uOaO6fNech~ diff --git a/lib/botocore/docs/bcdoc/__init__.pyc b/lib/botocore/docs/bcdoc/__init__.pyc index c014ab9010bbf1ddd323be273c9716a63a314c79..2ef902119e82daca1be345fb25cba7cccae17a0f 100644 GIT binary patch delta 35 pcmaFEIG2%w`7nk delta 114 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 YXjIrvJHs6nf78xzP|$!HqnS#w03vDZQUCw| diff --git a/lib/botocore/docs/bcdoc/style.pyc b/lib/botocore/docs/bcdoc/style.pyc index ae23e5b24edfd8ced8312f479759425da66b5785..0eadee18909adb19c543dfbb59a8d7e5f2d5ac01 100644 GIT binary patch delta 1513 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 diff --git a/lib/botocore/docs/client.pyc b/lib/botocore/docs/client.pyc index 48b7cd368e4878fd95e1f81bc1087d8e65297395..02a21142459ab147bfa009337cf75d7e21eb58ea 100644 GIT binary patch delta 251 zcmdn5xkr(M`7zI$$7&2 MQA8vs&l6Du0L%|Pxc~qF delta 1278 zcmdm^xL=cl`7zAud2(rL!DbEKLo|+M9{ygMdSUWz{(ZExKw|PN0VM!3-pM5Z diff --git a/lib/botocore/docs/docstring.pyc b/lib/botocore/docs/docstring.pyc index 7079a5661533bd584b810880383b7789c88c2ec7..e1b8086374058bfae15396094832719566e384c0 100644 GIT binary patch delta 277 zcmeCuda1y{{F#?4V$-?!jU44HoC*vK40`%GnMso`a?4Eq%+i7;@|yK6iiq@PZ}uoA z6d{?(l3WoeBGQwea7{&sY`(}X#fad7ZHnhbw<(-&H=3F@eq$sNL4kuvJdkVM1d-)0 Z3LZg|=M+Yf2kO`$d>BQI^yFtEDgdm|ONRge delta 1466 zcmaE<(51z}{F#?)+XbiSjU44H5%~-Z4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`N{c3sgn&^WhO6SX`z_~n+;hx8EIxZ(D~AvB+7FDgc(10(JlZ diff --git a/lib/botocore/docs/example.pyc b/lib/botocore/docs/example.pyc index 4d8b316104732450a60c017edd48d99f185498f7..a64546d99dbdad91b0e03807cf5e072d6e247650 100644 GIT binary patch delta 329 zcmccaJj0TM`7erLLjTuWC!sKnt5UK cM)68!nwbuc0bl6~+FI~Jx`1{TB+8fr0Ka`pV*mgE diff --git a/lib/botocore/docs/method.pyc b/lib/botocore/docs/method.pyc index 3de56a2bc1a4f2ca8e0f8c8519171df3a81cc697..ab2b61b77473b8158e8e06a81f71462ee008a175 100644 GIT binary patch delta 126 zcmZ4MdfAbK`7FzD&$WF}4i$S=8Bk0p-dM-#cL NQjH=aIr*fjECAglTzdcj delta 2061 zcmaED_spAv`7W!uR}TN^Yu_?c*HLnPOGn)+b{EuAkh zS&DZSO)c1bmDi7^;UhWOm47u&y)ao&pncqNo?-oJjaL-+Pr}~ h0-2k@Ylp-IY7n2y%U_F74;J~!AB7?!Gx@lHFaSL9A`}1s delta 696 zcmdledrOgn`75~B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`N{c3sgoZF$!`v0iDROr4GNp@vb|-btqq?!7-<|zGQ4KYwDm)^Kn(5TVelk+9c(9{c)QzU26)&g~@6|}YBhtx!xTCjPO W^kSOk1o_Fea(ig$1^LN|@=5?mF*F4L diff --git a/lib/botocore/docs/utils.pyc b/lib/botocore/docs/utils.pyc index ae404c42f3273664e51be3d541000a740acf5823..e8450830106c01d20d31e6e453ad6994c576e605 100644 GIT binary patch delta 341 zcmccOIMtkk`76cV2t#GQdEvRRX-6jhPL#^n&u%oA#DTc9sd*-n%XdVk;o@nS|Blbt7srCEfC+VCMHbNgd{#WQv5nCy&y3;P$H6+ s7Kl$iC2@q77Rd7EB<3ciB-$MWmfOV)lMhOE(b77J$vIM|X=y0xolh5$~KoOChY$+%U07ttaj{pDw delta 594 zcmew(cTI_d`7d+Ze#X{F#?4a?`o^jU3_ZoKg%740`%GnMsoyHAOd{Vb^Cu5fYo6$yJCVB0AZf zyAef1Y_l1UI}57Ntu_Hwo9N^f8jUE5 b_Mq^@Ca=~CLlxPauRRkrtVJi6>V*LScPDU- delta 2168 zcmZn+I33Hu{F#?)+XbiSjU3_Z5t$4O4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`N{c3sgobbh;FWB*Jq-o4PuiM_*o{O=gg(0C8CoB1X(A?bJft&60yy{xZGK2Y6CE= zdT42Z=wvQ|7c{kCvw&a`BW-P1AjC>r8zvtX?xUp_#5Na*e4wcp#5UK9#k11X50n2& z-=d`j3utM$*yj1NuV@dvk$e4^6{Kbh4CkBW=C0OPR(I XQLhq4Qy*;pqB4`Fb+qW@)#_mYoP7$x diff --git a/lib/botocore/errorfactory.pyc b/lib/botocore/errorfactory.pyc index a5be6316366e8d6dea0d9737a88d5bc9f03569ee..64979f3499856ec5f3ec2c316e54a18387247070 100644 GIT binary patch delta 181 zcmeBDJ}k?@{F#?4a?`o^jU4SvoN^2d40`%GnMsoi1SB^xUq=(!?7`;Ah^lBZ6GsAy qh}7gO9OqF*Hj8qVp_}xF#~)QlYVuzGXcT?DC_KqY%&e1(1;qh~k}aPA delta 890 zcmX>s+ojCG{F#?)+XbiSjU4Sv5xEQu4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`N{c3sgozNN^Rc6bd7d4Y@W!P#7I;3PZnd3r=|3>@|Doi0;$O>_@n`rtvZDO diff --git a/lib/botocore/eventstream.pyc b/lib/botocore/eventstream.pyc index b58b3646d726f5d2590be3d6f514c0958d2f7322..61cc9e3be700555ba943821bd57c1b0cee9e57ac 100644 GIT binary patch delta 1154 zcmZ2?mT}bzMh@oByj+o+&c$!!=w{-SWnf^?)6dCFnmmz3ax)9FDIL|0_Nm4L2@mj_+ZHlD-G2*WpD6qtgn=c0h*WCvO9%@2k8 zu?fEs=|dCV{90@cnh?+czRhBibFm2;aoP#XX=qJ0mSk)8N zJeAEB>Qcyo4R(4E%jDyl`w{*FMZx6nT5pj=8vW!pN9lwkn>LX}cC(tE6tWQ1w9Q-f z3sHq-H_tXiiP4J!vXfnnqmgU?MZ2Jh0kS@z4U@N-K0;CivVhY(97zPE?V|ZiWIur% zcHe3OvPmF)4{Xk$>YFTUHxErj$9^fAh?BzHzi1Nbm4LkiHL zFosz+b$Wl|BJdkm-FzDd@EI*OKf^5zCQ0vr4VVL3@_ok5XEh+uW8ZTez*kvw2&;iC?#Fon6J6i1K>W%Y77&9UU;xVp%fZLT(*s0Ew+uMH diff --git a/lib/botocore/exceptions.pyc b/lib/botocore/exceptions.pyc index b69877fb146ca4cda4c907a022405d426e34fbda..56064a74ea6de0c409927feb766f0fd256e7a0d1 100644 GIT binary patch delta 1088 zcmZ3rm+{CVVzMP-`3Xo@x$YhOke+NQf4UFfX-YjhzEBRMpo$=i%)qFOk4zsWjOk=4XvWo8v!W~fX!93U(d0P0w`d}}?eC+Ba5?@*h-^-D(m^wJ z^Izvmv@i!bY4a;L12mPByF9!RMu8K*t7jIPh`iSxG!bv_JcP(*L7)F<#%^x#(?A!J z2(UvJIu>YzCNw!CcrU_auzRM4WT1)UhUOrN7>3P8;(=1HO}HAmv6mt?qbi#GHF7DM W2v_tXRFTaxG4oLk5}&LU*8l)^q6yys delta 5674 zcmcK5%PT}-9LDh(*U4o_7@sh&mX@FqdQIbTn2XD-pd)R-)vR zL~q81lx$r}N-QJ`MOI`X;;(rAf=}P~`JK-BigM>fsS5mv4D(;t_8h2aNY|)Bp&+8i zF7uL&$h?OPxgCQxkC#Xi@r?;CPL^GU@qSJ}=#-t3Fku)Gj5?jpC+bNj5$$4u-Q|^d zhoite>=cDg((jhs18$Fv7MT<1aflTPFfO!Ii4_)99bh3SY#S@k%WyyTkv1a6zzLk% z1Wlkz>I*2qrlN|mZ^Z7Rx4^<$Obu8Fj1|DbY+N^1puw6$>?u8Hcx(deO|*iAyQDa< zpiUuRp)a*P0K4>6`ZuY>6d zbYz-SH;e`L>l|31!ZHm7*pnq2x^M#3)-z}V{i)x;0%r~DP=L)eu0lu9P;>L-KfgZM Aod5s; diff --git a/lib/botocore/handlers.pyc b/lib/botocore/handlers.pyc index 8fc08744003a90dc68c40526c62789ee78c023ff..ff95324e15daf62125475aa36430b797dcd366c2 100644 GIT binary patch delta 1184 zcmaDkpXv55Mh@oByj&5R&c$!!$m8aeVqjp<)6dCFn(SyRw)qKn6C|1cA(%FW!u+mKZqjFsAKEb4_U2jL05vFez)cSxPJo&ojXnHn_=qsZMOeSl`y=6-uwbRj9n3CKdA zK$UPlgD?i1N`hQ8Q58u|u6GyR%;d(6DSQ=8?;($W$cjKoNzXeTSqKy{zkP(zg{u9~ zQi;@N^#Cm-AA+5>Kln0QxK9dSkLrZUvJpGcL=LF2O!kO8iz>RgIqDgbS(^{Wu14a5 zZM&6l6wR5Fd6V~}8Do|57fsRTrD^VHLX)F1j-cu5$?Rri4Qc_!w|sUBnxtTk0GbJ# z`*S(bLxZglBN*F?w2(D|!e6e05!qv)#N1o<3&}!|$k*~1RFTd5D^M~INYTWqG9*Qy d#8X=BfFuI4O}S>OAd(PB(R?}9&DwqY7y(c`Fj)Wq delta 5959 zcmcJT-%C?r7{~Xk8m&bu-V<)2jHJ@Ev(#9q&2UMPlO|4CWznW{p4gAmb~v(vpy`BZiGw-Dk1{=L7V@>_v*bnAHLu3^FGgcpVFFf^}fk! z{$bx-D0ZHGXieF|iosxz)r_J?w3w_%GV(||F&xWeWlfWFm*Od}uBV#EqTZ(Aq@L8` zmzyufTRa|5PHmDyvZ|G5{brRqe(R$lA~!YJ(SMGDDRhe!gk#VB~a15f!pi^ zr3n7Ab>0Nk!HbRpRD(paWaF6~elTUa-9keA#+oHdKCBGBx$`ZSKv%0KktPXhajqZ% z5~)!O`CMBzWy>AJpc$ywr6GZWmR+xq0EvPF7GBtO0h>Grs&9h{Yc-F-grfT!lpyHi z?kQy0f+uTB;GTYGuNP|)uk5SE5~!|z2^oXL&i#9gj;y)dLW2FFtfg|E>I>1yh8`@p z(D2iOCA>cPzzii&dD!y3Locxo= ze~vuI8ddWBgBm6H*HQEY*E_f4G;rP@#C^T;EPK>-0NR+G+wkjXu^e>`-oWBM4{pOb#>VqC&>kysM+7*8*0*xYBnIQPdkO|s61igcO6K=`ofE+uFM(#11eEgK>z>% diff --git a/lib/botocore/history.pyc b/lib/botocore/history.pyc index a4559069f02009812ac326ecf6b607307bab6e07..fa33c442fe9df0ab7be54e58418c141fa6e9b485 100644 GIT binary patch delta 194 zcmca3dW@fg`7ao8#H+Q7sXj%*_#rqDW-&1&$6B5z)yi6bX*X!9DD0J=h!~) zHZ-Wb(ECh$4!#Q?0Dd!0)8lyJrNQw|X8+G`=C`x<|J+#n{g3@0W12rc{=Y`CLx=>g zqMQg7D3M2oXzY_|(WRo{3MFW1(}|+QrevL(NQ6Cw)~)Jn8adOQMs@e3%o9`Fu5;bli?nz&ofdmPj~+ct zCew*af7u(SpYQJO&Z>vqLAT1P`&nUKl;`&kPA645=#ENP#$|1;mD9#u52~41$&lV< zOBf}ofCK4PA;PeTCMFC8LKsfUh0kncr8Q?G^AkEa2(Gr7D-1bi!f@dwg)3W7z?BQQN>SP<9&@ZA zSHE%P3Pybs<<>M#HAOVaP2xIe4o@4(S|OC?g|8iZvrK3Lo)wu3!@IDRRqcokhJPP*!~Na=NqkrWhFl_?TQaza7LQFCT4i;m2mC`qmk$j7M8gD0nG|7dXZ z_(=C8fAaz3I1BOuN`t%}i=qh1`S)}E;HPit*A~sT>7qqrk9~6i>C>f8>gkJn)N(#O zU!!_NN-3~;j9h>*NCzH!>(WySqkcenimk+_KDO-JZOGnvY$}(P#ZDb%)+9SwvGa+2 zASRphILwNZQZ6u|lSDwWsU(BNWC==Mrm3kNV@u5FEY)v93%DvV(!8l|v5+>t3YQft z_I)jR_fu$=4JCC)-B!NZRvZ4NY9KRrHK!TP2}EMBoG3|B?F{-{F(v!I6Fz>K+(- z(9@D4`(GjQIv=C4}-7?rm6SPEnhw4t*dnvuxBJWFgdd#)jVJG zZ6O54O5X`4#e47}N6#o=hi^QG$Pv|K^ax%zpKap5u1ql#>v zsQDe)5Ri91>!=`w2H1y922w~igAHdlDn&EuxzP-CeXq=f&`nRb+>B<_=2q)ebXB2t od(l#cN78UE4l;~F$ zrstWLmE{?iCz%_i4)eSWESXV<`tJD=H%$QWaJj4hv+Be zm*gks7o|>~Yb!qaFjFAyELf;4yxD;H7&Fam*!-VOgodWeaM{z&bWrebuI8Q1NW0LH z=U+=Z(C>Ktv;>RT&XXE$XVT4pz!&$J7lxwcLKC_Ho) diff --git a/lib/botocore/loaders.pyc b/lib/botocore/loaders.pyc index 698b1975fd55b8c2ad6c2012a21a6b832f8e2542..fffb42bf238c65ea32ebb2ab5e126dea32640a64 100644 GIT binary patch delta 404 zcmey=&iK8GgZVQrSHz}s@f$hL3vfy@Ffi!p=VT^L{-`H1*;&vFRb=x|L3<`Np(P>} zXhM@a#8XfdiEfURc#o!N^A_n?78F$?lWP@9&_rSt<4{F5t1E3m)3(`N{Wvq4sw!=H zB%#e8^$gh1RP>r=GolEIZca7lM$!Zf0nyEOtu)Y7O)j#zgr;w!Z9b~!L?`z;97k0& U`JkgcnnKSO5S3 delta 2059 zcmexf^{JhagZVQr*R~5z(Hl9=3q)ivFfiyB6lInrmZa*JB^K$Y<>#cN78UE4l;~F$ zrstWLmE{?iCz%_i4)eSWESXV<`tJD=H%$QWaJj4hv+Be zm*gks7o|?VC?`7ktAHm>E!Z3*Xvaib8+Hhn)7FN`zGBI=^n%Fdvtl1;>xIp?C1Y4< z=?Brtp>oBvw4jKVhD&Zvm0wTW@Y!sna*UZ~e%Q>YVN5&IfhC2==0I&3Hk!E~R2FUS zHq2tAr41sRg^YP<97@(^nzZ%9jA`B#DED#~(G7$3ZTxmlSt=Xwg5HHLzMl!1^ z8M(0fDI=q6+8OCtyOR-%WrC54Lgp+pg-tLRG1IJw+v{&YS-MUUcQ&*F@fBYK6|PZ) zd*c@%9&3@9Ea?Uk+;lakq{rICkJ(b%4++0Yd(|T|iH}?H)T!rWIqr$>%FwpcIg^Fk zRk}8`Mc+t{T4~zHgYV zkMF+@BwUjKHEmbK;{)%3%+^LgrR%WmW#&K&bni|0sVcQ!Sq$DSJkV)>mkqy{EFgeNbz4i0og@ z@qofZ3SkQ46ecJ{DLkSO%LZZY=mJ~n{ky}3zO?1!nb$1oN1%i!4R$5fNg~>Pijn?v qLqL2zAyCx2zBh=r*#{tZoo{5nPx0?!mAXzuFMS1)GAcqhVEYe{ih&dW delta 8214 zcmcJU-Afcv7{=B0vy3opN4-i{kX4rvP1Y^HS{2I_iqy3Aqgi)$T$|Y$XT~W@vVuYk z2|Q4gLga-vhGeINGP|g|GV&%0gpDEy>7t^Gg6Lz;{twUHVOXBu`@YYa^S(Q0c0FFh$-HbUv)gAyGGY)8xlSq^Q@jqLrtE-inZ7 zDW-I`a#-41US2+?Rq!3W7STMBs9_4S>}eWOG^v9Rs-`-q>LM9w$|kWS2@4P$G8VAq z(6E5fWE~2ij+A$)FarIw-Q|F(vpqyzJO3qO33XW^AYpOW9bEXG*$X)F#n&k!DMU@#m{}SFu+VFN6zni1JftH z`+>pNe8mO+tEL|&&Z=(J;u<{pTYDQ8JXxr_g%fA5Y;XMl7Vx(I4;JvPVH^h-J#Z5z z&iR4j%-nT9)?C`sSO9H`*zZil-Fz44E}MJ4H;1A1$)-ljH6)>pqlJfBkpz32PPUF< zZPO`juW{sjhJETk*H*( z*~>`O6easYjID#JDvLtYNM>tU4H_x-A}p(dX=Kjs z+8mRcB>$m_zLg3<71_K>dL^2>CLfT`Lsc|+wn7c6$mSNsdURJ6C?}yQvR66Ggd(Io zxmG;~A+p&~;{d7x(am|<|IyuZOFt8#2NYA2HyHS%iR2g_LKB&7bRA9PzVSs=kCVm#19HpYHH6XAFDS|^ODsv%FH0=aPs`6qNi8bYFDcQl zEKJWcFDuJ4E>AKyO35wDElIC3&Pq2iFfgbrFwzgvFUTy=&CDwxKn9r!R9QUb<8xg zVY8xu8Es==bD5wyjcqt1R7zVLCMSq^(ku!1)u|hRKG8pJ*2ippx6kD2}G(h1ll(CbhH; zq|MQ0=V|B%P>09UGLyD8OulGM+s?w~r8diG>;(mBmdSbc@w7{?pmx9;`wg_UV7J2+ z+FG#AaW-u&$Z(oPTMHDO@6y%+S(j{@S+IGcivSHX!bVZ4%}3mNXlMf{7vy_Rrda@i oJ3WeCg*5g8sI=JXvzw;gnB4E{PFoAU`o5=~1;Dg4ncd$I0Ql1casU7T diff --git a/lib/botocore/parsers.pyc b/lib/botocore/parsers.pyc index c0c99059a05e69d4f6d23b137d419b00eab2c497..13de8e421c49d997e41d6cb6589550bf2b2e5378 100644 GIT binary patch delta 1541 zcmZA1Ur1AN6bJC#iNgj9g!?ORtv~Cjq_$OtC9GnkHHnFqxlCDGBCbuBVu-V%jm4Cb zg(nb_LK^juW#oA&2nU52Wx>`@8q|xcT;q zQdaWIW(~}|4L&YgEmmnJlga6dMZ(~4sxW!A6fiQtoM; z;JxSeyE%mqA|(}*-c6JQ*ba@7^;EFb4ltRvTi{1+gzA{b28Fs#ijX^ehDqO%b4>ic z*G0kJ`dK=YhLcA_lmztn*+yZq!Olb0Mt`xfezFD5HCFIY{jqrx(jaxbhKRsz%}-bv z`dij8f)_$Z5EUG1U8ZFkyli_$L-4cxACuOg^r2z-=@!~V!26JwmS8%($U`qW zz7|8MbgJ|m2~2g>@tQqn`-?T8MBAi0eMjL{^u8oYRD+e6OA;fK?EWN)ky+^3Es61F zV(|!D8oj-hoIdvD6l>Ev{cqK@s9)fEKl_UD!THa;=-ke9@$8ohW|5{Fa6+@%A2v4+d65tb*-a!Bul>6BL{qg8dfiju&kE4LWI Zm&~{{LSeXDx-&L*YGj0#82|SZ{{er-i{tancu&*oP)*ORcR&651xdCQUM#I>}6uA*I!Y zRY8P`l#7%I?ZTpNau=&BTv;$xwxxF~f|5V0=2_m4QcS>4~9bH4Apckax7 zH~*ft6cwzOYA*rgvmq_YzK#XXHHmqf0ByAUHv#?}_63FiI zdq{wdtd)mw0KfGDa&dwFvX+1Yu-p4_64Lf-xW)ZefmT-BEPxWoyQ(Wt03F-0x*11c zT}&?R`G^DX6wdFR09Gj@kc#Sgs08w}`Z^Gx+DN|U6%N2t9s+oa}Z30nDRs z-A}L{(Pur|u>`Vq7&w*q{&ucc!lv-I_Y=}1R!D#P7N8Qya{oUpVD;!}D1a)*Jjf7O z9lh~;uo7yHFM}o60zZHf*w(o#xPg^G-2+`%0+}5&a3)QKZKQd~iv#e9cVh^6UCR|n zArY(KLFfYxFcm(6Tbv(VHo^+FM(M?qwP3>AQ*-9BY$5w^ku@?(O3rR#j}cXikkK>q zSo?g^7qB?*@J=j&Ohk2@NxTKO#a`k7e2A>ahOmH<_zN6>ThuEfFX7m3w>8lLE+b6| z;ymJ`>Z@V_N?<9_!n44G8TG4u!1w14EhJ~K1Tv~kLqjI@`XCfQZ|PTo9`QTGo=osR D+43Zf diff --git a/lib/botocore/regions.pyc b/lib/botocore/regions.pyc index 2182a504eabe9e31ffc588630009900a91249f59..6af4ab85af381f179ca6221499da802b6edfcc45 100644 GIT binary patch delta 288 zcmdntFx{Mk`7I3*bv81(dWGLt4Viik{}!tn=HWb+@+YGzcS$&Y#4 zQA9*HU+4S7h$191*A~F~l81xH@GRqQ6QuWIci}cg-b5c@^iuFrM^eYR~ z^UTZ2@{G%q%#BiV%W_N7tBkYKO$-bSDhrJCL-Y$W3v@H{ic1o6a&%oXatqQ!^po;S z@{{w6Qa2lN2r$yj^vQ-CqMPG6tC(qO!{qNgZM3vNWb-WEzqAdc$y@oi)7A@}0&X<* zg2?1Ig6C=Lg&RVXm}qLl1IHedE81(dWGLt4V3W#o=$x_9LA|$rCku4KVXmSL{ z85BjLn^C+R~JIs3rMUmKKUj8{KB2!U#Vw+h6h0x7y7M4LZS9CIus1^W- Cl`qHu delta 1086 zcmcbpyiJRP`71A~G2m81xH@GRqQ6QuWIci}cg-b5c@^iuFrM^eYR~ z^UTZ2@{G%q%#BiV%W_N7tBkYKO$-bSDhrJCL-Y$W3v@H{ic1o6a&%oXatqQ!^po;S z@{{w6QYSlb$Zif|DPp9h4WgSLv1ZZMhRIp%XKChz%?=!1Of)kc7zJXRS8^%RIDlSo o-=(D&L?=JynM+#>=J7Vr)Pl`6e8M!2<~#vunnttK06GG>-2m ziljFG=agec6YA%cLDeUq zfsbE=#x}SLv@p>!9waxv7CJ>!KS)l#E|N}5FGy`p6unK;GDB)|yi_bry)gN{R50x< zXw;RP94T!_I|~Bkq&Dx8?xS5w-5e;lfTpQbYO{!fGi_~{T%{O6(UXL{4O~ zn%X23QJKj)>a|EBj2fLNJn_jtHBwPUHlNj;gzN;M+b5sXd5fxOvX-6~s>tTYdee}# zT{L`!ra;R$5IF!q<}L_jnf%V=BdWs1erD+E_L>)>sF9w$&;nINd~%~Da)5wLPqj)! z(Ivjw)cPn3k`OSWHs?CjAlbIr(J6|NHE0bm0Zv}#JReCd$iOWwOA#WQH@em%dl;l( zzQ-+ug2@*>Tab7_`OQbXY>+IQ4APSCQ;nu5(w7fi(KSDFG(|Q3yU-Oa4LpXX=vGiT znhQ5C2=zzPw>d7n4ozsXcjReQqb9dTEkYBS7Ci?|WMRxg6cOpkTVvx;M8r2Y#d#rH J22RZh-T;P)1j+ya delta 5412 zcmcK7-%C?r9LMpk)|5ia^z6Yc$Sf7j^(;-+56es`Q-?ngEJSR}c|5Y6ot+&|nB7GM z8U*`dL=;1%8}I6iUW7LVbrV_SRU!!8bW`MzE(53ZFMR%i^Wyz|p7Vw0QO5c3oil&$ zR>A(IuU7_M=a1*z7;`ur(l9kUY(=FVHswenHXJom(z4`4Qq_aDt=Hd)1nY+5cHC0$ z){m)Y0)fDUQ78MPp&5QnPg&tu%-=d1H`G2ENmz;72{TGr;h|ea`*=3b>qaU*+9+5@ z0v=i`+`rm5kq}tXj?Tgk`hUh07BIXD{VYpkk!Q#5BLP9(As023 z>saJ-c@zq8@9{MBz6x?x{>CLF+kB){UBv-eA$YRtDRf3YYN+{wO*nC~2fAJb&D8#d zCd@DRfdxDFXysHKTClq@hGY_pY|3#g@E{O|0_;Bh!G#oj{HNg_@GkAFjOk#D^FYd- zdu638Q`1#iJ)1!`2}+-P1qHbO{3vt_3fgE~gC@}Ti`YM$M=mvDFBZLTnuN}X2QL?b z6Q-Mk*n}U=Z@~%6Eg!K7bFKZ@pN&heb>W7@$+j8X*K@BFL6z;FphrMO9dlS%9#3sNlfK03btK;cgWG@%FPA@3@_ye(5aMbIcimyUt|Hf1E%c~f;DWnF9Ap_Y*=m*+~6_-^klCD;4%AjIiR7R2!R zt3yf}`v*{@;@a!INZdB^6-B1ACviF>$vcZU9dUN7DQJ^>ErL#HZH@Zeb;t?4I(Dqo zj<~DJTzrq6b~k$6(B}lnrbmn9bIr{(9Qq!tzHmz3yN z7N+N!mzCuimnWGUrR0|7mZVo1XQi7M7#LI*80m-T7i1RbX66-_B3u;ss(AEMgwS6?RU^An74hzjp2iMiz+MYDD0a(y&{-l46iDrJ-e9>qn4GSSq zYi5SY4jS8#XC}c+vk(Hu@)FC(H1@+%>z_1CN1%Av<6uNvKTKXAz_MAuDT0Qnwa|r` z#(tRO`hvDeX@=Vb8hXLd<3DYk@8_vXL+69i=|r!18s-F0iOT0+O1m@)E-w}azGI_Z zJb?VLHewemO>LOm8dpYJ3nb&aX=eebb$TeiiFOu%`XEUOm9(?Ku|ab3--I06SpZ5# z?TIG@X==md+~PMhwP163i5U$`Bv2roEkOz0IC9yDdi=n7Bd4m zsd;5!6O;4v(lXOG7gq<+IFugN(0J5pb8#I9ZT&ELX8nBHC056VJ+w0%R2)e+`qS2e Xjz$`exq#|^lcsevjA5V+lUlq1Zgs}V diff --git a/lib/botocore/signers.pyc b/lib/botocore/signers.pyc index 8bc9e73075fa3341ad2288388fd8d8fa029b36db..0dbba833fea1bb141242b100a498e7f41d2c8735 100644 GIT binary patch delta 518 zcmdmcfbqq8Mh@oByj&5R&c$!!*v!c($-uy%r=OFVGpNJnxf3z|@n+!<6=B9pt6cAzO*uiVFqCbUYk z4$Y{^Q}r&QDY~pb4O!7alTWA$CM%eQpou&*n}i}FviZJwH?koMxkV>mx4DX};mRORiUzS*;pO&AKl3G-(Us9r9 zS(u(@URIW8T%KfZl#*MPTasR7oRw~3U|>*LV5A?SUyxa#o0(T!l9-dD>ynXMkRGC+ zlwXpcoL`hWc|y44}Y;S0HUII7w>@EVw&p=Yt91qMPq=v$E6924Ey? zW)yzHOj{e6#dosM)`nZsXK3gLU_4AdBEOxsUYM!S$4WCBHXEo-rfn2VeyDYkX3n1s zN~agJr_tC8Ee3aK>V?Vmh9R`I;G^Lr+F1a~2D=>vH*Yekq;W)enqQ@zHw@GyH#=Ck zaL~>MP(UqmD5aeR3XZk3GaOXw>~`EryTS;Rnfg}-X#7J8k NGQ#9(Xv2i?2mst)tKI+r diff --git a/lib/botocore/translate.pyc b/lib/botocore/translate.pyc index 8381481e18079c48ff68292402c37b55dc68cd23..ee364f3b1f5a624027f049c56d6426c017ca7ffc 100644 GIT binary patch delta 75 zcmcb`KaZD#`7(A9Ie8ho F2>|7}6FvX{ delta 395 zcmbQodyAig`7Mm8O!N=y9{x>@a7{m4QfRgJov&^698 z3SdTZ7f4m4*=97M$>ml8OhHPMJFWWA)HYdjBC7?uj%z=ZqZkCp|d4b=t7&yveAV)DyFlc8Q)d!jGW-W!Q1j2T~TWkno*Pe+oKSQ zHZyiGBYO_y$o#HVNP0FG_AEl;f_yf)uCE4R1lX^s{XWQwK!GnaQ4HPWxsx5xgeH4T an}urBWZ&t{s3M!KXA~f71BJHO>}~+WPD~;I delta 6083 zcmcInOKTHh6ixFm4-7`EO-r$eSSbx*LKAJPT}XVjwoHbsT!Zj1ouyfiZIN@WlcUOXOr~M(PD*FXS{b4eRqDXgCa0r z(9XWO??OSS;(3IVLA~pJ!0Nnr6<9sIVJ~=u${WYQ2%h?w9XCHx;}2MII@NR=XAZ43 zZ^w;JEgyDosmCGEiIxUnV~u<>(#Jt_+kOFiP-?x8t6u9twCx4fCGrK2+F);>rr}bE zun4R_;~1C=y&HJd7Sb$x)UU|YMFU;y-``yMVdSaHuM7TNZr73udU4X2?2*d z^XbRyaGgD(90&d#Jki#0)R!)ZINMokPQ+2ale6I_zBZF@@{2%o%#~G~E&~x73uT=B r&kEohmjag?a1ExzSB7xa+2YJonDy**sRAobe@in!U(78#fA#u*Cn|9p diff --git a/lib/botocore/validate.pyc b/lib/botocore/validate.pyc index b3cb54f05f08c2c46c86e845ade273afea9f541c..581ad75dfbee636c2ad6efba3ecfb5f820aa6fe8 100644 GIT binary patch delta 622 zcmaEnyEBr5`7AY&`}ub_%--YuZRf+{pQRP;QW$Rx3T zG?9MsI8>3%(Gq;92F*uO0P^@bSs`TS0-dwjPo5QB=%9iC6RO6^_R7alMK%|!m?G;d z)Kb~3qGpIJ1hjDSVfBTm`X=XS^KE{hVTr7;P^%Y1(QGu4Qk_{yA|Ttkb)}FE0oi7+ y%r{w4e>;*wkPqDqc#su>gbo;rq6;}28=whIerV!`YSiSZrrVH2KvwQF(+2<$tDM#V delta 3239 zcmdlP`68Et`7ifs;Nvtp#J4Qtq~X=;P$WL8cOntEY!4yQj&E!cdEvxKH$BsMvh`z1}i zFu9Z`mzEZYPU5{vQ}Z`}=GA4PsST6ugf7t50v+KAw6)-ta6C;d*c>jxPvb~vk?5kO z7sNK}N(#|5FNSTQsc!x$Z$MKU z#3p+vE~IHdZRSvNr>PfICf6uu($ou+Ih6P&3#s(d){=cHvuI|)=0sIHnnr>cFw-5S yne&0INzu&<)p=>^1<}oCG{k6Y!zL|5+FCH#U)!Cgu`qdy_I6rYAU3&6M;`z&A9k7m diff --git a/lib/botocore/vendored/__init__.pyc b/lib/botocore/vendored/__init__.pyc index 594e7ea5491ecdd7e47da3c43158b741894d299c..46cbd3851d40eeb5917330df964203323aefa367 100644 GIT binary patch delta 34 ocmX@fSjEBonU^ba)4BMG9HyMg3=9l<`Z<|N6Q}C4mH;^n0JG`{?f?J) delta 113 zcmb(%NYQR Coe{49 delta 305 zcmdlXyi}Bf`79(A7!Ma4H}b6Ih_GQy=}Ar diff --git a/lib/botocore/vendored/requests/adapters.pyc b/lib/botocore/vendored/requests/adapters.pyc index a8142cebc0ad53d40a388ef4e29c0dba6a16ff2c..6f207d01715ec27c02f2451daa2be16adf10c9fc 100644 GIT binary patch delta 392 zcmey`%6PJpgZVQrSInk!@f$gAuyX1!Ffi!p=VT^Lo~W)qIi4*8MMPt=J9`A0h&)FE ziirB=e;hUJs6s%4SSSAzxPc}bD&&tMqOn;;n4J+#XtjtfGm4P<=5&dDOejJco0m%S zu%HPUDlA6TsIxgjX`SgvntxW2%{j*P ZTqq7u-<)OVhHkvR!+%sEjmhhr+yVI|X{-PM delta 1976 zcmX?E`L&gigZVQr*R~5z(Hl8#utrofFfiyB6lInrmZa*JB^K$Y<>#cN78UE4l;~F$ zrstWLmE{?iCz%_i4)eSWESXV<`tJD=H%$QWaJj4hv+Be zm*gks7o|>aWK*9kz?MNv3mRx?xW;57_5@m5puYJKdks5HZ2(39>*Qko8??2gTEL%{ z7HDk#Ex^u5TN{jpY?*0kgZkzLqWhR=X@kb*ehD5H+S+hNW-(1eNn`T@g{QO)rO68v zST^rc=A~(RQs4Ytg^9)?rKK^Qwjs6olNL8k{h+>CSFfInmMKB`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`N{c3sgwWnDQ}+3Da1ru8*Xz~Fw)kBdfsx{*|7OPUm}e|s7LTT?c5KJ<#yrAG`68l VG?cbBOlB9)p=B~snmkWj0{~phK(zn> diff --git a/lib/botocore/vendored/requests/auth.pyc b/lib/botocore/vendored/requests/auth.pyc index 3636129b5ffb2ee3de53710d847ab23ee2bf9887..2882ec7d04b75fdf7eaaff4054985691b0be8ab2 100644 GIT binary patch delta 370 zcmaFw^3all`7}Y;qEFlTs4xl7JozlG&^%+Q)>VLS?hIggL5RDx2>~PC^foH?n1@svu5(Bp-od Sobu+a3Y@44H746B83F)K>0r44 delta 1776 zcmaE8`QC+t`7V81xH@GRqQ6QuWIci}cg-b5c@^iuFrM^eYR~ z^UTZ2@{G%q%#BiV%W_N7tBkYKO$-bSDhrJCL-Y$W3v@H{ic1o6a&%oXatqQ!^po;S z@{{w6QYSCqSJ_<5tjtJD8#E>#X9=aH1Idb?Z>3^s84b#t%cMDJ>IIF-8)OUtPuq3W diff --git a/lib/botocore/vendored/requests/certs.pyc b/lib/botocore/vendored/requests/certs.pyc index d818181f88fdbe4cf63d8a1e7ed08f2d9bc0ccc9..cae888f8f0ef55f8c557464ea054c3c9cf338ff7 100644 GIT binary patch delta 49 ucmey&ewB@b`7%Sejj0wz!~+0*Lk^Mv delta 207 zcmcc0_L-f7`7j`9sq!QNUQ(= diff --git a/lib/botocore/vendored/requests/compat.pyc b/lib/botocore/vendored/requests/compat.pyc index d9414046a54005922988029f65943eadd2b5cdbf..ee5a156f2434978feb9713b5e6ec52fa14b908af 100644 GIT binary patch delta 31 ncmcc3+r!Jj{F#?4a?`o^jU0biIkgxV81(dWGLt69u+;+qqtFS& delta 110 zcmeC-z0J$P{F#?)+XbiSjU0biBPtmf81xH@GRqQ6QuWIci}cg-b5c@^iuFrM^eYR~ z^UTZ2@{G%q%#BiV%W_N7tBkYKO$-bSDhrJCL-Y$W3v@H{ic1o6a&%oXatqQ!^po;S O@{{w6QYZ7W)dK*1ktaO> diff --git a/lib/botocore/vendored/requests/cookies.pyc b/lib/botocore/vendored/requests/cookies.pyc index 21024ebe4ba7ec3add50193623fa44df3577a2eb..ff4bb38b6168b7d3c6e846fb286f7d21440fe85e 100644 GIT binary patch delta 977 zcmcbym+{P8Mh@oByj+o+&c$!!n8C`a&A`B*r=OFVH2I;n_GD$YNHmfEY-MO7KiDIX zL=Fn7Z$8gq$%rDPJ-M4J4MjwKashWYnn)GTOjME0lX#_34N{-1!(W1`XtKOO2AW6# zH_K!$!FUwWb`&1SdX~wjg;3R~OdvMARoI=(0@qlqf5M9}`IqEBH2-Wamyt&o5|w*^E>xmmg({@BSw|@aIkpZ8s%_@e_=KuTeRI7Q z7n0E8huTQI$-uY*I{g=lBh@G0)VqNyvf01@*$|Mn%{vVPkWAW~XpE*pd-6MzS7^qB zn;9eN0UN_vwyQlcr~h!`eweURCJ+FF&fCGgYxR!IBNj3R}a?! delta 5113 zcmcK7O-mb56b9go#xW))m8MimX)U3>V@cv2lUTnMtx`~0N>LG|&}h;ml8+aNd*xyOfEVc4rvrKR@_WVD_)du3)w`nI4@08F1$Qlp3R1b(m5kFCT9v}VYX0AQaPZ}Zp~{n;H0=};So>mBo!Sn}Ss?Tyt1pxo!yuD4`&YyFWnzzVB%S7Qv2?sW)&D?6#}(rm;ZTJBtNkzBgE4 z#|KRyXyV2uGJ#;(AgZ7OeYp7w323DHp_5zCSN~IF0>SrgT>^(irI&g1b`w}wZ9D=C zn|HdPf?)sM1ay@V{N=$3E(4bXt+=oMU&WlHKKz4h2aPrvrORNts<9eY|XThh>-a`eA*GH0Iq3wAyw$k=PL?2&tUja|-9&G>s diff --git a/lib/botocore/vendored/requests/exceptions.pyc b/lib/botocore/vendored/requests/exceptions.pyc index e51fbb9407f80d019bf26ac8d23e3ac947bc723d..bec5f862b5be5d718a6adb428cdc49c7c6f039c5 100644 GIT binary patch delta 351 zcmca+{8OES`7+}8-i@dNla2XiqlpCYcOr=x3Y1iFh}fh@-?U6cNqIb0n<*1Fd0% literal 6614 zcmdT|TW=Fb6dqsV5R;G#BoJ;LC@pR!Yy_2%P(?`ss8kTp+C?gr>P&XV_9p9Hvoq^p z1U!^J_eb=#@BJP9FZ~1k&g>;FsH)Q^>||$m&&-^e^PS6_J*B@Es(<{s`J>CyUkUfS zxb$xY#w26U(H592GQYt3MfSYJ3bMphnRP%dvtJl{$Jh_gXPBH}YQ|D4Ikm{-Y(_nn zQ!7l)F;%f+t2uR+$>SMyKBpdIav|ezBB#zVxkzKx9P40>rM#oc*#buFhZFnOA&>V#!|Chu5ea(%4hY~HcNf_HEW-ft^}HDq+Y~I8(mi~T{SRX80hNT z4}aBatLJIn4`u8t?uLO8UZA<@DXx{_VTU^@qpSRoQ@vXCU=XZEjhRF9ZL9V4eiVg~ zS;AX7=YFZwTa1EIMHxajYC-8hW( z;XbfUfjzoz97RgYFNLD+(&}YgWYxr9V@dY9$o3MeF0pq- z_NK&M8nqj6w6EI+J zmc1?z_g|UypJt7ArCVt1hH29e1J8KE_g<+?138-fz%xC*lZv$ia3sCy0d%Z(c(}W# zTqr(gWsZSy)^BF*i#3kz8ub{0V-OA?0%O}@pd3>Dl7>cm}L}79T{rqnVO7kTXjjVb? z%Kj)iaueG8FH-%`P#PEwRg`MeNt3}O^FjoWu?uyN=~f_P)1sq@OQgU&$wQ_C_mjZt zR*rkw9LMvRDNPRgT}&jeNWkOLlRO9wUXiMaV8o>`f_s6*8Cgtd3{VvPFb-_aO-?i= z$LuLcdIwh)Lt74rl$m!GmvF_3>HdTQ&?aEliSTz%;TBi;OrWD60wEK3p(tpUU-0r zZ1Jh{={T;|ArO7mWwDoH@m4Pm_LaOJxS@n^9WkZ-1{}uEE#>++&?R>hu3V*T`EG1a zGeeb`6t!f~l-Sf+2>R@O=urJqfw`yt7j&1v?SViA${tsem{3-nRAp>s4ZNqruFgRe zRC;r}qJyVtA|?7rLUoJ;|A=OF0}RNlkYN(SHWJyKF~`Ri`Ft!PM>NVVG96%1Y2c?Z zuqZk?l=vPIBLaOZ)+X%3YE0xQ&Hb?Jxx8bIYC6EU03mh{!Pu_Rk!A}-hU6OvcVBds zuE&w@d%HKszVd8&%1~CYDYQB)C(}pi!zUI?TX%G*h~d~GGkw20^r_^KfjSiZ9Ll&H z$~A1o?wRmomCUspp_9b1QIq`Np)J|!b!#+8hmkfNlH#K)XxS?6*GUEP4wc;X6*QH? WQfX~@t(^YNtt*^|v+dtOub}t< diff --git a/lib/botocore/vendored/requests/hooks.pyc b/lib/botocore/vendored/requests/hooks.pyc index 2abf4baf7ad07d2ae4a455524631d7629ea25238..d52820484b85356bb56e24ba0417b411660a9694 100644 GIT binary patch delta 68 zcmey!*}}oW{F#?4a?`o^jT{w>oSF;_40`%GnMsp3vZ!wU%h-S>H2D{EJc=R*0KO~} A+W-In delta 305 zcmZqS_{hn@{F#?)+XbiSjT{w>5fuy!4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE j`N{c3shc|)m(tGk$(@W^lM|VvXy$yN1*(%@GD`yhM|5m4 diff --git a/lib/botocore/vendored/requests/models.pyc b/lib/botocore/vendored/requests/models.pyc index c593def50297af744a231ba06ecf245f4c80fc31..e67acf34cfe1cdcbb6a1f784452ec15c829c8cc7 100644 GIT binary patch delta 947 zcmdn`kg@+TBM0+mUarVZ=i)bV{AK6VVqjp<)6dCFnyl!hHu*s$%jR|t0cKR;&7wS| ztf)ehIfM=&i6kbdZT1kp!H6WJ=%qS&u4omCh}!0Y|te=@IfI+8+=iJz21ko^P_I-}(`rP6UBN@IK=oRGP0jXe3xrn3!FDS|^ODsv%FH0=aPs`6qNi8bYFDcQl zEKJWcFDuJ4E>AKyO35wDElIC3&Pq2iFfgbrFwzgvFUTy=&CDwA5mKLaP<`%liNK+do-_qlo ztRRv@OH0%??-tRep*KE?meSJss+*^Xg|N}ihL1AaXlc04<~y=;X&Cx}+^Un8%V*He z3qT7t+bV?8uAl&BW!23Gl$X;ukfy5E(ln4JJE(o9tp%y-G%oH!HEyub)C-%VbpvS} z&A0SCXzPUl{i8I_3(m&%jDp3?z?$FPHKdpYNPD95!5y}cq-Dci2&@BPQK!Mik4xdy7`RXTqauDptgBN;9;63B-PEG z!HhJmB-A$V47*5UKkSHbqp=M-QIlzG!`o=uwrABQ=f)nOWnxv`938iXhS>p>qn#3c E0obpzBme*a diff --git a/lib/botocore/vendored/requests/packages/__init__.pyc b/lib/botocore/vendored/requests/packages/__init__.pyc index 60ec82ef7467f2eb32f92ee92d6b85443223cc2d..cc497e2b90f7cb60f45b4e3f555e142eb214a432 100644 GIT binary patch delta 30 mcmX@l)WF2S{F#?4degc1i5$y0O&J&%^z?HwlP0q>dH?{BKM0rr delta 108 zcmZo*I?u$x{F#?)+XbiSi5$x#S{N7@^b3kI%Mwdc^~(~A^waWlQc{bG^-D_hD+|-} z%*)F1jLVbEjZ$*Ua!b;yjI+{B3=9k^3ykzb^b0ZzbTjjcOA>Q(bX_uX3(`aMlk!XQ Mlk`zLNKya* diff --git a/lib/botocore/vendored/requests/packages/urllib3/__init__.pyc b/lib/botocore/vendored/requests/packages/urllib3/__init__.pyc index 9b70a67a92b7e37e390d6ed68039c1ffc5dc2606..590784ccc9bdf3d6758d6802d7ad278e9df1132b 100644 GIT binary patch delta 106 zcmdlYu~L+S`7)X#YqO=$8PZVv#`?Hf7( delta 501 zcmZ1}xfo~as5q@OtmNo1mc?dCF; zSY{+4khXqiw#j)M%TYx)ui{KWH-9nrZd65+Kl8Mqh`dMPL5z;(zlS6`QQ$Zd4`lsY z!5W0f=7U0C*bv;wKqpW3lA4AlQYyU=O=Pu98Jfs8*-|7CphcSx$SI@x$YyevqU7WW z3TY?`L893xBDRyel+Z*rcPZB+8{V^shXA+I8Xl0mfY&Lf=$1&5=2A9dk?8|6rf$e5_juaY4vpfge z%*84V_TT~-y8V$CSmDQKf zGLW1n3v2A5r3E&VMKqgeX@TwJJDMM8X@SjTL2Vja;HHy8Qy*-8ud{-->2&j5J$;(m SV6!>Uz=@_dI8MH6XbJ!zL%wbR diff --git a/lib/botocore/vendored/requests/packages/urllib3/connection.pyc b/lib/botocore/vendored/requests/packages/urllib3/connection.pyc index c0238d39418ee81d0e8645f1a3c6a8d7a2fdaf66..6eecde7879d534bf7ca97599d41544ac96becb21 100644 GIT binary patch delta 289 zcmaFjaoC=N`7kg}S5i8&QbtSptn=B? zgg)`IGNA}rPwo&;hL=CRY(hV48oOtiGYYVtq6*R-`jN1&Cq7JL!d zPfH7|H-8sQW~8YNljjNVqn!nTGWL^~h-A{v0$@ho94LB-reS2YIZXT$3+?<6D07K+ ShJykqU3NEZ188!pd>jDWgcT_O diff --git a/lib/botocore/vendored/requests/packages/urllib3/connectionpool.pyc b/lib/botocore/vendored/requests/packages/urllib3/connectionpool.pyc index 03a64e7e75cede13ffbda1ae5bf290c79c80dede..798e82e71c6977828397cc62f8de6ad3c0b3b048 100644 GIT binary patch delta 535 zcmdmVf${EsMh@oByj(Gx&c$!!sA1!DW?*2@)6dCFnw-dOH~B$2>tuQM6=_M5At(omghzqulo1x;wOa6%25 U>1v5_Xo0p_D%Aj0A1KCy01J$gs{jB1 delta 2645 zcmcb+pK;R#Mh@oByj};mRORiUzS*;pO&AKl3G-(Us9r9 zS(u(@URIW8T%KfZl#*MPTasR7oRw~3U|>*LV5A?SUyxa#o0(T!l9-dD>ynXMkRGC+ zlwXpcoL`hWxsly|@)@=@w6tI%?F?V2=rTE;qn~ybfP%-2b2=?8u$wHx)k;$fHb3B! z;-#$(juM+0X=ej4nm0R2-C(Az4QX;lw6kIJLPZuDh7c&7zEz5$T>t?s*gR30opxT> zyimo3iMH<7Rd=IpNxFHrZV~N52v}CzZ7$JYO+yeDok>?ilc2Lb>$O|e%1 diff --git a/lib/botocore/vendored/requests/packages/urllib3/contrib/__init__.pyc b/lib/botocore/vendored/requests/packages/urllib3/contrib/__init__.pyc index 245768bb20ffe0fddef2e9fb8e7c2d1f516475dc..fd755efb1c380a3f87a12ae49da131e49a1d44f7 100644 GIT binary patch delta 35 pcmaFOIERsg`7nk delta 114 zcmbQk_?nS}`7X#)J>8IuAq@)%V>z9=1R~Dw{ znU|I28J8!S8>Qry<(8yZ8E2)N7#J8-78vP==oe%b=w{{>mn7!o=(=R&7Nm#hC*_yq RC+8QXPIL=oEe4v+008jNChq_M diff --git a/lib/botocore/vendored/requests/packages/urllib3/contrib/pyopenssl.pyc b/lib/botocore/vendored/requests/packages/urllib3/contrib/pyopenssl.pyc index 22af2dc351c172ffb4ceb21bf0a24ab55f1aaed7..cbc41d500b7051eedbc733a6f607a6dc5626edfb 100644 GIT binary patch delta 359 zcmew#vnY^*`7NY#0KMTjnMj6zI*c`$w#z*bj%4>h5wYHE!Xb>V?G|S~lA?uN6-c~7?q^6mkSkvC%tI5A=39p(qR9Uai3ilN zd69qtx>r(#T@Z>kGm6YYcaxr&4MG9fbAQFwAVfAZO5~$!VV2s5Pyp5vBE1_;WRc8H zG?90*yU;|e<+q`VY;I97LbuFQ3C(?*C6qA~-BnqEYSLs0wY6v>5$Y?^M5bsQK@)kc SxfM;sSo;o&h}GnUI&J`550-ua literal 11495 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 MPSj>_Pkw#kzxT+<^#A|> diff --git a/lib/botocore/vendored/requests/packages/urllib3/fields.pyc b/lib/botocore/vendored/requests/packages/urllib3/fields.pyc index 6fe7a6160d191c24236c2c18ce90a7714b452c7f..79771879413b83a7e7868a8fcd9bd3ff56e650af 100644 GIT binary patch delta 210 zcmaEC_0O1t`724IG%qH8&R3eG& LPt5(bxtNQBIo1vf1PqiEf%j0WcYvO;(evq@@MslkZE)0|4+NfD!-z diff --git a/lib/botocore/vendored/requests/packages/urllib3/filepost.pyc b/lib/botocore/vendored/requests/packages/urllib3/filepost.pyc index d307895646af475df23b7942c6f478eb2096cc4b..86e73f1c3eb4b645041c6bbfc46768f097d9e454 100644 GIT binary patch delta 142 zcmcaCyGoLS`7sr*Pk< Jtp$xdngEmF_aguR diff --git a/lib/botocore/vendored/requests/packages/urllib3/packages/__init__.pyc b/lib/botocore/vendored/requests/packages/urllib3/packages/__init__.pyc index e85d60328cb9a41108a71dddd31837a9cf5c14c3..130cf2b2de4201d45359c6f5a3dc382090198736 100644 GIT binary patch delta 30 mcmaFOG>3_U`7?=;`NVCQTM%j06CfU(9O&%E=kPE(RInlEl3a1Ps%UJ MPtGq&op?AB05?M?d;kCd diff --git a/lib/botocore/vendored/requests/packages/urllib3/packages/ordered_dict.pyc b/lib/botocore/vendored/requests/packages/urllib3/packages/ordered_dict.pyc index 2a753cc39d9603768358dec973bbcac8173efa28..9ff96350238b2be06cd24a8456eeec8f0de6d3c3 100644 GIT binary patch delta 518 zcmZ3QaKWF0`7(vzj5vsJ6 diff --git a/lib/botocore/vendored/requests/packages/urllib3/packages/six.pyc b/lib/botocore/vendored/requests/packages/urllib3/packages/six.pyc index 296e49caaa1c101ae34d4d21109813a1fcf5abd0..e0e59f685c3b60d9ccf4fe484b77060f3d41a52e 100644 GIT binary patch delta 699 zcmdno%y=S)gZVQrSInk!@f$flvvWE!Ffi!p=VT^Lc9gfBJb}XpN#vo9?c_qvDM%uY z@{W_|aUDPrv7Ovt!!r3h_Zk#Y$H_Ll=;|hLuuY!MXOE-~Xv5}gerZNjp~=#MX=oy1 zLUyPkn_mj`p=;w2U4p7;va6T_nuwJ61XPjD_7bbu5JHZ-p@=w6{;Z#bBmy$^l|dnz$OprVNFtCV!?HQbH~=kxHrty@ hFe9l1Mf4ksG;~$Ztys{78f;RLH3C!I<~j#cMgZM0!`1)* delta 3607 zcmX?+v$>g(gZVQr*R~5z(Hl8Fvqwx|U|`TMD9S8LEJ@WbODxh)%g;$kEh^S8DbcSi zOwThfE6X!3Pck=3$t}w*Nv|@_N;feuFsLjr(ht!u$Sly!%quQQ%*oMp$;d5857AG` zFUe2NFG`(UC~G^}k;8{}793QxoqU;N3hgWa`Cu*Q5!za?oofSaEm+GP1@%BGlq& zYr!8i8rS$M)C+0n15hf8*SJVK3qUnNnPvzLa~jA70c{Cpn)zX~q26K|yI;zHg~m3d R7^c!Lgg{-i&HSd8i~wst4mkh- diff --git a/lib/botocore/vendored/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyc b/lib/botocore/vendored/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyc index fa49dfefe37fd179fb8b662e25ce6e8022b93b99..f8a05c65e115af3c4b74dc1eb123e9a1dbf5f589 100644 GIT binary patch delta 45 xcmcb{@{*Z@`7E~o7O}@ui0RSrm3^xD( delta 153 zcmaFKe2s;J`7YuW6y=GO55-Dt4A2&#p*V%MSR_>g+QFoYR;BjUXp=^h-L@dRutu znsmBVo6RA`9~{sxw&s=#ypP*0aHnOhJlySVB!N z-RHB&9cbtBDOl5hgm~eL_O#T7T5Q$wBF%v~7hn$XS1!DE+<}k@t7+6sP;4HcRHpTP zIBy^L(|XY#V&D_+>{2byl zfHQ#e5=elOUa#{@IQb+PTDfXyC9@!P*)XemonMr<2hh#3oOl{+tj1*sR{;UQDZm5( zy3$}QZ7#?o^}Jy;HJ+2FPGPdTb|Tx_8#(D<)8c2Cr@0rUjv-|b)&k%VAOYy8?!pm+ zZ61^^F8F4wbzfI4< zw5?au(@Ck6yt5vA2Udqajl+pMYJ3G&pPixHexf9cx~Z3RLrXr?>f)D@l*=)%j4k9* zXc=%FK)XU~LV^*A6*&I44o_y+WSI4ZLvV$rPYkip{V2)5sH~WY4+l8y%yG2w0fqo4 qB#52(hfqu!CRU=NnOF5nMKd^&UPP24wiDxSRhsR;vy4bjslNepBjr&5 delta 2693 zcmcgu%}*0S6z`NmTMB^?`KDc>Ew%`3`LaffZ3rQT2d1!IL`gRa{~)sC7B?mp32V_j~XC-pqWP|Gea?`_$aH z^Ll#ug)8J-dTO)T#G;xlC3Q(GB~@`v$)zP#6LnoIZ_0&8sZV&_Sm^DcXL-k z{;Ps!oo69Ry4b8MCifmVL$?-s}s_RKTEJ??tuEcIAf zYHB4$56>hOAe{uP6H2V9rbc0$2$j9&_aq2ZbO(o=lG>nQ;M8!yiJk*%2w;%CZSh-{ znF?wBNJgrTfI&UDbOB5P9HIfMbuib2e-vlHepkU6l9Xj}aDSP@MBj~9RtHGq_xUm02>H*EGM zdyAu;blVq#pjbK&umErk0Q(tR8MT7(U5AA@2b1z&l;Gc9E<%(&^3NK#!7E;Opx+=i zCngk*K$DIoV&GaJ{0+sKOa@NPYA)_^Ln)xf?lz~^-M2U*guDzYr8)hb-!Q}ismGjQ6{D~dk}W8VQh^xr!G diff --git a/lib/botocore/vendored/requests/packages/urllib3/request.pyc b/lib/botocore/vendored/requests/packages/urllib3/request.pyc index 33e9472f30f3c3ac0126a13f8343bdebbeab629a..cb3faf74799506f1bfa101d32200370800e618a1 100644 GIT binary patch delta 143 zcmexwbWM+g`7j|wL(-ET3uMRYc8El3cXLQ4zG JC!2^X0RVYG^bi05 diff --git a/lib/botocore/vendored/requests/packages/urllib3/response.pyc b/lib/botocore/vendored/requests/packages/urllib3/response.pyc index 3bb07acbeb15f358cb2d6ddb19fcca2512f924ad..fe1fce8f5a3d631fe649761f02a71a3833d0bb55 100644 GIT binary patch delta 620 zcmeC^WxQFz!Tgz*D|*wp_>CO8%$&9i3=DeuIhje58RaY|A7idY71?}=#g`FD=pdKv zG zLLhT?Yc59%#Lb^|7b9x~s+z2Bn2V$jS92~?V1zq|QW3)}uG^DmJjt=T_ zD0CKzgM)I?#a%b)>g?bLaC7ogJYV2`JkQ<#e_!WUH$frvJ0*_BrNb9N3RSKHfdFw_ z)316u@vAO5wwn#z?GVo+y|!T$eBV;LwSv-U`7O`rtEWa@mgSzKkTP*hM>4IBS8X<> z?UR;clu6C@?7Hphti3{6H*^67cs{%vL<$-k3la7asbi6|=qDEF$8;=^7Hljq7D`xP ze-ivw2cx9bN`fwH9y^&k1lTWL{p8i$ IxhNvJ05**n5C8xG delta 402 zcmZ1|epix%`7j40Xf{=Is diff --git a/lib/botocore/vendored/requests/packages/urllib3/util/request.pyc b/lib/botocore/vendored/requests/packages/urllib3/util/request.pyc index b6a3328857194a1cd7f2598d464c7c3e06a78636..f319517f368130e1da7a6dba208fa8be3d9f0744 100644 GIT binary patch delta 49 ucmeAXdMCia{F#?4degc1jU3wSoQ@0(40`%GnMsqo+0Uc!Y$w0xkOcs4D-MtV delta 207 zcmaDS&?Cgb{F#?)+XbiSjU3wS5fc~~81xH@GRqQ6QuWIci}cg-b5c@^iuFrM^eYR~ z^UTZ2@{G%q%#BiV%W_N7tBkYKO$-bSDhrJCL-Y$W3v@H{ic1o6a&%oXatqQ!^po;S V@{{w6QYYK6pQokawvz)nWC53NNcR8$ diff --git a/lib/botocore/vendored/requests/packages/urllib3/util/response.pyc b/lib/botocore/vendored/requests/packages/urllib3/util/response.pyc index ebdbc2c3291b0f966bf9fb4fadf88ba98810f277..594906bf781740a77b7257f2d887122adc0ae015 100644 GIT binary patch delta 67 zcmZ3%*2T)f{F#?4degc1jT|!>Ih`0781(dWGLt6%WNbm<*@VT3;+NC delta 213 zcmeBTUBSk|{F#?)+XbiSjT|!>BPKF1Fz6Q)WtJtDr0SO?7U`$u=cJ?-73-Ij=vNk| z=b4w4;l2z3E*1Mvk=toc0V140`%GnMsoq)Ezhb3C1#_2w88o6JCcZWWTvt zR2fysdb6c?1genLWM#=$XhtoNVnJ18z1dtw6kX`PEI+zXqx^nWG_x+Nnj)#%oS-g_ U#0C1rYBHzh5fnZ4lT);m@?SfPEMvk=t5q%5{4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`bqgE z`N{c3sgvtvtT+D@NM@w14GVMB6JVX2yZKL6s1Pe{QV7-}7 zN|eSnq)YSD&W6qPGQU`98wY!pOljwSP@M=&Fr z&`ZvICM2N^JYP|GR-4WFQkjv2fL3kR6JkRbIwmTLZgQ^pZZ?F*%?)zVEC?>h$(wVP MJ<&8x_D~H40LU0W0{{R3 delta 1185 zcmaFqJlC6p`7(mKNAfo~9}f035odr~m)} diff --git a/lib/botocore/vendored/requests/packages/urllib3/util/url.pyc b/lib/botocore/vendored/requests/packages/urllib3/util/url.pyc index ebc5e842252f38fb6fbdf5e8f537d7c3db3833bb..e401690583078610019e06c4414fc4013cb85114 100644 GIT binary patch delta 215 zcmX?PdRLEw`7yggu$ u?#Z;Yz+$s9k0LWIZLrhw;~j6o+y*Zg5XY8RMwkZp_q;&0<>## zyiyiIWV533KV&mOj+w7Mg%hD-GRWr5hE2#$1_^C7jz<;(X`EsjgDzBHuE2z37D$zV z)jo7pel`cuh5GFr(S-sW7?FJka>PZK5@h2+LPy>Gku?H^CQtF)i{u8dKCc9HMH_t{ tBPoK!8sB6^zd#gGjm@9@G?2A|LUdLDQuI#V82ABAi(>E$WG#ZB*#I|!l3)M; delta 2953 zcmdlrgYnNQMh@oByj};mRORiUzS*;pO&AKl3G-(Us9r9 zS(u(@URIW8T%KfZl#*MPTasR7oRw~3U|>*LV5A?SUyxa#o0(T!l9-dD>ynXMkRGC+ zlwXpcoL`hWSVn~SWN zXj(97Y+h7hF6J(9#PUlTAHO(9#0+&AMJQX&gr1yj=jm{TGe^ diff --git a/lib/botocore/vendored/requests/status_codes.pyc b/lib/botocore/vendored/requests/status_codes.pyc index 1bc5fca448a45b340122d416443e7b8bcac055c9..2a6525489fb6dee5a34612c01315e14e0a812311 100644 GIT binary patch delta 971 zcmX|<$x>5M6h(u8CNU8eK^hxc6OflDsE94nDu@l2MgyS{v57=7@B`jQ#44*Se?tGk zsWS$YGk?J!@UHWyJ=t0N>~qgON$$7sPfxP`Up8I*`Fra}av~GCxO3sj+m2JkJ!?KNQ zL0XaXNSl{p(cM?_Kr{~7B@aEh31m{WDeN>dL(OiQRr-kFF)~NZZkoqF!CLb|9Qg0= zo{~I^y{G5c7qW|3C%c5TeQoM8c17tb_NDAAY*BU%yDnSu6uAxgP2w%AZMY5Di+fG5 z K-l_d+J@^k13Shnf delta 2098 zcmZ8i&5j&35Z*A!?9U`@U|DuIEGPjEBhYGA2~s3ZfVd$cMalt*2+Px5)9q}x?X}%A z+k2UucmSFcLgEcTT)1%I1(3pl6B2jMyZ}{Y_soXNjQcB>T|Zxa{_E}UCR>AlZ|(f@ z{F5(#-un3F(r;~SY-C0Ur5hMu!wj1iU5g?|kJ2j>m=Al8OcJY$pglao2~*ZEJjeuxWMRRS@JFfI}A zJ|7&v7q2D1%z+G$M}RkG8CXI%ir2fJ21nO?_v7H+aviHSf-;6a)?0Xx0}r8x{f!=p z$L!*#l`be*t+vqZ2^&+?oN?V$K?xsZXuKyc25bewFC#eWLEfeO%l$WR!aXX+c^h$A zVRm^d99ZL4S<=O-7LD)Irmd@cveGDQ&Uk>Je}yb&4!N+<{eFFW$%!%IX~Pq95^tk? zXQt7qY}@1vAWSI1u@A4}Uh1qiLDVK!Gt~z{E*KKg<)U40j66!{U`gk`ia!BrOi4P* zEmsb*z|~sAF-AIcg~gP}+k&g5#`dkfDN}4=Q-e@CGc{H-0Fx-9v5ys1e=2kIVDg%C*hp_tBNwEn#CRn_Yg6*yY`wE&hNQfZ(N5|D{622x z6&Kdy`1qOPqOp`w;o-s}ztFOZHO4^I$2pQBfV3tsS<;dOK?%7wV(K+gmo%)=N&e^- zfvixW_2lq^A!bY>R+;Rq=Mu3rmP_PdK_gePmJ?oo#wvHa+lL=|9x82I4oJFaAUZa- za59HgW4OBsOzv{~=ztaJYO9j%+4g>vebQzeq&DIQcyft)15V&rSGkYcEghDbZv8(P zy&{J(6mO08zyhv`MXbNnO9uhx9N&{N$tr#hQz&Y$pR8lNul2=Es4f}Ur?c96B z)vcgFE9#-gYhrb&_gSTAFtf^_9CAVMeTjNZW_*soX>|19=9m~bXB^JT&fV_W?u{o* zDH=9Kfo|nJUB&BOZhTD^MurNPHpz&+(P-#P&y{y*|ySqqkx=$`Gu; zKs=H$ZTn&LMn50FjShQ{zemUKa{H%J=L?mGGH&n17cTJm$|3Lm+5PqllGTZIYL3B9 z=F&}OrouM*NeGknywDHlbNyg3eRw~w=XEG9A3QBSI6XaW?fuE)iBg3b1 Rw#DPglwW)Y-PgDO{1344OQ`?= diff --git a/lib/botocore/vendored/requests/structures.pyc b/lib/botocore/vendored/requests/structures.pyc index 5d3cbfe45ce1cccb29025b3e2eeabe7fc0c6ef03..f5cc21b0dc15b72ecab3080a32fa7f42fa22a448 100644 GIT binary patch delta 360 zcmX?N^jwXD`7Nha!dpmN3q1IGXlFs8pw?z~erXy; s0?>xZp#qsS^}^(j0_C){U@k2U*P84o)6dCFn#`!7x|x}+oDogvJG(kFlF&n6 zt<4L#^O03O^wr-yjdv3hk}8l{M+Nqy3o(kwu%M}$CDDv*JV@g#nZL-!Gis=87M2%A z6;j>2Siu8bC`0Kxx{Y^K&myVX%&74gi3|2}q81Cf&?D^|sOIQyw%2DvbLQj+UM!oB z8J$DdENEJcs#z7RlGVZuRi(=0zNKDpoS3%Qw)_oefwGX@;8H+b7d8Z>uY<}o_ z72U`azX3Sg}g!x7!5yxT%ZdgG(bc#i1-X5z5of35QHd3Nu-nI!%SF%gn^Qq xWx6Kpz~!3*qJC*O}~0{|9y!&U$Q delta 3508 zcmcaMm+|Q)Mh@oByjAKyO35wDElIC3&Pq2iFfgbrFwzgvFUTy=&CDwEuMN>bhOrCALkhVo@mdP}ldO>xw zo|!gnqhWHpg#c4A!{nJ3S7{nnljm4oq^Sj)XIoj&IM*@S2{4Klvj7`^=~bBp#q2;v zN@`jTun{;}+FpgWzRR_rM&pEF=;X*)vboqPoyPVA@NjJwa$QEdjI;Tm+hp3A4sN42 zd90_g4e?$EjP;*^DJ)1AL}-ABVi55KM0^DjAR!1*Or!n?Be+8{`Kh-FcQG5#viQ8z zlA`3zaz2L{>;C}xL9ao?8xZjpM0^Ah-$2A~5b+O0Fft;$6zpbdI9C*B|7o(fUpD|s CYtjP% diff --git a/lib/botocore/vendored/six.pyc b/lib/botocore/vendored/six.pyc index 33c9ca1e4f5309e9998352614a3d4e3dc943444b..396a29c2875f527ef3a165c8bccc6ad42f6a6b9f 100644 GIT binary patch delta 1467 zcmZ9MUr3W-6vp>WFP0PxvTUEZB{Rei%U1M{2o_kDin*m&YnoeWtt=ALTDqFun57r> z)-osrk)je?z7<3S8T5yQWKjf0)-se2$ocEmX8%kKmrZijH zk69VPkrz8|*)GkV;j~yRi;J2fVUaR)F*mau$Y_Z!US*yG;)^@Q z^L_&%&7h+Ui0LdtdY+~t@hiKLk@5N0fTRqkn9ivLLM0}hZyEXH8U{k?b8+Ys8m2E=^RC2VWo%x92 z(uf)(y32-um{rRg;%g<&p8CJzs{&2Pe;iIUcmEc? zQAX7Ra^#xTpPEP_vAY$2IuIRL9iTX3$XPXWMWxM3RA4rbz~DqJMi6P|6nz z27!2L(TDCGb$CyM`drt`AMaCrDVR|DfzW**WHcVW$jHRbFc4~NWLE$`;JaxDE0QGW4$Vr{jmUk7rwZm9TFY!O-#13 fbCsr@mj_S0OV=)liY`Oz6VWbp1TN`6Ibr<=ueYrg delta 7756 zcmcJT-Aj{E9LM*}MN8@;)XFVcH5V$$Gu>p19L?I)O)EE7mWjFP-o)*B+@7{nY6W#y z7ji-gted(ir56qe5{M8a=#7Md5CsK75JjRv7hbfV+Mn?K2hNAj@AaIsxGGGIskH^` z`wFL*&Rl(?ohZ7TP^na+oQh|HN?6PUQ({CK=nJRPqN0dHgVCfdlSx{#AzN)6FKWdB)|`4~D`q$V z8T5EHY^`_>3t29CjRla!ci0ZL%G(g+ry)jh`ns9xoA4O`K* z;UG2oKgh#%%yal94nQH&l{Mo4RHygK?t|;pYIqD)U>gP}6u>)<`~t@)cI+8W;eV@H zj5qL*55^HRWCaG`K2rlQ(>saaGsjPYDJ2!JU_sitEYXtwQIWwx^0SHEt(=4cxW6i0 zh$Vcto={^6Hk%7rOtd1N*ryAy4%zx3&Vhe*j9_!Xa?Us|Kx@wTxWj2A<$IZbX;9-b zur)FAmp#7wtN~2%xE651s?nFSIydmXx|0ny%Tt$3Gd=U7W`mkS`^^bZrliK>fVg z
%DGUakV1?z73#V|jcNlj#HS=umH(-2d9=!{@VG4YIL;?O=P=(Sj-c)R_kY+P6 k4@`uf|J)R}3&KO*-Tzr5jInyDN*HHR3BR`aZ|RfzAM*6TCIA2c diff --git a/lib/botocore/waiter.pyc b/lib/botocore/waiter.pyc index 503a5f8e242db893e34c9ee493aaaec5f9a07229..6b457cf4efd8871127fc28339ecef52fffccfffa 100644 GIT binary patch delta 466 zcmX>Tf76$P`7Pl>`Wj)P^5L&!|9f>!20lUa# z9?p3Pd9a8WR|G<2^D(Z8%t+kzd@4vLEY=o4;!SQAj6+gtDJ02+;7(r8Co%bu$ZaH% zucB!P-sa6>eaL13m2ciCaSTal^LZ%_Bre#k&NBH(MsUeSAS>7DXxel zIr+ZgKZMfBrpf_Gyt~R*ka(P`K1jT^s+kDh<~+4YXg=Otpg9#O_<&K;g-}1)UhfkU K4-^}7_4NUYGjg~9 delta 2816 zcmccVdnTTP`7OqNxR&+xS_TXlldc6@vF^X+at-4HwxgEL=s~G_-k@$SK;| zFnOZb7up36%PE(vo+X{cOjA|K818MSl M)qAwFV49jU0J!q!lmGw# diff --git a/lib/concurrent/__init__.pyc b/lib/concurrent/__init__.pyc index 5c4297bda4bdc990c9f8e441c197f331b2c355dd..9f2d29ef39380ec88eb87f6a5176b6b22b4d61e3 100644 GIT binary patch delta 29 lcmZ3^bd!;T`7X#)J>8IuAq@)%V>z9=1R~Dw{ znU|I28J8!S8>Qry<(8yZ8E2)N7#J8-78vP==oe%b=w{{>mn7!o=(=R&7Nm#hraD+vu&6+sx39bO~DH-#jL{PI7XEYQ#>I7 z|FwAQbkLR(eXfy&nB;DZ7{OZ>qKY%+y>za?)~aGYAX0tHsi^jW5scN{(C)BPf5hav z;hu@M>6eJa>EF+NxYUbaz-Tlo%)yut4|*~&%F!cuCE?=9i?RF>-+$oqeKX&gdGAeQ!@s@d4+Z|T zg+Fdy$ghPy2XZq$pHEtL#Vfca=@o2Qo~af~wj*6v&ee@t+Vg7t_ovdSqUo8gG2cIJ z4CuN(XQgCTS`{lhk z0@3(s&h?zarfB7a(SnSC&i5`t`AXkQ7{B?g;my8DWDRM2Lng5nuj=2h0*k4iPyt#P z_=@zH>Vxl~{IQ`QP<}f756BmsAO4H%0m1WUA0w9&f_q0kVFkh$w~#5)SiO7>ch&4& zmi4O*Xcx0S{vIo!OvI4_-E`$Tas#5RXB=b=32xj}gRnudmO~C{!Ow2*Al()8=1vBd boV^8UcOF_j^edl5o}V*!p`S59Zzs+Fpmrhc diff --git a/lib/concurrent/futures/process.pyc b/lib/concurrent/futures/process.pyc index 5b0e37c26efbbe2faf6522051ed9026a06bd9bf1..85ff9e59c5cfb02e79007e67df8b07a155614a1d 100644 GIT binary patch delta 384 zcmeyAbt{g8`7wymbT*^uv(~jmQ?&V=-WGHr2}5~QA?3*%joMI*lH0t-m={%1 F5YUA6!K delta 1949 zcmcZ=_bH2m`7B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJ!p~{ks z{5;(hpmC)onK_gBnWQI|F;1X^Jx}Rihv;M><~lmqBRzQwb2J_75uL2d@}3U%NKbZP TrG2;^XHBAmUnD1cvk3zLcpNEe diff --git a/lib/dateutil/_version.pyc b/lib/dateutil/_version.pyc index 3e07366d07e64cc9aec696eb80940ef15314fa65..9330a7b00ba88ffba53a73ed9611b1fc91cc1f36 100644 GIT binary patch delta 35 pcmaFN*vrVl{F#@lanrf@i5!8PQVa|Xdipt;NfURdv6cWi3;@B$32^`b delta 121 zcmeBWe9Xwf{F#?)`vs@yi5!9P1q=)f`UORqWr-!J`elhl`f2$&DXB%p`Xwd$m4)ef z=4EAh#^p)oMk%>vxh3gU##!km1_lO|1xETI`URNH1?fPc%94!y WJlzzaait}hITMrASc`#HFaQ7#RVkMM diff --git a/lib/dateutil/parser/__init__.pyc b/lib/dateutil/parser/__init__.pyc index 609c3339814213ecb834223c3c1268833d36c389..b043d489bec3c97b195ec1003a24b897614038fe 100644 GIT binary patch delta 122 zcmX>ndPlcutgq`7E~o7O)eCdnY=-aZSzWQZ4NYHe~}w# zB0zEfJfIKx<$puLiXxZi%l^(Ui<$V?VCSd1oOXowsjAXm8>O+`_oFgemV7ez#7vZF~JnuwMux?LN@ST@_3 zbs{?xX#8de3vV3_ERhWZxkS_D5)+atkdX~?bsS!on{ng^i*lm|9fBw3)V(oXp#fTRkfaYpHCPBfu?^@+&N z2dSFX6ozhAb_)}-&_xB!$zNN&(Tv*N_7_J~P0r~$h$^yqMYj^VHrL*l zXo^<$T}4y0`R9aCWFb%}oSf8wo+8dnTaD(w$)9FEL^IuQb_lXjjB}AQAt*?k=PgDL z%f$5ukoACkJ7;4Ys=<>>Hz8*Xkeb%b=)vZ_B?vh-FDfW*mOU7P=IG6D4#%TgckC#7 e9@`+sI(hT4b*PTmeCN0XvQ|(s17(5Ylb!(oSadA_ delta 7520 zcmchb-%C?r7{}KZvRXx9y48-f6hzH+HdoFF3fe}L1QD~FiMH5woNZ@k+wrWKWDup2 zdC^0^)PCroppiP>K%xkwqKhExVjxk31VJ}l6hc8o=kX8&WN#8A`;DHMO78^X-W2Kn(WD)_O?Wl zT2htzJ-yN%m&=t`TEw8J#1&^;&Z^-=!s+ixDw6&vulA&5XGDKppBhgvx8;}_8v<^N z0ENmW0!|$~+&W6YsfDhpP6CbqpR3NGbGBFoNLAk^;LH&)1o&zlBH>)KT_xf8xBa8w zFloDW4LWGG4D4?RICdBl0t6fZehCUXCtVXmXXr)1{?yFlZv+lns;|IL8?QD~Lk`_J zp6YuIH%U05#sUeat_go7aNm}ju9N7Q*p(*XxSM4X&Z}l1;5gU?=Lr6Xst1AX7TYO6 z4mRzoHep-G7CfKu)$o3Mxi^9>MnA$k;CSmP0*(OX)+hysb$j=r4~R{*eK(@3;p_Ct z{%80gx5W-{;0n4R-Uhydy=w_Tc6jfj_%#*ao&N*29##t6K+iPrxFrt1-GHrzUmUQ` zU>l91ryV~wqbuUpEyjxLNI>_MFn%R)MfKT}G&7n~jrbs5a$~|KDEGCKj47b~#TTWI z38b?xCE$iAn>3Vz@Xt&QsY*4kmv>ri4%U`T-9Aclf<59i^Q} zrmiC81PAXB2dD3DnlfA(TnYzx_-l`GfagJUG!~oSL6!!j=&7p51*50{Bh%=UIumHs z@K>}~QY?$8C{}4yPuN27Fn6wWJh$&{u_+`#d#L_by(!r_WE}Ji2CusghM{#ki6`=u z&8?IGga^?)1gv zdBT6@%xNqBjr6V@-=pP8tOlr)lPyaYJkXG-kIlLg);>8vyh!RzT?9+F0LYbM(+o4C>~5y^xlr5;cmi zs{>QI$~n9UV0&YAweNZieV8Ml7IHJNY|=~lLD~X+E-jm)?F^EV08uy%E6+hR*5113 zvLc=zPj_{}ikiUlkX=9)}hNXxQ>V=TR z03z(+(LHvOr~d8AkUJdg3QZ2OocIhti~;Fppj!poF?7?Z5wl`oPMw7V3Q)(rbS<22 zK^tT4tMC&clz^O^WSFi+`WjrY4i*HR9b)6N@WKcKALVPR*Y25GlgHhU5lsjULt?L! zv|En)t&6M4hoYxJJIhS=KmoN?#q-)xk!Iup8jC&^!t{MK$=Tp!i#hx{U656vbMk2s zC){NJsyOc%1(boAGOL7ivZuZh0erN5wJSvi7&$H9KZ;D7|&I~^DVLaZ?`kPQ|_1eiWEK1 zQk!6S6U0-%h29CF&>P7_FXs$&`8l^^7+ZLrK1yc%9t=;@S@(1Dvj0~a>mOYny_(>? zgJY8`;8`udw8E{1QxKn~Z$}rs2^oj|48YNe#Wh;5RV?0H0_NOyz>LS++kyYy&)kf| z?)q3<6g0X&@of4pORg|lBnYrq+t_dn!f%Q{MhQVtDqUCA)^s^V->9n%uKN(A?g!wL zJqD`@23*;^y=~w$?7*+K!N(osHp>RS4zK0_pgw#JfZsJ)SWN-U0>A;!d)e#>U#%Vc r9o@WSj;4;jOyz|++J#2tJHP{OXI_P_vwvK=j{E5qbisGk576>YD~9iYlqe4zBE* zGxeEKeIY&hnL!?!LVaoW%~uT9Frf(p^=~qLfvO#1YKHkLB;n14ma~w!;GhB-*==o% z#mLQecB{~YHzzvUV=-W|f^$8ZlO$Z$ql#>HaE(SYZ8FGiX%7s4&+wd!qE~wIdM~s{ M18QZR{M%a-0A%rscK`qY delta 2638 zcmdnj&bVX-BM0+mUasvIoT4{!EMtr>Wnf^?FDS|^ODsv%FH0=aPs`6qNi8bYFDcQl zEKJWcFDuJ4E>AKyO35wDElIC3&Pq2iFfgbrFwzgvFUTy=&CDw81dUD=o>)ncQd~HCaNGZ}WXdF=0Acc85;(@NHHV>u08eWzw5(NV2og!6K>2 zOma);V$VsrCc4;@C;ycm_H1rbcuSv@FkQumoen-y+{~-POrO%hST~;z9+KXCOm`C# ztu5NzXuwHxOMqpn;^r+ztLPFvn;T6U=wXrcW>qsw`UG8v#VUGOB)vJz+Kw(kH+hFm zE3H#DFwsd*PPAP|2YVDZTiS)tCx$jUaMB}&q$b~WoJWU{lbSrw={z0mk)Ax!Sr-7P CoU^h3 diff --git a/lib/dateutil/tz/__init__.pyc b/lib/dateutil/tz/__init__.pyc index 9d141593c9b3ecabc736365631a0f12cf889b683..4df94405c0aa370dfd9afe42c6d7d38288372066 100644 GIT binary patch delta 45 rcmZ3(-oVDe{F#@lY16s*jU1LtoU#lI40`%GnMsouFcl*43YcvGAqNZq delta 217 zcmZo*Tf@%5{F#?)`vs@yjU1Lt@x=@b4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJ!p~{ks Y{5;(hpmC)onK_fam5|cyqwxWqN>Q6%v5#QWv(1&Ro%jRjuc4)$zz0G7%gF#~Qee<^{ r#z{Xe>UNmD!UH_DF2bXVzz?i$(j{=COnpvjBsxGBvTNm=(y#&Ce^z zC}sw-QW7h{QW^QBMa66&sm#36l2kCWI5jyxFQu3pESg-D59NbYl~iTsrR7g<<(@|m zFHCmfNurBA$9c-=VbA6`-g)$ids)F}jCAmk_+({a4|>?Mxm#F^9w8^b`Ks7z)M zjZ_^SLQZ0{xAYnMc<7xG+h$w&jr1t3B_{JLh0-PTT9sa~(7__{$?uHVCr?q|O9#6o zCKqXJrHeftn$zfDkND<)ntgOhb(`1fIMK%<0ex9|l;0AQ{S4mHA&Mj>#~7y5#hxdI eQFO3Jd~%#o0bT5QXS9kA_8g>x9paOlO!NS?5L`7_F>FzD&$WF}3%$R$5nj%g~2i1cJ#Wc`fHr6p{BRJn6|+JU*x* NlX!!W1UB+o005Z}Jv9IT literal 3561 zcmdT{O>-MX5ba&b@&^t{D%b>4ROtXIL6wn-smg_-Afa+him^Fh4qJMRdz-S zaych+=I`(~_%Hkbc&}G0IVP@xlZ>Pt_x8^0bocao-ERDOYwPzvp8V94`KN)u-{5i? zh6KMrAdLb!4kSoIv7z(>NgDF2$c4y{#|=rEwRUZxZA#J-+tj)13+0XB zC5N4NuwnWaKAixP-{g>vY+^GX`)%AsM`wp=KFF*u@`b&e`vjN!5Q7z(39Dh;aY)-K zG{hWsLOkwqG9Bdg0+)M;0n^X%@<4njzCrmSlwniO133@nH-Xy%^SJhTXAProQY>=o zcOhK1DvHwF`8e-c&xvj_wxv;THaHVcQy)bgZjYT{Q0DYyaXE0l1;yzriXBLzgPTC= zj>~i!d)uAHWw&2si7j2%`|j-JAb&ia<_E8Se*7pIO-Fukb}$@#xxc?Z8$aqEb;s#= zPYuelz3)y&;{jANe^TUo30^nxY1Ul`{;V7Ij0@W=|l2ZvsPD3}At9pK@&nYU$*3~cubz@?lp>)QS# z_U+R8NtwHL-0qjwowRE>DSQbVd0NY_ASG=rK8K27OBX3I5}ViRY2{ z!pB+UEHIfk!}He?HLzY8TGt^L65Ed_nXl599x6R6G|7Kj#R|J`9#0~ diff --git a/lib/dateutil/tz/tz.pyc b/lib/dateutil/tz/tz.pyc index 83c34d7ce5e65a293c79954a67c4b64be05d1523..1c51243dfe1cc6a4fe59a8503b794426b11874ae 100644 GIT binary patch delta 3748 zcmZ`+dr(wW80YNjDj+MkAu9$Z4_O&R$$ShxsYKC8J&Bo?xU#Ek5fFQQ734_Gs8|j7 zk)|{XYBm%Gcq=RHVIz!<+E{<&3&AM0nXGhlnz5IKhF7`@B7a8Iv6L)SwW=@=H}pti853`~q#6<*5> zl!K}xem61K?A-=t2+fRKVqmHbI|o?@H3t|q%F)*v*b+S1G`LX5)GUjk6)|&lOq9bx zDb9sDrZqW+ZWtILqqYs%qW6FJ(il2Cv_hu_L+{_O4;#$txC17cH{)M1GHTVZy%r-y z)tP;0Z-QPGo_8d^XOinlDh)7dYw}gIj}BK`K!6a)^pSSG5U8(G^Gy`hq&;WUqvBC3 zOiXtAt42nhJbI1UkcdPbnc+0is`_BGiK5Jhyhd{rHEz3(K{cx*`cVA%Jwe#<6ZCaP zRFM8#q-5@EX8mns)!R9dHs)6&=lx;wTYZ6VXO!n2s8fKen-?_N zHi~D$x6#DB=|Kc;<(0GD^sqa@q$pxk?N2^p4c`gv6hJLKz1S65j%6KSHeff^E>5%6 zVoB7oI9_K4ku6-}v^*oFACc04`v9W>+XT4!VPyvl1V~faSdjq5BA~=0e<_MfY(gaX z18;x$($82ObuLX|wbUnHABS*&)zgmrqVTtc9*+PtP~1pwKzS^#3J*aYNzyhVze_g=>*L-14b zZwS*5+}*A7 zxYx<}p2doPL~UC#QaXC|pT%mffS~0PKCu&2@md4>#*}q<+xU9AI32F)s{xIpYQY=h zSlStwJ`0!!Z~)E=xYtc`l4VqzMjkt@{#0#YtdlO+nEG3$>+;s)EN71}>kETzIUeL3 z>k?Z9Bcse)TI4S9YVF!12!0XJEkG-LvB$fX=YT7xziLklejGYVFg&@@%RF|YFUD;abqy=@Rfy_G9OLg^@R8&mCt0?2?@L_-eF8dEB z9MhGHpAh~HHSZe3UZjh=M(8qlr>m)aH`&%h>;^^G4>t<1Kh?(iZPsvEwi^&Cr`h|G zoj-}?y<%3c?W<;aw;=o%#L)P%ntr9sSIXr>mG&OQX&{*=A%{ol_pK~;7X>vhs;*9b z_gcTD77;hM3XtY`7`EYn0e}b`NXrhf@}oT-%X(tLsNA`a=49v0c$7y$APN_vHT|VU zKBdT4?DgOAj;MK5c&9kwGUoGiym{#4)7UQp{3F06=d|ns={V+;W};fGt&Ov8_{B(C6H9Fg5y57)k_S=13p-%^*+wy4s}v5N7)k zLOns63m=4ozihP0=ax+EUp}Gp1Fx#;tL6Q)Lq-i1F~(E1{79BH{I)Qz4ZVNq*wHzI z0~6U5i+iP;l{C72Rje%cSV3x;R@`NZe~nKm| z>ujNmGA?8!JT7eUc?N^BBqpoBT}XCTz^8En6f3S>=jWAR-lEj51MD$6(=|?H%-)?c zy9xABfP9bgkzN;D?bD*jt*j_1d!CQM&0_&m1<0DL^eW1WJPX_`z#LlNt^bID)AoxM F{{eY9XmtPp delta 12214 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 delta 295 zcmeBY{lmt={F#?)`vs@yi5%Y}G8q^c^b3kI%Mwdc^~(~A^waWlQc{bG^-D_hD+|-} z%*)F1jLVbEjZ$*Ua!b;yjI+{B3=9k^3ykzb^b0ZzbTjjcOA>Q(bX_uX3(`aMvvO05 Y3ld8*CUY?Epq=3-8M|m_cnp&<0Q2K%cmMzZ diff --git a/lib/jmespath/ast.pyc b/lib/jmespath/ast.pyc index 93738953742c38ba1d794f84f628fdb5e1220ceb..064504aa14f9a7fdfb6b48a13747401f6ff09878 100644 GIT binary patch delta 339 zcmZqIc_+)k{F#@lVbi(zjT}vkoT3a240`%GnMso$F;*h+HZx5_;w@yJkHnk7(t*UQ zU|oX5D`9Iz;svr-A@P(sko7Thwj;?s;zYLLCf9T%xf9&INW8T?$for2_9Mxa@J&GC p#qjqa@f-x&ka%)}$Z||VEl6_rgk~f0E(%XV;_Vhe_U(4j006+0RCoXY literal 5639 zcmd6r-E!MR6vx-GlQ`esg_f^r3p0k9;Lt)k%+O9t;DQS>!?s)i7amo+RyN3zkk+PV za>+aO9eTyP@B*CwkyXiZ?1sWvb!In5@_KiF=bSy~NcF!rR-ga%^)Id%eQNaoA+_WM zbxMdoh4`6-8Vfa{7Fbvis?I`Ps0IrSp%z(K6l#fuC83sCSQe_uLQ|*}7FL8>WnopQ zH5S%{T4!Nhs0|i2gxX|bQ>ZN#wuIVdVOyvj7IuW%WnovSJr?$a+Gk;3r~?)bgt{gk zx85Qgw@zKwP5}7$I zY1_p8GvljR2NpvIj^EcU5=0A2@yNjGY5uZn;>6k|x}Rt_3{*M}gA>xVXh*RbI99g@ zPTcN>zS42hwzfU|%?s`g2EpCmpWeHpdV`+z{q=FpR^+r9hxAqj_)6S zbJmNzC++i|P9n#i<${ygPots4YS?J90IBAp#|OJ*rR4o61z2(!Qk+vsOeth;4AOv7%# zUnhwPg9>OR=r*WjgwQ|QOTz1PG3L|2D|z!Cjp_CS*Ahf0=gE;Jrc3cKxnzGw=fqx8 z1@;=Py+bX-o-ph<_Q-2X*l_!<(Z0GA6jL&26?`x$d^6*N{?VZG6Wo7?x-rKcMJtM4 z1^0!Dy2iIU?nH5TuGzvlZAylDIWGCSYdJ2(#yhhd8LD94r2W8r8T*87Uv+2^l)AoS ztq#hpd}^UYM20HhV3GF5Qj1yiu zv;0B0N%~JOd!|f{i0KNI9$n2bE8eEne!z-QGi60&L$rVSl!f9o@r^s-p_q$PBE5=< zt;MAd6hCVvR!3DF$PZ}`KVrWlWc)+J-cE4;3ONLcfh(CA50#j++B5>~{sf|w^t6SN zPf`=Ii4Jd0B;F%PIH^Q1l_+#19%v-0ey)ur{|s7@s4pavutbWIh~E+cP9hG-Tj*}1 igN`MZ&kfAd+=_ZGvA^nts_*Lu?46&`ZdMvs{rd+JbMJ!y diff --git a/lib/jmespath/compat.pyc b/lib/jmespath/compat.pyc index dc320e4068ee796174d0718d6a4413681fbf17fc..44f50682621f43863715c6afcd6bf9a3b107b639 100644 GIT binary patch delta 235 zcmaDUy;X#R`7Y00~@{!vFvP diff --git a/lib/jmespath/exceptions.pyc b/lib/jmespath/exceptions.pyc index acfdcbc0d86ed84a454f5f7a8a07c4f278fcba1a..72d39bba6964f594427446ea9445f5595c1828a0 100644 GIT binary patch delta 445 zcmZ2$HbsMj`7_6;FzD&$WF}2s$SJW|lxZ@ukfEr|W*HV9WTAze z;*+PdMxyGQoWS-0MMQk^e)fAPA`+7ucvvP2a#|onH!tLLL^c{|+vG6rT?hprCjqrN zp^9ua;*~|$c9`!1sv@v$>;lbbqQ3+jQAIYd7UV@X3}Pe8WF291G=-Oi*^m_)ioQiv s0Jd?G7?S_M&bJbOj-(Fc#iU2_!2744akR$3vBU)()`5PMIp%MH#T1B9+Lvg{efT^3-^?SFG5b z-AwliMByj+Px%}EFMfA&&h4F<)nYIYDXoOM>FJ)2+qcg-_jW7#>Ez0Pe!Ts!Oig|k z@c$Pm_GeTb{06G8)F4nhfeJdIGNI}QsuQUfN^w^?|Etg}>=`lQk=T^$G6Vqc$GPbJBlDzZe^cdcT=iVx9IW;}jRGri1z?pJj zXGL|+mc4IRy(d)XoZ4=^0~hrEi=S42mOF*&anC(WtSgd%aSw+bcM^Sn{rl$jz0^J2 zEQ(=KIg*duMzPDNjH3Vab_;FQ3Q;+BCrO?TOp>@2xfl#P<329^UFcHMvX9VekBZ)Y z>P&k-E!y2-zhes9cCLN!@7?^y{(k<+j2*$?x?!GVX5@Oq++G_UXqrwOSQ^?0#JYQFVa?$ga#Ut` z84W)}0A@!p0@%C&03rp*04YEMCLi&gzd?03-%tC!PFxxinG8q1p@8Gqh1h>UpFBUci-+bfK}pfxShdll=|#3_WNp5zcG?2@0#rS#GuH zdB^YB@yHaKU!5#XFYh@l%_@5O=1DRd+8#aRPVkoDBah zerLZzbKP#lg1y*~UUBN;Y}g+U@_5}|iN)LTrFDBLZmru7uf$#4QoDF#g+nXrR=(g} z%vnwOnFJO>>bLmeCaQ4`a`k(;nVEuG8)r5v>K|4Y;y~2p zJv5ByCusXZ1cvH@MnqAeA2L>D5l~)3$3z$ePG}<_0d`4P%D_U|Se(`a@f<-R^zED6 zqlPr_#N=#hz-Yk_y5=L*vi8=vq{jU3VT*^0XKYY0mS7R*e1OKUFc!=VD`sj&J|U() z&9{Gs>NOI+5!b8xi)7?VdAA;BpFV?u8nH(XRubk9C<0btThJnawHQqI=`~izfmr8Y z$onXk1~$TGL!!&y%o9@_<`Heb%^QD z6ctUWm@^~A!augk&6s0PEIo$n7E;c_ zWTv-oI=GabLt5;P2PStubX>$c1R=?&KQ6HAd200U(5ETKvIh|-&(Vh@)m;?JeTNF7 zumQPh1Q~t6QX!F3f&Rmhk3vO3xK`mNWYNEG9i znMm|<^r3sVEXC<=J{xU%lcO_wL!yyn%gpz#aIfWK6%L!?Vb^z-;b}vTNj%GH*U@X@ zzhe`M`mkuC$x*oa(gv*3f*QhBT}Qz>`kCD*67-f@=Z`OwARo7m98YhJj>WzFPBb}h#O0$g8A*Sl5W z$Z=L;dBeQdo-VU2BC&z2{I~g|eE2y3YLZUBLS>in6l7xNj{)@o!@OrkARW{*+iI=i zLjLkmp4DID!CmS!`h8;ifT!RxUHQX-9HDD+!SC3awrIvA&AEBB@hfwlsif+k`@gu{ bq(oba;^}B@p%JXDp`1cFGik5zdadz4r4~MU diff --git a/lib/jmespath/functions.pyc b/lib/jmespath/functions.pyc index e9b32ead593d0eaba617b7de3a4d6d9656c737f3..6014d5fe0aa324208c9a6ff58713b5d04767e30d 100644 GIT binary patch delta 914 zcmcaovM`E+`7Rgj+ zC1zp~?U(FC5-pHgio#Qz+$a4MNhE<;d~$&t@8h4v_Ot)va4bmim1$Fd8O4TBA|fdn(VAxfF$}rOL4M}3aU==$&9L9Xlhv0 zb|Q&@T%x01hatijF6$(Oa$kwif*-K>*^ zBmz{oxknczRe=;q>Hp;l;s>V0ARZtwS=XQiRSz%}j-ZKvLN(S1IpUyUy}8=h95tH6 zCM%f6p=cMI{Kgd33bD!e%-*1>v9O2?2x0{~NP`LFGQ(bX_uX3(`aMvvO05 z3ld8*CJQph($4UMn&O-Lm_-?{`8w8ofH#_lE(KwLq z@cyTr7eFcLH(xbvy|8(jKp2f};1PO4TN@?|i1gDg8WfcjC!Z9VNm~ngL_29`!9_{M z$@XF`w6)-^*i+hB0L;yk`K7rw{}C6ZVN!zHGTBdY18sfbEO(f87J!OY1Njo# zT5wK&0_`jSWw<&88pZ)Ah%^*)Y3qZnipjLIKvAiKc7}t(|D+NPQxMRC&9TZfu5~s~ zQekHlD`o?Bc=AeflYo635VN?XC^Ij8@?upQ*4&`*%a`Gr9H_R7wvhy?l}y!_(%h2G zEE?uCY$5>L5?K1FwF|& gq~+u%mVkvb^GYB#$?fePKHdl0f0U6BC761SM diff --git a/lib/jmespath/lexer.pyc b/lib/jmespath/lexer.pyc index 6dafe6a5f86b3a5caa02a8e3abbd6e13b982ee86..764a1461b31aac0d67748392614b0e776b6334c6 100644 GIT binary patch delta 177 zcmdmEc3q!?`7w_LlHgB-zE!MUi-$?Zs`8xRb9)+(hV{%qq1WiN_;t001u@Dop?Y delta 1053 zcmcbvzsHP&`7Fz6Q)WtJtDr0SO?7U`$u=cJ?-73-Ij=vNk| z=b4w4VWXYtlht_7($49Bcx!0q^v#X@WlS`4`zE2Sv~&96 leZsUeeDiS;TiTgEnOE#4%>sS$d$IMjGaQ&zC+`xM1pqQ6c=FxiNzZnKZ61|t_Z?1KbB5zuKChN@!n8+o3|Vdn2qL`5cVv{;HNviXoDJCav7 zD_YAip{ZDDI~7RUJGE+xF)4kdZ8{+_<{>RHwhCP-6cI!;=}eL-$z(D!NvSTf z=t9(XE(rj5V^{iE-W=3S+-6}0T76?c0w3$~fdFJYm`4X}of z(S$Q@cG!tktyL^VKCjA(W~q7AUU56^)0+1G`8NC9-f0c$k6nPqknY7kVF4?LFJS@6 z_)9Fno50o)wGu_Ff?P6>1S}vwE>blGy}d}kQXilS*ta9Y*d{~Ku{Ed!>L0&}1Mr8B z^>GdB5tGw0l5q4r%plgxi~#2#-`h4PEZFt=Lo8jJJc$GF-<>~`S8)KY;O_C@Uruu< A`v3p{ diff --git a/lib/jmespath/visitor.pyc b/lib/jmespath/visitor.pyc index e02dc6323cc8c40019d70a83d9c36a64e4aac9c9..432611076c1a54fd94267ed81b3eadb975e1710e 100644 GIT binary patch delta 1918 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 V9HOh*2d6YJGB{Ek86Nq~KLK1hsJ{RJ diff --git a/lib/s3transfer/__init__.pyc b/lib/s3transfer/__init__.pyc index 66e8d80b01a95d7d76471e9b02a91d27366374ae..d3f64c38ef51c7317b1b2504d415b79f884c88b5 100644 GIT binary patch delta 1234 zcmdn|ow5HMBM0+mUM`hQ=i)bVFbi?YFfcIa>E~o7O;)s(m|QF5i6pYoQev`&@KY2K z@yUH60Z1Z1U7G_$c^FZJCZ7|VGx?_||KuKVJro(4$p#YjNFqQhHY-YgWknJKxr1Mi zZF8S|5(}DeLLkfJG?iIMq9FZ6s^-YngIq1Go`M8O$X_HyAfK6pd7zv0E<%7QhqYK?mmqjybb5`aFG*y$A zB_KQxhs{Bx)xn-3K1K{xwdktVWGVTl4T7$#3HDMHmcxx92En#ioOeP|-5 U%F9tjHgB#lMRqwT%A%?x0j7FZpa1{> delta 6518 zcmcJT-Ahwp9LLXGi4BWb&Yg>CtZd8aJg1#(!^%=tT8!M#(Tlx!j%Qo5Z641#9kZgs zgl;M?9_S*$|DZshViZLX6jERYlF*HeUM?k)=mmOt*8lLmJU7qh`F_8@-}fBOEWE3(hb2hg|U%LA#7O%X;cY^)V!59 zGZ&?y%uZ1h$Fz{pCumtMm@OEloXZ8HXY*R7PcS4?mkUNZr4z4WpQUAp8Rf;Xywgwwv#NDV7&~%oId5$(fMpO*gN#N@H@rY2CbpeJ zBR2XHPz0OWabFUR_~CTg6v0;f&Ax6hf=2cq zN6!?U?GUknvo!3{S7@tNqD8b-+FL31Kz{x*ognDWojG(=zpTGkb2O7}~#}fP5`u>0Ok_lM{yGGo~3=;8Hd51i{ X+=+98qhJIbP+OsU&R)9YaXR@AoL&Qc diff --git a/lib/s3transfer/bandwidth.pyc b/lib/s3transfer/bandwidth.pyc index 9b5d312b7f40846a6ce17f146cdba223b4473ab0..1f9266f9ff61e6b5de48215650b4df1caa14aa34 100644 GIT binary patch delta 777 zcmeC3#CW)zgZVQrm&&Gd@f$fFGIPo@Ffi!p=VT^LE)FlnhQ6#ONyWgP3DtEH%VD$HHt|RlO1F`QA8vs+sGxLiSWx$MiUWLKn+ES z$yXH0P}E3F-lJHDA|knYtx_$TXE)DPS40z03d3vwWM9%2R&7(1W~T{kH}N;I1nTI@zsG5Nfe8=A=-)@xAXS#t7nySFHcBsQ}- rn4>A$yus-(y5Y}U)}ZQ}%;JU~AUf{RNNOIsPeS4q3P?Y)JuL_x-p delta 4179 zcmcK6zb^w}7zglHOB>QfqkXS6AZVqjyR?m>3nDfHX(WgrCvC5l-Z|IHHI?`k77>wn zEMgH73x?*67>p7tlf}Y7B4S~*Nc<1qf8hP(`#gD{=eaBI9oXHDA5ZfmG{wrYq9rX$ifX`BuB#VJ@Hbba z25rRZAHW8qHjj#qQT41l!3K>to?!__K5rFE2>io4hx~qgtSO3o|9=Rc_~4z$_%E=X zU?i~}EFsV{n@1Bf0-=e<0C?vy+6Y+K6pZ}AH7p_Uo8T&X3i64TRWXksw5k0!oDX)wX_;b!#8;OAWfaKjzZk@r8}?7l^3pjl}I-R^to5`1zBbQu4_ q#$fz3kwnMfzdd*Gj=%I?f=fkLeeij{-9L>@A&@;)!4iy)Q{g{s3&dLh diff --git a/lib/s3transfer/compat.pyc b/lib/s3transfer/compat.pyc index ae95c4f6988e0b6b62f63eda358f2d1f9c00c24f..3cf0da0421288a3edb7168e4c9c4429108b07ac1 100644 GIT binary patch delta 112 zcmew%JV}6q`7rr==E6{>8YGmd3APnoL9EH+wLDrDf=Bc4N(?srftDSZHbfOhnNpIypjB4*+7vIyL|R delta 1301 zcmaFq)aK2>{F#?)`vs@yjT|XlQP~U(4EhB{nPrJ3srqG!Mfz#^IVq_{#rh>B`jv(0 zdFEwhdB){Q=0+*GWw|BkRmNHACI$uul?6unA^HWG1-hAe#U+V3Il3+xxdrJV`o+d2 zMTvREX{kk%-wTUw?&1<)qOBcbn|Jb5v(nm*V4=y3w6$Y8EsgINnMh0H-wTUPwilgE zYb$<=w$s>(&GW^UFw@o!(aDKYF0{2mZ1WK*H(F0?+{p5Q+UG;9F8Vzw!L)PMAJTor#VZ<( zro=MhcSA5=<^i2Cil7*Ml9r&k#C?jk3@;QVrkvs|#+%bBF_PgU{Tru)hpi#P_+*A3 zhcj?yE+UZvUCIL@4B84M*v)z*G&ws&h&88!kk6bGL=>pZbtCeho?@IJG&x&>A7c%s zJY?FS4>-=7LL#3q4HQfZQ!qcWOeN%R5icrgrLj-NJ49$O6Dz+p7gO7;Wm&L|mTn5u z|9%OU%2o*tmOC)vUh8KxLNY(CxQZo6v9IGZVBA(4#zqFS_1DP9;G*Fb5gDwFqyV1P z?!(WJAvAQ3Y%;tJyAWag(4R^> XtQ%RN9ok2o#1|X*!5<*Q_?Y?&t1Ch* delta 6261 zcmcJS-%C?r9LBel8kPie##^49Txcy~o&7MTQ-dsJh)r>xMok%u{cyFd*Y&)w_|or9W%30rp3S8llJA0Cmgq_qpmFl0ivZGXX))4k>oNCZ!6?OF!fc#T2tkrl88 z{Yj3Ih~Ex@9$h~|B0Qo%&u@IfA_y(FjG_^pLIsUzx2KQ@UU$hpjYN3FaqRJgeHK5$ zKW)8r4y-|&93eDf(E%POa7Y4My%mCYZEo8{7xAqv0YtDz?T_Ipt>1nNRG|Dljow*B zBKYlRb-qU;_+$6oIgCXR)_?cB4#}vkfo#IHe-X`ycC16!S-uE5{8eaHd~ogE2gs;6 zLhLy~BKYEezqg1)@G`#khQa^Ega-Pzz#7y#@DPk(Qv+rAl^zKO&>EY;CAda(@Bvz5 zW3U9*SRCp^YgC7-aE%`!_)vL=>){%a5qKM=ksY|k+GrR&RJ1u91S8md_#Hf{Zuu!v s!;lY=$1glnk;n75+ZJhpFKfZ)%kX9GbX-P9H97GQI_97n!xnb^AoB~EI4w`|3! z@J@Y=zDpmVopCmS9(o46@!0uhY|l3t&$fQAEdKnp`z3){YvK4FyZM1a;KLvT$Qhh6 zV8R3G!H|Jy!41GQz~|Ezh<1(6HE0_|r$)OCItOCDMi&~i17Z;*bNeneXcxpX41yJO zBmILdU^uf+Q0#G)$SjlMKQtJ8%S1{sQ#6!3G}y&%$Wj6^sfgVmD-WVU zKo(AW#4r8XUVgn>aW6!|2#qwoET(bmSs#n-D%^LSudv%dGQpxA)kQtSmkQPNAX-DpGDNfabAdVhOchPt=ISGIt6|e zyP>b$VfHx=gZ`&7E4Vo1X`N3A!mg3MOB*6rr46PEsa(E9U7SUvt1zb^aWCIx0T1rc z;WKitaQ;zEc$SL6_{=0aJ(K!K+Vi5iHII`eW!B3(Ea^g@%yRa)u=|CQt|mNAc1y_S z^&NJ^_K@QZ{SPOqg-toD3K`|B*+KEa|F=r|nx{qzf2fPx=gOBhp zBdOh$zD;jSi5|zINaFY*r1~2S6jVKuT8(dNW10y diff --git a/lib/s3transfer/futures.pyc b/lib/s3transfer/futures.pyc index cc001a315ce3e8e1fb7338ac434d3d22324eb7da..dab24753819463721277308d729b333fa9021e00 100644 GIT binary patch delta 1253 zcmaEGmGQ-DMh@oByj&`q&c$!!aAD$%ol4qKa&0 zuMUHY7(D(PWvdTF_W2f*Pw|g zh_Y^0(Gx*8ZKZw&s;k5|HyJZC@(0-ilR=OZh_D3`lUJF@qZlYY*~)Y`nn;@2J~WZ3 z=I@Y17N$#2{$X(tNd%a}Hfvhxp!?^T%~TXc;*-zVcA<$Jx0`_`a>4!#nh3AsF;tPw zE=~q)XhKgtrlN(w$EYYt<&Er_xr<+WC0nG-8HNilaV#!kDK%SoEH!)mNEgVf{pAY*IHk@R=h zJQ88fU+?@2XvFit1{$%j8=Xq*fq<_F8+*Vr7*7vFH_>K{hVP&e_Q(nv@hh?fMzD{2 zgAO#KZ*T@)I@b;~z%r;&ykoIxU*i4(}< z&92&YXcLVPk~ffu#U%VgqcAdxRAByKy&v&FbJ`pn+f&fnYF?*XsTev^KU1sV(!tZ` z!|*vK8{ezozmlFlMUm~l#EppC+OAHB?6L#vn=lfVe}ZR|cc K^*DNbEcPGuA0pcT diff --git a/lib/s3transfer/manager.pyc b/lib/s3transfer/manager.pyc index 702e05994b04345320f681bf12eb735dd960d2b1..9e811cc03b452d63582ba84b5698cb012d7a84a4 100644 GIT binary patch delta 518 zcmaF2gK^6WMh@oByj&`q&c$!!a2Mm0W?*2@)6dCFn%w9uwt2spGb4(S_~c@VG*pqz zUXt@TQH3T4__1t`RX)y&A}qFfiso__RH4cH#aK6Q&=X)s72a%Mc99uPsL+ZN%`KZ> zTYpCv3bso{6Pm2)@B_st@y(MQz0nor&oOsFcset7Po zjH+6Ea<$hQgu=~@-f^h<#DSr-7NGzf-nssZ&`jCf5Xgn5Z}acqr|7Bz!`zTneT?Wu VFdO*Hmoh%>Y4*+&}j~@U4 delta 2628 zcmdn8g7MuBMh@oByjAKyO35wDElIC3&Pq2iFfgbrFwzgvFUTy=&CDw2gAvXCzFze=GF*`=u+9N*sqIen&t=Q}!v6YjC<^zLDe6y(1X;#|W zA-4Iy`f?T;+X0U9Q#u0dG`45+PveWsG`3^%e|6T)@61_foqRV7S$?Ov9h%muw68?%+;O7!6iP~*JCYhy&<+)(sL25V`KAeFD_aK)n-=Tr!@Bmm%kgW{V};9u#C1* RF20#9Xg7_63RIwk007V{p_Tvu diff --git a/lib/s3transfer/subscribers.pyc b/lib/s3transfer/subscribers.pyc index f660d0b7b8b582e489f2be9bad9148c73c76a60e..91733116643d690c3b184605c1e7ddc918ada6c1 100644 GIT binary patch delta 143 zcmcbpFiVDm`7rr==EcKFPF!k%s0^KFK7#c`i#XP5mIu{)eXKOK>I8()`KIJacFq1(Th5XVB7$ HC%k3==)Ctl diff --git a/lib/s3transfer/tasks.pyc b/lib/s3transfer/tasks.pyc index dd9a4ae619015af318d422493dcf9f98135fdd4a..0e5d41d978bdaf27f1a86b60c50446cbcbecfe34 100644 GIT binary patch delta 420 zcmdm%bRdL-`7eF!qLcsf zZbB20erSb+<(PU9IKU9&;m(=u_QH3VwYq_9`Y*x~~ WhoMN{4pq@)8G{ZK5s}G4hAIFqk74Wp delta 2202 zcmX>QvMq^&`7%CYNh=(AEl($ue3h E0Ld!{`Tzg` diff --git a/lib/s3transfer/upload.pyc b/lib/s3transfer/upload.pyc index 456f5fbbbee06e088ed3eb689faf75f5690867d4..f5e13862ec0109a340fee8ead90b37b94a91fb81 100644 GIT binary patch delta 1180 zcmZpB%6M!KBM0+mUM`hQ=i)bVY-Qz?Vqjp<)6dCFn(W9fGufDJ3yR2X6rR}R9*%iP zB7t0DlV@?pB1AR=MVJxX$p?9njRPrv%2$dc4-z@WpMWMZOCS|ZBwx@INyL#|Y_f(B zvN<593kzo=sR5e2`Hk=I48%NZ$&b((NSu0o5ds~5s>Z<%Oz+c zbF6YuMK)JhtDw1KGLLONs-nriZGWSQG#Ic<&az*RCfezMoE{q;vr*+Y$2g&Q`XH~= z6sFAPGD zs@&i|$a+Aj^k#S~3zCySLg!*`qgy5!uaB$>6eT;7uOaCJiTq2cMiY6N+KMJ}FAY7~ qcBR)NI~tTKR%Y3wYTF!<9g1$hY=H}!qKgGw$nJJzmzwNfWDWp#1}U@v delta 6402 zcmchcO=}ZT6oxZR(hRNXfMqUP3WBY+Xyc8U=v46|q_Lt%p(gP&N)j`T(IieM$x`#zZ%YMX1*zR-w311VN<>7ve$+1$QpQg(ztBKfL~dd3eq}@0@#PUOks4 zmnGT#&EN9mef0ROJm)=j*5z_>(<(R_+u%;d;v?sZIm4=O+vek=`LgafWo<00hjJyS zWalqvXY%1-FgR|8c!HY+Gf*g3>`bv3h@CE(`2??Mwv{PYMhuJUeJVv1A1!$w{}0Tw z<^?q7rtdZu!RU~D0*tu3D7(Q3sf;DI`^b?IpYXXUocn56_ z!#A0);Uv}$9|fz>4IMuDn)`>)7LCa##`=BmoY#6iRNwX+tRoh- zXTd5RBDUiad_7yqzBtps*n$S0=E?t?ja8LU^IO2 z1GZF*2ICjeh|lpWXv9PUe!EhVRdB=`-@^_^z?BlMN0RWit)^mVjipozIN^W)LwHF! Gss90%&hE|t diff --git a/lib/s3transfer/utils.pyc b/lib/s3transfer/utils.pyc index e011caff6c0989e42208a2339f0c1b1eb92914b6..c0c91fbe95e2617b4a06a2a3f401e6ca71674860 100644 GIT binary patch delta 1367 zcmZ9MO-NKx6vtXC~tV>-AY@-a%_HCfP=<(YW_vAbEnS7ugJppZxVv@)opY)w){g5tH^P>%Okv$_D} ze*+(lta+-@nYHgV5?D6^gljEX{|HE^?hZt}oW}ZQZK>o54r-z=!RuZH2`Yr217VLF zH^JWit;H7^1`WIU5xJz1kI{=jremWJamLK%vl^M$vJVJ%KC`t~Ar`f7>jT1bMz&X# zDM-kNJA2frOv>%Ls)$UP+r0rl7+b1uo&Zs(XUe(WI{cIH z3NAZ%yVya0U%8qmsxsxP{+xy=e_>p6^>&~MMYbhqbSU{3x5Q;V delta 7385 zcmcJT-Ahw(7{^_wmCh`N=P0(aOb{XG*-NBdteS0Ov$FY8X_|Dlovn?%9M3r}jb1M7 zrkkKW5OiT_fgpq=KPixsE`n|(oHyM?UPKT@L_wG&?f5@@FVD^MIp62|`#mqeAIqk1 z8>VvZSC!@EO2^=Qc`tV>9UxYR56}Q$7EF#bzK}ENo3pd`K|6_?m2DoMqj%xb!nPTPG~GfJXQ)ZDr%Wwp4hQjz0nj0*!1tjIN+ zfbq8^)R^z?*D6YB3XkgNA}KklYnIa2c_p2bVqri190vp~V!x?MVRp`NU*4pSpbqJd(o_Y95s0^b7{1F}_Wf+-StjS^#ab);XlGsA+ zXSfkB>PE0K1m@pcjg-M8n-3YEBwHPOx33$@XsEw|wSlL_`oCC&K&uDdqY+C7*U*U9 z4FxQMr}UvWScE{Gjc65Yy|D}3Q%P<@UktX{^l&@Y4W1SbuV4`ZJ!ye9B&+=aRsm0M z?GtE3to1e+Q4rxGro=p01i2l9NJOcn(sM@=i7-Y$k5fe=j2Ug&$?rrn{GD7zXf}U7>ZeqSDm(@L|m}362rTj zE=ov&&1q0@OAxfOXaRI^>q}5$ajS@zif`j1-j_UJD7h)4G>IDv0G0UNNl<|r)7>*^NmkTxAQ zF6fvQ_VpiGMeO10w2Mvf;T^ZIZv zOWVdF+vfLxQvONMRQn)k_{0#XUBhfgAP(90fB_osFgEVnF~+e!QD{1d=k==u36B`sWH$*_XUs@!u_ubzk^KEuY>lTPJprvxb<9n<~+O% z|2*r2GiJ@ahZmyWielM$=@9Z^WG#@gqMh1!W+CO^CK1qT=V zn`Mxb1G=r`|Ba71{{C;Od%~7(glocfMTwC=?uDsu@j6v~z*R#ZveYqJlc-Q1(Sd{x JjZ9+M_6JqmHOK$} delta 7131 zcmcK8-Ahwp90%~7*~J)GnOZt!BTJK}o#nzY4Ai}}&AF*_SvG5Db1$B?&EqysE}Rz? zxh}f;SvN%_0OAvQbGXil}HER&}W!(bAE!OuVT=uzs7BkSM zweyI;)S`1DTvpI+V2YU9c?%Jk_BWh^xJwN)5ZAlw6T)St-8|&OvGGPb1g6JLi-;zu zu;&cKRW&n&%bqu{sUh%P<5499u4wOt3<(x9eJg_`KHMQ<62CYoLOLdM=LDh&Vx9L9 zE|a=8V;Y|6)+h0C9u16vTaJ!ei(A$fI< z4v0JIxCe2y&H}`};hcuJdKV^d$u$MZ+ujoq0Jk##Z)WyMd7qh6D2A!qRY?YS6aDDX zLSAC4JA!ao!F>s{i`031h`=O!opI;oQ1e6 z1CSda_QW>^nQ+YDS3^$R%sO-h^Yih2ID@Go9I#^G+anban3j(pLyTgkKOtZO&jyQ# zz|<%}ilCwZS%%pk;U}ix-(e4;U}hT)LzW4;6RqL0v>bIoVrybu9CwWc;;Wmu>ts&u Q<>n}o3`3svI=Qa=2W$-At^fc4 diff --git a/workflow/__init__.py b/workflow/__init__.py index 2c4f8c0..17636a4 100644 --- a/workflow/__init__.py +++ b/workflow/__init__.py @@ -64,7 +64,7 @@ __version__ = open(os.path.join(os.path.dirname(__file__), 'version')).read() __author__ = 'Dean Jackson' __licence__ = 'MIT' -__copyright__ = 'Copyright 2014-2017 Dean Jackson' +__copyright__ = 'Copyright 2014-2019 Dean Jackson' __all__ = [ 'Variables', diff --git a/workflow/__init__.pyc b/workflow/__init__.pyc index 014182d8cfd32a6ba98e46d1930ee05cf1d314a5..877debf554b1c3261e8386dc04e804a084d7acac 100644 GIT binary patch delta 168 zcmeAc+#|@r{F#?aanrf@jT{!NjFy`nSyPzmXEQJ`=!X`k78UE4q!p#6Kq))c15ECvP!{eq&*vc!^9{j$U&{j~g?l+>bP z{gM*>%EI(K^Rlu$-Pv` to work from cached data while you fetch fresh data in the background. diff --git a/workflow/background.pyc b/workflow/background.pyc index 21b33e0483adaf3992ec40050195de56da644327..2ad27f7fc398b8054bc221d102ada6d1051869e9 100644 GIT binary patch delta 1563 zcmX@?e%zCT`7;k)WXi`y$~*wpzEf1Be;~_DZc(-e0CRZ#a{vGU delta 1309 zcmX@^dDxwU`7X#)J>8IuA zq@)%V>z9=1R~Dw{nU|I28J8!S8>Qry<(8yZ8E2)N7#J8-78vP==oe%b=$0fFrKgtY z#(NtjnP%zdWG3ksRF-7q=S?mUmY6)BIf1q|Y;Iw(ps^=5JF;og+KTt=xwN+8AtyHz zjpL$_C!W^62<2PHLOWkR LfRdQpqT&nySDM8d diff --git a/workflow/notify.py b/workflow/notify.py index 4542c78..a4b7f40 100644 --- a/workflow/notify.py +++ b/workflow/notify.py @@ -11,9 +11,10 @@ # TODO: Exclude this module from test and code coverage in py2.6 """ -Post notifications via the macOS Notification Center. This feature -is only available on Mountain Lion (10.8) and later. It will -silently fail on older systems. +Post notifications via the macOS Notification Center. + +This feature is only available on Mountain Lion (10.8) and later. +It will silently fail on older systems. The main API is a single function, :func:`~workflow.notify.notify`. @@ -198,7 +199,7 @@ def notify(title='', text='', sound=None): env = os.environ.copy() enc = 'utf-8' env['NOTIFY_TITLE'] = title.encode(enc) - env['NOTIFY_MESSAGE'] = text.encode(enc) + env['NOTIFY_MESSAGE'] = text.encode(enc) env['NOTIFY_SOUND'] = sound.encode(enc) cmd = [n] retcode = subprocess.call(cmd, env=env) diff --git a/workflow/notify.pyc b/workflow/notify.pyc deleted file mode 100644 index 66b7e20a0d48434275dda23e0e55c114deb960d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10572 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 MN%UR9j7jr<0IroH(*OVf diff --git a/workflow/update.py b/workflow/update.py index c977d46..ffc6353 100644 --- a/workflow/update.py +++ b/workflow/update.py @@ -23,6 +23,9 @@ from __future__ import print_function, unicode_literals +from collections import defaultdict +from functools import total_ordering +import json import os import tempfile import re @@ -34,8 +37,8 @@ # __all__ = [] -RELEASES_BASE = 'https://api.github.com/repos/{0}/releases' - +RELEASES_BASE = 'https://api.github.com/repos/{}/releases' +match_workflow = re.compile(r'\.alfred(\d+)?workflow$').search _wf = None @@ -48,6 +51,153 @@ def wf(): return _wf +@total_ordering +class Download(object): + """A workflow file that is available for download. + + .. versionadded: 1.37 + + Attributes: + url (str): URL of workflow file. + filename (str): Filename of workflow file. + version (Version): Semantic version of workflow. + prerelease (bool): Whether version is a pre-release. + alfred_version (Version): Minimum compatible version + of Alfred. + + """ + + @classmethod + def from_dict(cls, d): + """Create a `Download` from a `dict`.""" + return cls(url=d['url'], filename=d['filename'], + version=Version(d['version']), + prerelease=d['prerelease']) + + @classmethod + def from_releases(cls, js): + """Extract downloads from GitHub releases. + + Searches releases with semantic tags for assets with + file extension .alfredworkflow or .alfredXworkflow where + X is a number. + + Files are returned sorted by latest version first. Any + releases containing multiple files with the same (workflow) + extension are rejected as ambiguous. + + Args: + js (str): JSON response from GitHub's releases endpoint. + + Returns: + list: Sequence of `Download`. + """ + releases = json.loads(js) + downloads = [] + for release in releases: + tag = release['tag_name'] + dupes = defaultdict(int) + try: + version = Version(tag) + except ValueError as err: + wf().logger.debug('ignored release: bad version "%s": %s', + tag, err) + continue + + dls = [] + for asset in release.get('assets', []): + url = asset.get('browser_download_url') + filename = os.path.basename(url) + m = match_workflow(filename) + if not m: + wf().logger.debug('unwanted file: %s', filename) + continue + + ext = m.group(0) + dupes[ext] = dupes[ext] + 1 + dls.append(Download(url, filename, version, + release['prerelease'])) + + valid = True + for ext, n in dupes.items(): + if n > 1: + wf().logger.debug('ignored release "%s": multiple assets ' + 'with extension "%s"', tag, ext) + valid = False + break + + if valid: + downloads.extend(dls) + + downloads.sort(reverse=True) + return downloads + + def __init__(self, url, filename, version, prerelease=False): + """Create a new Download. + + Args: + url (str): URL of workflow file. + filename (str): Filename of workflow file. + version (Version): Version of workflow. + prerelease (bool, optional): Whether version is + pre-release. Defaults to False. + + """ + if isinstance(version, basestring): + version = Version(version) + + self.url = url + self.filename = filename + self.version = version + self.prerelease = prerelease + + @property + def alfred_version(self): + """Minimum Alfred version based on filename extension.""" + m = match_workflow(self.filename) + if not m or not m.group(1): + return Version('0') + return Version(m.group(1)) + + @property + def dict(self): + """Convert `Download` to `dict`.""" + return dict(url=self.url, filename=self.filename, + version=str(self.version), prerelease=self.prerelease) + + def __str__(self): + """Format `Download` for printing.""" + u = ('Download(url={dl.url!r}, ' + 'filename={dl.filename!r}, ' + 'version={dl.version!r}, ' + 'prerelease={dl.prerelease!r})'.format(dl=self)) + + return u.encode('utf-8') + + def __repr__(self): + """Code-like representation of `Download`.""" + return str(self) + + def __eq__(self, other): + """Compare Downloads based on version numbers.""" + if self.url != other.url \ + or self.filename != other.filename \ + or self.version != other.version \ + or self.prerelease != other.prerelease: + return False + return True + + def __ne__(self, other): + """Compare Downloads based on version numbers.""" + return not self.__eq__(other) + + def __lt__(self, other): + """Compare Downloads based on version numbers.""" + if self.version != other.version: + return self.version < other.version + return self.alfred_version < other.alfred_version + + class Version(object): """Mostly semantic versioning. @@ -80,6 +230,9 @@ def __init__(self, vstr): Args: vstr (basestring): Semantic version string. """ + if not vstr: + raise ValueError('invalid version number: {!r}'.format(vstr)) + self.vstr = vstr self.major = 0 self.minor = 0 @@ -94,7 +247,7 @@ def _parse(self, vstr): else: m = self.match_version(vstr) if not m: - raise ValueError('invalid version number: {0}'.format(vstr)) + raise ValueError('invalid version number: {!r}'.format(vstr)) version, suffix = m.groups() parts = self._parse_dotted_string(version) @@ -104,7 +257,7 @@ def _parse(self, vstr): if len(parts): self.patch = parts.pop(0) if not len(parts) == 0: - raise ValueError('invalid version (too long) : {0}'.format(vstr)) + raise ValueError('version number too long: {!r}'.format(vstr)) if suffix: # Build info @@ -148,8 +301,8 @@ def __lt__(self, other): return True if other.suffix and not self.suffix: return False - return (self._parse_dotted_string(self.suffix) < - self._parse_dotted_string(other.suffix)) + return self._parse_dotted_string(self.suffix) \ + < self._parse_dotted_string(other.suffix) # t > o return False @@ -193,183 +346,151 @@ def __repr__(self): return "Version('{0}')".format(str(self)) -def download_workflow(url): - """Download workflow at ``url`` to a local temporary file. - - :param url: URL to .alfredworkflow file in GitHub repo - :returns: path to downloaded file - - """ - filename = url.split('/')[-1] - - if (not filename.endswith('.alfredworkflow') and - not filename.endswith('.alfred3workflow')): - raise ValueError('attachment not a workflow: {0}'.format(filename)) - - local_path = os.path.join(tempfile.gettempdir(), filename) - - wf().logger.debug( - 'downloading updated workflow from `%s` to `%s` ...', url, local_path) - - response = web.get(url) +def retrieve_download(dl): + """Saves a download to a temporary file and returns path. - with open(local_path, 'wb') as output: - output.write(response.content) + .. versionadded: 1.37 - return local_path + Args: + url (unicode): URL to .alfredworkflow file in GitHub repo - -def build_api_url(slug): - """Generate releases URL from GitHub slug. - - :param slug: Repo name in form ``username/repo`` - :returns: URL to the API endpoint for the repo's releases + Returns: + unicode: path to downloaded file """ - if len(slug.split('/')) != 2: - raise ValueError('invalid GitHub slug: {0}'.format(slug)) - - return RELEASES_BASE.format(slug) - - -def _validate_release(release): - """Return release for running version of Alfred.""" - alf3 = wf().alfred_version.major == 3 + if not match_workflow(dl.filename): + raise ValueError('attachment not a workflow: ' + dl.filename) - downloads = {'.alfredworkflow': [], '.alfred3workflow': []} - dl_count = 0 - version = release['tag_name'] - - for asset in release.get('assets', []): - url = asset.get('browser_download_url') - if not url: # pragma: nocover - continue - - ext = os.path.splitext(url)[1].lower() - if ext not in downloads: - continue + path = os.path.join(tempfile.gettempdir(), dl.filename) + wf().logger.debug('downloading update from ' + '%r to %r ...', dl.url, path) - # Ignore Alfred 3-only files if Alfred 2 is running - if ext == '.alfred3workflow' and not alf3: - continue + r = web.get(dl.url) + r.raise_for_status() - downloads[ext].append(url) - dl_count += 1 + r.save_to_path(path) - # download_urls.append(url) + return path - if dl_count == 0: - wf().logger.warning( - 'invalid release (no workflow file): %s', version) - return None - for k in downloads: - if len(downloads[k]) > 1: - wf().logger.warning( - 'invalid release (multiple %s files): %s', k, version) - return None +def build_api_url(repo): + """Generate releases URL from GitHub repo. - # Prefer .alfred3workflow file if there is one and Alfred 3 is - # running. - if alf3 and len(downloads['.alfred3workflow']): - download_url = downloads['.alfred3workflow'][0] + Args: + repo (unicode): Repo name in form ``username/repo`` - else: - download_url = downloads['.alfredworkflow'][0] + Returns: + unicode: URL to the API endpoint for the repo's releases - wf().logger.debug('release %s: %s', version, download_url) + """ + if len(repo.split('/')) != 2: + raise ValueError('invalid GitHub repo: {!r}'.format(repo)) - return { - 'version': version, - 'download_url': download_url, - 'prerelease': release['prerelease'] - } + return RELEASES_BASE.format(repo) -def get_valid_releases(github_slug, prereleases=False): - """Return list of all valid releases. +def get_downloads(repo): + """Load available ``Download``s for GitHub repo. - :param github_slug: ``username/repo`` for workflow's GitHub repo - :param prereleases: Whether to include pre-releases. - :returns: list of dicts. Each :class:`dict` has the form - ``{'version': '1.1', 'download_url': 'http://github.com/...', - 'prerelease': False }`` + .. versionadded: 1.37 + Args: + repo (unicode): GitHub repo to load releases for. - A valid release is one that contains one ``.alfredworkflow`` file. + Returns: + list: Sequence of `Download` contained in GitHub releases. + """ + url = build_api_url(repo) - If the GitHub version (i.e. tag) is of the form ``v1.1``, the leading - ``v`` will be stripped. + def _fetch(): + wf().logger.info('retrieving releases for %r ...', repo) + r = web.get(url) + r.raise_for_status() + return r.content - """ - api_url = build_api_url(github_slug) - releases = [] + key = 'github-releases-' + repo.replace('/', '-') + js = wf().cached_data(key, _fetch, max_age=60) - wf().logger.debug('retrieving releases list: %s', api_url) + return Download.from_releases(js) - def retrieve_releases(): - wf().logger.info( - 'retrieving releases: %s', github_slug) - return web.get(api_url).json() - slug = github_slug.replace('/', '-') - for release in wf().cached_data('gh-releases-' + slug, retrieve_releases): +def latest_download(dls, alfred_version=None, prereleases=False): + """Return newest `Download`.""" + alfred_version = alfred_version or os.getenv('alfred_version') + version = None + if alfred_version: + version = Version(alfred_version) - release = _validate_release(release) - if release is None: - wf().logger.debug('invalid release: %r', release) + dls.sort(reverse=True) + for dl in dls: + if dl.prerelease and not prereleases: + wf().logger.debug('ignored prerelease: %s', dl.version) continue - - elif release['prerelease'] and not prereleases: - wf().logger.debug('ignoring prerelease: %s', release['version']) + if version and dl.alfred_version > version: + wf().logger.debug('ignored incompatible (%s > %s): %s', + dl.alfred_version, version, dl.filename) continue - wf().logger.debug('release: %r', release) - - releases.append(release) + wf().logger.debug('latest version: %s (%s)', dl.version, dl.filename) + return dl - return releases + return None -def check_update(github_slug, current_version, prereleases=False): +def check_update(repo, current_version, prereleases=False, + alfred_version=None): """Check whether a newer release is available on GitHub. - :param github_slug: ``username/repo`` for workflow's GitHub repo - :param current_version: the currently installed version of the - workflow. :ref:`Semantic versioning ` is required. - :param prereleases: Whether to include pre-releases. - :type current_version: ``unicode`` - :returns: ``True`` if an update is available, else ``False`` + Args: + repo (unicode): ``username/repo`` for workflow's GitHub repo + current_version (unicode): the currently installed version of the + workflow. :ref:`Semantic versioning ` is required. + prereleases (bool): Whether to include pre-releases. + alfred_version (unicode): version of currently-running Alfred. + if empty, defaults to ``$alfred_version`` environment variable. + + Returns: + bool: ``True`` if an update is available, else ``False`` If an update is available, its version number and download URL will be cached. """ - releases = get_valid_releases(github_slug, prereleases) + key = '__workflow_latest_version' + # data stored when no update is available + no_update = { + 'available': False, + 'download': None, + 'version': None, + } + current = Version(current_version) - if not len(releases): - raise ValueError('no valid releases for %s', github_slug) + dls = get_downloads(repo) + if not len(dls): + wf().logger.warning('no valid downloads for %s', repo) + wf().cache_data(key, no_update) + return False - wf().logger.info('%d releases for %s', len(releases), github_slug) + wf().logger.info('%d download(s) for %s', len(dls), repo) - # GitHub returns releases newest-first - latest_release = releases[0] + dl = latest_download(dls, alfred_version, prereleases) - # (latest_version, download_url) = get_latest_release(releases) - vr = Version(latest_release['version']) - vl = Version(current_version) - wf().logger.debug('latest=%r, installed=%r', vr, vl) - if vr > vl: + if not dl: + wf().logger.warning('no compatible downloads for %s', repo) + wf().cache_data(key, no_update) + return False - wf().cache_data('__workflow_update_status', { - 'version': latest_release['version'], - 'download_url': latest_release['download_url'], - 'available': True - }) + wf().logger.debug('latest=%r, installed=%r', dl.version, current) + if dl.version > current: + wf().cache_data(key, { + 'version': str(dl.version), + 'download': dl.dict, + 'available': True, + }) return True - wf().cache_data('__workflow_update_status', {'available': False}) + wf().cache_data(key, no_update) return False @@ -379,49 +500,63 @@ def install_update(): :returns: ``True`` if an update is installed, else ``False`` """ - update_data = wf().cached_data('__workflow_update_status', max_age=0) + key = '__workflow_latest_version' + # data stored when no update is available + no_update = { + 'available': False, + 'download': None, + 'version': None, + } + status = wf().cached_data(key, max_age=0) - if not update_data or not update_data.get('available'): + if not status or not status.get('available'): wf().logger.info('no update available') return False - local_file = download_workflow(update_data['download_url']) + dl = status.get('download') + if not dl: + wf().logger.info('no download information') + return False + + path = retrieve_download(Download.from_dict(dl)) wf().logger.info('installing updated workflow ...') - subprocess.call(['open', local_file]) + subprocess.call(['open', path]) - update_data['available'] = False - wf().cache_data('__workflow_update_status', update_data) + wf().cache_data(key, no_update) return True if __name__ == '__main__': # pragma: nocover import sys + prereleases = False + def show_help(status=0): """Print help message.""" - print('Usage : update.py (check|install) ' - '[--prereleases] ') + print('usage: update.py (check|install) ' + '[--prereleases] ') sys.exit(status) argv = sys.argv[:] if '-h' in argv or '--help' in argv: show_help() - prereleases = '--prereleases' in argv - - if prereleases: + if '--prereleases' in argv: argv.remove('--prereleases') + prereleases = True if len(argv) != 4: show_help(1) - action, github_slug, version = argv[1:] + action = argv[1] + repo = argv[2] + version = argv[3] try: if action == 'check': - check_update(github_slug, version, prereleases) + check_update(repo, version, prereleases) elif action == 'install': install_update() else: diff --git a/workflow/update.pyc b/workflow/update.pyc index f6decb08b746e08471cac7cce9152f52b4ffacfb..3e2eeb005a3d3ea3e97b611f5c26b3e8446518f6 100644 GIT binary patch literal 21110 zcmdU1TWlQHc|J2sF1agG)cs;P(pa&=RU|GY%khP=WzmwHI8hj77+VfwbvfJ_lDpd7 zSvl8V1&E9EP-gr}u^TXihewbhcX zx+S$#QWi@~sxzXxqiShX=SNhhth!@rX-wxwRcBl+jY|(mSJYA^OIOuWHB0YPOZ&3) zgj$-&(vxawGE47QOZ$~yR!dVV*r(bDls~2(SgL(cEge$+sPc{|e_VZp2_IF#nDQ$s zIHp!H$0`dSDD^G0UOKM)eObjsRu-LX?8{hj`9zyd$x++vAH!^?sIDCIksOqt9;DvsQL&q_^b+^Q|;%~>80nD ze@q3>t9xY?Z(9Cwla4;Lg3ofoRu5Z$A}jqf3r*YSSb~LE!ROd5S_IQr)s z&-k|gj5K03MtMe^T&hXx6jJ9U^(<1KSKHTBP*eVAWZt$NoK^vH&_p=ScNw zsXk!`XY{nHsu<$V{deq<;DWkWRna$WYw04Uc9hN9Gpb!z!9_jWi|V_ULeuxSrct$6 zI|DFF{~M3RptCxY_I)pD_12u#DC|04Y9(JzSL)Sjz3yxTQQQi9p6>_#+?;c{{;CxB z!X%iRt5zMy`Q~~ncDkXTb^-?})HtnP67=wblZ4Jn;G{86Ae;r!y|WoNG0@#1)H*>5$IWv7p{48%^d zs_$%u(Y@79xLMB=cTCB$6Rxx|kr>Ns{SW@sfMzP$k4Hbkyc?@&ubE)Q$pP+Auhk6w zpwVe1LF9Gfn#IQZ@bH6GFYP3pgf3(cNtk$@Mi}`4x>{REYbaY!l72ilJL~mZ^|e;A zj*V@G-PtJUhw-tvBP+gW~i2kHy85%yBTqp`V~FtZT$f@B4B?UzmUS z)mN@xxpX;yc~-+qy}yke!7^6sc*bQsRB6JRvSd9s!p&YM^!%Z1eUsaY4O9V07_b>n zTLmR<@kgLvpd2HTwX-b9QkfK(L}g3`AhIJ_6=)x_qgfVow#+n%?3g4#VKuD;d96qZ zXsZxPkXLuHMhHv44`7>jvTbozTR^a6-2-~XjR2g&4K{azyjxCv<22) zd0AJ@CrQ*=Ns}O+lcsE*MjfXXC(-#i=NqC|*WU2qe}la}~S)Dh^-P9Y_p zW|?FR8MBgfAf0f+#a^bvSxvdv{9S!Kniz7lW+zTa?EF20@7!0iuLk$-Eo2PZKVu!R zkaU}XyI=1y`@?M|t! zxA}Ve5SMr3?ibbjHhbK~n<5b28&T1<;ni1U_4{S@$zk?!`~Ecx|L*Kespwg?Q&R0C z3NyguENl<{-C@~L5=0F8Kv@>@h9-^y32$yCk=IOesuvGREl$Qy4dxP?7XvS9t_N{m z=WK!zJ8?#c5^oKCfR0j@NMfnY$pJCU3AP~6P!4howUqd0-&)Z5Ox&DJSWlLxW} z>8%Tiq}3-=kiKP=6r*Ax+S&Zh=Y15*($k<|gz-I0tGm)#OT(065+}<)^U>M>*I-FI z&RD@$7QeoLb;SL!7i0KBiku$Ub;yMM5Hi+4pRO$Zp>8{^I3b_7pHea)F)k=%LF9%0 z;piG-S6MMUxTD9*Ph&2w~Aa*C%3HehHMe@H7KE-X4 z{dKu1E`=xIU0vOBE0Go(UZ>?td2i3~v`H*Qcv`kuUqeBB0}pj*$|_rvR@IuYO5ku) z_*=Ec?6P$dsY56&TgR-j%{2Z>IR)S<%EysAVuLGk=Vmw;hHUx2WKawNb9kwyYM2WccA6kD10aRu0ti#feu)5#>A0TS>iS^2~QDQOU~ z^HU0?e9g#8gMz7%fd&QOg4*z%LXOfh=|v~(Q^oNfFP-Lulkf7+psecL&2Uxc&7XLO$jY(5-2)>RCAy`B^LahjR6Y=LL=e2FZCQ2uwOC%!@ z&5&6{YOs<;HFlU@!6VZcv_6o-4G+S1AQ0s6mowA4<`JCQB~h{6&mbve$vw>!>9MkFli|-h^SN*S=62v`M~d_a`egS%qvBH5Fl;pb0t?e>s$D5n>>P7Q(u5&XpwZ+^4vo;7 zPO}mlFw<$>qw;_)gcO%(Yum7}EDF9$@l>ZsZ}!YSjbpNn2G`eU{1wtMcSYHv%QKm8 z(rsi&H}DjohZ#QpvLQ7rfsr&X0X_&HC`vT(FNyK~7OBP}#KlF~uk-?XzD`pSw6qKd zVyG2{_8Yi1x?Nna5l{~IMz`)na%4I!JBejy8=7FKys8bV*@CQ4T1k!#H2w}&>i0|D`8n6aUyhoBJE=)Vy~ zvmq9OMneSXMnk)*kfn^>fZpFknmVKSm7oi+hrTNsD^EjX?n_x;{V4216xnvUXTplz zt4zJY2LaT5lMhOv#TH8H=@zv`vF9pdS|G~%p*W6B%}pGh8lNgxDwPrbL~d=OTK*7T z#AotDB!Xd|38XnKXG4@*f<7od6F5mAd(aJ%xk})S4&WQf{UmUYXg>+uBic^__lWkB zzTNr)t%xrb%zm}C1=T~0duKP! zUUY)`T3x$hovT-`IvdXGj_IK`y>YpYzth^}C$;q?#oT1dwaXVB{cjpAr09_jUZ`Js z(%UawbS}xip||s)uhcKktOSWSeSUDrD>5YBo7Q#3u=$IZ>z6oX=W4NxOS(v=NXwHX zQd*R1-@Y{S>ihM(7tYt}aGB=90rfYLpa7a=`7taRS|}FE30{PM@QL@N78JDsZA64+ z*fvZ8P^?Q3Z=j7F;_zc*Sja(y$JsObv7opZeWk;3wPT0&j%Bl|%9ZKH)f3}Z21Z66nR7mXOf6Q+6phq^xSm`hxcfysL_y-1Vjk;y zZJ6pPlL%}|N`O;D?l@fq*h%3^+UodH*nnIFn`OZ{-p1Pn*?Y<<9;w~W@rw`Pp~_|J zgfS`@(*l=87Lh{|)eH)c0!BFX=$rt7z!L!F42s}I>P;1;x&)T8*rgo}Km;ef1{qWt z=!54T$}fEXaHW(Kolc?x8>1V{YNM(RxDy3ggC4k=c0NUa{zz>_-2Zule|V%pb*KTl zMaWG23z;4UdUSg5==3eRsf0RnMQ|TsK4Xf`o=dD^)>g;QaCYz>Nr8if5V!Kzv1@RF z0TJ(7+zNP{FqSN;*a|^7>1I;h?@Rm*#TzO?3n_)14Q*QaWH3+D!G)?$8)`<1oj5mN} zl>Eeu9w$eT)HnmFBY|syN+9@Himg@g+PI?A6C$!6s@RGFI)QuxuZNwsFFy zZF|Bx2pf1AbtRMv@h1h#QPxFf4Zc>b^<{`lFYimVTi>`_7lZ?JgN`c|y)Nc%fl33v z5?7<)l-|iZKxPwJL!;Jh5W6s0chGGhOdGZyT4MU#iW=qGYuWfdjDD$B66C%OqnK=JRH`U#`}_M*yy zSz#nZOz3kKp-N{l!XjH~YdkUI?M$%N5j;@~Zqm9Ki5Yk3WfCJ0PdiOWvnd2|{aXB? zO<(&?azV)b4VF24kbG*DkMOF&BUg$A;}Us>dj{{WV;!F*L=dMGXyysv9WieNzr%R) zH)S0z>}olzP{;jLutMob1PVhUe~lB<)bB}$H6U|d!zB02Va#K)U*KU-D$s|KYb?ZA zA$}x~hWKe`l_7Ue+)ZuUW#4;sU*5#rzsP+Nvh^5Hd=U*kDJTjMVgo@>{y*W6h_y%e zTWfEPHCWBwcmg!$M1a)qSJ-)2dU=-V6M^=Z6YVFHfW5!<9aw^IK4I&BT|%(;cV`W| z^VI=zfTVbPa{16lfp&0`P!7w7xHv&)rwA|68`MlGMrI`spk-^T4;qZBXj!!Kya8O# zc>|IUjwoJI9jNw*710Rx^^^u=sE73rF5~yYuEgLXKZAUhzJRp$5YhS~%HBg#rzm&> zG-XfOQz(sporfkt8un>~XPl5BXE=!Dh9J73Q9Bp zF+;fDU^5!HTq@KqWm)&je2An=0x{sM@R(iUqsa%)QD#s`Rg!wj&3S}_f5cDZ-155yGHSaB-VsnN=zN*OMUvOFsSjs(S=n*2U8WN|`D0EqE9qZ8?p<0#U$I+#-+--2v_ zfg-s3LH>@=44CCmf^hCOoElnNML0D?INan)CR7`t+Njnc+^7a!LR2&`gDDsdwIvz< z8FlAhF{?#ygE7K+s5AW%o`Z->+^E4l8wtM<`vM>VA;d9t+;wAP{l4*O18Z zNIL+5IzR=wv9AbDX$!c><^@&(rC?Jq0=sbBzei7B3VOJ6hYK=U?5o^P8VD^H7&O2> z>`WnWI<*3%UFIc76adUXB3>*+&^L?ZCf@S$FN0;?i~`6pntuNF+fEkBF4qQF$RP(} z-3^Qr0%ltx2osDlKaIX%Deq`Yv=(*WK@;~|eB`DHF)h0{Z{3_ty1TKEZQr}k!H{w>| zJFwLEVAB=ILM_BUA1*r>ZQ+A}r3#$!0ZO%%3UzSa!M0>uu=--#K)khQWl?PC>CZ9B zEri$)+^AbFZW}D?dm#ho^=XOg!=O0O72%1|{eS~~1(d*K`hSF|e%zgi>mY&F zooZKM6U)qHu)~nVVoC?tUTzf>X4zG4H7*TlF82fBN4uKEF(MO;3T?|qr(O_WiJ=!H z&x4D|C^LnVg0>3KwtB0f3xQk-U3FpMqaBbk4DSrc>1zL*hvn9!~0Qyr797kyQx7XV8601_JXwuK#A&72_Fk2F%KHMmC}AZ8f~Lp!FIWYfa%kQc?vt z>UhmS-}9id(FEg!2MPDKJqg}$U*Jo`AXhdGXRCSGyI z#Q;hb6CBjO3Hwm_n03l-mXIUS;O+|>`ZpvXM)eO7zDXT4BqLF#hZR*i`ddp}DCub+ z7xOlRXx=#6`Y{>Ojk`b0{6nx^?@(r&z<)RpqRqIux(DwNBtBx!{Vz#h;C4TyZ?g^Y z4`y<>Kz};?4m_k;Efct_Hg+&O3t_hTE!o<+7y%jQVhD)1Lq$<(_=*~f9W*+>P~)k& z6u`vHg!2n}8!k^so82kbxeg!FkXSMxdQqm*!Bqru%@;3bWfG=U%vfIs5`jwtH`=ME z9HbeuqIWKb>OUb+JDj_H6uwM&#&9=h5+Q6Skv>Y>Jnr$Fu}1ACvAcpFH&a0UHeLmI z!&eCp2cR9Y)=O}$`z8I~h`dQ4RO;G={TZ`h9E6!4LBxXUpRp- zg+~TWktTDXOD1oOq0nd658tA$1As+*j4)v2aUT|!U*mrs9zz0XKG7J6JCGiD{}qg! zNC3=}3{mS<%S=aR$!&n1B@M7LNChu3gYYqINrK=pY>R+39C~568D7O8UN6%@u^ssb7!ZGlYmaCs zm$))T;_W9lZy_WgTcZg}VT3@Y>WY@L+3Iv;tMK&{&FIZEQ&Rj!eo3=oNQvn$C2`1S zCKqJ0ZU;XKAf5C=M+c2%Ewrc$;!czOxne@K_`HB8YEGjD?+vhpM_w*C!|Ugwiv=tq zx1cq3vX}vOu+6M!J~<~4foIc;c;cd|%NA%+Ct`CD8l$NTyLgpZUW*a7qTRfdfq?Ij zlZMg8{ebQ0*>tzqgge#?8~U>$GO&5U6|O^Ne$Vh0ZU%(H<~_5Vza?XN5ryh-*)CaQ z_*=Cn>M^EiQI`I8}yYQ z4Y!q8GR=*^$wU;>dL7>w8E&h;EdWS@K!%SBfSIky#Xkn3k?Vn%h{Pz2VG^XSL(=6<82tYPpRH6+oC6FL8zPBLpaXNxRL_R_4P1I_AkL1A> z9EQ-XwBka;lc0H=t{~_d-vZLN)SF(X<9>(D96YorNSt+l3lEVkwH>aoxa}ECrLo#< zslnA>5LYQ0BN8>o)f4t{!Bd975nqo2FAw7m(c_w!VdFSM8KLKeH~MmzbGhbxQqaXpdS%6A57zo1jD`$z4a;Sz*y;cWbj~sU1C3 zcN_RD87K+dqAqgE7=L2Lzd@n_t)CGw-ZEbnrEBXU!8g~iEuAnk46|OLIVerDDzss`k@o|HXAMhdk z_ji#JbC4IUZOE8W&kaVS;B!LomN><=oZDhDbjr;eAb riB~Gmp&k*j6XhzLu3+-eA1koaPuf*5^r~G#$zk+WwfBR~AGZD%40AHr literal 14035 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 script = 'tell application "Alfred 3" to search "{}"' >>> query = 'g "python" test' - >>> script.format(applescriptify(query)) - 'tell application "Alfred 3" to search "g " & quote & "python" & quote & "test"' + >>> applescriptify(query) + 'g " & quote & "python" & quote & "test' Args: s (unicode): Unicode string to escape. @@ -183,7 +202,12 @@ def run_applescript(script, *args, **kwargs): str: Output of run command. """ - cmd = ['/usr/bin/osascript', '-l', kwargs.get('lang', 'AppleScript')] + lang = 'AppleScript' + if 'lang' in kwargs: + lang = kwargs['lang'] + del kwargs['lang'] + + cmd = ['/usr/bin/osascript', '-l', lang] if os.path.exists(script): cmd += [script] @@ -192,7 +216,7 @@ def run_applescript(script, *args, **kwargs): cmd.extend(args) - return run_command(cmd) + return run_command(cmd, **kwargs) def run_jxa(script, *args): @@ -227,18 +251,17 @@ def run_trigger(name, bundleid=None, arg=None): arg (str, optional): Argument to pass to trigger. """ - if not bundleid: - bundleid = os.getenv('alfred_workflow_bundleid') - + bundleid = bundleid or os.getenv('alfred_workflow_bundleid') + appname = jxa_app_name() + opts = {'inWorkflow': bundleid} if arg: - arg = 'with argument "{}"'.format(applescriptify(arg)) - else: - arg = '' + opts['withArgument'] = arg - script = AS_TRIGGER.format(name=name, bundleid=bundleid, - arg=arg) + script = JXA_TRIGGER.format(app=json.dumps(appname), + arg=json.dumps(name), + opts=json.dumps(opts, sort_keys=True)) - run_applescript(script) + run_applescript(script, lang='JavaScript') def set_config(name, value, bundleid=None, exportable=False): @@ -254,22 +277,19 @@ def set_config(name, value, bundleid=None, exportable=False): as exportable (Don't Export checkbox). """ - if not bundleid: - bundleid = os.getenv('alfred_workflow_bundleid') + bundleid = bundleid or os.getenv('alfred_workflow_bundleid') + appname = jxa_app_name() + opts = { + 'toValue': value, + 'inWorkflow': bundleid, + 'exportable': exportable, + } - name = applescriptify(name) - value = applescriptify(value) - bundleid = applescriptify(bundleid) + script = JXA_SET_CONFIG.format(app=json.dumps(appname), + arg=json.dumps(name), + opts=json.dumps(opts, sort_keys=True)) - if exportable: - export = 'exportable true' - else: - export = 'exportable false' - - script = AS_CONFIG_SET.format(name=name, bundleid=bundleid, - value=value, export=export) - - run_applescript(script) + run_applescript(script, lang='JavaScript') def unset_config(name, bundleid=None): @@ -282,15 +302,15 @@ def unset_config(name, bundleid=None): bundleid (str, optional): Bundle ID of workflow variable belongs to. """ - if not bundleid: - bundleid = os.getenv('alfred_workflow_bundleid') + bundleid = bundleid or os.getenv('alfred_workflow_bundleid') + appname = jxa_app_name() + opts = {'inWorkflow': bundleid} - name = applescriptify(name) - bundleid = applescriptify(bundleid) + script = JXA_UNSET_CONFIG.format(app=json.dumps(appname), + arg=json.dumps(name), + opts=json.dumps(opts, sort_keys=True)) - script = AS_CONFIG_UNSET.format(name=name, bundleid=bundleid) - - run_applescript(script) + run_applescript(script, lang='JavaScript') def appinfo(name): @@ -305,15 +325,18 @@ def appinfo(name): AppInfo: :class:`AppInfo` tuple or ``None`` if app isn't found. """ - cmd = ['mdfind', '-onlyin', '/', + cmd = ['mdfind', '-onlyin', '/Applications', + '-onlyin', os.path.expanduser('~/Applications'), '(kMDItemContentTypeTree == com.apple.application &&' '(kMDItemDisplayName == "{0}" || kMDItemFSName == "{0}.app"))' .format(name)] - path = run_command(cmd).strip() - if not path: + output = run_command(cmd).strip() + if not output: return None + path = output.split('\n')[0] + cmd = ['mdls', '-raw', '-name', 'kMDItemCFBundleIdentifier', path] bid = run_command(cmd).strip() if not bid: # pragma: no cover @@ -408,10 +431,9 @@ def acquire(self, blocking=True): start = time.time() while True: - # Raise error if we've been waiting too long to acquire the lock if self.timeout and (time.time() - start) >= self.timeout: - raise AcquisitionError('lock acquisition timed out') + raise AcquisitionError('lock acquisition timed out') # If already locked, wait then try again if self.locked: diff --git a/workflow/util.pyc b/workflow/util.pyc index 82855e774a92f547635d0a5a21d25effd303d5b7..ea92d7556ad8a1cf4fccf554e03487bf6c8f2c5d 100644 GIT binary patch literal 19275 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 delta 6234 zcmcgwZ)_Y#6`$F=TYK-$zKj1}d}sT5N$g94b8g(&ZAj9%sgovYoOT^UbEPcj+r9HT z>%GhFoD(-TTjYeG2(>B$2tM%vgeVAsIK&sk7d{jTM85C=1QkLEB&15Hs7MGkqyxA7M@zwEXi)8&T1ivRwQsRE|<>c2r znOJeMxQpa>5vo(72Z+@{@*PBPA^A?Cw~~Ap(G`;KCVH3{J){KpM957-)(E+r?^cCsAL6{(VGG5o1Ug+b=rN*kPg% zZ1fJU_l7U$v-rT7Y?{AGf9T}_oG>#iD_y8oEwfl)X2nitCascV=;^Uc*s0lR=9uNO z;iNM+?82h4nn{~>`dY=gQnD)7pmVNf>y}~aaN$P5DX)eNTTkON!|u`tJl+et21^$! zcF8Q)ob|~!W?_}|Qo*VjFopPi--(Uu)r!M5&;8s7%pG=&#p9JFW2@=6T4ZB+{Lg`J zcqN!7S9Q##0yA<;1t(XkSi0f3ImU9!SIhRq(vm%PZEoVQzPPl=%FmB2lph)$9bK*- z&Rxn?&FTmP%nUZ7oj*KxWFcpnbGhm=o3Gfp4Ty6!W?F};%PM;EVfeZd2$`}L_~DO) zhUy1eZ%MR`e?Po$z76`a@b!h;H0!t>8KmdxFGgOWUOP<30w7%Gs4;BFAPl=$(Tywx zRow-mX;wuxfyQ%vJ*_oXde|&28$8~ALK>0yQ|+%Eaf^;wW$EMT;rH?OG`O5=6rAEb z_}pq{m=DIrX8n0Zz_J)7hTjEKWUtl?XL5Q0?yK-;I54 zzNr9h#^-K)Z)6qN5I#h@>TkvWKxr@keaEq#vmr9j$A8(`;(ZbA2!bH-L0Uvd!3KKy zMa=+zG2KGaT@4UM$pZ8T$cjjU&T+CL^fDzAaM_MyTMyyovLw2o zy$~cT6muqJA-EJEYxP>!E{T7wXW$`*vs(qb%p#ynBGEI#YXnv!Mi#wV_&LNY!x*f% z{BBQ59so5P~p>==AchG6_By`9l-!OU(H=kG|?|I~Yj(m`I?o$!Xy zA~ajwhhhku@ZBjZ`9xp0_bSZiyI!n_83Q55Gu|%g@BuZ0UFZ$q2!_2RR6jqcyYUi^o1D=u zsb|lenNn2&Jg&6yK=mWo+($|~!vT*BJmCEXrgY;VNV`lsB$*~8S?Z>WR7BfwISPCQ z6Hx3RaPMXUu!hw^Jc@{eG=lmDNvI1}fC&gJ=RC5t8r+~Kcmz>|_-pV3Tme78QVUsu zz$U@fkYFj~lhg_%DfQO})~I&?>~V2t@wfTHoMk{&QZvMIHuaSXmTNRn2FeK$wS&JS zi5g)Ohw2Di_bJ1D6DT`%ar*SxGuq75CG`+q6V%B#v;WiwQH$~y(g_cPXeZ<6+D089 z+{^V0rul`_-@y>K2Lx$DUZWH~z^)?LjY&led5kp#L$LcXP_~M*E!p+C6Wl|zta8a%l5_hcS)e2*5djX%R<2azm)a^Y3Afib!c|Ski~=yBfq;EHzo#j6rA8Dc&!1;l{G||%ed2~nIq)9kVgOF5}K>d}82o)Tt&!COZ zqR>!$3I(n}9Lb)%cvl$3ZaEs!pY9IBZ$PNEJS(BGW2@tlB89qHsVo;1t?@UnO`=deiYF%wNDYVYwI7*mrryB=s|8z-hrh3&&iaGRH!wce5`*b-^?Jse?xl_ zcOoe?PK*36k9{(79hzBD%gpkpPwi=9;(GhkUg;mSzW4DxR2F&kI=?V=Qig&7@!(Tq zo`7Zu+x;k>M{xs0gXsHm{9#et@4qm-w|SsDYFe>if&c!Sa(?N6sl=(veGo+ z#vAaBo=NW{rMJPB7=)Dnf1^v4p6K+DYE__m3pD{X-rGQN>u~uHpd7j1i$MnS zzlQD?21V|K>Pc3DN>_G2f8&V^Re9&xk<&U_D|RbMCk|D4^P0&!+Q^QP54h ztcv3B6L>L)VhqJN|M}UJC)V7B?Oqgk""", + m = re.search(r"""""", self.content) if m: encoding = m.group(1) - elif ((self.mimetype.startswith('application/') or - self.mimetype.startswith('text/')) and - 'xml' in self.mimetype): - m = re.search("""]*\?>""", + elif ((self.mimetype.startswith('application/') + or self.mimetype.startswith('text/')) + and 'xml' in self.mimetype): + m = re.search(r"""]*\?>""", self.content) if m: encoding = m.group(1) @@ -628,7 +636,6 @@ def get_content_type(filename): :rtype: str """ - return mimetypes.guess_type(filename)[0] or 'application/octet-stream' boundary = '-----' + ''.join(random.choice(BOUNDARY_CHARS) diff --git a/workflow/web.pyc b/workflow/web.pyc index ae2f763a32b0503bcc3ca05b5a58cc41e9697e67..ccda0954f9b1ecb4820ca278e871315288d0bedb 100644 GIT binary patch delta 7027 zcmd5>eQXnD7{9mOMz8JYDBM2TDEmr*wcSSbC(eS_LpPo>n#42S2N5a$FCxL1$MdvDruJO!16GQESoE7mW{yj2xR@1AeR*T2jcb9-zWmVRJiqJ8o{C zFXzk5t(-46Y8t{ztR`Nx9K)RX1^cvlnoKc&i_D&D@mtNeXkd&0UydxUy$%*=HLT`a z)V|2qX*|$YL#(D*5Wkn&1>$Ajwf}B4tD?r+4aRFQ`u%gIWxQ2u1>!f>uf14Ww1zwC z$QC2nF=x-2rE&sZ=F7o?@ri7D$}C);#Jbrwr?HoM|DudyS+ z5q6^Ud!n#RSF_atS}<)O?;h)RxKt#H1s@Py-W|?iCeW7xfXUT_JeEx>xEH5jNSwxt z6#%9m=)C>07#8s{5i|82dSVz`Mt9UC%J;-i-K*&)l<~w)+&13rU1~J+ zoFOE`E`{52S-7k(0Z1w-S=~P=PQvm35nl7rwQjxeDafBz>lbdTx%6L~d3ymKEHChW$ zu?)(wjUK1h!SkLqBY zUc`40-bKKg!Vfc)6Y)mB1CQ1toJQD;aMQ=&;_a;dxx3ex&YPb9Y7(vimOEgLr0nw0 z1#*<-?yJq2;&6${Q}`C1-pD#IemgR6LFFU=vHxB~rkRs7D%C|Jva8SX_k@B>_pR9G znn4f1hvRrwHhSFZDO14j>Sz-=WK`{5Nyw`#5N#$eum_{96=pzu&K`?yBA>AjqwQ96 z4is^}h;6ZbXk+uGrjB>9=$^6ICon2%2p15ZMtB~;tRbkbDd}->9}d2Ta4*8^2zwA- z0x)k(KvzwtdL^7oG_ELPDOrbh02ME>6?-4eoyVK;_pj$`^XLvMky|Z9T5tMyRi3@f cf2;o3`>eoM4^{ugHMt3FnwxlC9wIpZ2Cr|X(f|Me delta 5058 zcmcgwU2NM_6!x_{Cyrg5rb}qrtZU2Kra#0wIfleVPr(3i@VMi2tey{ZOR_`0T<(4>h|9}(rWE3NWm?Zn zX?a62O=W35ne8hSvR#XbzR1*EVa`l0ccqivot>Raxrj2NpB+-*r zGO2`;TQX<#EWIOGZiYD>Ccr>1diL8$bz#g;$HZDf=z{o^eLU8nG{o8W^R&jhhb+=w z?`uWdyrL}X`Pu1=zNjo}iH_Wo`WSfUWw;F%fFYCEuynR+-a!p5!1*fNn;JOibM%sL z*+yHxS?wop&=0G}9>Fz=vyQ6Gfb_)fXPle5iBpB}xd@Hn0bmG6LiCvbcsX=#`@3zl zLoQG!t{{6wiJe{zoTOj-Bq~1|an1~?2;^5$#l|YcoWatT-~b<08=z0CLTxr0;jfyY z_)eLgHUy6XacMc&OPmY%s|xYVf@Zw8g?^;=1Yzi!ubTQoVF$es0uAq@j`g(=Ad}z+ z`Y_bHB}N)x9KGS3EE7V3Nts%HR$DS|Y|3L9LhpwTZBe%AF6We~PlB3{HWe`>K%!wU zL)+>T4r;)xF^d{%0eBD3N*;mp37o)5ZlMBOxGIDSYiMt`OLwlYG=ZG2Xk+UfNz*H> z8vUcS)j_L7f&EXkN-3eZHp<$!;g22Gz(52UJP2V}fymq>vDzMY5eG#K1GO7PY#0JF zE1^F<@vDOxMu4;GUqiSB;$y)O=h~N@G{k8TQI8@ZWq?T_C?H;~>&hn%iZC&;n%X(D z8--wAV?=@6j=aR}Qpe$ezTQ)BW0~vdZ4yV3*^A699q;{-%+N?*lZ~AB`u2#^$mv_> z(*8`vuc>|jV`o{cZo5;< zu7SoNRA0sjAh85NTOq)nOk#yfpKKi+xIu_ce?HJ$G-23u0ZgYdnx06jDd?}Oh0abj zZXakqhoHnK=wUCpVx=$w8u zu}daAD-(Ki@Iq0CXZ1yd^9cCCvM)-#9WI*f9isgAP}K?aH{mvF0Qf4X$^Ek6a|?o8 zDFpUbyTZitEJmsT@95iAVX!-_?_&ju&j!KSad15_`))8`@J{Yd1ji-X* z2QZ`_L@2$R!FpOYsC~Ai4^H{X5$YOVYr`{9>CXcd6^C)3qxK+_v|+Su3cNpDQ*=t; z{}0fml%CT$!+hGhs~&LK8g|WM7RvZ~DfiG%$5w4*`)<6REL*>ghX{F_dM294W!gTm zkH-zT`UQP%Vu0MCZ%wo~xNxrl^%^v9ra`@EK{!OWpq5QBEDS^M%WPcVIB^H?vnF NaOEZ96J_G}`~w>T61M;V diff --git a/workflow/workflow.py b/workflow/workflow.py index c2c1616..2a057b0 100644 --- a/workflow/workflow.py +++ b/workflow/workflow.py @@ -43,8 +43,9 @@ except ImportError: # pragma: no cover import xml.etree.ElementTree as ET +# imported to maintain API +from util import AcquisitionError # noqa: F401 from util import ( - AcquisitionError, # imported to maintain API atomic_writer, LockFile, uninterruptible, @@ -892,9 +893,9 @@ class Workflow(object): storing & caching data, using Keychain, and generating Script Filter feedback. - ``Workflow`` is compatible with both Alfred 2 and 3. The - :class:`~workflow.Workflow3` subclass provides additional, - Alfred 3-only features, such as workflow variables. + ``Workflow`` is compatible with Alfred 2+. Subclass + :class:`~workflow.Workflow3` provides additional features, + only available in Alfred 3+, such as workflow variables. :param default_settings: default workflow settings. If no settings file exists, :class:`Workflow.settings` will be pre-populated with @@ -965,8 +966,9 @@ def __init__(self, default_settings=None, update_settings=None, self._last_version_run = UNSET # Cache for regex patterns created for filter keys self._search_pattern_cache = {} - # Magic arguments - #: The prefix for all magic arguments. Default is ``workflow:`` + #: Prefix for all magic arguments. + #: The default value is ``workflow:`` so keyword + #: ``config`` would match user query ``workflow:config``. self.magic_prefix = 'workflow:' #: Mapping of available magic arguments. The built-in magic #: arguments are registered by default. To add your own magic arguments @@ -1050,31 +1052,30 @@ def alfred_env(self): data = {} for key in ( - 'alfred_debug', - 'alfred_preferences', - 'alfred_preferences_localhash', - 'alfred_theme', - 'alfred_theme_background', - 'alfred_theme_subtext', - 'alfred_version', - 'alfred_version_build', - 'alfred_workflow_bundleid', - 'alfred_workflow_cache', - 'alfred_workflow_data', - 'alfred_workflow_name', - 'alfred_workflow_uid', - 'alfred_workflow_version'): - - value = os.getenv(key) - - if isinstance(value, str): - if key in ('alfred_debug', 'alfred_version_build', - 'alfred_theme_subtext'): + 'debug', + 'preferences', + 'preferences_localhash', + 'theme', + 'theme_background', + 'theme_subtext', + 'version', + 'version_build', + 'workflow_bundleid', + 'workflow_cache', + 'workflow_data', + 'workflow_name', + 'workflow_uid', + 'workflow_version'): + + value = os.getenv('alfred_' + key, '') + + if value: + if key in ('debug', 'version_build', 'theme_subtext'): value = int(value) else: value = self.decode(value) - data[key[7:]] = value + data[key] = value self._alfred_env = data @@ -1111,12 +1112,7 @@ def debugging(self): :rtype: ``bool`` """ - if self._debugging is None: - if self.alfred_env.get('debug') == 1: - self._debugging = True - else: - self._debugging = False - return self._debugging + return self.alfred_env.get('debug') == 1 @property def name(self): @@ -1225,14 +1221,18 @@ def cachedir(self): """Path to workflow's cache directory. The cache directory is a subdirectory of Alfred's own cache directory - in ``~/Library/Caches``. The full path is: + in ``~/Library/Caches``. The full path is in Alfred 4+ is: + + ``~/Library/Caches/com.runningwithcrayons.Alfred/Workflow Data/`` + + For earlier versions: ``~/Library/Caches/com.runningwithcrayons.Alfred-X/Workflow Data/`` - ``Alfred-X`` may be ``Alfred-2`` or ``Alfred-3``. + where ``Alfred-X`` may be ``Alfred-2`` or ``Alfred-3``. - :returns: full path to workflow's cache directory - :rtype: ``unicode`` + Returns: + unicode: full path to workflow's cache directory """ if self.alfred_env.get('workflow_cache'): @@ -1257,12 +1257,18 @@ def datadir(self): """Path to workflow's data directory. The data directory is a subdirectory of Alfred's own data directory in - ``~/Library/Application Support``. The full path is: + ``~/Library/Application Support``. The full path for Alfred 4+ is: - ``~/Library/Application Support/Alfred 2/Workflow Data/`` + ``~/Library/Application Support/Alfred/Workflow Data/`` - :returns: full path to workflow data directory - :rtype: ``unicode`` + For earlier versions, the path is: + + ``~/Library/Application Support/Alfred X/Workflow Data/`` + + where ``Alfred X` is ``Alfred 2`` or ``Alfred 3``. + + Returns: + unicode: full path to workflow data directory """ if self.alfred_env.get('workflow_data'): @@ -1284,8 +1290,8 @@ def _default_datadir(self): def workflowdir(self): """Path to workflow's root directory (where ``info.plist`` is). - :returns: full path to workflow root directory - :rtype: ``unicode`` + Returns: + unicode: full path to workflow root directory """ if not self._workflowdir: @@ -2261,17 +2267,16 @@ def update_available(self): :returns: ``True`` if an update is available, else ``False`` """ + key = '__workflow_latest_version' # Create a new workflow object to ensure standard serialiser # is used (update.py is called without the user's settings) - update_data = Workflow().cached_data('__workflow_update_status', - max_age=0) - - self.logger.debug('update_data: %r', update_data) + status = Workflow().cached_data(key, max_age=0) - if not update_data or not update_data.get('available'): + # self.logger.debug('update status: %r', status) + if not status or not status.get('available'): return False - return update_data['available'] + return status['available'] @property def prereleases(self): @@ -2304,6 +2309,7 @@ def check_update(self, force=False): :type force: ``Boolean`` """ + key = '__workflow_latest_version' frequency = self._update_settings.get('frequency', DEFAULT_UPDATE_FREQUENCY) @@ -2312,10 +2318,9 @@ def check_update(self, force=False): return # Check for new version if it's time - if (force or not self.cached_data_fresh( - '__workflow_update_status', frequency * 86400)): + if (force or not self.cached_data_fresh(key, frequency * 86400)): - github_slug = self._update_settings['github_slug'] + repo = self._update_settings['github_slug'] # version = self._update_settings['version'] version = str(self.version) @@ -2325,8 +2330,7 @@ def check_update(self, force=False): update_script = os.path.join(os.path.dirname(__file__), b'update.py') - cmd = ['/usr/bin/python', update_script, 'check', github_slug, - version] + cmd = ['/usr/bin/python', update_script, 'check', repo, version] if self.prereleases: cmd.append('--prereleases') @@ -2352,11 +2356,11 @@ def start_update(self): """ import update - github_slug = self._update_settings['github_slug'] + repo = self._update_settings['github_slug'] # version = self._update_settings['version'] version = str(self.version) - if not update.check_update(github_slug, version, self.prereleases): + if not update.check_update(repo, version, self.prereleases): return False from background import run_in_background @@ -2365,8 +2369,7 @@ def start_update(self): update_script = os.path.join(os.path.dirname(__file__), b'update.py') - cmd = ['/usr/bin/python', update_script, 'install', github_slug, - version] + cmd = ['/usr/bin/python', update_script, 'install', repo, version] if self.prereleases: cmd.append('--prereleases') diff --git a/workflow/workflow.pyc b/workflow/workflow.pyc index 20a51deaee065ebbd14d5365606abece59d7971b..b76576b484c2aac28a8bac26dbcfe236e99bdeda 100644 GIT binary patch delta 19728 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 delta 20038 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 diff --git a/workflow/workflow3.py b/workflow/workflow3.py index a6c07c9..b92c4be 100644 --- a/workflow/workflow3.py +++ b/workflow/workflow3.py @@ -7,11 +7,11 @@ # Created on 2016-06-25 # -"""An Alfred 3-only version of :class:`~workflow.Workflow`. +"""An Alfred 3+ version of :class:`~workflow.Workflow`. -:class:`~workflow.Workflow3` supports Alfred 3's new features, such as +:class:`~workflow.Workflow3` supports new features, such as setting :ref:`workflow-variables` and -:class:`the more advanced modifiers ` supported by Alfred 3. +:class:`the more advanced modifiers ` supported by Alfred 3+. In order for the feedback mechanism to work correctly, it's important to create :class:`Item3` and :class:`Modifier` objects via the @@ -250,7 +250,7 @@ def _icon(self): class Item3(object): - """Represents a feedback item for Alfred 3. + """Represents a feedback item for Alfred 3+. Generates Alfred-compliant JSON for a single item. @@ -447,7 +447,7 @@ def _modifiers(self): class Workflow3(Workflow): - """Workflow class that generates Alfred 3 feedback. + """Workflow class that generates Alfred 3+ feedback. It is a subclass of :class:`~workflow.Workflow` and most of its methods are documented there. @@ -476,18 +476,18 @@ def __init__(self, **kwargs): @property def _default_cachedir(self): - """Alfred 3's default cache directory.""" + """Alfred 4's default cache directory.""" return os.path.join( os.path.expanduser( - '~/Library/Caches/com.runningwithcrayons.Alfred-3/' + '~/Library/Caches/com.runningwithcrayons.Alfred/' 'Workflow Data/'), self.bundleid) @property def _default_datadir(self): - """Alfred 3's default data directory.""" + """Alfred 4's default data directory.""" return os.path.join(os.path.expanduser( - '~/Library/Application Support/Alfred 3/Workflow Data/'), + '~/Library/Application Support/Alfred/Workflow Data/'), self.bundleid) @property @@ -707,6 +707,7 @@ def warn_empty(self, title, subtitle=u'', icon=None): Returns: Item3: Newly-created item. + """ if len(self._items): return diff --git a/workflow/workflow3.pyc b/workflow/workflow3.pyc index dd4df3b29e2d3cc4a47efd2eb2f6ef4c9a5f6c23..c14753f8e7cbdfb3c3bec1c536e822d567f7eb13 100644 GIT binary patch delta 4882 zcmaEPg0blaBM0+mUM|H==i(=FToIVU#K7Q~r{I{AR+O5eV5~jyL%?Kj#zsc%&1V=N zu?o&%U|`S>Elw>e)-TD=tE?!UyueO5Odq0LFA=P(peQvhwJ0?&Iki~7JijPAEhoRc zSicmgNe{-=b8$5>H+FF}(Y0`NG1oP5HFVZ>GH`a*b#!(zax}NJa5gqDocvHhe6t)! z5+l8B72Eut(`o>0oxv?ie_JQZ@K)11fWCn_ zUy}JpcbmmGJIH&`-PQ`aC#K0K6)!W^O`fZy1uPqnD;;8{y9+k|R8ysUK#Ong)0jH| zw$9eFq6g`bX{msLAxtu%I^BWVYBG#?sBjvH47s zAIAIB-RHnUQj$?*^3H^#^tbwLq7dV`Nl8oTZL|1f(PT45smVUcZS=NUY_emD1^`Gb BQH1~i delta 4113 zcmcJR%WD%+7{%vKDaK%gVrXomVPYyFg*ZvZH1Eg!a>g3pXuV6c^enxRDBiP!v~bi_o3mLaHLTb5YEI{t4gqZhrTibI;-4{!G5D z6Iau3kNf7suFDIq4et`qap|&#!45AXed5QZLdhpmw>&7+eX$BCw8 z*fLc`Ted{4Qc_fFMx<1%PV42AZI`9%`BXxgvZttClZyKBSS(gG6XJ+y8fKKrmafw1 z`1wRWSrkh~UNoz;P$@$&;%8ac7(qnD13q@j-HnY1?DHZcpzf(5`V@@#*w6jX-KYpZ z8)$FG^~uk6{ZA1QEFNg%QBCr(9pNmZf=26nuyI7j6#-kJI+=rK9i42m<6RRTj0Gco z$ZoOS&PUjYzGye1N#M+2YdnXEa2CXq)Ub{6rn1x~R zvDswf({c-5?g{aN1Us1w;#C^mTFf;={p1oZ1X{Dd5D89yS59wZzIs1+_~r5Yu)DA4l%v5>|8TxWnUP#^_zlAe^ipTrFU#_%|QR*T!+f zV9W9%axGwM!X%WPQ7SyV)`oEPz!Uu-IRJ0<_sE>1Mhp1_DdRCBr}55UuGmG|;8k%R Lk>k{UdouhNP=l0{